当前位置: 首页 > news >正文

基于yoloV8安全帽反光衣检测(含代码)

这是一套基于 YOLOv8 的实时工地安全检测系统,核心功能:摄像头实时识别人员、检测是否佩戴安全帽 + 反光衣,对违规人员独立跟踪、计时报警、统计人数,全程 GPU 加速运行。

效果演示

安全帽反光衣识别

我会分模块、逐段、通俗化给你讲清楚每一行代码的作用。(关注私领源码和model.pt文件)

一、整体架构总览

  1. 双模型分工
    • YOLOv8n:专门检测人员+ 跟踪人员 ID(区分不同人)
    • 自定义训练模型:检测安全帽、反光衣
  2. 核心逻辑:找到人 → 看这个人身上有没有安全帽 + 反光衣 → 合规标绿色、违规标红色 → 违规计时 → 达到阈值报警 → 实时统计数据
  3. 运行环境:Python + OpenCV + Ultralytics YOLO + GPU 加速

二、逐部分代码解析

1. 导入依赖库

python

运行

from ultralytics import YOLO import cv2 import time import numpy as np from collections import defaultdict
  • YOLO:目标检测核心库,加载模型、推理、跟踪
  • cv2:OpenCV,处理摄像头画面、绘图、显示窗口
  • time:计时,用于违规超时报警
  • defaultdict:智能字典,存储每个人员独立的跟踪状态

2. 配置参数(可直接修改调优)

python

运行

# ===================== 配置参数 ===================== FRAME_SKIP = 1 # 跳帧检测(1=不跳帧,2=每2帧检测1次,提升流畅度) RESIZE_WIDTH = 640 # 画面宽度 RESIZE_HEIGHT = 480 # 画面高度 WARNING_TIME = 2 # 违规持续2秒,记1次警告 MAX_WARNING_COUNT = 3 # 累计3次警告,触发最终报警 CONFIDENCE = 0.45 # 置信度阈值(大于45%才认为检测有效) # ====================================================

✅ 作用:统一管理可调参数,不用改核心代码就能优化效果。


3. 主程序入口 + 加载模型

python

运行

if __name__ == '__main__': # 加载模型(GPU 加速) model_person = YOLO(r"路径\yolov8n.pt").to('cuda') model_helmet_vest = YOLO(r"路径\best.pt").to('cuda')
  • model_person:官方 YOLOv8n 模型,只检测人(classes=[0])
  • model_helmet_vest:你自己训练的模型,检测安全帽、反光衣
  • .to('cuda'):强制使用 GPU,大幅提升运行速度

4. 初始化摄像头

python

运行

# 打开摄像头 cap = cv2.VideoCapture(0) cap.set(cv2.CAP_PROP_FRAME_WIDTH, RESIZE_WIDTH) cap.set(cv2.CAP_PROP_FRAME_HEIGHT, RESIZE_HEIGHT)
  • 0:调用电脑默认摄像头
  • 设置分辨率:统一画面大小,保证检测稳定

5. 人员跟踪状态字典(核心!多人独立管理)

python

运行

# 多人独立跟踪状态 track_info = defaultdict(lambda: { "violate_start": None, # 违规开始时间 "warn_count": 0, # 警告次数 "is_violating": False # 是否正在违规 }) total_alert_count = 0 # 总报警次数 frame_count = 0 # 帧计数器

关键作用:这是系统能区分不同人、单独计时报警的核心。每个人有独立的 ID,违规时间、警告次数互不干扰。


6. 主循环(实时检测核心)

python

运行

while True: ret, frame = cap.read() if not ret: break
  • 无限循环读取摄像头画面
  • ret=False代表摄像头断开,退出循环

7. 跳帧优化(保证流畅不卡顿)

python

运行

# 间隔帧检测,提升流畅度 frame_count += 1 if frame_count % FRAME_SKIP != 0: cv2.imshow("窗口名", frame) if 按Q键: break continue
  • 不检测的帧直接显示画面,不做 AI 计算
  • 算力低的电脑可以改FRAME_SKIP=2,速度翻倍

8. 绘制危险区域

python

运行

# 绘制危险区域 cv2.rectangle(frame, (0, 0), (w, h), (0, 0, 255), 2) cv2.putText(frame, "DANGER ZONE", ...)
  • 全屏红色边框 + 文字,提示当前是监控危险区域

9. 双模型推理(检测人 + 检测装备)

python

运行

# 检测 + 跟踪 results_person = model_person.track(frame, classes=[0], conf=CONFIDENCE, persist=True, verbose=False) results_hv = model_helmet_vest(frame, conf=CONFIDENCE, verbose=False) frame = results_hv[0].plot(img=frame, labels=False, conf=False)
  1. model_person.track()检测人员 + 分配唯一 ID(跟踪)
  2. model_helmet_vest():检测安全帽、反光衣
  3. .plot():把检测结果画在画面上

10. 人员装备匹配逻辑(核心判断)

python

运行

for pid, box in zip(ids, boxes): x1, y1, x2, y2 = box # 人员框坐标 has_helmet = False has_vest = False # 判断装备:看安全帽/反光衣的中心点 是否在 人的框内 for hb in results_hv[0].boxes: hx1, hy1, hx2, hy2 = 装备坐标 hcx, hcy = 装备中心点 if x1 < hcx < x2 and y1 < hcy < y2: if cid == 0: has_helmet = True if cid == 1: has_vest = True

原理:判断安全帽 / 反光衣的中心点,是否落在人员的方框内

  • 在里面 → 这个人穿戴了装备
  • 不在 → 没穿戴

11. 合规 / 违规标记

python

运行

if has_helmet and has_vest: # 合规:绿色框 + Safe cv2.rectangle(..., (0,255,0), 2) safe_person += 1 else: # 违规:红色框 + Danger cv2.rectangle(..., (0,0,255), 2) violate_person += 1
  • 两个装备都有 → 安全
  • 缺一个 / 都缺 → 违规

12. 独立报警逻辑(最智能的部分)

python

运行

current_t = time.time() for pid in ids: info = track_info[pid] if info["is_violating"]: if info["violate_start"] is None: info["violate_start"] = current_t # 开始计时 # 持续违规2秒 → 记1次警告 if current_t - info["violate_start"] >= WARNING_TIME: info["warn_count"] += 1 info["violate_start"] = current_t # 累计3次警告 → 触发报警 if info["warn_count"] >= MAX_WARNING_COUNT: print(f"🔴 ALERT: Person {pid} NOT SAFE!") total_alert_count += 1 else: # 恢复合规 → 清空计时和警告 info["violate_start"] = None info["warn_count"] = 0

报警规则

  1. 人员开始违规 → 启动计时器
  2. 持续违规2 秒→ 警告 + 1
  3. 累计3 次警告→ 触发最终报警
  4. 戴上装备 → 立即清空计时,停止报警

13. 实时数据统计显示

python

运行

cv2.putText(frame, f"Total: {total_person}", ...) cv2.putText(frame, f"Safe: {safe_person}", ...) cv2.putText(frame, f"Violate: {violate_person}", ...) cv2.putText(frame, f"Alert Tot: {total_alert_count}", ...)

画面左上角显示:

  • 总人数
  • 安全人数
  • 违规人数
  • 总报警次数

14. 退出与资源释放

python

运行

cap.release() cv2.destroyAllWindows()

关闭摄像头、销毁窗口,安全退出程序


三、核心亮点总结

  1. 双模型协同:人员跟踪 + 装备检测分离,精度更高
  2. 多人独立跟踪报警:不会混淆不同人员,每个人单独计时
  3. 延时报警:避免瞬间遮挡误报,只有持续违规才报警
  4. GPU 加速:运行流畅,适合实时监控
  5. 可视化统计:画面直接显示人数、报警数
http://www.jsqmd.com/news/613410/

相关文章:

  • 弦音墨影快速上手:水墨交互界面+自然语言提问+ bounding box 输出全流程
  • Nanbeige4.1-3B Chainlit企业就绪:GDPR数据擦除、会话加密、审计日志留存策略
  • [三指拖拽] Windows Precision触控板手势迁移完全指南:从设备适配到流畅体验
  • 3个步骤解决跨平台应用安装难题:APK Installer的无缝集成方案
  • 无尘投料站哪家做得好?这份攻略帮你选对供应商 - 品牌推荐大师1
  • 内存占用直降92%,I/O吞吐翻倍,PHP 8.9大文件处理必须立即启用的3项JIT编译级配置
  • iOS 15-16 iCloud锁绕过完整指南:applera1n工具实战教程
  • 解锁Obsidian笔记无限可能:Pandoc插件全方位转换指南
  • 我不是狐狸,我是那Harness Engineering隙
  • Blynk物联网开发终极指南:零代码实现硬件云端互联
  • 使用C#代码在 Excel 中添加或设置批注格式
  • excel 公式支持 ~ -
  • E7Helper全场景应用指南:从零配置自动化工具提升第七史诗效率
  • 校园网自动登录工具:高校用户的网络稳定性保障方案
  • 如何用Mesa在Python中快速构建智能体仿真模型:终极入门指南
  • 万象视界灵坛效果展示:浅蓝格点底纹上CLIP文本嵌入的t-SNE降维散点图
  • 从阻塞到虚拟线程,Java响应式重构必问的8个关键问题:你答对几个?
  • 想买可折叠小户型美式餐桌,哪家工厂的口碑比较好 - 工业推荐榜
  • 华为OD技术面真题 - JAVA开发- spring框架 - 6
  • Cursor无限制使用解决方案:开源工具cursor-free-vip实战指南
  • AI 编程的工具有哪些?
  • CLIP ViT-H-14镜像免配置优势:内置健康检查端点与Liveness Probe支持
  • 使用小龙虾来操作猿编程的遥控车怕
  • 5分钟掌握微信单向好友检测:轻松找出谁偷偷删除了你
  • 智慧校园之学生课堂行为 yolo+deepseek的课堂专注度分析系统 校园专注度分析与建议生成系统
  • 告别B站视频学习困境:BiliTools跨平台工具箱如何提升内容获取效率
  • 2026年长沙男士假发定制排名,名流假发性价比高且安全无有害残留 - mypinpai
  • DAMOYOLO-S快速部署:3步启动COCO通用检测Web服务(含日志排查)
  • 1980-2025年中国各区县逆温数据
  • 大族激光在家电厨卫/钣金加工/包装标识/汽车制造/机械五金自动化领域的应用实践 - 品牌推荐大师