【Pytorch项目实战】基于PaddlenHub的口罩检测与语音提示

news2024/10/5 16:23:55

文章目录

  • 一、项目思路
  • 二、环境配置
    • 1.1、PaddlenHub模块(飞桨预训练模型应用工具)
      • (1)预训练模型:pyramidbox_lite_mobile_mask
      • (2)face_detection人脸检测模型(默认为 pyramidbox_lite_mobile)
      • (3)PaddleHub与PytorchHub的区别
      • (4)安装(paddlehub + paddlepaddle)
    • 1.2、PlaySound模块(音频播放)
  • 三、项目实战:基于PaddlenHub的口罩检测与语音提示(Opencv)

一、项目思路

(1)调用PaddlenHub模块口罩检测预训练模型,通过PaddlenHub.face_detectionAPI,完成图片检测或实时检测任务。
(2)若未佩戴口罩,则使用PlaySound模块播放录制的MP3文件(一秒钟提示音),完成警告提示。

二、环境配置

1.1、PaddlenHub模块(飞桨预训练模型应用工具)

  • PaddleHub 是基于 PaddlePaddle 开发的预训练模型管理工具。PaddlenHub官网
  • 配合使用 Fine-tune API,快速完成迁移学习到应用部署的全流程工作。让预训练模型能更好地服务于用户特定场景的应用,也让开发者体验到大规模预训练模型的价值。
  • PaddleHub 目前提供的预训练模型覆盖了图像分类、目标检测、词法分析、Transformer、情感分析五大类别

(1)预训练模型:pyramidbox_lite_mobile_mask

PyramidBox-Lite是基于2018年百度发表于计算机视觉顶级会议ECCV 的论文所提出的PyramidBox网络而研发的轻量级模型。

  • 模型基于主干网络FaceBoxes,对于光照、口罩遮挡、表情变化、尺度变化等常见问题具有很强的鲁棒性。
  • 该PaddleHub Module是针对于移动端优化过的模型,适合部署于移动端或者边缘检测等算力受限的设备上。
  • 可用于检测人脸是否佩戴口罩。

在这里插入图片描述

(2)face_detection人脸检测模型(默认为 pyramidbox_lite_mobile)

作用:识别输入图片中的所有的人脸,并判断有无戴口罩。

def face_detection(images=None, paths=None, batch_size=1, use_gpu=False, 
                   visualization=False, output_dir='detection_result', 
                   use_multi_scale=False, shrink=0.5, confs_threshold=0.6)

"""
输入参数:
		(1)images (list[numpy.ndarray]): 图片数据,ndarray.shape 为 [H, W, C],BGR格式;
		(2)paths (list[str]): 图片的路径;
		(3)batch_size (int): batch 的大小;
		(4)use_gpu (bool): 是否使用 GPU;
		(5)visualization (bool): 是否将识别结果保存为图片文件;
		(6)output_dir (str): 图片的保存路径,默认设为 detection_result;
		(7)use_multi_scale (bool) : 用于设置是否开启多尺度的人脸检测,开启多尺度人脸检测能够更好的检测到输入图像中不同尺寸的人脸,但是会增加模型计算量,降低预测速度;
		(8)shrink (float): 用于设置图片的缩放比例,该值越大,则对于输入图片中的小尺寸人脸有更好的检测效果(模型计算成本越高),反之则对于大尺寸人脸有更好的检测效果;
		(9)confs_threshold (float): 置信度的阈值。

输出参数:res (list[dict]): 识别结果的列表,列表中每一个元素为 dict,各字段为:
		(1)path (str): 原输入图片的路径
		(2)data (list): 检测结果,list的每一个元素为 dict,各字段为:
				11、label (str): 识别标签,为 'NO MASK' 或者 'MASK';
				22、confidence (float): 识别的置信度
				33、left (int): 边界框的左上角x坐标
				44、top (int): 边界框的左上角y坐标
				55、right (int): 边界框的右下角x坐标
				66、bottom (int): 边界框的右下角y坐标
"""

(3)PaddleHub与PytorchHub的区别

在这里插入图片描述
PytorchHub 目前支持18个模型,PaddleHub支持29个。60分钟教你上手PaddleHub

  • PytorchHub涉及的方向更多,但是每个方向的模型并不多,对CV的支持更多;
  • PaddleHub涉及的方向只有两个,CV和NLP,但是对NLP的支持尤其多,高达22个,不仅包括目前最潮的BERT,还有百度自己研发的知识增强语义表示模型Ernie,在多个中文NLP任务中表现超过BERT,除此之外还有对话系统的一系列模型,做智能客服、智能音箱的同学可以使用一下。

对于迁移学习来说,Fine-tune(微调)是必不可少的,虽然我们有预训练的模型,但是新任务的场景和数据都不相同,直接使用预训练模型其实很难得到很好的效果。


(4)安装(paddlehub + paddlepaddle)

  • 第一步:paddlehub安装
pip install paddlehub

安装后若提示:ModuleNotFoundError: No module named ‘paddle‘,则需要安装paddlepaddle。
请添加图片描述

  • 第二步:paddlepaddle安装
cpu:	pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple 
gpu:	pip install paddlepaddle-gpu -i https://mirror.baidu.com/pypi/simple 

1.2、PlaySound模块(音频播放)

PlaySound是Windows用于播放音乐的API函数。添加模块后,检测速度会有所延迟。

函数:BOOL PlaySound(LPCSTR pszSound, HMODULE hmod, DWORD fdwSound)

  • 参数pszSound是指定了要播放声音的字符串。(1)该参数可以是WAVE文件的名字(2)或是WAV资源的名字(3)或是内存中声音数据的指针(4)或是在系统注册表WIN.INI中定义的系统事件声音(5)如果该参数为NULL,则停止正在播放的声音。
  • 参数hmod是应用程序的实例句柄,当播放WAV资源时要用到该参数,否则它必须为NULL。
  • 参数fdwSound是播放标志的组合。(1)SND_APPLICATION:用应用程序指定的关联来播放声音。(2)SND_ALIAS:pszSound参数指定了注册表或WIN.INI中的系统事件的别名。(3)SND_ALIAS_ID:pszSound参数指定了预定义的声音标识符。(4)SND_ASYNC:用异步方式播放声音,PlaySound函数在开始播放后立即返回。(5)SND_FILENAME:pszSound参数指定了WAVE文件名。(6)SND_LOOP:重复播放声音,必须与SND_ASYNC标志一块使用。(7)SND_MEMORY:播放载入到内存中的声音,此时pszSound是指向声音数据的指针。(8)SND_NODEFAULT:不播放缺省声音,若无此标志,则PlaySound在没找到声音时会播放缺省声音。(9)SND_NOSTOP:PlaySound不打断原来的声音播出并立即返回FALSE。(10)SND_NOWAIT:如果驱动程序正忙则函数就不播放声音并立即返回。(11)SND_PURGE:停止所有与调用任务有关的声音。若参数pszSound为NULL,就停止所有的声音,否则,停止pszSound指定的声音。(12)SND_RESOURCE:pszSound参数是WAVE资源的标识符,这时要用到hmod参数。(13)SND_SYNC:同步播放声音,在播放完后PlaySound函数才返回。

(1)playsound安装WIN +R + cmd + 运行 + pip install playsound。**
(2)playsound功能演示:一秒提示音下载地址

# 注意不能写成:import playsound, 将导致报错。

from playsound import playsound
playsound('path/play.mp3')

运行后若出现以下报错:
在这里插入图片描述
报错原因:直接更改语音包的后缀进行格式转换,将导致报错。
解决方法:音频格式转换地址

三、项目实战:基于PaddlenHub的口罩检测与语音提示(Opencv)

在这里插入图片描述

import paddlehub
from playsound import playsound
import cv2
################################################################################################
module = paddlehub.Module(name="pyramidbox_lite_mobile_mask")       # 调用paddlehub模块中的口罩检测模型:pyramidbox_lite_mobile_mask。
cap = cv2.VideoCapture(0)                                           # 调用本机摄像头

# 循环判断面部区域位置
while cap.isOpened():
    frame = cap.read()[1]                                   # 读取帧图像
    input_dict = {'data': [frame]}                          # 字典的形式存储
    results = module.face_detection(data=input_dict)        # face_detection:人脸检测模型
    result = results[0]                                     # 获取识别后的:标签、置信度、四元数组(位置)

    # waitKey可以控制视频的播放速度,数值越小,播放速度越快
    k = cv2.waitKey(1) & 0xFF                               # 0xFF == 27    表示退出键(Esc)

    # 若检测结果存在(即当前图像中是否有人脸)
    if result['data'] != []:                                # 判断字典中的某个键对应的值是否为空
        label = result['data'][0]['label']                  # label(str): 识别标签:'NO MASK' 或者 'MASK';
        left = result['data'][0]['left']                    # left(int): 边界框的左上角x坐标
        right = result['data'][0]['right']                  # top(int): 边界框的左上角y坐标
        top = result['data'][0]['top']                      # right(int): 边界框的右下角x坐标
        bottom = result['data'][0]['bottom']                # bottom(int): 边界框的右下角y坐标

        # 当判断为肯定时,绘制绿色矩形及文字
        if label == 'MASK':
            color = (0, 255, 0)
            color2 = (0, 255, 0)

        # 当判断为否定时,绘制红色矩形及文字
        if label == 'NO MASK':
            color = (0, 0, 255)
            color2 = (0, 0, 255)
            playsound(r'C:\Users\my\Desktop\output.mp3')        # 打开语音文件

        # 绘制矩形框 + 添加文本内容
        cv2.rectangle(frame, (left, top), (right, bottom), color, 3)
        cv2.putText(frame, label, (left, top - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.8, color2, 2)
        cv2.imshow('martial art', frame)

        # 监听键盘事件: 按空格键退出.
        if k == ord(' '):
            break

cap.release()               # 释放摄像头
cv2.destroyAllWindows()     # 释放内存

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

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

相关文章

TCP的三次握手、四次挥手

文章目录前言一、一些重要字段的含义二、TCP总括图三、三次握手详细过程1.第一次握手2.第二次握手3.第三次握手三次握手小结4.为什么必须要进行三次握手,两次或四次就不行四、四次挥手1.第一次挥手2.第二次挥手3.第三次挥手4.第四次挥手四次挥手简述前言 一个TCP的…

MySQL中自带的数据库表相关介绍

mysql的自带数据库表主要有以下几个: (1)information_schema (2)performance_schema (3)mysql (4)sys (5)可能存在空数据库test 一、informa…

预告|2月25日 第四届OpenI/O 启智开发者大会昇腾人工智能应用专场邀您共启数字未来!

如今,人工智能早已脱离科幻小说中的虚构想象,成为可触及的现实,并渗透到我们的生活。随着人工智能的发展,我们正在迎来一个全新的时代——数智化时代。数据、信息和知识是这个时代的核心资源,而人工智能则是这些资源的…

【TensorFlow 】查看Tensorflow和python对应版本、将现有的TensorFlow更新到指定的版本

1、查看Tensorflow和python对应版本 1.1这里我是在TensorFlow官方网址产看的 1、打开官方网址 https://pypi.org/project/tensorflow/1.1.0rc2/#files但是这个网址好像打不开,点击会出现这样 问题不大 输入Tensorflow然后点击搜索,就会跳转到https://p…

[蓝桥杯 2015 省 B] 移动距离

蓝桥杯 2015 年省赛 B 组 H 题题目描述X 星球居民小区的楼房全是一样的,并且按矩阵样式排列。其楼房的编号为 1,2,3,⋯ 。当排满一行时,从下一行相邻的楼往反方向排号。比如:当小区排号宽度为 6 时,开始情形如下:我们的…

复旦发布国内首个类ChatGPT模型MOSS,和《流浪地球》有关?

昨晚,复旦大学自然语言处理实验室邱锡鹏教授团队发布国内首个类ChatGPT模型MOSS,现已发布至公开平台https://moss.fastnlp.top/ ,邀公众参与内测。 MOSS和ChatGPT一样,开发的过程也包括自然语言模型的基座训练、理解人类意图的对…

XXL-JOB 分布式任务调度平台

1.什么是XXL-JOB XXL-JOB 是由国人许雪里开发的一个 开源的轻量级分布式任务调度平台。 学习简单、轻量级、易扩展,开箱即用,现已开放源代码并接入200多家公司线上产品线 2.XXL-JOB设计思想 a.将调度行为抽象为调度中心公共平台,而平台本身不承担业务…

[oeasy]python0089_大型机的衰落_Dec小型机崛起_PDP_VAX网络

编码进化 回忆上次内容 上次 回顾了 计算机存储单位的演变 最小的读写单位 是 bit 8-bit 固定下来 成为了字节(Byte) 位数容量8-bit1Byte1024Byte1 KB1024 KB1 MB1024 MB1 GB1024 GB1 TB 存储字符时 第1位 是 标志位后7位 是 ascii具体的值 可以用 1Byte 存储 计算机之间 …

Java:什么是异常?什么是异常处理?

Java中的异常处理不是一个容易的话题。初学者很难理解,即使是经验丰富的开发人员也可以花几个小时讨论应该如何抛出或处理哪些Java异常。这就是为什么大多数开发团队都有自己的一套关于如何使用它们的规则。如果你是一个团队的新手,你可能会惊讶于这些规…

HR:你会Python数据分析吗?

之前看到一个段子: 以前去面试,HR会问你“精通office吗?” 现在去面试,HR会问你“会Python数据分析吗?” 图片来源:网络 大数据时代,无论是数据分析师、研发,到运营、市场、产品经…

AI 在编程、写作、绘画领域的占卜:从 GitHub Copilot 到 ChatGPT,再到 Stable Diffusion...

PS:就当前节点(2023.02.22)而言,我虽然研究过一段时间传统的机器学习,但是并不擅长深度学习等领域,所以很多 AI 领域相关的词汇,我是不擅长的,只为自己总结一下,方便在未…

Android的NDK之编译LED的动态库so和使用so

文章目录 目录 文章目录 基础信息 我的AS基础信息 gradle插件版本 硬件信息 基础知识 externalNativeBuild 具体操作步骤 下载NDK库 加入JNI相关C语言代码和mk文件 local.properties里配置ndk路径 gradle配置 配置externalNativeBuild 打包动态库 引用第三方so库…

为什么要使用微服务架构?【微服务架构出现的背景】

随着互联网技术的发展,传统的应用架构已满足不了实际需求,微服务架构就随之产生。那么传统应用架构到底出了什么问题呢?又如何解决?接下来我们将从传统单体架构的问题开始,对为什么需要微服务架构进行详细讲解。传统单体应用架构的问题通常…

钓鱼网站+persistence植入后门程序+创建用户

本实验实现1: 利用MS14-064漏洞,会生成一个网址,诱导用户点击,打开后,会直接连接到发起攻击的主机上,即可攻击成功。 本实验实现2: 一旦入侵成功,则拿到控制目标主机的部分权限&…

春种一粒粟:企业如何修炼好云原生内功?

日月盈昃,辰宿列张。寒来暑往,秋收冬藏。《千字文》里蕴藏了一种人与天地之间共处的智慧,那就是想要收获粮食,一定要提前播种。农耕如此,百业如此,数字化创新也是一样。数字化技术,已经成为全球…

速来!掘金数据时代2022年度隐私计算评选活动火热报名中!

开放隐私计算 开放隐私计算开放隐私计算OpenMPC是国内第一个且影响力最大的隐私计算开放社区。社区秉承开放共享的精神,专注于隐私计算行业的研究与布道。社区致力于隐私计算技术的传播,愿成为中国 “隐私计算最后一公里的服务区”。183篇原创内容公众号…

一月券商金工精选

✦研报目录✦ ✦简述✦ 按发布时间排序 国盛证券 “薪火”量化分析系列研究(二)-票据逾期数据中的选股信息 发布日期:2023-01-04 关键词:股票、票据、票据预期 主要内容:本文深入探讨了“票据持续逾期名单”这一…

CentOS7.6 MySQL8安装

1 检查是否安装过 MySQL rpm -qa | grep -i mysqlmariadb rpm -qa | grep mariadb2 卸载之前的安装 MySQL rpm -e --nodeps 软件名 //强力删除,对相关依赖的文件也进行强力删除卸载 rpm -e --nodeps mariadb-libs-5.5.60-1.el7_5.x86_643 官网下载 MySQL :: D…

kettle简单使用-将CSV转换为Excel文件_操作过程---大数据之kettle工作笔记003

做个例子把csv转换为xls文件 可以看到过程 首先右键文件 新建 转换 然后选择核心对象 输入 CSV文件输入 然后选择输出excel输出,拖拽过来 然后按住shift 然后鼠标左键,然后拉出一条线到输出 然后松开的

关于ctf中flask算pin总结

什么是pin码 pin码是flask在开启debug模式下,进行代码调试模式所需的进入密码,需要正确的PIN码才能进入调试模式,可以理解为自带的webshell pin码如何生成 pin码生成要六要素 1.username 在可以任意文件读的条件下读 /etc/passwd进行猜测 2.modname 默…