YOLOv5构建安全帽检测和识别系统使用详解
作者:A等天晴 发布时间:2023-11-30 14:45:00
引言
在这篇文章中,我将介绍如何使用YOLOv5构建一个佩戴安全帽检测和识别系统。这个系统可以实时检测图像上人物是否有未佩戴安全帽,并及时进行警告。文章将介绍系统的设计过程,包括YOLOv5的训练、测试代码以及实际部署思路。
准备工作
首先,我们需要收集和准备数据集。数据集应包含各种场景、角度和光照条件下戴安全帽和不戴安全帽的员工照片。我们可以从互联网上收集这些图片,也可以在实际工地上拍摄。收集到足够数量的图片后,我们需要对它们进行标注。标注工具如labelImg可以方便地完成这一任务。完成标注后,我们需要将数据集划分为训练集和验证集。
安装YOLOv5
要开始训练模型,我们首先需要安装YOLOv5。可以通过以下命令安装所需的依赖:
git clone https://github.com/ultralytics/yolov5.git
cd yolov5
pip install -r requirements.txt
训练模型
为了训练模型,我们需要准备一个配置文件,其中包含训练参数和模型结构。在YOLOv5的models
目录下,我们可以找到预定义的一些配置文件,如yolov5s.yaml
。我们可以根据需要修改这些文件,以适应我们的任务。
接下来,我们需要修改YOLOv5的数据配置文件,以指定我们的数据集路径。在data
目录下,创建一个名为helmet_detection.yaml
的文件,内容如下:
train: ../dataset/train/
val: ../dataset/val/
nc: 2
names: ['no_helmet', 'helmet']
这里,train
和val
分别表示训练集和验证集的路径,nc
表示类别数量,names
表示类别名称。
现在,我们可以开始训练模型了。在命令行中,运行以下命令:
python train.py --img 640 --batch 16 --epochs 100 --data data/helmet_detection.yaml --cfg models/yolov5s.yaml --weights yolov5s.pt
这个命令将使用YOLOv5s配置文件训练一个安全帽检测模型。我们可以根据硬件和数据集大小调整批次大小和训练轮数。训练过程中,模型的性能指标和损失函数值将在命令行输出。同时,训练过程中的可视化结果将保存在runs/train
目录下。
训练完成后,我们可以在runs/train/exp/weights
目录下找到最终的模型权重文件best.pt
。
测试模型
为了测试我们的模型,我们可以使用YOLOv5提供的detect.py
脚本。运行以下命令:
python detect.py --source ../dataset/val/ --weights runs/train/exp/weights/best.pt --conf 0.5
这个命令将在验证集上运行我们的模型,并将检测结果保存在runs/detect
目录下。我们可以查看这些结果,以评估模型在实际场景中的表现。
实际部署
现在我们已经训练好了一个安全帽检测模型,接下来我们需要将其部署到实际场景中。我们可以使用Python和OpenCV库构建一个实时监控系统。以下是一个简单的示例:
import cv2
from yolov5 import YOLOv5
def main():
# 加载模型
model = YOLOv5('runs/train/exp/weights/best.pt')
# 打开摄像头
cap = cv2.VideoCapture(0)
while True:
# 读取摄像头画面
ret, frame = cap.read()
# 检测安全帽
results = model.detect(frame)
# 在画面上绘制检测框
for result in results:
x, y, w, h, cls, conf = result
cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
cv2.putText(frame, f'{cls}: {conf:.2f}', (x, y), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)
# 显示画面
cv2.imshow('Helmet Detection', frame)
# 按'q'键退出
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
if __name__ == '__main__':
main()
这个示例将打开计算机的摄像头,并实时检测画面中的安全帽。检测结果将以边框和类别标签的形式显示在画面上。
来源:https://juejin.cn/post/7216915438298775610
猜你喜欢
- 这篇文章主要介绍了Python函数参数类型及排序原理总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的
- 解决方案在安装包的路径的../database/state/cvu/cvu_prereq.xml文件尾部添加如下:<OPERATING
- 有时候要用Javascript输常用的字符,比如每个页面都要有的脚注。这里提供一个转换脚本:将HTML自动转为JS代码<script&
- 目前两个客户端扩展库连接超时可以设置选项来操作,比如mysqli: <?php //创建对象 $mysqli = mysqli_ini
- 如题:在python的函数调用中需要记录时间,下面是记录毫秒时间的方法。import datetimeimport timet1 = dat
- 实例如下所示:# -*- coding: UTF-8 -*-from urllib import requestif __name__ ==
- Python从MySQL数据库中导出csv文件处理csv文件导入MySQL数据库import pymysqlimport csvimport
- MySQL目前不支持列的Default 为函数的形式,如达到你某列的默认值为当前更新日期与时间的功能,你可以使用TIMESTAMP列类型下面
- 案例故事:百度网盘非会员大量上传文件,会弹出:“上传文件数量超出500个现在,开通超级会员后可继续上传”,其实是限制拖入500张相片,并非限
- 首先我是用pycharm完成的,要确定命令行和界面里是同一个环境。如果不确定可以设置再add在新增加的环境里看现在是哪个环境,只要选择已有的
- 1、并双击新建工程窗口中ActiveX DLL图标,VB将自动为项目添加一个类模块,并将该项目类型设置为ActiveX DLL。2、在属性窗
- 大家都知道,在SQL脚本中设置多字段做关键字相对比较简单,例:primary key(id1,id2) ,但用脚本建数据库就比较麻烦了。那么
- python提取特定时间段内的数据尝试一下:data['Date'] = pd.to_datetime(data['
- 功能描述:打开一个网站的网页,过5分钟不动作,就会锁定页面,隐藏内容容器,显示一个容器用于输入密码,输入正确的密码来解锁。锁定后即使用户刷新
- 1、将python程序打包成单文件(使用 -F 参数)后,尝试运行外部文件却提示找不到的问题当你将python程序打包成单文件(使用 -F
- 一、PL/SQL出现的目的 结构化查询语言(Structured Query Language,简称SQL)是用来访问关系型数据库一种通用语
- 如何剔除HTML标识?这里没有使用正则表达式来去除,当然大家用正则"<.+?>"也可以实现这个功能只留下干净
- 如下所示:function makeAcquire($nUsers,$nAwards) { &
- SQL语句参考及记录集对象详解1. ASP与Access数据库连接:2. ASP与SQL数据库连接:建立记录集对象:set rs=serve
- Tensorflow二维、三维、四维矩阵运算(矩阵相乘,点乘,行/列累加)1. 矩阵相乘 根据矩阵相乘的匹配原则,左乘矩阵的列数要等于右乘矩