yolov5的口罩识别系统+GUI界面 (附代码)

基于YOLOv5模型的口罩识别系统,结合了GUI界面,旨在帮助用户快速、准确地识别图像或视频中佩戴口罩的情况。YOLOv5是一种流行的目标检测模型,具有高效的实时检测能力,而GUI界面则提供了友好的用户交互界面,使得整个系统更易于操作和使用。

通过该系统,用户可以上传图像或者选择视频进行口罩识别,系统会使用YOLOv5模型自动检测图中人脸并判断是否佩戴口罩。识别结果将会在界面上直观显示,同时还可以导出识别结果或者保存分析报告。这样的系统可以被广泛应用于监控系统、安全检查等领域,提高工作效率和准确性。

使用方式

  1. 安装依赖
pip install -r requirements.txt 
  1. 运行 PyqtGUI.py 文件
python PyqtGUI.py

备注:best1、2、3.pt为模型文件,如有需要自行替换。

目标检测:

目标检测是计算机视觉和数字图像处理的一个热门方向,广泛应用于无人驾驶、智能视频监控、工业检测、航空航天等诸多领域,通过计算机视觉减少对人力资本的消耗,具有重要的现实意义。 因此,目标检测也就成为了近年来理论和应用的研究热点,它是图像处理和计算机视觉学科的重要分支,也是智能监控系统的核心部分,同时目标检测也是泛身份识别领域的一个基础性的算法,对后续的人脸识别、步态识别、人群计数、实例分割等任务起着至关重要的作用。


YOLOv5简介:

YOLOV4出现之后不久,YOLOv5横空出世。YOLOv5在YOLOv4算法的基础上做了进一步的改进,检测性能得到进一步的提升。YOLOv5在COCO数据集上面的测试效果非常不错。工业界也往往更喜欢使用这些方法,而不是利用一个超级复杂的算法来获得较高的检测精度。 YOLOv5是一种单阶段目标检测算法,速度与精度都得到了极大的性能提升。主要的改进思路如下所示:

  1. 输入端:在模型训练阶段,提出了一些改进思路,主要包括Mosaic数据增强、自适应锚框计算、自适应图片缩放。
  2. 基准网络:融合其它检测算法中的一些新思路,主要包括:Focus结构与CSP结构。
  3. Neck网络:目标检测网络在BackBone与最后的Head输出层之间往往会插入一些层,Yolov5中添加了FPN+PAN结构。
  4. Head输出层:输出层的锚框机制与YOLOv4相同,主要改进的是训练时的损失函数GIOU_Loss,以及预测框筛选的DIOU_nms。

YOLOv5S模型的网络架构:

YOLOV5目录结构:

其中,train.py这个文件也是我们接下来训练yolo模型需要用到的启动文件。 requirement.txt 中有我们所需要的的全部依赖,采用pip安装。

pip install -r requirements.txt #安装完依赖后准备工作完成

 每个文件作用:

YOLOv5
|   detect.py  #检测脚本
|   hubconf.py  # PyTorch Hub相关代码
|   LICENSE    # 版权文件
|   README.md  #README  markdown 文件
|   requirements.txt   #项目所需的安装包列表
|   sotabench.py    #COCO 数据集测试脚本
|   test.py         #模型测试脚本
|   train.py         #模型训练脚本
|   tutorial.ipynb   #Jupyter Notebook演示代码
|-- data
|    |   coco.yaml           #COCO 数据集配置文件
|    |   coco128.yaml        #COCO128 数据集配置文件
|    |   hyp.finetune.yaml   #超参数微调配置文件
|    |   hyp.scratch.yaml    #超参数启始配置文件
|    |   voc.yaml            #VOC数据集配置文件
|    |---scripts
|             get_coco.sh   # 下载COCO数据集shell命令
|             get_voc.sh   # 下载VOC数据集shell命令
|-- inference
|    |   images         #示例图片文件夹
|              bus.jpg
|              zidane.jpg
|-- models
|    |   common.py         #模型组件定义代码
|    |   experimental.py   #实验性质的代码
|    |   export.py         #模型导出脚本
|    |   yolo.py           # Detect 及 Model构建代码
|    |   yolo5l.yaml       # yolov5l 网络模型配置文件
|    |   yolo5m.yaml       # yolov5m 网络模型配置文件
|    |   yolo5s.yaml       # yolov5s 网络模型配置文件
|    |   yolo5x.yaml       # yolov5x 网络模型配置文件
|    |   __init__.py       
|    |---hub
|            yolov3-spp.yaml
|            yolov3-fpn.yaml
|            yolov3-panet.yaml
|-- runs    #训练结果
|    |--exp0
|    |   |	events.out.tfevents.
|    |   |  hyp.yaml
|    |   |  labels.png
|    |   |  opt.yaml
|    |   |  precision-recall_curve.png
|    |   |  results.png
|    |   |  results.txt
|    |   |  test_batch0_gt.jpg
|    |   |  test_batch0_pred.jpg
|    |   |  test_batch0.jpg
|    |   |  test_batch1.jpg
|    |   |  test_batch2.jpg
|    |   |--weights
|    |             best.pt   #所有训练轮次中最好权重
|    |             last.pt   #最近一轮次训练权重
|-- utils
|    |   activations.py   #激活函数定义代码  
|    |   datasets.py      #Dataset 及Dataloader定义代码
|    |   evolve.py        #超参数进化命令 
|    |   general.py       #项目通用函数代码  
|    |   google_utils.py  # 谷歌云使用相关代码
|    |   torch_utils.py   # torch工具辅助类代码 
|    |   __init__.py   # torch工具辅助类代码 
|    |---google_app_engine
|               additional_requirements.txt
|				app.yaml
|				Dockerfile
|-- VOC   #数据集目录
|    |--images  #数据集图片目录
|    |    |--train  # 训练集图片文件夹
|    |    |         000005.jpg
|    |    |         000007.jpg
|    |    |         000009.jpg
|    |    |         0000012.jpg
|    |    |         0000016.jpg
|    |    |         ...
|    |    |--val    # 验证集图片文件夹 
|    |    |         000001.jpg
|    |    |         000002.jpg
|    |    |         000003.jpg
|    |    |         000004.jpg
|    |    |         000006.jpg
|    |    |         ...       
|    |--labels  #数据集标签目录
|    |    train.cache
|    |    val.cache
|    |    |--train  # 训练标签文件夹
|    |    |         000005.txt
|    |    |         000007.txt
|    |    |         ...
|    |    |--val    # 验证集图片文件夹 
|    |    |         000001.txt
|    |    |         000002.txt
|    |    |         ...    
|-- weightsdwonload_weights.sh   #下载权重文件命令yolov5l.pt  #yolov5l 权重文件yolov5m.pt  #yolov5m 权重文件yolov5s.mlmodel  #yolov5s 权重文件(Core M格式)yolov5s.onnx  #yolov5s 权重文件(onnx格式)yolov5s.torchscript  #yolov5s 权重文件(torchscript格式)yolov5x.pt  #yolov5x 权重文件

模型训练过程:

使用环境:Python3.8+torch1.8.1+cuda11.1+pycharm (注:cuda的安装版本取决于显卡类型)

1.数据集的标注:

python打开labelimg这个软件进行标注。

python labelimg.py

数据格式建议选择VOC,后期再转换成 yolo格式。 ( VOC会生成 xml 文件,可以灵活转变为其他模型所需格式)

本次训练标注两个标签,佩戴口罩为 mask,未佩戴口罩为 face。

在根目录下建立一个VOCData文件夹,再建立两个子文件,其中,jpg文件放置在VOCData/images下,xml放置在VOCData/Annotations中。(这一步根据个人随意,因为在训练时需要创建配置文件指定模型训练集的目录)

2.数据集的训练:

①、在项目根目录下文件夹下新建mask_data.yaml配置文件,添加如下内容: (根据个人情况修改)

其中: path:项目的根目录 train:训练集与path的相对路径 val:验证集与path的相对路径 nc:类别数量,2个 names:类别名字 (上一步中标注好的训练集,可以按照想要比例划分为训练和验证集,也可以不划分填同一路径。)

②、修改启动文件 train.py:

打开train.py,其相关参数如下:

 其中: weights:权重文件路径 cfg:存储模型结构的配置文件 data:存储训练、测试数据的文件(上一步中自己创建的那个.yaml) epochs:训练过程中整个数据集的迭代次数 batch-size:训练后权重更新的图片数 img-size:输入图片宽高。 device:选择使用GPU还是CPU workers:线程数,默认是8

#输入命令开始训练:
python train.py --weights data/yolov5s.pt --cfg models/yolov5s.yaml --data data/mask_data.yaml --epoch 100 --batch-size 8 --device 0

③、等待慢慢跑完

模型结果数据呈现:

1.数据集的分布:

mask的照片约有2000张,face的照片约有2500张。

2.损失函数和准确率:

可以看到随着训练的进行,以不同方式呈现的损失函数呈明显下降趋势,准确率呈上升趋势。

3.置信度与准确率:

置信度在0.6以上时,准确率接近80%。


GUI编程:

编写GUI界面,方便对权重文件进行一个替换,对图片和视频进行一个监测,以及调用摄像头进行实时监测。

 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用易查分制作活动抽奖系统,支持随机分配中奖结果!

学校或企业在开展抽奖活动时,如何确保公平公正,随机挑选中奖人员呢? 易查分的预置数据分配功能就可以实现,并且支持提交信息后随机分配中奖结果,不受任何人为因素的影响。下面就来教大家如何制作吧。 📌使用…

Vxe UI vxe-upload vue上传组件,显示进度条的方法

vxe-upload vue 上传组件 查看官网 https://vxeui.com 显示进度条很简单,需要后台支持进度就可以了,后台实现逻辑具体可以百度,这里只介绍前端逻辑。 vue 上传附件 相关参数说明,具体可以看文档: multiple 是否允许…

ChatTTS+Python编程搞定语音报时小程序

文字转语音神器Python编程搞定语音报时小程序 今天一个好哥们发了一个文字转语音的AI神器的短视频。这个神器的网站是[ChatTTS - Text-to-Speech for Conversational Scenarios][https://chattts.com/],如下图所示: 这个开源项目可以从github.com上下载…

【python】成功解决“NameError: name ‘X’ is not defined”错误的全面指南

成功解决“NameError: name ‘X’ is not defined”错误的全面指南 一、引言 在Python编程中,NameError: name X is not defined是一个常见的错误。这个错误通常意味着我们试图使用一个未定义的变量名X。本文将详细解析这一错误的原因,并提供一系列实用…

【Qt】Frame和Widget的区别

1. 这两个伙计有啥区别? 2. 区别 2.1 Frame继承自Widget,多了一些专有的功能 Frame Widget 2.2 Frame可以设置边框

【YOLO系列】YOLOv10论文超详细解读(翻译 +学习笔记)

前言 研究AI的同学们面对的一个普遍痛点是,刚开始深入研究一项新技术,没等明白透彻,就又迎来了新的更新版本——就像我还在忙着逐行分析2月份发布的YOLOv9代码,5月底清华的大佬们就推出了全新的v10。。。 在繁忙之余&#xff0…

视频监控业务平台LntonCVS国标GB28181视频平台智慧城市应用方案

随着科技的不断进步,尤其是人工智能技术的飞速发展,视频应用已经超越了传统的视频监控、视频会议、视频通话和视频指挥调度等基本功能。它们正在向更加多元化、灵活化、融合化和智能化的方向发展。因此,建立一个视频AI中台变得至关重要。 通过…

智慧冶金:TSINGSEE青犀AI+视频技术助力打造高效、安全的生产环境

一、建设背景 冶金行业因其特殊的生产环境和工艺要求,对安全生产、环境保护以及质量监控等方面有着极高的要求。因此,将视频智能监控技术引入冶金行业,不仅有助于提升生产效率,更能有效保障生产安全,降低事故风险。 …

密码学基本概念(补充)

BiBa模型的*特性规则:主体不能修改更高完整级的客体(主题不能向上写) Diffie-Hellman密钥交换协议的安全性基于求解离散对数的困难性,既对于C^d M mod P,在已知C和P的前提下,由d求M很容易,但是…

linux查看磁盘类型命令

在Linux中,有多种方法可以查看磁盘是固态硬盘(SSD)还是机械硬盘(HDD)。以下是一些常用的方法: 查看/sys/block/目录 /sys/block/目录包含了系统中所有块设备的信息。你可以查看这个目录中的设备属性来判断…

mac虚拟光驱工具:Daemon Tools for Mac

Daemon Tools for Mac是一款功能强大的虚拟光驱工具,它为用户提供了在Mac上模拟物理光驱的能力,从而方便用户处理各种光盘映像文件。以下是关于Daemon Tools for Mac的详细介绍: 守护进程工具:Daemon Tools不仅是一个简单的虚拟光…

构建基础网站的入门指南

在数字时代,网站已经成为展示个人、企业或组织信息的重要平台。了解如何通过编写代码来创建一个网站是非常有用的技能。在本文中,我们将了解构建一个基础网站所需的步骤和代码知识。第一步:了解网站的基本组成 一个基本的网站通常包含HTML&a…

python语言中循环语句的小结

如上图所示,在C/C/Java中如果使用的for循环语句和do while语句都与python中的while循环语句类似,所以在C/C/Java中如果使用的for循环语句在python中可以用while语句来替换。

这个高考作文满分的极客,想和你聊聊新媒体写作

计育韬 曾为上海市高考作文满分考生 微信官方 SVG AttributeName 开发者 新榜 500 强运营人 复旦大学青年智库讲师 浙江传媒学院客座导师 上海团市委新媒体顾问 上海市金山区青联副主席 文案能力,从来就不是一蹴而就的。今天,来和大家聊聊当年我的…

mysql中optimizer trace的作用

大家好。对于MySQL 5.6以及之前的版本来说,查询优化器就像是一个黑盒子一样,我们只能通过EXPLAIN语句查看到最后 优化器决定使用的执行计划,却无法知道它为什么做这个决策。于是在MySQL5.6以及之后的版本中,MySQL新增了一个optimi…

Linux 搭建 ZeroTier 的 Moon 服务器

系统:centos 7.6 轻量云服务器:腾讯云 Moon是什么,为什么需要Moon? ZeroTier通过自己的多个根服务器帮助我们建立虚拟的局域网,让虚拟局域网内的各台设备可以打洞直连。这些根服务器的功能有些类似于通过域名查询找到…

自动驾驶仿真:python和carsim联合仿真案例

文章目录 前言一、Carsim官方案例二、Carsim配置1、车辆模型2、procedure配置3、Run Control配置 三、python编写四、运行carsim五、运行python总结 前言 carsim内部有许多相关联合仿真的demo,simulink、labview等等都有涉及,这里简单介绍下python和car…

RTOS笔记--任务状态与调度

任务状态 freertos中的任务分为四个状态:就绪状态(ready)、运行状态(running)、阻塞状态(blocked)、暂停状态(suspended) 完整的任务状态转换图: 在使用vTas…

NGINX之location和rewrite

一.NGINX常用的正则表达式 二.Location location作用:对访问的路径做访问控制或者代理转发 1.location 常用的匹配规则: 进行普通字符精确匹配,也就是完全匹配^~ / 表示普通字符匹配。使用前缀匹配。如果匹配成功,则不再匹配其它 …

视频号视频提取器有那些?免费版可以下载视频号视频吗?

在网络上,确实存在多种工具和公众号用于下载视频号内容。今天就说说免费的视频提取器有那些? 视频号提取器工具中常见的有公众号和软件。这些工具通常可以帮助用户从微信视频号平台下载视频内容。 但请注意,使用这些工具可能需要考虑版权和法…