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

news2024/10/5 3:20:16

目标检测是一项基本的计算机视觉任务。 另一方面,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.boxes
        for box in boxes:
            # Bounding Box
            x1, y1, x2, y2 = box.xyxy[0]
            x1, y1, x2, y2 = int(x1), int(y1), int(x2), int(y2)
            w, h = x2 - x1, y2 - y1

            # Confidence
            conf = math.ceil((box.conf[0] * 100)) / 100
            # Class Name
            cls = 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1077408.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

变量提升的常见情况总结

什么叫变量提升? 把当前上下文中带有var(提升声明)/function(提升声明定义)进行提升的声明或者定义。变量提升是将变量声明提升到它所在作用域的最开始的部分。 全局上下文中:基于var/function声明的变量,也相当于给window设置了对应的属性。 实例 1 var t 1;…

基于若依ruoyi-nbcio支持flowable流程增加自定义业务表单(三)

之前自定义业务表单只能关联自定义业务的流程应用类型,所以需要根据这个进行选择与显示 1、ProcessQuery 参数增加appType public class ProcessQuery {/*** 流程标识*/private String processKey;/*** 流程名称*/private String processName;/*** 流程分类*/priv…

2023年司钻(钻井)证模拟考试题库及司钻(钻井)理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2023年司钻(钻井)证模拟考试题库及司钻(钻井)理论考试试题是由安全生产模拟考试一点通提供,司钻(钻井)证模拟考试题库是根据司钻&…

ES知识点全面整理

● 我们从很多年前就知道 ES6, 也就是官方发布的 ES2015 ● 从 2015 年开始, 官方觉得大家命名太乱了, 所以决定以年份命名 ● 但是大家还是习惯了叫做 ES6, 不过这不重要 ● 重要的是, ES6 关注的人非常多, 大家也会主动去关注 ● 但是从 2016 年以后, 每年官方都会出现新…

Mac电脑交互式原型设计 Axure RP 8汉化最新 for mac

Axure RP 8是一款专业且快速的原型设计工具,主要用于定义需求、规格、设计功能和界面。这款工具主要适用于用户体验设计师、交互设计师、业务分析师、信息架构师、可用性专家和产品经理等职业。 Axure RP 8的主要特性包括能够快速设计出应用软件或Web网站的线框图、…

linux_三剑客(grep,sed,awk)

前言: Bash:是一个命令处理器,运行在文本窗口中,并能执行用户直接输入的命令。 Bash还能从文件中读取Linux命令,称之为脚本。 Bash支持通配符,管道,命令替换,条件判断等逻辑控制语句。 快捷…

使用gpio子系统实现按键驱动(二)

一,gpio_keys.c介绍 Linux内核下的drivers/input/keyboard/gpio_keys.c实现了一个体系无关的GPIO按键驱动,使用此按键驱动,只需要在设备树gpio-key节点添加需要的按键子节点即可,适合于实现独立式按键驱动。 gpio-keys是基于inp…

gma 2 教程(三)坐标参考系统:1.坐标系和坐标参考系统模块简介

安装 gma:pip install gma 坐标参考系统是地理空间数据表示和位置定位的基础,它是一种用于描述和测量地球表面位置的标准化框架。其定义了坐标系统、基准面和坐标单位等要素,以确保地球上不同地方的位置可以一致、准确地表示和比较。 本章以g…

开源协议介绍

文章目录 一、简介二、常见开源协议介绍2.1 BSD (Berkeley Software Distribution license)2.2 MIT(Massachusetts Institute of Technology)2.3 Apache Licence 2.02.4 GPL(General Public License)2.5 LG…

微电网单台并网逆变器PQ控制matlab仿真模型

微❤关注“电气仔推送”获得资料(专享优惠) 微电网运行在并网模式下且公共电网供应正常时,因为公共电网给定了电 压和频率的参考值,所有的逆变器可以使用PQ控制方式。 当系统频率为额定频率f0时,系统稳定在A点&#x…

【C语言进阶(13)】文件操作

文章目录 Ⅰ 什么是文件1. 文件分类2. 文件名 Ⅱ 文本文件和二进制文件Ⅲ 文件缓冲区Ⅳ 文件的打开和关闭1. 文件指针2. 文件的打开和关闭3. 文件打开方式 Ⅴ 文件的顺序读写1. fputc 写入一个字符2. fgetc 读取一个字符3. fputs 覆盖并写入一行数据4. fgets 读取指定长度的数据…

CTR特征建模:ContextNet MaskNet(Twitter在用的排序模型)

在之前的文章中 FiBiNet&FiBiNet模型,阐述了微博在CTR特征(Embedding)重要性建模方面的一些实践方向,今天再来学习下这个方面的两个相关研究:致力于特征和特征交互精炼(refine)的ContextNet和MaskNet,其中MaskNet也是Twitter(…

STM32 PA15/JTDI 用作普通IO,烧录口不能使用问题解决

我们一般用SW调试接口 所以DEBUG选择Serial Wire 这样PA15可以用作普通IO使用。 工程中默认加上: PA13(JTMS/SWDIO).ModeSerial_Wire PA13(JTMS/SWDIO).SignalDEBUG_JTMS-SWDIO PA14(JTCK/SWCLK).ModeSerial_Wire PA14(JTCK/SWCLK).SignalDEBUG_JTCK-SWCLK

Apple 推出全球开发者资源 —— 人人能编程

近日,Apple 宣布推出 Meet with Apple Experts 开发者资源,帮助全球 Apple 开发者社区发现并参与课程、研讨会、实验室、一对一咨询等体验。 Meet with Apple Experts 初期提供超过 50 个课程、研讨会和咨询项目,并将持续提供线上和线下活动&…

深入理解强化学习——强化学习的例子

分类目录:《深入理解强化学习》总目录 为什么我们关注强化学习,其中非常重要的一个原因就是强化学习得到的模型可以有超人类的表现。 有监督学习获取的监督数据,其实是人来标注的,比如ImageNet的图片的标签都是人类标注的。因此我…

JavaScript入门——(6)对象

1、什么是对象 对象(object):JavaScript里的一种数据类型 可以理解为是一种无序的数据集合,注意数组是有序的数据集合 用来详细的描述某个事物,例如描述一个人 人有姓名、年龄、性别等信息、还有 吃饭睡觉打代码等…

Tomcat项目启动报错

java.io.IOException: java.lang.ClassCastException: Cannot cast org.springframework.web.SpringServletContainerInitializer to javax.servlet.ServletContainerInitializer解决办法:可能Tomcat版本不对,使用7.0.90版本启动报错,使用8.0…

关于hive的时间戳

unix_timestamp()和 from_unixtime()的2个都是格林威治时间 北京时间 格林威治时间8 from_unixtme 是可以进行自动时区转换的 (4.0新特性) 4.0之前可以通过from_utc_timestamp进行查询 如果时间戳为小数,是秒&#…

Python接口自动化搭建过程,含request请求封装!

开篇碎碎念 接口测试自动化好处 显而易见的好处就是解放双手😀。 可以在短时间内自动执行大量的测试用例通过参数化和数据驱动的方式进行测试数据的变化,提高测试覆盖范围快速反馈测试执行结果和报告支持持续集成和持续交付的流程 使用Requestspytes…