计算机视觉:基于python安全帽检测系统 深度学习 Yolo模型 PySide6界面 安全检测识别 源码(建议收藏)✅
博主介绍:✌全网粉丝50W+,前互联网大厂软件研发、集结硕博英豪成立软件开发工作室,专注于计算机相关专业项目实战6年之久,累计开发项目作品上万套。凭借丰富的经验与专业实力,已帮助成千上万的学生顺利毕业,选择我们,就是选择放心、选择安心毕业✌
> 🍅想要获取完整文章或者源码,或者代做,拉到文章底部即可与我联系了。🍅
2、大数据、计算机专业选题(Python/Java/大数据/深度学习/机器学习)(建议收藏)✅
1、项目介绍
技术栈:
python语言、YoloV5模型、PySide6界面、注册登录、训练集测试集
支持:上传图片、上传视频、摄像头检测
1、安全帽数据集与训练过程
这里我们使用的安全帽识别数据集,包含训练集910张图片,验证集304张图片,共计1214张图片。部分数据集图片及其标注信息如下图所示。
每张图像均提供了图像类标记信息,图像中安全帽的bounding box,安全帽的关键part信息,以及安全帽的属性信息,数据集并解压后得到如下的图片。
在python环境配置完成后,我们运行train.py进行训练。YOLOv5训练时主要包含三个方面的损失:矩形框损失(box_loss)、置信度损失(obj_loss)和分类损失(cls_loss),下图为博主训练安全帽识别的模型训练曲线图。
我们通过设定不同的置信度的阈值,可以得到在模型在不同的阈值下所计算出的p值和r值,一般情况下,p值和r值是负相关的,绘制出来可以得到如下图所示的曲线,其中曲线的面积我们称AP,目标检测模型中每种目标可计算出一个AP值,对所有的AP值求平均则可以得到模型的mAP值。
以PR-curve为例,可以看到我们的模型在验证集上的均值平均准确率为0.910。
2、项目界面
(1)界面

(2)安全帽检测识别

(3)安全帽检测识别

(4)安全帽检测识别

(5)安全帽检测识别

(6)注册登录

3、项目说明
安全帽检测系统用于自动化监测安全帽佩戴情况,在需要佩戴安全帽的场合自动安全提醒,实现图片、视频和摄像头等多种形式监测。在介绍算法原理的同时,给出Python的实现代码、训练数据集,以及PyQt的UI界面。安全帽检测系统主要用于自动化监测安全帽佩戴情况,检测佩戴安全帽的数目、位置、预测置信度等;可采取图片、视频和摄像头等多种形式监测佩戴情况,并实时显示标记和结果;博文提供了完整的Python代码和使用教程,适合新入门的朋友参考。
近年来,随着计算机视觉的飞速发展,越来越多的目标检测算法被应用到生活中,对人体安全的研究尤为有价值。建筑业是劳动密集型行业,工作环境复杂,安全事故频发。据《国家统计年鉴》统计,我国建筑业每年发生的事故数量高达600起,每年死亡人数超过700人。坠落的物体是最致命的,研究表明,所有建筑工人因脑外伤而死亡的人数中有24%是由高空物体坠落造成的。由于它直接威胁到工人的头部,而头部是最重要的身体部位,因此头盔佩戴检测在现实生活场景中具有重要意义。
计算机视觉的快速发展应用在各个方面,具有广阔的前景,尤其是在安全工程方面。在建筑工地,头盔是保护工人生命的重要工具,而实际上,由于没有戴头盔,事故时有发生。为了解决这个问题,基于深度学习的安全帽检测系统以最及时的方式进行告警,同时最大限度降低误报和漏报现象,极大的节约了生产成本,提高了工作效率。
4、核心代码
def predict(img):
img = torch.from_numpy(img).to(device)
img = img.half() if half else img.float()
img /= 255.0
if img.ndimension() == 3:
img = img.unsqueeze(0)
t1 = time_synchronized()
pred = model(img, augment=False)[0]
pred = non_max_suppression(pred, opt.conf_thres, opt.iou_thres, classes=opt.classes,
agnostic=opt.agnostic_nms)
t2 = time_synchronized()
InferNms = round((t2 - t1), 2)
return pred, InferNms
if __name__ == '__main__':
# video_path = 0
video_path = "UI_rec/test_/test.mp4"
# 初始化视频流
vs = cv2.VideoCapture(video_path)
(W, H) = (None, None)
frameIndex = 0 # 视频帧数
try:
prop = cv2.CAP_PROP_FRAME_COUNT
total = int(vs.get(prop))
# print("[INFO] 视频总帧数:{}".format(total))
# 若读取失败,报错退出
except:
print("[INFO] could not determine # of frames in video")
print("[INFO] no approx. completion time can be provided")
total = -1
fourcc = cv2.VideoWriter_fourcc(*'XVID')
ret, frame = vs.read()
vw = frame.shape[1]
vh = frame.shape[0]
print("[INFO] 视频尺寸:{} * {}".format(vw, vh))
output_video = cv2.VideoWriter("./results.avi", fourcc, 20.0, (vw, vh)) # 处理后的视频对象
# 遍历视频帧进行检测
while True:
# 从视频文件中逐帧读取画面
(grabbed, image) = vs.read()
# 若grabbed为空,表示视频到达最后一帧,退出
if not grabbed:
print("[INFO] 运行结束...")
output_video.release()
vs.release()
exit()
# 获取画面长宽
if W is None or H is None:
(H, W) = image.shape[:2]
image = cv2.resize(image, (850, 500))
img0 = image.copy()
img = letterbox(img0, new_shape=imgsz)[0]
img = np.stack(img, 0)
img = img[:, :, ::-1].transpose(2, 0, 1) # BGR to RGB, to 3x416x416
img = np.ascontiguousarray(img)
pred, useTime = predict(img)
det = pred[0]
p, s, im0 = None, '', img0
if det is not None and len(det): # 如果有检测信息则进入
det[:, :4] = scale_coords(img.shape[1:], det[:, :4], im0.shape).round() # 把图像缩放至im0的尺寸
number_i = 0 # 类别预编号
detInfo = []
for *xyxy, conf, cls in reversed(det): # 遍历检测信息
c1, c2 = (int(xyxy[0]), int(xyxy[1])), (int(xyxy[2]), int(xyxy[3]))
# 将检测信息添加到字典中
detInfo.append([names[int(cls)], [c1[0], c1[1], c2[0], c2[1]], '%.2f' % conf])
number_i += 1 # 编号数+1
label = '%s %.2f' % (names[int(cls)], conf)
# 画出检测到的目标物
plot_one_box(image, xyxy, label=label, color=colors[int(cls)])
# 实时显示检测画面
cv2.imshow('Stream', image)
image = cv2.resize(image, (vw, vh))
output_video.write(image) # 保存标记后的视频
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# print("FPS:{}".format(int(0.6/(end-start))))
frameIndex += 1
🍅✌感兴趣的可以先收藏起来,点赞关注不迷路,想学习更多项目可以查看主页,大家在毕设选题,项目编程以及论文编写等相关问题都可以给我留言咨询,希望可以帮助同学们顺利毕业!🍅✌
5、源码获取方式
🍅由于篇幅限制,获取完整文章或源码、代做项目的,拉到文章底部即可看到个人联系方式。🍅
点赞、收藏、关注,不迷路,下方查看👇🏻获取联系方式👇🏻
更多推荐
所有评论(0)