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

智慧安全检测-大疆无人机 安全帽头盔识别数据集 YOLO格式 数据集 无人机安全帽检测数据集的训练及应用 构建基于 YOLO 的无人机安全帽检测系统

智慧安全检测-无人机 安全帽识别数据集 YOLO格式

一共3k+图片,分别都打好标签
一共分为2类,分别为:‘head’, ‘helmet’ “头”;“头盔”

1

1

🚁 无人机安全帽识别数据集

这是一个专为无人机视角下的安全监控场景设计的数据集。由于无人机通常是从高空俯视拍摄,人头和安全帽在图像中通常表现为小目标,对检测算法的精度和小目标检测能力有较高要求。

数据集概览
属性详细描述
数据集名称无人机安全帽识别数据集
图像总数3,000+ 张
标注格式YOLO (.txt)
图像分辨率多样(通常包含高分辨率航拍图)
类别数量2 类
应用场景建筑工地监控、工业安全巡检、高空作业监管
详细类别统计

该数据集主要区分“是否佩戴安全帽”,这对于保障高空作业人员安全至关重要。

类别 ID英文名称中文名称备注
0head未佩戴安全帽的人员(违规)
1helmet头盔佩戴安全帽的人员(合规)

🛠️ 系统构建与代码实现

构建基于 YOLO 的无人机安全帽检测系统主要分为两个阶段:模型训练系统集成(含GUI)

1. 训练代码 (基于 Ultralytics YOLOv8/v11)

YOLOv8/v11 对小目标检测有很好的支持,且使用 Ultralytics 库训练非常简单。假设你已经将数据集按照imageslabels分好类,并编写了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/mmodel=YOLO('yolov8n.pt')# 开始训练results=model.train(data='safety_helmet.yaml',# 指向你的配置文件epochs=100,# 训练轮数imgsz=640,# 输入图像大小 (无人机图片建议640或更大)batch=16,# 批处理大小device=0,# 使用GPU (0表示第一块显卡)name='exp_helmet'# 实验名称)
2. 深度学习框架系统代码 (PyQt5 GUI)

为了实现类似你之前提供的截图中的桌面端系统(包含文件导入、检测、结果显示),我们需要编写一个 GUI 程序。

核心功能逻辑:

  1. 加载训练好的模型 (best.pt)。
  2. 读取无人机传回的图片或视频流。
  3. 进行推理并获取结果。
  4. 在界面上绘制框并显示统计信息。

系统主代码 (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.model=YOLO('runs/detect/exp_helmet/weights/best.pt')# 替换为你的best.pt路径self.classes=['head','helmet']# --- 2. GUI布局 ---central_widget=QWidget(self)self.setCentralWidget(central_widget)layout=QVBoxLayout(central_widget)# 图像显示区域self.image_label=QLabel(self)self.image_label.setFixedSize(800,600)layout.addWidget(self.image_label)# 控制按钮btn_layout=QHBoxLayout()self.btn_load_img=QPushButton("导入图片")self.btn_load_video=QPushButton("导入视频")self.btn_start_detect=QPushButton("开始检测")self.btn_save=QPushButton("保存结果")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_table=QTableWidget(self)self.result_table.setColumnCount(5)self.result_table.setHorizontalHeaderLabels(['序号','类别','置信度','坐标(xmin,ymin)','坐标(xmax,ymax)'])layout.addWidget(self.result_table)# --- 3. 初始化变量 ---self.current_frame=Noneself.timer=QTimer(self)self.timer.timeout.connect(self.update_frame)defload_image(self):"""导入单张图片"""file_path,_=QFileDialog.getOpenFileName(self,"选择图片",".","Images (*.png *.xpm *.jpg)")iffile_path:self.current_frame=cv2.imread(file_path)self.display_image(self.current_frame)defstart_detection(self):"""执行检测"""ifself.current_frameisNone:return# YOLO推理results=self.model(self.current_frame)# 解析结果boxes=results[0].boxes.xyxy.cpu().numpy()scores=results[0].boxes.conf.cpu().numpy()classes=results[0].boxes.cls.cpu().numpy()# 在图像上绘制结果img_with_boxes=self.current_frame.copy()forbox,score,clsinzip(boxes,scores,classes):x1,y1,x2,y2=map(int,box)label=f'{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(i+1)))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_image=cv2.cvtColor(frame,cv2.COLOR_BGR2RGB)h,w,ch=rgb_image.shape bytes_per_line=ch*w convert_to_Qt_format=QImage(rgb_image.data,w,h,bytes_per_line,QImage.Format_RGB888)p=convert_to_Qt_format.scaled(800,600,Qt.KeepAspectRatio)self.image_label.setPixmap(QPixmap.fromImage(p))if__name__=='__main__':app=QApplication(sys.argv)window=HelmetDetectionSystem()window.show()sys.exit(app.exec_())

💡 系统特点说明

  1. 小目标优化:无人机数据集通常目标较小。在训练时,建议使用Mosaic数据增强并适当增大输入分辨率(如imgsz=1280),或者使用YOLOv8/v11 的 P2/P3 小目标检测层
  2. 颜色区分:在代码中,我们设置了color = (0, 255, 0) if int(cls) == 1 else (0, 0, 255),即头盔显示为绿色(合规)头部显示为红色(违规)。这在监控大屏上能直观提示安全隐患。
  3. 实时性:如果需要处理无人机实时视频流,只需将load_image改为读取 RTSP 流或 USB 摄像头流即可。
http://www.jsqmd.com/news/577265/

相关文章:

  • 雅可比矩阵在机器人控制与状态估计中的实战:从理论到EKF(扩展卡尔曼滤波)
  • 2026年4月总结:原位拉伸(含SEM)与双向拉伸试验机定制厂家实力对比 - 品牌推荐大师
  • PyTorch 2.8镜像一文详解:50G系统盘+40G数据盘下的高效AI开发环境配置
  • AI报告审核赋能光储充一体化检测:IACheck如何全面提升机构质控水平
  • Phi-3-mini-4k-instruct-gguf完整指南:从镜像拉取到生产环境健康检查集成
  • Switch文件管理全能工具NSC_BUILDER:一站式解决游戏备份转换与批量处理难题
  • 【院士、高层次专家齐聚 | 中南大学与布鲁内尔大学联合主办 | JPCS出版,EI , Scopus检索】第五届轻量化材料与工程结构国际会议(LIMAS 2026)
  • Ubuntu 鼠标中键自动粘贴的实用技巧与自定义设置
  • 3大突破!MRIcroGL如何让医学影像3D可视化成本降低90%
  • Midscene.js视觉驱动UI自动化实战指南:从问题解决到性能优化
  • intv_ai_mk11镜像部署手册:独立venv环境隔离依赖最佳实践
  • 效率倍增:借助快马ai智能生成与管理系统化java面试题库
  • 如何快速掌握Inter字体:5个专业排版技巧实现字体优化
  • 别再只盯着TOF了!聊聊FMCW激光雷达如何用‘听声辨位’搞定自动驾驶的雨天和加塞难题
  • 收藏 | Agent反思机制深度解析:小白也能掌握提升大模型输出的关键技巧!
  • GBase 8s数据库管理员必知必会:5个最实用的onstat命令解析
  • OpenClaw个人知识库:Qwen2.5-VL-7B自动化归档与检索
  • AutoGLM沉思版 vs OpenAI DeepResearch:免费国产AI Agent能否替代200美元/月的服务?
  • pycparser - 解析C代码、理解C的抽象语法树
  • applera1n终极解决方案:企业级iOS设备激活锁绕过零风险实施指南
  • 智慧自动售卖-YOLOV8商品识别系统 Python PyQt5 深度学习 基于深度学习框架YOLOV8自动售卖机商品识别检测系统 零售盘点、库存管理等场景。
  • 英语_阅读_cashless
  • ST意法 LDL212DR SOIC-8 线性稳压器(LDO)
  • Graphormer模型在Ubuntu系统上的从源码编译与部署详解
  • 3步掌握BilibiliDown:你的B站视频音频下载终极解决方案
  • [具身智能-201]:Vibe(意图) Coding 是 2025-2026 年间爆火的一种编程新范式,“用自然语言(人话)指挥 AI 写代码”。
  • 【衢州学院主办,上海交通大学协办 | IET出版(有ISSN号) | 往届两年已完成 EI 、 IEEE Xplore检索 | 大咖组委】第三届人工智能与电力系统国际学术会议(AIPS 2026)
  • 基于企业发展过程的改进型元启发式算法IED:一种高效智能优化策略的探索与应用
  • 解锁Wallpaper Engine资源:RePKG终极指南与完整工作流
  • 10个高效技巧解决RVC变声器常见故障