深度学习基于YOLOv11监控机动车摩托测头盔佩戴检测系统 监控下摩托车规范佩戴头盔检测数据集
监控下摩托车规范佩戴头盔检测数据集信息表![]()
| 项目 | 详情 |
|---|---|
| 数据集名称 | 监控下摩托车规范佩戴头盔检测数据集 |
| 任务类型 | 目标检测 |
| 总图像数量 | 2215张 |
| 图像尺寸 | 640×640 |
| 标注格式 | YOLO、VOC、COCO三种标注 |
| 类别总数 | 4类 |
| 训练集 | 1545张 |
| 验证集 | 438张 |
| 测试集 | 232张 |
| 训练模型 | YOLOv11n,80 epoch,mAP@0.5=0.623 |
| 开发界面 | PyQt5可视化检测界面,支持图片/视频/摄像头实时检测,可导出保存检测结果 |
| 运行环境 | Python3.8,opencv-python,PyQt5,torch;支持Windows、Linux,支持CPU运行 |
类别明细![]()
| 类别代号 | 中文名称 | 训练图片数 | 训练标签数 | 验证图片数 | 验证标签数 | 测试图片数 | 测试标签数 |
|---|---|---|---|---|---|---|---|
| WX | 无效的 | 467 | 529 | 140 | 159 | 77 | 93 |
| BMLM | 半蒙面 | 1135 | 2055 | 340 | 650 | 182 | 367 |
| QBM | 全蒙面 | 1082 | 1865 | 300 | 565 | 169 | 323 |
| WDK | 未戴盔 | 213 | 262 | 63 | 77 | 33 | 39 |
构建系统完整代码![]()
模型与源代码
采用 YOLOv11n 网络训练
训练轮次:80 个 epoch
提供训练好的yolo11n模型,全部训练 + 测试源代码
训练精度 mAP 效果如图所示
PyQt5 界面功能
界面使用 PyQt5 开发,提供全部源码(.ui、.qrc、.py 及图标文件)
支持图片检测、视频检测、摄像头实时检测
界面实时显示:目标位置、目标总数、置信度等信息
支持检测结果保存导出
1. 数据集配置文件moto_helmet.yaml
# 监控摩托车头盔检测数据集path:./moto_helmettrain:images/trainval:images/valtest:images/testnames:0:WX1:BMLM2:QBM3:WDK2. 模型训练脚本train.py
fromultralyticsimportYOLOif__name__=='__main__':# 加载YOLOv11n模型model=YOLO("yolo11n.pt")# 开始训练results=model.train(data="moto_helmet.yaml",epochs=80,imgsz=640,device="cpu",batch=8,project="runs/train",name="moto_helmet_exp")3. 单图推理脚本predict.py
fromultralyticsimportYOLO model=YOLO("./runs/train/moto_helmet_exp/weights/best.pt")defdetect_img(img_path):res=model(img_path)forrinres:boxes=r.boxesprint("目标数量:",len(boxes))forboxinboxes:cls=int(box.cls[0])conf=float(box.conf[0])xyxy=box.xyxy[0].tolist()print(f"类别:{r.names[cls]},置信度:{conf:.3f},坐标:{xyxy}")res[0].show()returnresif__name__=="__main__":detect_img("test.jpg")4. PyQt5可视化界面main_ui.py
importsysimportcv2fromPyQt5.QtWidgetsimport(QApplication,QMainWindow,QFileDialog,QTableWidgetItem)fromPyQt5.QtGuiimportQImage,QPixmapfromPyQt5.QtCoreimportQt,QThread,pyqtSignalfromultralyticsimportYOLOclassDetThread(QThread):signal_img=pyqtSignal(QPixmap)signal_table=pyqtSignal(list)signal_info=pyqtSignal(float,int)def__init__(self,model_path):super().__init__()self.model=YOLO(model_path)self.img_path=Nonedefset_img(self,path):self.img_path=pathdefrun(self):ifnotself.img_path:returnres=self.model(self.img_path)result=res[0]boxes=result.boxes h,w=result.orig_shape show_img=result.plot()rgb_img=cv2.cvtColor(show_img,cv2.COLOR_BGR2RGB)qimg=QImage(rgb_img.data,w,h,w*3,QImage.Format_RGB888)pix=QPixmap.fromImage(qimg)self.signal_img.emit(pix)table_data=[]foridx,boxinenumerate(boxes):cls_id=int(box.cls[0])cls_name=result.names[cls_id]conf=float(box.conf[0])x1,y1,x2,y2=map(int,box.xyxy[0])table_data.append([str(idx+1),self.img_path,cls_name,f"{conf:.3f}",f"[{x1},{y1},{x2},{y2}]"])self.signal_table.emit(table_data)self.signal_info.emit(result.speed['inference'],len(boxes))classMainWin(QMainWindow):def__init__(self):super().__init__()self.setWindowTitle("基于YOLOv11的监控下摩托骑行规范检测系统")self.resize(1400,950)self.det_thread=DetThread("./runs/train/moto_helmet_exp/weights/best.pt")self.det_thread.signal_img.connect(self.show_img)self.det_thread.signal_table.connect(self.fill_table)self.det_thread.signal_info.connect(self.show_info)defopen_img(self):file,_=QFileDialog.getOpenFileName(self,"选择图片","","Image(*.jpg *.png *.jpeg)")iffile:self.det_thread.set_img(file)self.det_thread.start()defshow_img(self,pix):self.label_img.setPixmap(pix.scaled(self.label_img.size(),Qt.KeepAspectRatio))deffill_table(self,data):self.tableWidget.setRowCount(len(data))forrow,row_datainenumerate(data):forcol,valinenumerate(row_data):self.tableWidget.setItem(row,col,QTableWidgetItem(val))defshow_info(self,use_time,obj_num):self.label_time.setText(f"用时:{use_time:.3f}")self.label_obj.setText(f"目标数目:{obj_num}")if__name__=="__main__":app=QApplication(sys.argv)win=MainWin()win.show()sys.exit(app.exec_())环境安装命令
pipinstalltorch opencv-python ultralytics pyqt5