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


猜你喜欢
- kmp算法KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt同时发现,因此人们称它为克努特
- 解决方法:先encode再quote。原理:msg.encode('utf-8')是解决中文乱码问题。quote():假如U
- 前言typescript作为未来前端开发的主流框架,在前端开发的过程中也会越来越主要,相信这篇文章会对你有很大的帮助!开发环境搭建创建min
- 采用numpy快速将两个矩阵或数组合并成一个数组:import numpy as np数组a = [[1,2,3],[4,5,6]]b =
- 问题:在数据库脚本开发中,有时需要生成一堆连续数字或者日期,例如yearly report就需要连续数字做年份,例如daily report
- 1、jsp前端<%-- Created by IntelliJ IDEA. User: Lenovo Date: 2020/6/19
- 一、vue3的介绍(一)vue3的简介2020年9月18日发布3.0版本。代号海贼王(One piece)其中耗时两年多、2600次提交、3
- 作者: Alan Pearce原文: Multi-Column Layouts Climb Out of the Box地址: http:/
- 最近我在用梯度下降算法绘制神经网络的数据时,遇到了一些算法性能的问题。梯度下降算法的代码如下(伪代码):def gradient_desce
- 本文实例为大家分享了Python实现k-means算法的具体代码,供大家参考,具体内容如下这也是周志华《机器学习》的习题9.4。 数据集是西
- 这篇文章主要介绍了python matplotlib饼状图参数及用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考
- 效果图:代码如下:<!DOCTYPE html><html lang="en"><head
- 一、为什么要搭建爬虫代理池在众多的网站防爬措施中,有一种是根据ip的访问频率进行限制,即在某一时间段内,当某个ip的访问次数达到一定的阀值时
- 由于下学期报了一个Python的入门课程所以寒假一直在自己摸索,毕竟到时候不能挂科,也是水水学分最近心血来潮打算试试爬一下百度翻译肝了一天终
- 【摘 要】 我只是提供我几个我认为有助于提高写高性能的asp.net应用程序的技巧,本文提到的提高asp.net性能的技巧只是一个起步,更多
- 本文实例讲述了Python实现基于PIL和tesseract的验证码识别功能。分享给大家供大家参考,具体如下:之前搞这个搞了一段时间,后面遇
- 一、前言在开展接口测试或者是接口面试的过程中,我们会发现很多接口需要依赖前面的接口,需要我们动态从前面的接口返回中提取数据,也就是我们通常说
- 突然有个想法,不知道是不是首创:用"表情符号"做植入广告. 目前的表情符号 "黄色小圆脸"系列可以说
- 在java中一个hashCode算法,可以用来计算一个字符串的hash值,今天一个朋友突然问俺能不能在js中计算hashCode,要求和ja
- 本文实例为大家分享了python实现图片转字符画的具体代码,供大家参考,具体内容如下源码(注释很详细):# -*- coding=utf-8