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

基于yolov5的不同颜色安全帽检测系统python源码+onnx模型+评估指标曲线+精美GUI界面

【算法介绍】

基于YOLOv5的不同颜色安全帽检测系统是一种利用深度学习技术,特别是YOLOv5目标检测算法的创新应用。该系统旨在提高施工现场的安全管理水平,通过实时识别和检测工人佩戴的安全帽颜色,实现对安全规范的精准监督。

YOLOv5作为一种先进的单阶段目标检测算法,以其高效的速度和较高的精度著称。在安全帽检测系统中,YOLOv5通过卷积神经网络(CNN)进行图像特征提取,并结合锚点、边界框和分类器来检测并识别不同颜色的安全帽。

系统首先收集大量带有标注的不同颜色安全帽图片作为数据集,然后使用YOLOv5算法对模型进行训练。训练完成后,系统能够实时分析摄像头采集的图像,判断工人是否佩戴安全帽,并进一步识别安全帽的颜色。对于未佩戴安全帽或佩戴颜色不符合规定要求的工人,系统将及时发出警报并记录相关数据。

该系统不仅提高了安全监管的效率和准确性,还减少了人工巡查的人力成本。同时,通过实时监控和数据分析,系统能够帮助施工单位更好地了解安全帽佩戴情况,从而制定更有效的安全管理措施。总的来说,基于YOLOv5的不同颜色安全帽检测系统是提升施工现场安全管理水平的重要工具。

【效果展示】

【测试环境】

windows10
anaconda3+python3.8
torch==1.9.0+cu111
yolov5依赖模块

【模型可以检测出类别】

blue
none
red
white
yellow

【训练信息】

参数
训练集图片数2213
验证集图片数633
训练map85.8%
训练精度(Precision)89.6%
训练召回率(Recall)80.2%

验证集每个类别精度统计

类别

精度MAP0.5(单位:%)

all

86

blue

94

none

88

red

68

white

89

yellow

90

【训练数据集】

[数据集][目标检测]不同颜色的安全帽检测数据集VOC+YOLO格式7574张5类别-CSDN博客

【部分实现源码】

class Ui_MainWindow(QtWidgets.QMainWindow):signal = QtCore.pyqtSignal(str, str)def setupUi(self):self.setObjectName("MainWindow")self.resize(1280, 728)self.centralwidget = QtWidgets.QWidget(self)self.centralwidget.setObjectName("centralwidget")self.weights_dir = './weights'self.picture = QtWidgets.QLabel(self.centralwidget)self.picture.setGeometry(QtCore.QRect(260, 10, 1010, 630))self.picture.setStyleSheet("background:black")self.picture.setObjectName("picture")self.picture.setScaledContents(True)self.label_2 = QtWidgets.QLabel(self.centralwidget)self.label_2.setGeometry(QtCore.QRect(10, 10, 81, 21))self.label_2.setObjectName("label_2")self.cb_weights = QtWidgets.QComboBox(self.centralwidget)self.cb_weights.setGeometry(QtCore.QRect(10, 40, 241, 21))self.cb_weights.setObjectName("cb_weights")self.cb_weights.currentIndexChanged.connect(self.cb_weights_changed)self.label_3 = QtWidgets.QLabel(self.centralwidget)self.label_3.setGeometry(QtCore.QRect(10, 70, 72, 21))self.label_3.setObjectName("label_3")self.hs_conf = QtWidgets.QSlider(self.centralwidget)self.hs_conf.setGeometry(QtCore.QRect(10, 100, 181, 22))self.hs_conf.setProperty("value", 25)self.hs_conf.setOrientation(QtCore.Qt.Horizontal)self.hs_conf.setObjectName("hs_conf")self.hs_conf.valueChanged.connect(self.conf_change)self.dsb_conf = QtWidgets.QDoubleSpinBox(self.centralwidget)self.dsb_conf.setGeometry(QtCore.QRect(200, 100, 51, 22))self.dsb_conf.setMaximum(1.0)self.dsb_conf.setSingleStep(0.01)self.dsb_conf.setProperty("value", 0.25)self.dsb_conf.setObjectName("dsb_conf")self.dsb_conf.valueChanged.connect(self.dsb_conf_change)self.dsb_iou = QtWidgets.QDoubleSpinBox(self.centralwidget)self.dsb_iou.setGeometry(QtCore.QRect(200, 160, 51, 22))self.dsb_iou.setMaximum(1.0)self.dsb_iou.setSingleStep(0.01)self.dsb_iou.setProperty("value", 0.45)self.dsb_iou.setObjectName("dsb_iou")self.dsb_iou.valueChanged.connect(self.dsb_iou_change)self.hs_iou = QtWidgets.QSlider(self.centralwidget)self.hs_iou.setGeometry(QtCore.QRect(10, 160, 181, 22))self.hs_iou.setProperty("value", 45)self.hs_iou.setOrientation(QtCore.Qt.Horizontal)self.hs_iou.setObjectName("hs_iou")self.hs_iou.valueChanged.connect(self.iou_change)self.label_4 = QtWidgets.QLabel(self.centralwidget)self.label_4.setGeometry(QtCore.QRect(10, 130, 72, 21))self.label_4.setObjectName("label_4")self.label_5 = QtWidgets.QLabel(self.centralwidget)self.label_5.setGeometry(QtCore.QRect(10, 210, 72, 21))self.label_5.setObjectName("label_5")self.le_res = QtWidgets.QTextEdit(self.centralwidget)self.le_res.setGeometry(QtCore.QRect(10, 240, 241, 400))self.le_res.setObjectName("le_res")self.setCentralWidget(self.centralwidget)self.menubar = QtWidgets.QMenuBar(self)self.menubar.setGeometry(QtCore.QRect(0, 0, 1110, 30))self.menubar.setObjectName("menubar")self.setMenuBar(self.menubar)self.statusbar = QtWidgets.QStatusBar(self)self.statusbar.setObjectName("statusbar")self.setStatusBar(self.statusbar)self.toolBar = QtWidgets.QToolBar(self)self.toolBar.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon)self.toolBar.setObjectName("toolBar")self.addToolBar(QtCore.Qt.TopToolBarArea, self.toolBar)self.actionopenpic = QtWidgets.QAction(self)icon = QtGui.QIcon()icon.addPixmap(QtGui.QPixmap(":/images/1.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)self.actionopenpic.setIcon(icon)self.actionopenpic.setObjectName("actionopenpic")self.actionopenpic.triggered.connect(self.open_image)self.action = QtWidgets.QAction(self)icon1 = QtGui.QIcon()icon1.addPixmap(QtGui.QPixmap(":/images/2.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)self.action.setIcon(icon1)self.action.setObjectName("action")self.action.triggered.connect(self.open_video)self.action_2 = QtWidgets.QAction(self)icon2 = QtGui.QIcon()icon2.addPixmap(QtGui.QPixmap(":/images/3.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)self.action_2.setIcon(icon2)self.action_2.setObjectName("action_2")self.action_2.triggered.connect(self.open_camera)self.actionexit = QtWidgets.QAction(self)icon3 = QtGui.QIcon()icon3.addPixmap(QtGui.QPixmap(":/images/4.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)self.actionexit.setIcon(icon3)self.actionexit.setObjectName("actionexit")self.actionexit.triggered.connect(self.exit)self.toolBar.addAction(self.actionopenpic)self.toolBar.addAction(self.action)self.toolBar.addAction(self.action_2)self.toolBar.addAction(self.actionexit)self.retranslateUi()QtCore.QMetaObject.connectSlotsByName(self)self.init_all()

【使用步骤】

使用步骤:
(1)首先根据官方框架https://github.com/ultralytics/yolov5安装教程安装好yolov5环境,并安装好pyqt5
(2)切换到自己安装的yolov5环境后,并切换到源码目录,执行python main.py即可运行启动界面,进行相应的操作即可

【提供文件】

python源码
yolov5s.onnx模型(不提供pytorch模型)
训练的map,P,R曲线图(在weights\results.png)
测试图片(在test_img文件夹下面)

【源码下载地址】

https://download.csdn.net/download/FL1623863129/89770976

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Virtuoso服务在centos中自动停止的原因分析及解决方案
  • js中的 赋值 浅拷贝 和 深拷贝 详细解读
  • Knowledge Graph Large Language Model (KG-LLM) for Link Prediction
  • QT应用开发的C++功能框架以及实战入门开发项目场景
  • 智慧交通,智能消防系统助力高铁站安全
  • [Linux]自定义shell详解
  • SpringBoot 基于 Vue 的地方美食分享网站
  • 秦时明月6.2魔改版+GM工具+虚拟机一键端
  • 图片压缩格式自适应,真的很省流量!
  • 鸿蒙OpenHarmony【轻量系统内核通信机制(消息队列)】子系统开发
  • --芯片测试--
  • ARM架构下的多核处理器设计?
  • 百度移动刷下拉词工具:快速出下拉词的技术分析
  • 如何来写一份开题报告?
  • docker部署Stirling-PDF
  • Google 是如何开发 Web 框架的
  • IDEA 插件开发入门教程
  • java多线程
  • Nodejs和JavaWeb协助开发
  • PHP那些事儿
  • SegmentFault 2015 Top Rank
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 那些年我们用过的显示性能指标
  • 你不可错过的前端面试题(一)
  • 微服务框架lagom
  • 想使用 MongoDB ,你应该了解这8个方面!
  • 与 ConTeXt MkIV 官方文档的接驳
  • 阿里云ACE认证之理解CDN技术
  • 大数据全解:定义、价值及挑战
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • (四)Android布局类型(线性布局LinearLayout)
  • (四)事件系统
  • .Net - 类的介绍
  • .net core 6 集成和使用 mongodb
  • .NET Core 版本不支持的问题
  • .NET MVC第三章、三种传值方式
  • .NET 依赖注入和配置系统
  • .set 数据导入matlab,设置变量导入选项 - MATLAB setvaropts - MathWorks 中国
  • [AIGC] 深入浅出 Python中的`enumerate`函数
  • [Android Pro] Notification的使用
  • [CUDA手搓]从零开始用C++ CUDA搭建一个卷积神经网络(LeNet),了解神经网络各个层背后算法原理
  • [FTP]pureftp部署和优化
  • [GDMEC-无人机遥感研究小组]无人机遥感小组-000-数据集制备
  • [git] windows系统安装git教程和配置
  • [HTML]HTML5实现可编辑表格
  • [I2C]I2C通信协议详解(一) --- 什么是I2C
  • [JavaScript]如何讓IE9, IE8, IE7, IE6關閉視窗時不彈出對話訊息
  • [JS入门到进阶] 7条关于 async await 的使用口诀,新学 async await?背10遍,以后要考!快收藏
  • [Linux#47][网络] 网络协议 | TCP/IP模型 | 以太网通信
  • [NISACTF 2022]easyssrf
  • [P4V]Perforce(P4V)使用教程
  • [POJ 1915] Knight Moves
  • [SoftGrid 系列] Microsoft SoftGrid Server 安装篇
  • [SpringBoot笔记] SpringBoot-01-快速入门案例