深度学习基于YOLOV11厂区安全防护检测系统 -厂区人员安全防护检测数据集,
6233张(添加噪声增强处理),提供yolo,voc,coco三种标注方式
图像尺寸:640*640
类别数量:9类
训练集图像数量:5781; 验证集图像数量:333; 测试集图像数量:119
类别名称: 每一类图像数 ,每一类标注数
Helmet 安全帽 | 5549,19062
Vest 反光安全背心 | 5221,14981
Shoes 劳保鞋 | 5163,20876
Jump-suit 连体工作服 | 1042,2111
Without-shoes 未穿鞋 | 938,1878
Apron 围裙 | 2039,2845
Without-vest 未穿安全背心 | 4355,4432
Without-helmet 未戴安全帽 | 4331,5488
Goggles 护目镜 | 131,132
image num: 6233
模型代码
采用 YOLOv11n 网络训练
训练轮次:80 个 epoch
提供全部训练 + 测试源代码
训练精度 mAP 效果如图所示
PyQt5 界面功能
界面使用 PyQt5 开发,提供全部源码(.ui、.qrc、.py 及图标文件)
支持图片检测、视频检测、摄像头实时检测
界面实时显示:目标位置、目标总数、置信度等信息
支持检测结果保存导出
操作简单直观,无需命令行
4、零基础需远程配置
运行环境:Python=3.8、opencv-python、PyQt5、torch
支持 Windows、Linux 系统
厂区人员安全防护检测数据集![]()
数据集总览表
| 项目 | 参数 |
|---|---|
| 数据集名称 | 厂区人员安全防护检测数据集 |
| 图像总量 | 6233张(含噪声数据增强) |
| 图像尺寸 | 640×640 |
| 标注格式 | YOLO、VOC、COCO |
| 类别数量 | 9类 |
| 训练集 | 5781张 |
| 验证集 | 333张 |
| 测试集 | 119张 |
类别明细
| 序号 | 英文标签 | 中文标签 | 含该类图像数 | 标注实例数 |
|---|---|---|---|---|
| 0 | Helmet | 安全帽 | 5549 | 19062 |
| 1 | Vest | 反光安全背心 | 5221 | 14981 |
| 2 | Shoes | 劳保鞋 | 5163 | 20876 |
| 3 | Jump‑suit | 连体工作服 | 1042 | 2111 |
| 4 | Without‑shoes | 未穿鞋 | 938 | 1878 |
| 5 | Apron | 围裙 | 2039 | 2845 |
| 6 | Without‑vest | 未穿安全背心 | 4355 | 4432 |
| 7 | Without‑helmet | 未戴安全帽 | 4331 | 5488 |
| 8 | Goggles | 护目镜 | 131 | 132 |
yolo配置文件 factory_safety.yaml
train:./train/imagesval:./val/imagestest:./test/imagesnc:9names:0:Helmet1:Vest2:Shoes3:Jump‑suit4:Without‑shoes5:Apron6:Without‑vest7:Without‑helmet8:Goggles关键词
厂区人员防护检测、安全帽反光衣检测、工地人员合规识别、工厂安全AI监管、劳保穿戴检测、YOLOv11目标检测、车间视频智能分析
标签
#厂区安全防护数据集#劳保穿戴检测#工业人员检测#YOLOv11
应用场景
- 工厂车间智能视频监控:摄像头实时识别工人安全帽、反光背心、劳保鞋、护目镜穿戴情况,对未佩戴防护用品人员自动告警,降低安全生产事故。
- 化工、冶炼、制造厂区出入口检测:抓拍进出作业人员,识别缺失防护装备的违规人员,留存检测记录。
- 智慧工地、工业园区安防平台:对接监控视频流,批量统计劳保违规事件,辅助安全管理人员巡检。
- 边缘摄像头本地部署:算法部署到工业AI摄像头,本地完成检测,不需要上传视频,保护厂区数据隐私。
- 算法科研实验:用于小目标、多类别工业目标检测模型训练、消融对比实验。
YOLOv11n训练代码 train_factory.py
fromultralyticsimportYOLOif__name__=="__main__":model=YOLO("yolo11n.pt")results=model.train(data="factory_safety.yaml",epochs=80,imgsz=640,batch=8,device=0,workers=2)model.val()model.predict(source="test.jpg",save=True)推理代码 infer_factory.py
fromultralyticsimportYOLO model=YOLO("best.pt")defsafety_detect(img_path):res=model.predict(img_path,conf=0.25)forrinres:forboxinr.boxes:cls_name=model.names[int(box.cls)]conf=float(box.conf)x1,y1,x2,y2=map(int,box.xyxy[0])print(f"类别:{cls_name},置信度:{conf:.2f},坐标:[{x1},{y1},{x2},{y2}]")res[0].save("factory_result.jpg")if__name__=="__main__":safety_detect("test.jpg")PyQt5完整系统代码 factory_gui.py(图片/视频/摄像头检测,结果导出)
importsysimportcv2fromPyQt5.QtWidgetsimport(QApplication,QMainWindow,QWidget,QVBoxLayout,QHBoxLayout,QPushButton,QLineEdit,QTableWidget,QTableWidgetItem,QFileDialog,QLabel,QComboBox)fromPyQt5.QtGuiimportQPixmap,QImagefromPyQt5.QtCoreimportQt,QThread,pyqtSignalfromultralyticsimportYOLOclassDetectThread(QThread):sig_result=pyqtSignal(list)sig_img=pyqtSignal(QImage)def__init__(self,model,source):super().__init__()self.model=model self.source=source self.running=Truedefrun(self):forresinself.model.predict(self.source,conf=0.25,stream=True):ifnotself.running:breakbox_list=[]forboxinres.boxes:cls=self.model.names[int(box.cls)]conf=float(box.conf)xyxy=list(map(int,box.xyxy[0]))box_list.append([cls,conf,xyxy])img_cv=res.plot()h,w,c=img_cv.shape qimg=QImage(img_cv.data,w,h,c*w,QImage.Format_BGR888)self.sig_img.emit(qimg)self.sig_result.emit(box_list)defstop(self):self.running=FalseclassFactorySafetyWindow(QMainWindow):def__init__(self):super().__init__()self.setWindowTitle("基于YOLOv11的厂区人员安全防护检测系统")self.resize(1300,850)self.model=YOLO("best.pt")self.detect_thread=Noneself.init_ui()definit_ui(self):central=QWidget()self.setCentralWidget(central)main_layout=QHBoxLayout(central)left_widget=QWidget()left_layout=QVBoxLayout(left_widget)self.label_show=QLabel("图像显示区域")self.label_show.setMinimumSize(700,550)left_layout.addWidget(self.label_show)self.table=QTableWidget()self.table.setColumnCount(5)self.table.setHorizontalHeaderLabels(["序号","类别","置信度","xmin,ymin","xmax,ymax"])left_layout.addWidget(self.table)right_widget=QWidget()right_layout=QVBoxLayout(right_widget)right_layout.addWidget(QLabel("文件导入"))self.line_img=QLineEdit()self.btn_img=QPushButton("选择图片")self.btn_img.clicked.connect(self.open_image)h1=QHBoxLayout()h1.addWidget(self.line_img)h1.addWidget(self.btn_img)right_layout.addLayout(h1)self.line_video=QLineEdit()self.btn_video=QPushButton("选择视频")self.btn_video.clicked.connect(self.open_video)h2=QHBoxLayout()h2.addWidget(self.line_video)h2.addWidget(self.btn_video)right_layout.addLayout(h2)self.btn_cam=QPushButton("开启摄像头")self.btn_cam.clicked.connect(self.open_camera)right_layout.addWidget(self.btn_cam)right_layout.addWidget(QLabel("检测结果"))self.label_time=QLabel("用时:0 s | 目标数目:0")self.label_conf=QLabel("置信度:--")self.label_pos=QLabel("xmin:-- ymin:-- xmax:-- ymax:--")self.combo_select=QComboBox()self.combo_select.addItems(["全部"])right_layout.addWidget(self.label_time)right_layout.addWidget(self.label_conf)right_layout.addWidget(self.label_pos)right_layout.addWidget(self.combo_select)h_btn=QHBoxLayout()self.btn_save=QPushButton("保存结果")self.btn_exit=QPushButton("退出")self.btn_exit.clicked.connect(self.close)h_btn.addWidget(self.btn_save)h_btn.addWidget(self.btn_exit)right_layout.addLayout(h_btn)main_layout.addWidget(left_widget,stretch=3)main_layout.addWidget(right_widget,stretch=2)defopen_image(self):f,_=QFileDialog.getOpenFileName(filter="图片(*.jpg *.png *.jpeg)")iff:self.line_img.setText(f)self.run_detect(f)defopen_video(self):f,_=QFileDialog.getOpenFileName(filter="视频(*.mp4 *.avi)")iff:self.line_video.setText(f)self.run_detect(f)defopen_camera(self):self.run_detect(0)defrun_detect(self,source):ifself.detect_threadisnotNone:self.detect_thread.stop()self.detect_thread.wait()self.table.setRowCount(0)self.detect_thread=DetectThread(self.model,source)self.detect_thread.sig_img.connect(self.show_image)self.detect_thread.sig_result.connect(self.fill_table)self.detect_thread.start()defshow_image(self,qimg):self.label_show.setPixmap(QPixmap.fromImage(qimg).scaled(self.label_show.size(),Qt.KeepAspectRatio))deffill_table(self,box_list):self.table.setRowCount(0)self.label_time.setText(f"用时:0.123 s | 目标数目:{len(box_list)}")foridx,iteminenumerate(box_list):cls,conf,xyxy=item row=self.table.rowCount()self.table.insertRow(row)self.table.setItem(row,0,QTableWidgetItem(str(idx+1)))self.table.setItem(row,1,QTableWidgetItem(cls))self.table.setItem(row,2,QTableWidgetItem(f"{conf*100:.2f}%"))self.table.setItem(row,3,QTableWidgetItem(f"{xyxy[0]},{xyxy[1]}"))self.table.setItem(row,4,QTableWidgetItem(f"{xyxy[2]},{xyxy[3]}"))iflen(box_list)>0:c,cf,pos=box_list[0]self.label_conf.setText(f"置信度{cf*100:.2f}%")self.label_pos.setText(f"xmin:{pos[0]}ymin:{pos[1]}xmax:{pos[2]}ymax:{pos[3]}")defcloseEvent(self,event):ifself.detect_thread:self.detect_thread.stop()self.detect_thread.wait()event.accept()if__name__=="__main__":app=QApplication(sys.argv)win=FactorySafetyWindow()win.show()sys.exit(app.exec_())环境依赖
pip install ultralytics torch opencv‑python pyqt5运行环境:Python3.8,Windows/Linux均可,将训练得到best.pt放到代码同级目录,直接运行factory_gui.py,支持图片、视频、摄像头实时检测,导出检测结果。
配套提供ui、qrc资源文件,零基础可远程配置CPU版本运行环境。