基于YOLOv8的施工安全帽及安全背心检测

2023-10-11 10:36

本文主要是介绍基于YOLOv8的施工安全帽及安全背心检测,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目标检测是一项基本的计算机视觉任务。 另一方面,YOLO(You Only Look Once)是一种流行的目标检测模型,以其速度和准确性而闻名。 涉及对象检测的用例非常多样化。 其中之一是建筑工地安全。 建筑工地经理、安全官员或监管机构可以使用它来监控并确保工人遵守安全协议,例如穿戴适当的个人防护装备 (PPE:Personal Protective Equipment)。

在这里插入图片描述

推荐:用 NSDT编辑器 快速搭建可编程3D场景

在这篇博文中,我们将探讨如何应用YOLO算法实现工人是否使用口罩、安全背心和安全帽的检测。 该模型可以成为监控和确保工人遵守安全协议的便捷方法。 本文相关的源代码可以从这个Github仓库下载。

1、下载数据集

首先,我们可以从此链接下载数据集:

在这里插入图片描述

点击下载按钮后,选择YOLOv8格式:

在这里插入图片描述

在弹出的对话框中选中下载zip到本机,然后继续:
在这里插入图片描述

数据集下载完成后,现在我们用新数据集训练YOLO。 就这么简单。

2、训练YOLOv8模型

打开Google Colab,可以将数据集上传到 Google Drive,然后在Colab中挂载。接下来我们按如下方式在 Google Colab 中训练模型。

在运行任何脚本之前,请确保下载正确的包。 可以运行以下命令来执行此操作:

!pip install ultralytics
from ultralytics import YOLO
cd /content

该命令开始训练 YOLO:

!yolo task=detect mode=train model=yolov8l.pt data='/content/drive/MyDrive/YoloDataset/Construction Site Safety.v30-raw-images_latestversion.yolov8/data.yaml' epochs=10

注意:数据集位于我的 Google Drive 中的以下路径:drive/MyDrive/YoloDataset/Construction Site Safety.v30-raw-images_latestversion.yolov8

模型训练完成后,你可以从目录下载 best.pt,如下所示:

在这里插入图片描述

3、设置环境

在深入实施之前,需要先设置开发环境:

安装必要的库:首先安装所需的库,包括 ultralytics、YOLO、OpenCV 和 math :

from ultralytics import YOLO
import cv2
import math
from helper import create_video_writer

注意:helper.py 仅用于以视频格式保存输出,可以从这个 github仓库下载。

4、Pycharm实现

查看选择视频 (ppe-3.mp4) 和 best.pt 。 此实现的输出保存在 ConstructionSiteSafetyOutput.mp4 中。

cap = cv2.VideoCapture('videos/ppe-3.mp4')
writer = create_video_writer(cap, "ConstructionSiteSafetyOutput.mp4")
model = YOLO("best.pt")

这里我们有分类的名称,当下载数据集时,我们可以在 data.yaml 中找到它们。

classNames = ['Excavator', 'Gloves', 'Hardhat', 'Ladder', 'Mask', 'NO-Hardhat', 'NO-Mask', 'NO-Safety Vest','Person', 'SUV', 'Safety Cone', 'Safety Vest', 'bus', 'dump truck', 'fire hydrant', 'machinery','mini-van', 'sedan', 'semi', 'trailer', 'truck and trailer', 'truck', 'van', 'vehicle', 'wheel loader']

在继续执行过程中,如果检测到“NO-Hardhat”、“NO-Safety Vest”和“NO-Mask”三个类别中的任何一个,它将以红色绘制边界框,但如果工人使用口罩 、安全帽或安全背心,绘制绿色边界框。

myColor = (0, 0, 255)
while True:success, img = cap.read()results = model(img, stream=True)for r in results:boxes = r.boxesfor box in boxes:# Bounding Boxx1, y1, x2, y2 = box.xyxy[0]x1, y1, x2, y2 = int(x1), int(y1), int(x2), int(y2)w, h = x2 - x1, y2 - y1# Confidenceconf = math.ceil((box.conf[0] * 100)) / 100# Class Namecls = int(box.cls[0])currentClass = classNames[cls]print(currentClass)if conf > 0.5:if currentClass =='NO-Hardhat' or currentClass =='NO-Safety Vest' or currentClass == "NO-Mask":myColor = (0, 0,255)elif currentClass =='Hardhat' or currentClass =='Safety Vest' or currentClass == "Mask":myColor =(0,255,0)else:myColor = (255, 0, 0)image = cv2.putText(img, f'{classNames[cls]}', (x1, y1), cv2.FONT_HERSHEY_SIMPLEX,1, (255, 0, 0), 2, cv2.LINE_AA)cv2.rectangle(img, (x1, y1), (x2, y2), myColor, 3)cv2.imshow("Image", img)writer.write(img)if cv2.waitKey(1) == ord("q"):break
cap.release()
writer.release()
cv2.destroyAllWindows()

图像格式的输出结果如下图所示:
在这里插入图片描述

视频格式的输出结果可以查看这个视频:
在这里插入图片描述


原文链接:基于YOLOv8的安全帽检测 — BimAnt

这篇关于基于YOLOv8的施工安全帽及安全背心检测的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/187446

相关文章

Nginx安全防护的多种方法

《Nginx安全防护的多种方法》在生产环境中,需要隐藏Nginx的版本号,以避免泄漏Nginx的版本,使攻击者不能针对特定版本进行攻击,下面就来介绍一下Nginx安全防护的方法,感兴趣的可以了解一下... 目录核心安全配置1.编译安装 Nginx2.隐藏版本号3.限制危险请求方法4.请求限制(CC攻击防御)

Linux系统性能检测命令详解

《Linux系统性能检测命令详解》本文介绍了Linux系统常用的监控命令(如top、vmstat、iostat、htop等)及其参数功能,涵盖进程状态、内存使用、磁盘I/O、系统负载等多维度资源监控,... 目录toppsuptimevmstatIOStatiotopslabtophtopdstatnmon

Java 线程安全与 volatile与单例模式问题及解决方案

《Java线程安全与volatile与单例模式问题及解决方案》文章主要讲解线程安全问题的五个成因(调度随机、变量修改、非原子操作、内存可见性、指令重排序)及解决方案,强调使用volatile关键字... 目录什么是线程安全线程安全问题的产生与解决方案线程的调度是随机的多个线程对同一个变量进行修改线程的修改操

C++ 检测文件大小和文件传输的方法示例详解

《C++检测文件大小和文件传输的方法示例详解》文章介绍了在C/C++中获取文件大小的三种方法,推荐使用stat()函数,并详细说明了如何设计一次性发送压缩包的结构体及传输流程,包含CRC校验和自动解... 目录检测文件的大小✅ 方法一:使用 stat() 函数(推荐)✅ 用法示例:✅ 方法二:使用 fsee

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间

Java中常见队列举例详解(非线程安全)

《Java中常见队列举例详解(非线程安全)》队列用于模拟队列这种数据结构,队列通常是指先进先出的容器,:本文主要介绍Java中常见队列(非线程安全)的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一.队列定义 二.常见接口 三.常见实现类3.1 ArrayDeque3.1.1 实现原理3.1.2

使用Python实现IP地址和端口状态检测与监控

《使用Python实现IP地址和端口状态检测与监控》在网络运维和服务器管理中,IP地址和端口的可用性监控是保障业务连续性的基础需求,本文将带你用Python从零打造一个高可用IP监控系统,感兴趣的小伙... 目录概述:为什么需要IP监控系统使用步骤说明1. 环境准备2. 系统部署3. 核心功能配置系统效果展

JAVA保证HashMap线程安全的几种方式

《JAVA保证HashMap线程安全的几种方式》HashMap是线程不安全的,这意味着如果多个线程并发地访问和修改同一个HashMap实例,可能会导致数据不一致和其他线程安全问题,本文主要介绍了JAV... 目录1. 使用 Collections.synchronizedMap2. 使用 Concurren

Python从零打造高安全密码管理器

《Python从零打造高安全密码管理器》在数字化时代,每人平均需要管理近百个账号密码,本文将带大家深入剖析一个基于Python的高安全性密码管理器实现方案,感兴趣的小伙伴可以参考一下... 目录一、前言:为什么我们需要专属密码管理器二、系统架构设计2.1 安全加密体系2.2 密码强度策略三、核心功能实现详解

最新Spring Security实战教程之Spring Security安全框架指南

《最新SpringSecurity实战教程之SpringSecurity安全框架指南》SpringSecurity是Spring生态系统中的核心组件,提供认证、授权和防护机制,以保护应用免受各种安... 目录前言什么是Spring Security?同类框架对比Spring Security典型应用场景传统