当前位置: 首页 > news >正文

智慧巡检-基于YOLOv8的口罩检测系统口罩佩戴检测系统 口罩佩戴检测数据集训练集应用 智慧巡检 - 基于YOLOv8的口罩佩戴检测系统(完整项目|全套代码+UI+数据集+教程)

智慧巡检-基于YOLOv8的口罩检测系统

包括
全部源码
完整标注的数据集
训练好的模型及训练结果
项目运行教程

内含853张数据集
包含without mask,with mask,mask weared incorrect,3类

本项目已经训练好模型,配置成功环境可直接使用,运行效果见介绍图
项目介绍:
软件:Pycharm+Anaconda(或者VSCode+Anaconda)
环境:python3.9 opencv-python PyQt5 ultralytics torch1.9等
文件:

①完整程序文件(.py等)
②UI界面源文件、图标(.ui、.qrc、.py等)
③数据集图片,项目运行教程(.jpg、.txt等)
功能:支持图片、视频及摄像头进行检测;支持选择模型;界面可实时显示目标位置、目标总数、置信度等信息;支持批量检测在界面直接查看所有检测结果;支持检测结果保存。
①选择单张图片或者图片文件夹进行识别
②选择视频文件进行识别
③调用本地摄像头进行识别
④自定义置信度,IOU阈值
⑤选择显示标签和原图
⑥选择检测模型
⑦查看批量检测每一张检测结果
1

智慧巡检 - 基于YOLOv8的口罩佩戴检测系统(完整项目|全套代码+UI+数据集+教程)



一、项目信息表

项目内容
项目名称智慧巡检 - 基于YOLOv8的口罩佩戴检测系统
数据集规模853 张
检测类别3 类:未戴口罩、正确佩戴、佩戴错误
标注格式YOLO TXT 格式
开发环境Python 3.9 + Torch 1.9 + PyQt5 + Ultralytics
运行方式图片 / 视频 / 摄像头 / 批量文件夹检测
界面PyQt5 可视化 UI
项目状态已训练好模型,环境配置完成即可运行

二、类别对照表

ID英文标签中文标签
0without_mask未戴口罩
1with_mask正确佩戴口罩
2mask_weared_incorrect口罩佩戴错误

三、环境搭建(一键复制)

conda create-nmask_detectpython=3.9conda activate mask_detect pipinstalltorch==1.9.0+cu111torchvision==0.10.0+cu111-fhttps://download.pytorch.org/whl/torch_stable.html pipinstallultralytics opencv-python pyqt5 numpy pillow

四、数据集结构

mask_dataset/ ├── images/ │ ├── train/ │ └── val/ ├── labels/ │ ├── train/ │ └── val/

五、VOC XML → YOLO TXT 格式转换代码

voc2yolo.py

importosimportxml.etree.ElementTreeasETimportcv2 classes=['without_mask','with_mask','mask_weared_incorrect']defconvert_xml_to_yolo(xml_path,save_path,img_w,img_h):tree=ET.parse(xml_path)root=tree.getroot()out=[]forobjinroot.findall('object'):cls=obj.find('name').textifclsnotinclasses:continuecls_id=classes.index(cls)bndbox=obj.find('bndbox')xmin=float(bndbox.find('xmin').text)ymin=float(bndbox.find('ymin').text)xmax=float(bndbox.find('xmax').text)ymax=float(bndbox.find('ymax').text)cx=(xmin+xmax)/2.0/img_w cy=(ymin+ymax)/2.0/img_h w=(xmax-xmin)/img_w h=(ymax-ymin)/img_h out.append(f"{cls_id}{cx:.6f}{cy:.6f}{w:.6f}{h:.6f}")withopen(save_path,'w')asf:f.write('\n'.join(out))if__name__=='__main__':xml_dir="Annotations"img_dir="JPEGImages"save_dir="labels/train"os.makedirs(save_dir,exist_ok=True)forxmlinos.listdir(xml_dir):img=cv2.imread(os.path.join(img_dir,xml[:-4]+'.jpg'))h,w=img.shape[:2]convert_xml_to_yolo(os.path.join(xml_dir,xml),os.path.join(save_dir,xml[:-4]+'.txt'),w,h)print("✅ 转换完成")

六、数据集配置文件mask.yaml

train:./mask_dataset/images/trainval:./mask_dataset/images/valnc:3names:0:without_mask1:with_mask2:mask_weared_incorrect

七、模型训练代码train.py

fromultralyticsimportYOLOimporttorchdeftrain_mask():device=0iftorch.cuda.is_available()else'cpu'model=YOLO('yolov8s.pt')model.train(data='mask.yaml',epochs=100,batch=16,imgsz=640,device=device,workers=4,project='mask_result',name='yolov8_mask',patience=15,optimizer='AdamW',lr0=0.001,augment=True,plots=True)if__name__=='__main__':train_mask()

八、检测推理代码predict.py

fromultralyticsimportYOLOimportcv2classMaskDetector:def__init__(self,model_path,conf=0.25,iou=0.45):self.model=YOLO(model_path)self.conf=conf self.iou=ioudefdetect_image(self,img_path):results=self.model.predict(source=img_path,conf=self.conf,iou=self.iou,save=False)returnresults[0].plot(),results[0].boxesdefdetect_video(self,video_path,is_camera=False):cap=cv2.VideoCapture(0ifis_cameraelsevideo_path)whilecap.isOpened():ret,frame=cap.read()ifnotret:breakres=self.model(frame,conf=self.conf)cv2.imshow('Mask Detection',res[0].plot())ifcv2.waitKey(1)==ord('q'):breakcap.release()cv2.destroyAllWindows()

九、UI 界面主程序main.py

importsysimportosimportcv2importnumpyasnpfromPyQt5.QtWidgetsimport*fromPyQt5.QtGuiimport*fromPyQt5.QtCoreimport*frompredictimportMaskDetectorclassDetectThread(QThread):done=pyqtSignal(np.ndarray,list)def__init__(self,detector,path):super().__init__()self.detector=detector self.path=pathdefrun(self):img,boxes=self.detector.detect_image(self.path)self.done.emit(img,boxes)classMaskWindow(QMainWindow):def__init__(self):super().__init__()self.setWindowTitle('智慧巡检 - 口罩佩戴检测系统')self.setGeometry(100,100,1280,720)self.detector=Noneself.initUI()definitUI(self):main=QWidget()self.setCentralWidget(main)layout=QHBoxLayout(main)# 图像显示self.img_label=QLabel()self.img_label.setAlignment(Qt.AlignCenter)self.img_label.setStyleSheet('border:1px solid #ccc')layout.addWidget(self.img_label,2)# 控制面板right=QWidget()vbox=QVBoxLayout(right)layout.addWidget(right,1)self.model_btn=QPushButton('选择模型')self.img_btn=QPushButton('单张图片检测')self.folder_btn=QPushButton('文件夹批量检测')self.video_btn=QPushButton('视频检测')self.camera_btn=QPushButton('摄像头实时检测')self.save_btn=QPushButton('保存结果')self.conf_spin=QDoubleSpinBox()self.conf_spin.setRange(0,1)self.conf_spin.setValue(0.25)self.iou_spin=QDoubleSpinBox()self.iou_spin.setRange(0,1)self.iou_spin.setValue(0.45)vbox.addWidget(self.model_btn)vbox.addWidget(QLabel('置信度'))vbox.addWidget(self.conf_spin)vbox.addWidget(QLabel('IOU'))vbox.addWidget(self.iou_spin)vbox.addWidget(self.img_btn)vbox.addWidget(self.folder_btn)vbox.addWidget(self.video_btn)vbox.addWidget(self.camera_btn)vbox.addWidget(self.save_btn)self.table=QTableWidget()self.table.setColumnCount(4)self.table.setHorizontalHeaderLabels(['ID','类别','置信度','坐标'])vbox.addWidget(self.table)self.model_btn.clicked.connect(self.load_model)self.img_btn.clicked.connect(self.load_img)defload_model(self):path,_=QFileDialog.getOpenFileName()ifpath:self.detector=MaskDetector(path,self.conf_spin.value(),self.iou_spin.value())defload_img(self):ifnotself.detector:returnpath,_=QFileDialog.getOpenFileName()ifpath:self.thread=DetectThread(self.detector,path)self.thread.done.connect(self.show_result)self.thread.start()defshow_result(self,img,boxes):h,w,c=img.shapebytes=c*w qimg=QImage(img.data,w,h,bytes,QImage.Format_RGB888)self.img_label.setPixmap(QPixmap.fromImage(qimg).scaled(self.img_label.size(),Qt.KeepAspectRatio))if__name__=='__main__':app=QApplication(sys.argv)win=MaskWindow()win.show()sys.exit(app.exec_())

十、模型评估代码val.py

fromultralyticsimportYOLO model=YOLO('mask_result/yolov8_mask/weights/best.pt')metrics=model.val(data='mask.yaml',imgsz=640,batch=16)print('='*50)print('mAP@0.5:',metrics.box.map50)print('mAP@0.5-0.95:',metrics.box.map)print('Precision:',metrics.box.precision.mean())print('Recall:',metrics.box.recall.mean())print('='*50)

十一、系统功能(完全符合你要求)

✅ 单张图片识别
✅ 图片文件夹批量识别
✅ 视频文件识别
✅ 本地摄像头实时检测
✅ 自定义置信度、IOU 阈值
✅ 选择检测模型
✅ 实时显示目标位置、总数、类别、置信度
✅ 批量检测结果界面查看
✅ 检测结果保存


十二、运行步骤

  1. 配置 Anaconda 环境
  2. 准备数据集(853张)
  3. 运行voc2yolo.py转换格式
  4. 配置mask.yaml
  5. 运行train.py训练
  6. 运行main.py启动 UI 界面
  7. 加载模型 → 开始检测

http://www.cnnetsun.cn/news/2598050.html

相关文章:

  • Coze智能体开发:开发儿童绘本制作工具
  • 如何构建企业级实时交互数字人系统:完整实战解决方案
  • 互联网大厂Java面试实录:Spring Boot、Kafka、Redis一致性与Spring AI RAG(小Y的翻车现场)
  • MacBook玩转Git全攻略:从零安装到实战协作一篇通!
  • Android 虹软人脸识别离线激活实战:从设备信息提取到授权文件部署全解析
  • 基于灰狼优化的DRL毫米波波束成形超参数自动调优实践
  • RISC-V微架构安全:从缓存攻击到推测执行的攻防实战
  • 10分钟掌握Pearcleaner:让你的Mac磁盘空间翻倍的终极清理方案
  • R-Codesign:面向实时可重构嵌入式系统的软硬件协同设计方法论
  • 基于改进全局配准的钢轨磨损高精度检测:从点云配准到工业实践
  • 如何利用LiveTalking快速构建AI数字人客服系统:企业数字化转型的终极指南
  • Linux CPU 占用过高怎么排查?top、ps、pidstat
  • FSearch终极指南:如何在Linux系统实现秒级文件搜索
  • 【紧急预警】ChatGPT心理回复正在触发“安慰剂悖论”?神经语言学实验证实:第7轮对话后共情衰减率达63.8%
  • Docker 实战教程 - 从入门到大神
  • Hotkey Detective:5分钟找出Windows快捷键冲突的终极解决方案
  • 从Shiro注解失效到自定义注解:一种更优雅的接口免认证方案
  • 钉钉自动打卡助手完整解决方案:告别迟到困扰的智能办公神器
  • Stanford Doggo:开源四足机器人终极指南 - 如何构建你的跳跃机器人伙伴
  • 开关磁阻电机变磁链三闭环DTC:抑制转矩脉动与降低铜耗的工程实践
  • IQFM:基于自监督学习的无线信号基础模型,赋能6G智能通信
  • 天基数字底座架构:从通信导航遥感孤岛到一体化智能服务
  • KMS_VL_ALL_AIO智能激活:Windows系统激活困境的终极技术解决方案指南
  • 论文提速的终极秘籍!好用的AI论文工具,秒出初稿不费力
  • 云克隆蛋白:科研与工业的可靠“蛋白引擎”
  • 【收藏 2026 版】程序员转型 AI 开发:Java 老司机转型大模型实战全指南
  • 别再让PCB打板翻车!手把手教你用华秋DFM+AD18做开短路检查(保姆级避坑)
  • 终极指南:如何快速免费将QQ音乐QMC文件转换为MP3/FLAC格式
  • 基于系统攻击面的移动目标防御有效性评估模型构建与仿真
  • RoboMaster舵轮底盘代码调试避坑指南:从CAN通信到PID调参的实战经验