
基于 YOLOv8 模型框架训练课堂教师老师行为检测数据集建立基于深度学习的教师行为检测 识别老师玩手机书写 指导学生等文章目录✅ 一、项目总览✅ 二、数据结构要求YOLO格式✅ 三、类别名称列表classes.txt✅ 四、VOC XML 转 YOLO txt 格式脚本如有需要✅ 五、数据划分训练集和验证集9:1✅ 六、创建 data.yaml 文件✅ 七、环境安装YOLOv8✅ 八、模型训练代码Python API✅ 九、性能评估与验证✅ 十、推理代码推理批量保存结果 单张图像推理 视频流实时检测摄像头 批量图像推理文件夹✅ 十一、构建深度学习教师行为识别系统Web 应用示例✅ 十二、建议优化方向十三、总结以下文字及代码仅供参考。教师行为检测数据集3898张yolo和voc标注6类标注数量Crossing legs跷二郎腿1192Using a phone使用手机1295Teaching or asking教学或提问564Looking at the screen看屏幕289Writing书写312Guiding students指导学生626image num图像数量3898教师行为检测目标检测数据集如何从数据准备 → 数据划分 → 环境搭建 → 模型训练 → 推理部署 → 性能评估的全过程仅供参考—✅ 一、项目总览阶段内容数据准备YOLO/VOC标注转换、类别映射数据划分训练集/验证集(9:1)环境搭建安装YOLOv8、配置依赖包数据配置编写data.yaml模型训练使用预训练模型 fine-tune配置超参数学习率、epoch、batch size等模型推理单张图、视频、批量推理性能评估mAP、精确度、召回率✅ 二、数据结构要求YOLO格式假设你已将数据整理为如下格式teacher_behavior_dataset/ ├── images/ │ ├── train/ │ └── val/ └── labels/ ├── train/ └── val/每张图片对应一个.txt文件内容如下YOLO格式class_id x_center y_center width height例如0 0.5 0.4 0.2 0.3 # 表示“Crossing legs”类在图像中间✅ 三、类别名称列表classes.txt创建classes.txt文件列出所有6个类别cross_legs using_phone teaching_asking looking_screen writing guiding_students✅ 四、VOC XML 转 YOLO txt 格式脚本如有需要VOC XML 格式可以运行以下 Python 脚本进行转换importxml.etree.ElementTreeasETimportosimportglobdefconvert(size,box):dw1./size[0]dh1./size[1]x(box[0]box[1])/2.0y(box[2]box[3])/2.0wbox[1]-box[0]hbox[3]-box[2]returnx*dw,y*dh,w*dw,h*dhdefconvert_annotation(xml_file,out_file,class_mapping):treeET.parse(xml_file)roottree.getroot()sizeroot.find(size)wint(size.find(width).text)hint(size.find(height).text)withopen(out_file,w)asout:forobjinroot.iter(object):clsobj.find(name).textifclsnotinclass_mapping:continuecls_idclass_mapping[cls]xmlboxobj.find(bndbox)b(float(xmlbox.find(xmin).text),float(xmlbox.find(xmax).text),float(xmlbox.find(ymin).text),float(xmlbox.find(ymax).text))bbconvert((w,h),b)out.write(str(cls_id) .join([str(a)forainbb])\n)# 示例用法class_names{cross_legs:0,using_phone:1,teaching_asking:2,looking_screen:3,writing:4,guiding_students:5}xml_filesglob.glob(path/to/xml/*.xml)forxmlinxml_files:base_nameos.path.splitext(os.path.basename(xml))[0]out_pathfpath/to/labels/train/{base_name}.txtconvert_annotation(xml,out_path,class_names)✅ 五、数据划分训练集和验证集9:1pipinstallscikit-learnfromsklearn.model_selectionimporttrain_test_splitimportshutilimportos image_files[fforfinos.listdir(images)iff.endswith(.jpg)]train_files,val_filestrain_test_split(image_files,test_size0.1,random_state42)os.makedirs(images/train,exist_okTrue)os.makedirs(images/val,exist_okTrue)os.makedirs(labels/train,exist_okTrue)os.makedirs(labels/val,exist_okTrue)forfintrain_files:shutil.copy(fimages/{f},fimages/train/{f})shutil.copy(flabels/{f.replace(.jpg,.txt)},flabels/train/{f.replace(.jpg,.txt)})forfinval_files:shutil.copy(fimages/{f},fimages/val/{f})shutil.copy(flabels/{f.replace(.jpg,.txt)},flabels/val/{f.replace(.jpg,.txt)})✅ 六、创建 data.yaml 文件train:./teacher_behavior_dataset/images/trainval:./teacher_behavior_dataset/images/valnc:6names:[cross_legs,using_phone,teaching_asking,looking_screen,writing,guiding_students]✅ 七、环境安装YOLOv8pipinstallultralytics✅ 八、模型训练代码Python APIfromultralyticsimportYOLO# 加载预训练模型推荐从官方下载 yolov8s.ptmodelYOLO(yolov8s.pt)# 可替换为 yolov8n.pt, yolov8m.pt 等# 开始训练resultsmodel.train(datadata.yaml,epochs100,imgsz640,batch16,nameteacher_behavior_yolov8s,device0iftorch.cuda.is_available()elseNone,workers4,optimizerAdamW,lr00.001,pretrainedTrue,augmentTrue,close_mosaic10,saveTrue,projectruns/teacher,)✅ 九、性能评估与验证# 使用最佳权重进行验证modelYOLO(runs/teacher/teacher_behavior_yolov8s/weights/best.pt)metricsmodel.val(datadata.yaml,splitval)print(metrics.box.map)# mAP0.5:0.95print(metrics.box.p)# Precisionprint(metrics.box.r)# Recall✅ 十、推理代码推理批量保存结果 单张图像推理modelYOLO(runs/teacher/teacher_behavior_yolov8s/weights/best.pt)resultsmodel(test_images/teacher.jpg)forrinresults:r.show()# 显示结果r.save(filenameresult.jpg)# 保存结果 视频流实时检测摄像头importcv2 capcv2.VideoCapture(0)whilecap.isOpened():ret,framecap.read()ifnotret:breakresultsmodel(frame)annotated_frameresults[0].plot()cv2.imshow(Teacher Behavior Detection,annotated_frame)ifcv2.waitKey(1)0xFFord(q):breakcap.release()cv2.destroyAllWindows() 批量图像推理文件夹fromglobimportglob image_pathsglob(test_images/*.jpg)forimg_pathinimage_paths:resultsmodel(img_path)forrinresults:r.save(filenamefoutputs/{os.path.basename(img_path)})✅ 十一、构建深度学习教师行为识别系统Web 应用示例你可以使用 Flask 构建一个简单的 Web 检测系统接收上传的图片并返回检测结果。以下是简化版本fromflaskimportFlask,request,jsonifyfromultralyticsimportYOLOimportcv2importnumpyasnp appFlask(__name__)modelYOLO(runs/teacher/teacher_behavior_yolov8s/weights/best.pt)app.route(/detect,methods[POST])defdetect():filerequest.files[image]imgcv2.imdecode(np.frombuffer(file.read(),np.uint8),cv2.IMREAD_COLOR)resultsmodel(img)res_plottedresults[0].plot()_,buffercv2.imencode(.jpg,res_plotted)returnjsonify({result:buffer.tobytes().hex()})启动服务flask run发送 POST 请求即可获取检测结果。✅ 十二、建议优化方向优化项描述多尺度训练提高小目标和大目标检测能力自定义锚框使用 k-means 聚类生成更合适的 anchor增强策略添加 Mosaic、Mixup 等增强方式模型选择根据硬件资源选择 yolov8n/s/m/l/x导出ONNX用于部署到边缘设备或移动端十三、总结个教师行为检测系统的全流程包括数据准备VOC转YOLO数据划分train/val环境搭建YOLOv8模型训练定制化Fine-tuning推理与部署图像、视频、Web API性能评估mAP、P、R仅供参考