基于GUI界面的yolov5人脸口罩检测项目

news2024/9/24 15:28:36

文章目录

前言

一、运行环境

二、环境配置

三、yolov5网络结构图介绍

四、 损失函数

五、数据集

六、实验内容

1.实验框架

2.实验环境 

3.实验结果

前言

        佩戴口罩可以有效降低在和感染者有接触时可能被感染者感染的风险。目前,在一些公共场所,比如商场、超市、车站等地方的疫情防控主要依靠人工管理和监督。这样不仅管理效率低下而且造成大量的人力资源的浪费。可以在商场、超市等出入口安装人脸口罩自动检测系统来协助管理,这样可以大大提高效率,避免资源浪费,因此基于深度学习的人脸口罩检测项目的研究就有重要的研究意义。

运行环境

1.解释器:Python 3.8 版本, anconda4

2.开发环境: Pycharm

3.开发框架:pytorch

环境配置

1.anconda Python 解释器的配置

①win+r , 输入cmd,

②输入conda create --name yu python=3.8,yu就是我们安装过程的一个名字,后边我们也要找这个名字,自己定义就好,并且在安装途中,问yes or no 我们都选 yes,安装过程如下图:

③点文件+设置+项目+Python解释器

④点击添加解释器

 ⑤找到anconda 安装位置,并且找到Python 解释器的位置

⑥ 以管理员身份运行anconda,来激活虚拟环境,找到anconda Prompt,以管理员身份运行,conda activate yu是用来激活虚拟环境,并且利用 pip install pyqt5 来安装 pyqts这个包,接下来稍等片刻。

⑦ 如果出现如下界面,表示已经安装成功

⑧再安装opencv的包,用以下命令:pip install opencv-python ,如下图正在安装中,我们稍等片刻

 ⑨如果出现如下界面,表示已经安装成功

2.安装 torch,如果你电脑有GPU,想要用GPU训练模型,需要下载两个软件cuda_10.2.89_441.22_win10.exe+cudnn-windows-x86_64-8.7.0.84_cuda10-archive.zip,具体需要什么版本,看自己电脑显卡配置,具体查看是否安装成功,我这里就不详细讲解了,有需要的,私信我即可。

① 以管理员身份运行 ancoda  Prompt

②打开pytorch 官网 pytorch.org/get-started/locally

③如果是30系显卡选择CUDA 11.3,如果是之前的显卡选择CUDA10.2,将官网给的指令复制下来:

conda install pytorch torchvision torchaudio cudatoolkit=10.2 -c pytorch

 如下图正在安装中,这个安装利用的是电脑源,下载比较慢,可以尝试用镜像源安装。

下面我教大家用镜像源安装pytorch,因为电脑源太慢了,中间还卡顿,人麻了。。。

(1)进入官网,https://download.pytorch.org/whl/torch_stable.html,下载需要的镜像源文件 

(2)需要下载三个①torchaudio-0.9.0-cp38-cp38-win_amd64.whl ② torchvision-0.10.0+cu102-cp38-cp38-win_amd64.whl ③torch-1.9.0+cu102-cp38-cp38-win_amd64.whl

(3)用 cd 打开所在的目录,例如我的目录:cd C:\Users\**\Downloads

  (4) pip install + 文件名,安装即可,小技巧:输入前几个单词,按 Tab 键,电脑自动补全。

yolov5网络结构图介绍

        yolov5是一种单阶段目标检测算法,它在YOLOv4的基础上增加了focus结构,构建了两个CSP结构。YOLOv5网络包含四个通用模块以及六个基本组件,其中四个通用模块的网络结构图如下:

图1

         其中,四个大模块具体包括:①输入端:输入图像,输入图像的大小为608*608,在这个阶段有一个图像预处理过程,如图1a所示。②基准网络:该模块用于提取一些通用的特征表示,它是一个性能优良的分类器网络,如图1b所示。③Neck网络:该网络位于基准网络和头部网络的中间,它可以用来进一步提高特征的多样性和稳健性,如图1c所示。④头部输出:这里用于完成目标检测结果的输出。如图1c所示

六个基本组件如图2所示:

        六个基本组件包括:①CBL:CBL模块由conv+bn+leakyrelu激活函数组成,如图2a所示。②Res单元:借用Res网络中的残差结构,用于构建深度网络,CBM是残差模块中的一个子模块,如图2b。③CSP1_x:借用CSP网络结构,该模块由CBL模块、Res单元模块和卷积层组成,如图2c。④CSP2_x:借用CSP网络结构,该模块由卷积层和x个Res单元模块组成,如图2d。⑤Focus:该结构首先2连接多个分片结果,然后将其发送到CBL模块,如图2e。⑥SPP:采用1*1、5*5、9*9和13*13的最大集合进行多尺度特征融合,如图2f。

 损失函数

        YOLOv5模型中使用了GIoU损失函数。GIoU的提出是为了缓解IoU损失函数不与检测框重叠时的梯度问题,惩罚项被加入到原始IoU中,如下式:

        其中A是预测框,B是真实框,C是AB的最小包围框。这里GIoU首先试图增加预测框的大小,使其能够与真实框重叠 。

注:进行IoU计算,这将消耗大量的时间来尝试将预测框与真实框接触,影响收敛速度,大家可以改进损失函数。

数据集

        没有自己打标签,上网盗用别人的数据集,

实验内容

实验框架

        本文实验基本流程框架为:①输入数据集图片。②使用YOLOv5算法。③通过对各类标签的训练得到检测模型。④对测试集进行测试。⑤输出结果完成目标检测。具体流程如下:

实验环境 

实验环境
软硬件平台名称
CPUIntel(R) Core(TM) i5-7300HQ CPU @ 2.50GHz 
GPUNVIDIA GeForce GTX 1050
辅助工具matplotlib,opencv,tensorboard
框架PyTorch

实验结果

(1)实验总共分摄像头检测、图片检测、还有结果保存显示,最后退出按钮,其中GUI显示界面如下图所示:

 (2)摄像头检测结果显示

   ①可知已经佩戴口罩,masked

②没有戴口罩,检测结果为,no_mask

2.图片检测(测试集)

(1)如下是没有戴口罩的图像检测,no_mask, 希望各位伙伴出门记得戴口罩哦,做好自我防护

(2)如下是佩戴口罩的图像检测,显示已经佩戴口罩,masked

 

主函数代码:main.py

import os
import sys
import torch

from PyQt5.QtWidgets import QPushButton, QVBoxLayout, QWidget, QApplication
from detect import run
from PyQt5.QtGui import QIcon


if torch.cuda.is_available():
    dev = '0'
else:
    dev = 'cpu'
run_dict = {
    'weights': 'kid.pt',
    'source': 0,
    'imgsz': [640, 640],
    'conf_thres': 0.60,
    'iou_thres': 0.40,
    'max_det': 10,
    'device': dev,
    'view_img': False,
    'save_txt': False,
    'save_conf': False,
    'save_crop': False,
    'nosave': True,
    'classes': None,
    'agnostic_nms': False,
    'augment': False,
    'visualize': False,
    'update': False,
    'project': 'runs/detect',
    'name': 'exp',
    'exist_ok': False,
    'line_thickness': 3,
    'hide_labels': False,
    'hide_conf': False,
    'half': False,
}

run_dict_file = {
    'weights': 'kid.pt',
    'source': 'C:/',
    'imgsz': [640, 640],
    'conf_thres': 0.60,
    'iou_thres': 0.40,
    'max_det': 10,
    'device': dev,
    'view_img': False,
    'save_txt': False,
    'save_conf': False,
    'save_crop': False,
    'nosave': False,
    'classes': None,
    'agnostic_nms': False,
    'augment': False,
    'visualize': False,
    'update': False,
    'project': 'runs/detect',
    'name': 'exp',
    'exist_ok': False,
    'line_thickness': 3,
    'hide_labels': False,
    'hide_conf': False,
    'half': False,
}

class WindowClass(QWidget):
    def __init__(self,parent=None):
        super(WindowClass, self).__init__(parent)
        self.setWindowTitle('基于yolov5的口罩检测项目')
        self.setWindowIcon(QIcon('master.jpg'))
        self.btn_1 = QPushButton("摄像头检测")
        self.btn_2 = QPushButton("图片检测")
        self.btn_3 = QPushButton("结果显示")
        self.btn_4 = QPushButton("退出")


        self.btn_1.setCheckable(True)
        self.btn_1.toggle()

        self.btn_1.clicked.connect(lambda :self.wichBtn(self.btn_1))
        self.btn_2.clicked.connect(lambda :self.wichBtn(self.btn_2))
        self.btn_3.clicked.connect(lambda :self.wichBtn(self.btn_3))
        self.btn_4.clicked.connect(lambda :self.wichBtn(self.btn_4))

        self.resize(350,300)
        layout=QVBoxLayout()
        layout.addWidget(self.btn_1)
        layout.addWidget(self.btn_2)
        layout.addWidget(self.btn_3)
        layout.addWidget(self.btn_4)

        self.setLayout(layout)


    def wichBtn(self,btn):
        print("点击的按钮是:" , btn.text())
        if btn.text() == '退出':
            sys.exit()
        if btn.text() == '摄像头检测':
            run(**run_dict)
        if btn.text() == '结果显示':
            path = os.getcwd() + r'\runs\detect'
            os.system("start explorer %s" %path)
        if btn.text() == '图片检测':
            run(**run_dict_file)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    win = WindowClass()
    win.show()
    sys.exit(app.exec_())

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

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

相关文章

c++结构体数组sort排序出错?(关于sort排序comp比较器的严格弱排序性质)

文章目录sort的严格弱排序的性质无效的比较器(Invalid comparator)正确的比较器sort的严格弱排序的性质 我在给结构体数组排序的时候,自定义了sort函数的排序法则,我的结构体如下定义: struct score {int a, b, c;//…

English Learning - L1-8 时态(上) 2022.12.29 周四

English Learning - L1-8 时态(上) 2022.12.29 周四8 时态为什么时态难学?什么是时态?如何套用时态表8.1 一般时态核心思维(一) 一般现在时核心思维用法1. 普遍的事实和真理2. 重复活动(习惯&am…

166页7万字智慧工厂可视化解决方案

【版权声明】本资料来源网络,仅用于行业知识分享,供个人学习参考,请勿商用。【侵删致歉】如有侵权请联系小编,将在收到信息后第一时间进行删除!完整资料领取见文末,部分资料内容: 第 一 章 应用…

QT VS移植过程中出现的问题以及解决记录

目录 一、无法定位程序输入点于动态链接库 二、E1696 无法打开 源 文件 “QString“ 三、编译Qt项目提示 error MSB6006: “cmd.exe”已退出 四、禁止显示状态 错误 MSB8036 找不到 Windows SDK 五、E2512 功能测试宏的参数必须是简单标识符 六、Qt VS中双击ui文件无法打…

【计算机模型机设计】单周期MIPS CPU设计报告

2022年结束了,过去一年确实发生了很多事情,开心的、伤心的、激动的、平凡的…这些都已经成为过去了,只希望在新的一年里,能够多一些开心,少一些emo,做一些自己喜欢的事情。 其实说实话,感觉我的…

Linux驱动之平台总线

文章目录前言一、什么是平台总线?二、平台总线相关的结构体三、平台总线的注册和注销四、总线平台的框架总结前言 一个完整的驱动程序总是由三部分组成:设备、总线、驱动 设备就好比我们的硬件:比如oled ,那么总线就相当于iic总线…

Faster RCNN网络源码解读(Ⅲ) --- 如何搭建自己的数据集

目录 一、如何生成类似pascal voc一样结构的文件(split_data.py) 二、如何创建属于自己的数据集(my_dataset.py) 2.1 代码 2.2 代码解释 2.2.1 初始化函数__init__ 2.2.2 parse_xml_to_dict函数(解析xml文件&…

35岁程序员还能找到工作吗?60%选择转岗项目经理!

我因为工作关系接触过大把的程序员朋友,知道他们都有35岁年龄焦虑,曾经他们在群里调侃程序员的尽头是开出租车和开饭店。毕竟一个公司的CTO只有一个,随着年龄的增长他们的体力和学新的技术都会明显吃力,慢慢就承受不起失业&#x…

[极客大挑战 2019]Havefun1、EasySQL(BUUCTF)

前言: 这篇文章还是是为了帮助一些 像我这样的菜鸟 找到简单的题解 今天是2022年的最后一天, 这一年我居然写了72篇文章 获得5枚勋章 还多了14个粉丝 好了不说了,上水题的题解 EasySQL题目描述 解题工具: 不需什么工具,如题名easy …

元宇宙产业委员会发布《第一届第六次主任委员会议公报》

2022年12月29日中国移动通信联合会元宇宙产业工作委员会第一届第六次主任委员会议书面召开,共同主席3人、学术指导3人、产业指导3人,联席主任委员3人、执行主任委员4人、常务副主任委员9家/人、副主任委员25家/人均以通信方式出席会议并表决相关事项。 …

深入分析Linux虚拟化KVM-Qemu之ARMv8虚拟化

说明: KVM版本:5.9.1 QEMU版本:5.0.0 工具:Source Insight 3.5, Visio 1. 概述 KVM虚拟化离不开底层硬件的支持,本文将介绍ARMv8架构处理器对虚拟化的支持,包括内存虚拟化、中断虚拟化、I/O虚…

BM33 二叉树的镜像

题目 操作给定的二叉树,将其变换为源二叉树的镜像。 数据范围:二叉树的节点数 0≤n≤1000, 二叉树每个节点的值 0≤val≤1000。 要求: 空间复杂度 O(n)。本题也有原地操作,即空间复杂度 O(1)的解法,时间…

windows系统中安装maven用来编译项目

1为什么要安装maven 作为一个编程小白,我们先看一下以前学java的时候,下载一个项目源码,是不是需要把所依赖的第三方jar包一起跟着源码打包放一起,这样别人的代码才能运行起来。这种方式不利于对jar包的管理,后来就出现…

力扣sql入门篇(三)

力扣sql入门篇(三) 1 修复表中的名字 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 1.2 示例sql语句 SELECT user_id,CONCAT(upper(substring(name,1,1)),lower(substring(name,2,length(name)-1))) name FROM Users ORDER BY user_id;1.3 运行截图 2 按日期分组销…

计算机网络学习笔记(谢希仁版本)

计算机网络学习笔记 1. 概述 1.1 计算机网络在信息时代的作用 互联网基本特点: 连通性:互联网上用户不管距离多远,都能通信,就像这些用户终端都彼此连通 共享性:指资源共享,包含信息、软件、硬件等共享…

WebRTC的拥塞控制技术(Congestion Control)

\1. 概述 对于共享网络资源的各类应用来说,拥塞控制技术的使用有利于提高带宽利用率,同时也使得终端用户在使用网络时能够获得更好的体验。在协议层面上拥塞控制是TCP的一个总要的组成部分;但是对于非面向链接的传输层协议,如UDP&…

智慧城管违规摆摊沿街晾晒识别检测 python

智慧城管违规摆摊沿街晾晒识别检测通过opencvpython对现场画面中进行7*24小时不间断实时监测,当opencvpython城管违规摆摊沿街晾晒识别检测监测到沿街晾晒违规摆摊占道经营时,立即抓拍告警。OpenCV的全称是Open Source Computer Vision Library&#xff…

小侃设计模式(十九)-解释器模式

1.概述 解释器模式(Interpreter Pattern)是一种使用相对较少的模式,主要使用在编译解释等场景,例如:编译器、规则引擎解释、正则表达式解析等,这些语言又被称为领域特定语言(Domain Specific L…

【数据结构与算法】数据结构介绍与稀疏数组相关操作

文章目录一 数据结构介绍1 数据结构和算法的重要性2 数据结构和算法的关系3 线性结构和非线性结构(1)线性结构(2)非线性结构二 稀疏数组1 应用场景2 基本概念(1)基本介绍(2)压缩策略…

并发编程——1.进程与线程

目录1.进程与线程1.1.概述1.2.并行与并发本文笔记整理来自黑马视频https://www.bilibili.com/video/BV16J411h7Rd/?p1,相关资料可在视频评论区进行获取。 1.进程与线程 1.1.概述 (1)进程 程序由指令和数据组成,但这些指令要运…