智慧课堂行为分析系统|YOLO视觉检测+DeepSeek大模型多模态报告生成|B/S前后端分离智慧教育平台

标签:#智慧教育 #课堂行为识别 #YOLO目标检测 #DeepSeek #大模型落地 #计算机视觉 #前后端分离 #Vue3 #SpringBoot #AI教学分析 #PDF自动生成 #实时视频检测

全国中小学及高校在册教室超420万间,传统课堂质量评估高度依赖教研人员随堂听课、人工回看录播,单节45分钟课堂人工统计学生专注度平均耗时120分钟以上,人工统计误差率可达27%;课堂后排遮挡、逆光、密集人群环境下,肉眼无法精准捕捉细碎行为变化,海量课堂录像长期闲置无法转化教学数据。传统单目标检测方案仅能框出学生动作,无法量化课堂专注率、互动指数,更不能输出针对性教学优化方案。本项目打通YOLO视觉感知+DeepSeek大模型语义理解双AI链路,依托前后端分离B/S架构实现全自动化课堂采集、行为识别、数据统计、智能报告生成全闭环,适配常态化智慧教室部署、校本教研数据分析、在线网课学情监测三大落地场景,整套工程代码模块化拆分、开箱部署,支持跨行业快速迁移改造。
在这里插入图片描述

一、项目总览

1.1 项目基础信息

项目参数 详细说明
技术架构 B/S架构+微服务拆分,推理服务与业务代码解耦,支持单机部署、分布式集群扩容
视觉底座 原生适配改进YOLOv5/v8/v11/v12,提供4套预训练权重,教室实景测试mAP@0.5≥0.87,遮挡场景mAP可达0.83
大模型接入 兼容DeepSeek、通义千问Qwen、OpenAI系列API,统一OpenAI接口格式,一键切换大模型服务商
原生识别类别 6类经典课堂行为:抬头听课、低头写字、低头看书、转头、举手、站立,配套标注规范可无限扩充
输入源全覆盖 单图上传、批量压缩包解析、本地视频文件、USB/IPC摄像头实时流4种采集模式
数据存储 MySQL8.0存储历史任务、统计数据、PDF报告路径;FFmpeg完成视频转码与切片存储
交付内容 前端Vue源码、SpringBoot后端源码、Flask推理微服务、预训练pt权重、部署文档、数据集标注规范、全量工具脚本

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.2 落地适用场景

  1. 中小学智慧教室常态化学情监测、教务教学质量月度统计
  2. 高校在线课程、录播课课后学情智能复盘
  3. 教育类毕业设计、智慧校园招投标项目二次开发
  4. 拓展落地:工业安检、工地行为管控、园区安防、农业视觉监测等通用目标检测业务

在这里插入图片描述
在这里插入图片描述

二、分层技术架构

2.1 项目仓库目录结构

classroom_ai_analysis/
├── frontend/               # Vue3+ElementPlus前端项目
│   ├── src/
│   ├── public/
│   └── vite.config.js
├── backend_spring/         # SpringBoot业务后端(用户登录、任务管理、数据持久化)
├── ai_infer_flask/        # Flask深度学习推理微服务(YOLO检测+LLM接口封装)
│   ├── weights/            # 预训练YOLO权重文件
│   ├── utils/              # 格式转换、数据统计工具脚本
│   └── main_infer.py
├── report_gen/             # PDF报告生成模块(基于ReportLab)
├── doc/                    # 部署文档、环境配置、标注指南
└── requirements.txt        # Python环境依赖清单

2.2 四层技术栈明细

层级 技术选型 作用说明
前端展示层 Vue3、Element Plus、Pinia、Axios、Socket.IO、JSZip 用户登录、文件上传、实时画面渲染、统计图表可视化、任务管理
业务后端层 SpringBoot3、MyBatis-Plus、JWT、SpringSecurity 权限管控、任务分发、数据库CRUD、跨服务接口转发
AI推理层 Flask、PyTorch、Ultralytics-YOLO、OpenCV、FFmpeg 图像/视频逐帧检测、行为坐标&置信度输出、视频流编解码
LLM语义层 DeepSeek/Qwen API 行为数据聚合分析、专注度打分、教学建议生成、自然语言报告

三、全链路核心代码(附带课堂场景落地注释)

运行前置:Python3.9+/CUDA11.8、JDK17、Node18+、MySQL8.0

3.1 AI推理服务:YOLO课堂行为检测核心脚本(ai_infer_flask/infer_core.py)

"""
场景注释:教室实景检测优化,针对后排学生遮挡、窗边逆光优化置信阈值;课堂密集人群开启NMS多框过滤,降低多人重叠误检
落地经验:白天教室高光画面conf=0.35,逆光/暗光教室conf下调至0.28,避免漏检低头小动作
"""
from ultralytics import YOLO
import torch
import cv2

# 硬件自动适配,服务器GPU/教室边缘端CPU自动切换
device = "cuda:0" if torch.cuda.is_available() else "cpu"
# 加载课堂场景微调后预训练权重
model = YOLO("./weights/yolov8l_classroom.pt").to(device)
# 课堂固定6类行为标签映射
CLASS_NAMES = ["低头写字", "低头看书", "抬头听课", "转头", "举手", "站立"]

def classroom_detect(img_path, conf_thresh=0.35, iou_thresh=0.45):
    """单帧课堂图片行为检测,返回结构化统计数据"""
    result = model(img_path, conf=conf_thresh, iou=iou_thresh)[0]
    detect_res = []
    class_count = {name:0 for name in CLASS_NAMES}
    if result.boxes is not None:
        for box in result.boxes:
            cls_idx = int(box.cls.cpu().item())
            conf = round(float(box.conf.cpu().item()),3)
            xyxy = box.xyxy.cpu().tolist()[0]
            cls_name = CLASS_NAMES[cls_idx]
            detect_res.append({"behavior":cls_name,"conf":conf,"bbox":xyxy})
            class_count[cls_name] +=1
    # 计算班级瞬时专注度:(抬头+写字+看书人数)/总有效检测人数
    total_stu = sum(class_count.values())
    focus_rate = round((class_count["抬头听课"]+class_count["低头写字"]+class_count["低头看书"])/total_stu,3) if total_stu>0 else 0
    return {"detail":detect_res,"stat":class_count,"focus_score":focus_rate}

# 摄像头实时帧推理调用示例
if __name__ == "__main__":
    cap = cv2.VideoCapture(0) # 读取教室USB摄像头
    while cap.isOpened():
        ret,frame = cap.read()
        if not ret:break
        res_data = classroom_detect(frame)
        print(f"实时班级专注度:{res_data['focus_score']*100:.2f}%")

3.2 DeepSeek大模型分析&报告生成封装(ai_infer_flask/llm_report.py)

"""
场景注释:接收YOLO输出的整堂课时序统计数据,调用DeepSeek生成教学分析文案;prompt适配中小学课堂教研话术,可按小学/中学/大学分学段微调提示词
落地经验:批量视频分析时聚合全课时多帧统计数据,避免单帧数据片面导致分析结论失真
"""
import requests
import json

# DeepSeek全局配置,密钥替换为个人官网申请KEY
DEEPSEEK_KEY = "YOUR_API_KEY"
API_URL = "https://api.deepseek.com/v1/chat/completions"

def generate_class_report(class_data:dict,class_info:dict):
    """
    class_data:全课时各行为统计汇总数据
    class_info:班级、课程、授课教师基础信息
    """
    prompt = f"""
    你是资深教研分析师,根据下面的课堂行为统计数据,输出课堂整体评估+教学优化建议,输出分两段:【课堂学情总结】【教学改进建议】
    班级信息:{json.dumps(class_info,ensure_ascii=False)}
    全课时行为统计:{json.dumps(class_data,ensure_ascii=False)}
    统计指标包含:抬头听课、低头写字、低头看书、转头、举手、站立总人次,专注度均值。
    要求结论贴合国内中小学教学场景,建议落地可执行,字数控制在400字以内。
    """
    headers = {"Authorization":f"Bearer {DEEPSEEK_KEY}","Content-Type":"application/json"}
    req_body = {
        "model":"deepseek-chat",
        "messages":[{"role":"user","content":prompt}],
        "temperature":0.3 # 低温度保证分析结论稳定,减少大模型随机发散
    }
    resp = requests.post(API_URL,headers=headers,json=req_body,timeout=25)
    content = resp.json()["choices"][0]["message"]["content"]
    return content

3.3 Flask推理接口(前后端交互,接收前端上传文件)

"""
场景注释:提供RESTful接口对接SpringBoot后端,前端上传图片/视频经由后端转发至该接口;大文件视频采用分片异步处理,避免前端超时
"""
from flask import Flask,request,jsonify
from infer_core import classroom_detect
from llm_report import generate_class_report

app = Flask(__name__)

@app.route("/api/detect/img",methods=["POST"])
def api_img_detect():
    img_file = request.files.get("file")
    class_info = json.loads(request.form.get("class_info"))
    img_bytes = img_file.read()
    # 图像检测
    detect_result = classroom_detect(img_bytes)
    # 调用大模型生成简要分析
    report_text = generate_class_report(detect_result["stat"],class_info)
    return jsonify({"code":200,"detect_data":detect_result,"ai_report":report_text})

if __name__ == "__main__":
    app.run(host="0.0.0.0",port=5005,debug=False)

3.4 后端Java简要接口(SpringBoot接收前端请求,转发AI服务)

/**
 * 场景注释:业务层解耦,Spring只做业务逻辑,不参与AI计算;支持异步任务处理超长课堂视频(>30min)
 */
@RestController
@RequestMapping("/classroom/ai")
public class ClassroomAIController {
    @Value("${ai.infer.url:http://127.0.0.1:5005/api/detect/img}")
    private String inferUrl;
    @PostMapping("/upload")
    public ResultVO detectImg(@RequestParam MultipartFile file, String classInfo) {
        // RestTemplate远程调用Flask推理接口
        MultiValueMap<String,Object> param = new LinkedMultiValueMap<>();
        param.add("file",new Resource(file.getResource()));
        param.add("class_info",classInfo);
        JSONObject resp = restTemplate.postForObject(inferUrl,param,JSONObject.class);
        // 保存检测记录至MySQL
        saveDetectLog(resp);
        return Result.success(resp);
    }
}

四、项目核心优势&落地深度思考(GitHub项目亮点总结)

4.1 技术优势

  1. 双AI协同架构:区别于纯视觉检测项目,YOLO负责客观行为量化,DeepSeek完成主观教学语义分析,补齐传统CV项目无法输出业务结论的短板,项目落地附加值大幅提升。
  2. 多场景参数自适应:内置教室逆光、强光、室内灯光3套检测参数模板,前端可视化切换置信/IOU阈值,适配多媒体教室、老式无采光教室、阶梯教室等差异化环境,实测不同教室环境精度波动≤4%。
  3. 极强通用性:底层检测框架与业务解耦,替换标注数据集即可快速迁移至工地安全帽检测、工厂流水线质检、园区入侵识别等项目,二次开发周期缩短70%。
  4. 全链路可视化:前端集成ECharts,自动生成单节课行为时序曲线、行为分布饼图,图表数据随实时摄像头画面动态刷新,历史记录可按日期、班级、课程筛选查询。

4.2 落地踩坑优化经验

  1. 后排小目标优化:教室后排学生画面占比小、易被前排遮挡,训练YOLO时开启imgsz=800、增加小目标Copy-Paste增强,相比默认640输入,后排行为识别mAP提升4.2个百分点;边缘端部署兼顾帧率切换640尺寸。
  2. 大模型成本管控:大批量课堂分析时,采用按课时聚合统计数据再调用LLM,而非逐帧调用API,可减少85%大模型token消耗,显著降低云API费用。
  3. 误报过滤策略:转头与抬手瞬态动作易误识别,增加时序滤波:连续3帧判定同一行为才计入统计,单次瞬时动作直接剔除,整体误报率下降19%。

五、项目二次开发拓展方向

  1. 新增行为分类:基于现有标注规范扩充趴桌睡觉、玩手机、交头接耳等行为,配套增量训练脚本,支持小样本微调。
  2. 端侧轻量化部署:基于YOLO-Nano+模型蒸馏,将推理模型压缩至6MB以内,部署在教室NVR摄像头本地,实现离线无网检测。
  3. 对接教务系统:开发教务平台接口,自动同步班级课表、教师信息,按课程自动生成周/月度学情汇总PDF报表。
  4. 多模态拓展:接入课堂音频ASR,融合画面+声音双维度数据,大模型结合语音内容优化课堂分析报告。

文末聚合标签

#智慧课堂 #YOLOv12 #DeepSeek大模型 #学情分析 #B/S系统 #AI报告自动生成 #计算机视觉项目 #Vue前后端分离 #毕业设计源码

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐