智慧安全检测-无人机 安全帽识别数据集 YOLO格式一共k图片分别都打好标签一共分为类分别为‘head’, ‘helmet’ “头”“头盔”11 无人机安全帽识别数据集这是一个专为无人机视角下的安全监控场景设计的数据集。由于无人机通常是从高空俯视拍摄人头和安全帽在图像中通常表现为小目标对检测算法的精度和小目标检测能力有较高要求。数据集概览属性详细描述数据集名称无人机安全帽识别数据集图像总数3,000 张标注格式YOLO (.txt)图像分辨率多样通常包含高分辨率航拍图类别数量2 类应用场景建筑工地监控、工业安全巡检、高空作业监管详细类别统计该数据集主要区分“是否佩戴安全帽”这对于保障高空作业人员安全至关重要。类别 ID英文名称中文名称备注0head头未佩戴安全帽的人员违规1helmet头盔佩戴安全帽的人员合规️ 系统构建与代码实现构建基于 YOLO 的无人机安全帽检测系统主要分为两个阶段模型训练和系统集成含GUI。1. 训练代码 (基于 Ultralytics YOLOv8/v11)YOLOv8/v11 对小目标检测有很好的支持且使用 Ultralytics 库训练非常简单。假设你已经将数据集按照images和labels分好类并编写了safety_helmet.yaml配置文件。步骤 1安装依赖pipinstallultralytics opencv-python步骤 2数据配置文件 (safety_helmet.yaml)# safety_helmet.yamlpath:./datasets/safety_helmet# 数据集根目录train:images/train# 训练集图片路径val:images/val# 验证集图片路径nc:2# 类别数量names:[head,helmet]# 类别名称步骤 3训练脚本 (train.py)fromultralyticsimportYOLO# 加载预训练模型 (例如 YOLOv8n 或 YOLOv11)# n代表nano适合无人机端侧部署若追求精度可换成s/mmodelYOLO(yolov8n.pt)# 开始训练resultsmodel.train(datasafety_helmet.yaml,# 指向你的配置文件epochs100,# 训练轮数imgsz640,# 输入图像大小 (无人机图片建议640或更大)batch16,# 批处理大小device0,# 使用GPU (0表示第一块显卡)nameexp_helmet# 实验名称)2. 深度学习框架系统代码 (PyQt5 GUI)为了实现类似你之前提供的截图中的桌面端系统包含文件导入、检测、结果显示我们需要编写一个 GUI 程序。核心功能逻辑加载训练好的模型 (best.pt)。读取无人机传回的图片或视频流。进行推理并获取结果。在界面上绘制框并显示统计信息。系统主代码 (main_gui.py)importsysimportcv2importtorchimportpandasaspdfromPyQt5.QtWidgetsimport(QApplication,QMainWindow,QPushButton,QLabel,QVBoxLayout,QWidget,QFileDialog,QTextEdit,QTableWidget,QTableWidgetItem,QComboBox)fromPyQt5.QtGuiimportQImage,QPixmapfromPyQt5.QtCoreimportQTimerfromultralyticsimportYOLOclassHelmetDetectionSystem(QMainWindow):def__init__(self):super().__init__()self.setWindowTitle(基于YOLO的无人机安全帽检测系统)self.setGeometry(100,100,1200,800)# --- 1. 加载模型 ---self.modelYOLO(runs/detect/exp_helmet/weights/best.pt)# 替换为你的best.pt路径self.classes[head,helmet]# --- 2. GUI布局 ---central_widgetQWidget(self)self.setCentralWidget(central_widget)layoutQVBoxLayout(central_widget)# 图像显示区域self.image_labelQLabel(self)self.image_label.setFixedSize(800,600)layout.addWidget(self.image_label)# 控制按钮btn_layoutQHBoxLayout()self.btn_load_imgQPushButton(导入图片)self.btn_load_videoQPushButton(导入视频)self.btn_start_detectQPushButton(开始检测)self.btn_saveQPushButton(保存结果)self.btn_load_img.clicked.connect(self.load_image)self.btn_load_video.clicked.connect(self.load_video)self.btn_start_detect.clicked.connect(self.start_detection)self.btn_save.clicked.connect(self.save_results)btn_layout.addWidget(self.btn_load_img)btn_layout.addWidget(self.btn_load_video)btn_layout.addWidget(self.btn_start_detect)btn_layout.addWidget(self.btn_save)layout.addLayout(btn_layout)# 结果表格self.result_tableQTableWidget(self)self.result_table.setColumnCount(5)self.result_table.setHorizontalHeaderLabels([序号,类别,置信度,坐标(xmin,ymin),坐标(xmax,ymax)])layout.addWidget(self.result_table)# --- 3. 初始化变量 ---self.current_frameNoneself.timerQTimer(self)self.timer.timeout.connect(self.update_frame)defload_image(self):导入单张图片file_path,_QFileDialog.getOpenFileName(self,选择图片,.,Images (*.png *.xpm *.jpg))iffile_path:self.current_framecv2.imread(file_path)self.display_image(self.current_frame)defstart_detection(self):执行检测ifself.current_frameisNone:return# YOLO推理resultsself.model(self.current_frame)# 解析结果boxesresults[0].boxes.xyxy.cpu().numpy()scoresresults[0].boxes.conf.cpu().numpy()classesresults[0].boxes.cls.cpu().numpy()# 在图像上绘制结果img_with_boxesself.current_frame.copy()forbox,score,clsinzip(boxes,scores,classes):x1,y1,x2,y2map(int,box)labelf{self.classes[int(cls)]}{score:.2f}color(0,255,0)ifint(cls)1else(0,0,255)# 头盔绿头红cv2.rectangle(img_with_boxes,(x1,y1),(x2,y2),color,2)cv2.putText(img_with_boxes,label,(x1,y1-10),cv2.FONT_HERSHEY_SIMPLEX,0.5,color,2)# 更新界面self.display_image(img_with_boxes)self.update_table(boxes,scores,classes)defupdate_table(self,boxes,scores,classes):更新结果表格self.result_table.setRowCount(len(boxes))fori,(box,score,cls)inenumerate(zip(boxes,scores,classes)):self.result_table.setItem(i,0,QTableWidgetItem(str(i1)))self.result_table.setItem(i,1,QTableWidgetItem(self.classes[int(cls)]))self.result_table.setItem(i,2,QTableWidgetItem(f{score:.2f}))self.result_table.setItem(i,3,QTableWidgetItem(f[{int(box[0])},{int(box[1])}]))self.result_table.setItem(i,4,QTableWidgetItem(f[{int(box[2])},{int(box[3])}]))defdisplay_image(self,frame):在Label中显示图像rgb_imagecv2.cvtColor(frame,cv2.COLOR_BGR2RGB)h,w,chrgb_image.shape bytes_per_linech*w convert_to_Qt_formatQImage(rgb_image.data,w,h,bytes_per_line,QImage.Format_RGB888)pconvert_to_Qt_format.scaled(800,600,Qt.KeepAspectRatio)self.image_label.setPixmap(QPixmap.fromImage(p))if__name____main__:appQApplication(sys.argv)windowHelmetDetectionSystem()window.show()sys.exit(app.exec_()) 系统特点说明小目标优化无人机数据集通常目标较小。在训练时建议使用Mosaic数据增强并适当增大输入分辨率如imgsz1280或者使用YOLOv8/v11 的 P2/P3 小目标检测层。颜色区分在代码中我们设置了color (0, 255, 0) if int(cls) 1 else (0, 0, 255)即头盔显示为绿色合规头部显示为红色违规。这在监控大屏上能直观提示安全隐患。实时性如果需要处理无人机实时视频流只需将load_image改为读取 RTSP 流或 USB 摄像头流即可。