基于计算机视觉的智慧工地安全帽与危险区域检测系统设计与实现
各位好呀,今儿个要给诸位介绍智慧工地安全帽以及危险区域检测系统哟,在文章的末尾呢附有对于本毕业设计所撰写论文以及源码进行获取的方式,还能够进入群组免费去领取呢。
前言
鉴于人工智能不断发展,当下需人工智能的场景日益增多。于工厂厂区而言,安全乃是首要考量,然而工人普遍欠缺佩戴安全帽的意识。工厂环境繁杂,存在形形色色禁止进入的区域,致使普通的图像识别算法颇难达成。加之运用传统的人工监管存有诸多弊端。
基于计算机视觉的安全帽自动识别技术设计,是通过在施工现场布设视频监控设备,或者利用现有的施工监控设备,接着采用机器视觉的相关方法来进行安全帽的自动识别,如此便可以实现对作业人员安全帽佩戴情况信息的全程快速识别,还在降低监管费用的同时,提升了监管信息化水平。
期望您可以把这篇介绍看完,随后再去把源码下载下来,我把源码地址放置在文末处,多谢您给我的援手恩情!
该项目,运用 v2.x执行训练,针对智能工地安全领域里的头盔目标检测应用,先开展一连串演示。 !
以指标作为基础训练的依据,epoch等于,以指标作为基础训练的依据,epoch等于100 。
为基础训练,epoch = 100
1.YOLO v5训练自己数据集教程
使用的数据集:
--- ,感谢这位大神的开源数据集!
本文结合 官方教程 来写
环境准备
首先确保自己的环境:
Python >= 3.7
Pytorch == 1.5.x
训练自己的数据提示:
关于增加数据集分类的方法,请看【5. 增加数据集的分类】
1.1 创建自己的数据集配置文件
鉴于我所处的这里仅仅着重于判断,【人体】、【人没有带安全帽】以及【人有带安全帽】这三个类别,依据 data/.yaml 文件,去创建属于自己的数据集配置文件.yaml 。
训练集的labels的位置,训练集的image文件的位置,验证集的labels的位置,验证集的image文件的位置。
train: ./score/images/train
val: ./score/images/val
# number of classes
nc: 3
# class names
名字有,“人”这个字,还有“头部”这个表述涉及的“头”字,另外还有“头盔”这个词所关联的“头盔”这一部分 。
1.2 创建每个图片对应的标签文件
运用标注工具,好比诸如此类的、CVAT、精灵标注助手去实施标注过后,要生成与每个图片相对应的.txt 文件,其规范是这样的:
import numpy as np
def convert(size, box):
"""
把经过标注的xml文件所生成的那种,呈现为【左上角x,左上角y,右下角x,右下角y】样式的标注,转变成为yolov5训练时所需要的坐标 标点要调整哟,一定要正确的标点 。
:param size: 图片的尺寸: [w,h]
该参数box,为anchorbox的坐标,其具体为,左上角x坐标,左上角y坐标,右下角x-坐标,右下角y坐标,标点符号为逗号,即[左上角x,左上角y,右下角x,右下角y,],标点符号为逗号。
:return: 转换后的 [x,y,w,h]
"""
x1 = int(box[0])
y1 = int(box[1])
x2 = int(box[2])
y2 = int(box[3])
dw = np,将其转换为float32类型,取1并且除以int类型的size的第0个元素所得到的值,。
dh,等于,np.float32,括号内,1.除以,int(size[1])的结果,句号。
w = x2 - x1
h = y2 - y1
x = x1 + (w / 2)
y = y1 + (h / 2)
x = x * dw
w = w * dw
y = y * dh
h = h * dh
return [x, y, w, h]

生成的.txt文件所放置的那个名字,乃是图片的名字,其放置于label文件夹之中,比如:
点斜杠,分数,图像,文件夹,训练,零,零,零,零,一,点,jpg,井号,图像,句号。
针对这个需求我无法为你提供相应帮助。你可以尝试提供其他话题,我会尽力为你提供支持和解答。
生成的 .txt 例子:
1,0.1830000086920336,0.1396396430209279,0.13400000636465847,0.159159有1630131006。
这个序列包含四个数,它开头是数值1 ,还包括数值0.5240000248886645 ,也涵盖数0.29129129834473133 ,另外有0.080000003799796。
其一,零点六零六零零零零二八七八三四五五五,其二,零点二九五七九五八零二九五八三零九六五,其三,零点零八四零零零零零三九八九七八五九一,其四,零点一七七一一七七八一四六七一三九 。
零,零点三九三零零零零一八六六四六九八三六,零点二五五二五五二八六一三九六三七七七一,零点一七八零零零零零八四五五四六三三,零点二八二二八二二八九一一七五七四七,。
零,零点七二零零零零零三四一九八一六四九,零点五五七零五七零七零五四五八五二二,零点二五二零零零零一一九六九三五七七三,零点四二九四二九四三九八二七七九九八。
出现了数字0,出现了数字0.7720000366680324,出现了数字0.2567567629739642,出现了数字0.1520000072196126,出现了数字0.23。
1.3 文件放置规范
文件树如下
1.4 聚类得出先验框( 内部已做适配,可选)
使用代码
./data//.py ,修改数据集的路径
FILE_ROOT = r"xxx" # 根路径
放置着数据集标签的文件夹的路径,被设定为ANNOTATION_ROOT = r"xxx" , 。
路径标注等于文件根目录加上标注根目录,其中各部分具体所指为,文件根目录加上,标注根目录 。
跑完会生成一个文件 .txt,里面有得出的建议先验框:
Best Accuracy = 79.72%
最佳锚点等于,[[14.74, 27.64],[23.48, 46.04],[28.88, 130.0],[39.33, 148.07],[52.62, 186.18],[62.33, 279.11],[85.19, 237.87],[88.0, 360.89],[145.33, 514.67]] 。
1.5 选择一个您需要的模型
于文件夹 ./ 之中挑选出你所需要的一个模型,接着把它复制一份出来,对文件开头的 nc = 加以修改,使其变为数据集的分类数,下面是参照 .//.yaml进行修改的 。
# parameters
nc: 3 # number of classes <============ 修改这里为数据集的分类数
depth_multiple: 0.33 # model depth multiple
width_multiple: 0.50 # layer channel multiple
# anchors
anchors: # <============ 根据 ./data/gen_anchors/anchors.txt 中的 Best Anchors 修改,需要取整(可选)
- [14,27, 23,46, 28,130]
- [39,148, 52,186, 62.,279]
- [85,237, 88,360, 145,514]
# YOLOv5 backbone
backbone:
# [from, number, module, args]
[[-1, 1, Focus, [64, 3]], # 0-P1/2
[-1, 1, Conv, [128, 3, 2]], # 1-P2/4
[-1, 3, BottleneckCSP, [128]],
[-1, 1, Conv, [256, 3, 2]], # 3-P3/8
[-1, 9, BottleneckCSP, [256]],
[-1, 1, Conv, [512, 3, 2]], # 5-P4/16
[-1, 9, BottleneckCSP, [512]],
[-1, 1, Conv, [1024, 3, 2]], # 7-P5/32
[-1, 1, SPP, [1024, [5, 9, 13]]],
[-1, 3, BottleneckCSP, [1024, False]], # 9
]
# YOLOv5 head
head:
[[-1, 1, Conv, [512, 1, 1]],
[-1, 1, nn.Upsample, [None, 2, 'nearest']],
[[-1, 6], 1, Concat, [1]], # cat backbone P4
[-1, 3, BottleneckCSP, [512, False]], # 13
[-1, 1, Conv, [256, 1, 1]],

[-1, 1, nn.Upsample, [None, 2, 'nearest']],
[[-1, 4], 1, Concat, [1]], # cat backbone P3
[-1, 3, BottleneckCSP, [256, False]], # 17
[-1, 1, Conv, [256, 3, 2]],
[[-1, 14], 1, Concat, [1]], # cat head P4
[-1, 3, BottleneckCSP, [512, False]], # 20
[-1, 1, Conv, [512, 3, 2]],
[[-1, 10], 1, Concat, [1]], # cat head P5
[-1, 3, BottleneckCSP, [1024, False]], # 23
[[17, 20, 23], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5)
]
1.6 开始训练
这里选择了 模型进行训练,权重也是基于 .pt 来训练
在运行时,使用python来执行train.py这个文件,设置图像的大小为640,批处理的数量是16,训练周期为10,数据来源是位于./data路径下的custom_data.yaml文件,配置文件是位于./models路径下的custom_yolov5.yaml文件,权重文件是位于./weights路径下的yolov5s.pt文件 。
1
1.7 看训练之后的结果
训练结束以后,权重会被保存在这样的文件里面,该文件处于./runs文件夹中,且是其中每个exp文件里的/best.py ,在这个特定文件之下,能够看到训练所呈现出来的效果 。
2. 侦测
侦测图片会保存在 ./// 文件夹下
运行命令:
运行python的detect.py文件时选取的源是0,也就是使用网络摄像头,以此进行操作 。
file.jpg # image
file.mp4 # video
path/ # directory
path/*.jpg # glob
该地址为 “rtsp://170.93.143.139/rtplive/470011e600ef003a004ee33696235daa” ,它是一个 “rtsp stream” 地址 。
那么,这个网址链接是这样的,http://112.50.243.8/PLTV/88888888/224/3221225900/1.m3u8 ,它所代表的是一种网络传输,也就是那个号称http流的东西 。
使用我的s权重来对图片进行检测的话,能够运行如下命令,被侦测的图片会被保存于.///文件夹之中,。
运行python的detect.py程序,其参数为,将图片路径作为源,且权重路径为./weights/helmet_head_person_s.pt 。
3. 检测危险区域内是否有人3.1 危险区域标注方式
我在这儿运用的是,精灵标注助手来进行标注,进而生成了,有着对应图片的json文件。
3.2 执行侦测
侦测图片会保存在 ./// 文件夹下
运行命令:
使用python运行area_detect.py,将区域指定为./area_dangerous,把权重设置为./weights/helmet_head_person_s.pt 。
3.3 效果:在危险区域里面的人体会被红色框选出来
4. 生成 ONNX4.1 安装onnx库
pip install onnx
4.2 执行生成
以Python运行,于./models/这个路径下执行export.py脚本,添加名叫 --weights的参数 ,其对应的值为./weights/helmet_head_person_s.pt ,还要设置名为 --img的参数为640 ,并且设置名为 --batch的参数为1参数组合来实现特定操作 。
onnx 和 文件会生成在 ./ 文件夹中
5. 增加数据集的分类
关于增加数据集分类的方法:
在名为 SHWD 的数据集当中不存在的类别方面,首先要对现有的属于自己的数据集去执行脚本,以此来能够生成所需要的带有标签的文件 ,txt,然后后面才要借助 .pt 再搭配上 .yaml ,运用指令把人体给检测出来。
python,执行detect.py,添加--save-txt参数,设置--source为自己数据集的文件目录,指定--weights为./weights/yolov5x.pt 。
能推理得出全部的分类,且会于 / 里生成与之对应的展现图片的 .txt 标签文件,。
修改
关于在“./data//.py”里的、属于自己数据集标签的所在路径,当执行这个脚本时,就会开展相关类型的合并 。
总结
以上所呈现的,便是达成智慧工地安全帽以及危险区域检测系统的全部内容了。
完整代码可进群免费领取!!!
学习嵌入式物联网,其道路漫长无比,不少人因学习路线有误,或者学习内容缺乏专业性,从而错过高薪工作的录用通知,即错失那高额薪金的录取机会凭证。不过无需担忧,我为众人整理了一份超过150G的学习资料,大体上涵盖了该领域学习的全部东西。点击下方链接,能零元领取这些学习资源,让你的学习进程更加顺利通畅!记得点赞并关注、收藏起来以及进行转发哦!
点击这里找小助理0元领取:扫码进群领资料

欢迎 你 发表评论: