基于YOLOV5+Flask安全帽RTSP视频流实时目标检测
1、背景
在现代工业和建筑行业中,安全始终是首要考虑的因素之一。特别是在施工现场,工人佩戴安全帽是确保人身安全的基本要求。然而,人工监督难免会有疏漏,尤其是在大型工地或复杂环境中,确保每个人都佩戴安全帽变得非常具有挑战性。
为了解决这一问题,计算机视觉技术提供了一个有效的解决方案。通过使用深度学习模型(如YOLOv5)进行实时目标检测,我们可以自动识别视频流中的工人是否佩戴了安全帽。结合Flask框架,我们可以将这一功能封装为一个Web服务,方便在任何地方通过浏览器或其他设备进行访问。
项目目标:
- 使用YOLOv5模型实现对RTSP视频流的工人是否佩戴安全帽实时目标检测。
- 将检测功能集成到Flask Web应用中,以便通过简单的HTTP请求访问检测结果。
- 提供一个用户友好的前端界面,实时展示检测结果。
技术栈:
- YOLOv5:一个高效的实时目标检测模型,适用于多种场景的物体检测。
- Flask:一个轻量级的Python Web框架,用于构建RESTful API和Web应用。
- OpenCV:一个强大的计算机视觉库,用于处理视频流和图像。
- RTSP:实时流传输协议,用于从摄像头获取视频流。
接下来,我将详细介绍如何构建这样一个系统,从环境准备到最终的部署。
2、环境准备
pip install Flask
pip install opencv-python
# 安装YOLOv5依赖:
pip install -r requirements.txt
#下载预训练权重:
wget https://github.com/ultralytics/yolov5/releases/download/v4.0/yolov5s.pt
3、模型训练
数据集为各类场景下的安全帽图片,并使用Labelimg标注工具对每张图片中的目标边框(Bounding Box)及类别进行标注。一共包含22789张图片,其中训练集包含15887张图片,验证集包含4641张图片,测试包含2261张图片。

-
数据集目录结构:
yolov5/ ├── datasets/ │ ├── train/ │ │ ├── images/ │ │ └── labels/ │ ├── val/ │ │ ├── images/ │ │ └── labels/ │ └── test/ │ ├── images/ │ └── labels/ -
创建数据配置文件:
在 datasets 文件夹下创建一个 data.yaml 文件,内容如下:
train: E:\yolo\mydata\train\images val: E:\yolo\mydata\val\images test: E:\yolo\mydata\test\images# number of classes nc: 2# class names names: ['head', 'helmet'] -
在YOLOv5项目目录下,运行以下命令开始训练模型:
python train.py --img 640 --batch 16 --epochs 50 --data datasets/data.yaml --cfg models/yolov5s.yaml --weights yolov5s.pt --project runs/train --name safety_helmet
4、训练结果评估
在深度学习中,我们通常用损失函数下降的曲线来观察模型训练的情况。YOLOv5在训练时主要包含三个方面的损失:定位损失(box_loss)、分类损失(cls_loss)和动态特征损失(dfl_loss),在训练结束后,可以在runs/目录下找到训练过程及结果文件,如下所示:


本文训练结果如下:

PR曲线:

5、实现RTSP视频流处理
使用OpenCV可以方便地处理RTSP视频流逻辑集成到Flask Web服务中,以便通过HTTP请求访问目标检测结果。在这个获取视频流过程中利用海康或者大华摄像头。
from flask import Flask, render_template, Response
import cv2from models.experimental import attempt_load
from utils.general import set_logging, check_img_size
from utils.torch_utils import select_deviceapp = Flask(__name__)from camera_ready import detectclass VideoCamera(object):def __init__(self):# 通过opencv获取实时视频流(海康摄像头)self.count = 0self.video = cv2.VideoCapture("rtsp://admin:Tc246800@ya.tenchan.cn:61554/Streaming/Channels/102")# 大华摄像头# self.video = cv2.VideoCapture("rtsp://%s:%s@%s/cam/realmonitor?channel=%d&subtype=0" % (user, pwd, ip, channel))self.weights, imgsz = 'best.pt', 640set_logging()self.device = select_device('')self.half = self.device.type != 'cpu' # half precision only supported on CUDAself.model = attempt_load(self.weights, map_location=self.device) # load FP32 modelself.stride = int(self.model.stride.max()) # model strideself.imgsz = check_img_size(imgsz, s=self.stride) # check img_sizeif self.half:self.model.half() # to FP16def __del__(self):self.video.release()def get_frame(self):for i in range(1):success, image = self.video.read()image = detect(source=image, half=self.half, model=self.model, device=self.device, imgsz=self.imgsz,stride=self.stride)ret, jpeg = cv2.imencode('.jpg', image)return jpeg.tobytes()@app.route('/xyhaw')
def xyhaw():return render_template('index.html')def gen(camera):while True:frame = camera.get_frame()yield (b'--frame\r\n'b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n')@app.route('/video_feed')
def video_feed():return Response(gen(VideoCamera()),mimetype='multipart/x-mixed-replace; boundary=frame')if __name__ == '__main__':app.run(host='0.0.0.0', debug=True)
前端简单页面:index.html
<!DOCTYPE html>
<html>
<head><title>安全帽检测</title><style>body {font-family: Arial, sans-serif;text-align: center;margin: 0;padding: 0;}.header {background-color: #4CAF50;color: white;padding: 15px;}.video-container {margin-top: 20px;}img {border: 1px solid #ddd;border-radius: 4px;padding: 5px;}</style>
</head>
<body><div class="header"><h1>安全帽RTSP视频流实时目标检测</h1></div><div class="video-container"><img src="{{ url_for('video_feed') }}" width="640" height="480"></div>
</body>
</html>
6、检测结果
相关文章:
基于YOLOV5+Flask安全帽RTSP视频流实时目标检测
1、背景 在现代工业和建筑行业中,安全始终是首要考虑的因素之一。特别是在施工现场,工人佩戴安全帽是确保人身安全的基本要求。然而,人工监督难免会有疏漏,尤其是在大型工地或复杂环境中,确保每个人都佩戴安全帽变得非…...
Windows内置的服务器IIS(Internet Information Services)托管网站
一. 安装IIS 打开控制面板:在开始菜单搜索“控制面板”并打开它。程序和功能:点击“程序”然后选择“程序和功能”。启用或关闭Windows功能:在左侧菜单中选择“启用或关闭Windows功能”。查找并勾选IIS:在弹出的窗口中,…...
虚幻引擎结构之UObject
一. UObject 的介绍 UObject 是虚幻引擎中的核心基础类,所有其他游戏对象和资源类都直接或间接地继承自它。作为虚幻引擎的基石,UObject 提供了多项关键功能,包括内存管理、序列化、反射(introspection)、垃圾回收以及元数据支持。在虚幻引擎中,UObject 类的实例通常被称…...
js的Reflect对象
Reflect 对象是 JavaScript ES6 中引入的一个内建对象,它提供了一系列与对象操作相关的方法。这些方法与 Object 对象上的方法类似,但在行为上有一些差异,并且更加规范和统一。Reflect 对象并不是一个构造函数,不能被 new 操作符调…...
this指向了谁?
看函数在执行的时候是如何调用的, 1 如果这个函数是用普通函数调用模式来进行调用,它内部的this指向了window; 2 如果一个函数在调用的时候是通过对象方法模式来进行调用,则它内部的this就是我们的对象; 3 如果一个函数在调用的时候通过构…...
基于Resnet、LSTM、Shufflenet及CNN网络的Daily_and_Sports_Activities数据集仿真
在深度学习领域,不同的网络结构设计用于解决特定的问题。本文将详细分析四种主流网络结构:卷积神经网络(CNN)、残差网络(ResNet)、长短期记忆网络(LSTM)和洗牌网络(Shuff…...
mac系统vsCode中使用Better Comments在.vue文件里失效
问题:关于Better Comments默认在html、TS、JS中有效,在vue中无效,需要单独进行配置 windows系统可以参考友链Better Comments(注释高亮)在vue文件里失效的问题 关于Better Comments电脑的配置路径: Windows系统&…...
UE5.3 C++ Ceiusm中的POI 制作3DUI 结合坐标转化
一.核心思路WidgetComponent CesiumGloberAnchor 二.先制作POI 创建C Actor来制作,APOI。直接上代码 #pragma once#include "CoreMinimal.h" #include "GameFramework/Actor.h" #include "CesiumGlobeAnchorComponent.h" #includ…...
一起学Git【第六节:查看版本差异】
git diff是 Git 版本控制系统中用于展示差异的强大工具。他可以用于查看文件在工作区、暂存区和版本库之间的差异、任意两个指定版本之间的差异和两个分支之间的差异等,接下来进行详细的介绍。 1.显示工作区与暂存区之间的差异 # 显示工作区和暂存区之间的差异,后面不加参数…...
numpy np.newaxis介绍
np.newaxis 是 NumPy 中用于增加数组维度的关键字。它的作用是为数组插入一个新的维度,从而改变数组的形状(shape)。 基本用法 np.newaxis 等价于 None,可以作为索引使用,用于在指定位置增加一个维度。增加的维度的大…...
小程序配置文件 —— 16 项目配置文件和配置 sass
目录 项目配置文件配置 sass 项目配置文件 在创建项目的时候,每个项目的根目录生成两个 config.json 文件(project.config.json 和 project.private.config.json ),用于保存开发者在工具上做的个性化配置,例如和编译有…...
【yolov5】实现FPS游戏人物检测,并定位到矩形框上中部分,实现自瞄
介绍 本人机器学习小白,通过语言大模型百度进行搜索,磕磕绊绊的实现了初步效果,能有一些锁头效果,但识别速度不是非常快,且没有做敌友区分,效果不是非常的理想,但在4399小游戏中爽一下还是可以…...
概率统计与随机过程--作业5
一、推导题 二、计算题 1、某单位为了研究太阳镜销售和广告费用之间的关系,搜集了以下数据,使用回归分析方法得到线性回归模型: 广告费用(万元)x 2 5 6 7 22 25 28 30 22 18 销售量(个…...
“802.11g”,“802.11n”,“802.11ac”,“802.11ax”
802.11g、802.11n、802.11ac、802.11ax都是IEEE制定的无线局域网(WLAN)标准,它们各自具有不同的特点和性能。以下是对这四个标准的详细介绍: 1. 802.11g 定义:802.11g是IEEE制定的一种无线局域网标准,它提…...
Kubernetes 常用的网络插件
上篇内容跟大家简单聊了k8s网络模型原理。分别围绕着容器、Pod、Service、网络策略等展开了详细的讲解。这次想跟大家聊聊k8s的CNI网络插件。 CNI 是 Kubernetes 网络模型的核心组件,它是一个插件接口,允许用户选择和配置网络插件来管理 Pod 的网络。CN…...
Retrofit和rxjava 实现窜行请求,并行请求,循环多次请求,递归请求,错误重试
在使用 Retrofit 和 RxJava 时,可以通过多种方式实现多次请求,比如串行请求、并行请求、依赖请求等。以下是一些常见的实现方式: 1. 串行请求(依赖关系) 一个请求的结果作为另一个请求的输入,可以用 flat…...
2025年度好用便签推荐,电脑桌面便签app分享
在快节奏的现代生活中,高效的时间管理和任务规划变得尤为重要。一款好用的便签软件不仅能帮助我们记录灵感、待办事项,还能极大地提升我们的工作效率。 在众多电脑桌面便签中,好用便签以其出色的桌面便签功能脱颖而出,备受用户青…...
【论文解读】Arbitrary-steps Image Super-resolution via Diffusion Inversion
级别:arXiv Computer Vision and Pattern Recognition(2024)作者:Zongsheng Yue,Kang Liao,Chen Change Loy时间:2024论文链接:Arbitrary-steps Image Super-resolution via Diffusion Inversion摘要 技术概述:该技术基于扩散反转,通过设计部分噪声预测策略来构建扩散…...
kkFileView集成springboot:使用自定义预览接口(非minio预览接口),发现无法预览资源
目录 1、背景2、原因分析3、解决办法 1、背景 按照项目验收要求,需要对minio中存储的数据进行加密 之前提供给kkFileView的预览地址都是获取的minio预览地址 由于minio中的资源进行了加密处理,所以我们自定义预览接口(进行解密操作ÿ…...
被裁20240927 --- 嵌入式硬件开发 STM32篇
人很容易原谅别人的错误但很难原谅别人的正确 1. 文档、手册、指南、资源2. MCU 结构3. MCU 和 MPU 的区别4. 一些概念什么是看门狗 ?什么是 DMA ?什么是晶振 ?什么是片内外设?软件协议、硬件协议、数据协议、通讯协议、通信协议u…...
IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...
【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...
(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...
Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...
零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...
Java编程之桥接模式
定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...
