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

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

文章目录

  • 一、项目思路
  • 二、环境配置
    • 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(' '):breakcap.release()               # 释放摄像头
cv2.destroyAllWindows()     # 释放内存

相关文章:

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

文章目录一、项目思路二、环境配置1.1、PaddlenHub模块(飞桨预训练模型应用工具)(1)预训练模型:pyramidbox_lite_mobile_mask(2)face_detection人脸检测模型(默认为 pyramidbox_lite…...

EasyExcel 让Excel导入导出更简单

一、什么是EasyExcel?二、对比ApachePoi 其他Excel框架 优势在于哪里三、本质上对于原生做了哪些优化?四、有哪些功能五、如何实践? 5.1 常规文件读取5.2 常规文件写入5.3 常规WEB的上传和下载 一、什么是EasyExcel? EasyExcel是对07版POI的提升和优…...

华为OD机试 - 需要广播的服务器数量 | 机试题算法思路 【2023】

最近更新的博客 华为OD机试 - 简易压缩算法(Python) | 机试题算法思路 【2023】 华为OD机试题 - 获取最大软件版本号(JavaScript) 华为OD机试 - 猜字谜(Python) | 机试题+算法思路 【2023】 华为OD机试 - 删除指定目录(Python) | 机试题算法思路 【2023】 华为OD机试 …...

三次握手四次挥手详细解析面试常问

文章目录1.第2次握手传回了ACK,为什么还要传回SYN?2.断开连接-TCP 四次挥手3.为什么要四次挥手?4.为什么不能把服务器发送的 ACK 和 FIN 合并起来,变成三次挥手?5.如果第二次挥手时服务器的 ACK 没有送达客户端&#x…...

组合由于继承

目录 前言: 1.什么是继承? 2.继承的劣势、问题? 3.组合相比继承有哪些优势? 4、如何判断该用组合还是继承? 参考资料 前言: 我们在平时日常开发设计的过程中,经常会有人提到一条经典的设…...

大学计算机基础 知识点总结

一/ 计算机的发展、类型及其应用领域。 1. 计算机(computer)是一种能自动、高速进行大量算术运算和逻辑运算的电子设备。 其特点为:速度快、精度高、存储容量大、通用性强、具有逻辑判断和自动控制能力。 2. 第一台计算机:ENIAC,美国&#…...

手撸React组件库前必须清楚的9个问题

1. 组件库文档问题 以前常用的组件库文档storybook,包括现在也有用dumi、vitepress做组件库文档等。storybook缺点不美观、webpack的热更新太慢,虽然新版本支持了vite提高了速度但还不算稳定。好在各种文档、mdx、测试等组件第三方工具很多集成进去能很…...

试用国内及国外AI绘图软件后的总结

最近AI很火,所以这几天抱着试试看的角度试用了多款AI绘图软件,大概测试了市面上的3款工具吧,3款国外的,1款国内的。因为有对比,波哥也不是专业的评测机构出身,所以这些比对无论是从角度,还是从对…...

DJI 无人机 Onboard SDK ROS 功能包demo运行

DJI 无人机 Onboard SDK ROS 功能包demo运行demo功能准备测试环境运行 dji sdk 节点运行 demo 节点自动飞行任务航点自动飞行兴趣点环绕自动飞行飞行控制本地坐标位置控制搭建好 Onboard SDK ROS 的开发环境后,功能包自身具备一些写好的demo功能案例 dji sdk 的节点…...

揭开JavaWeb中Cookie与Session的神秘面纱

文章目录1,会话跟踪技术的概述2,Cookie2.1 Cookie的基本使用2.2 Cookie的原理分析2.3 Cookie的使用细节2.3.1 Cookie的存活时间2.3.2 Cookie存储中文3,Session3.1 Session的基本使用3.2 Session的原理分析3.3 Session的使用细节3.3.1 Session…...

2023-02-20 Qt 5.13.1 + OpenCV 4.5.4环境编译

引言 OpenCV图像处理在Qt中编译记录。 之前一直是在Python中使用OpenCV,Python中使用某些模块使用pip工具很容易将对应的模块安装在系统中。根据项目需求项目都要转移在国产化中使用,为了适应国产化需求,将代码转移到Qt开发环境中&#xff0c…...

波次分拣系统

一、系统架构: v1.2基站软件管理系统仓库标签v1.4仓库标签二、系统简介: 标签系统主要由标签服务器,基站,电子标签前三部分组成,操作界面借助于京东仓库已有的作业电脑来实现,标签服务器与WMS进行数据对接。…...

【Servlet篇】Request请求转发详细解读

文章目录1. 前言2. 实战案例3. 特点1. 前言 请求转发是一种在服务器内部的资源跳转方式,如图: 上图的大致过程为,浏览器发送请求给服务器,服务器中 a 资源接收到请求,资源 a 处理完请求后将请求发送给资源 b&#xff…...

vector

目录 vector的成员函数: at: ​编辑 size: assign:赋值 insert find? erase swap shrink_to_fit ​编辑 vector的模拟实现: vector的框架: 构造函数: size和capacity r…...

LeetCode——104. 二叉树的最大深度

一、题目 给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/maximum…...

漫画 | Python是一门烂语言?

这个电脑的主人是个程序员,他相继学习了C、Java、Python、Go, 但是似乎总是停留在Hello World的水平。 每天晚上,夜深人静的时候,这些Hello World程序都会热火朝天地聊天但是,这一天发生了可怕的事情随着各个Hello wor…...

2023.2 新方案 java代码混淆 java加密 字符串加密

Java字节码可以反编译,特别是创业公司,很好的项目很容易被别人破解反编译,造成很严重的损失,所以本混淆方案能很好的保护源码,而且在不断迭代,增强混淆效果,异常问题处理,达到保护项目的目的: 本次升级包括: 2023年02年19日 : ht-confusion-project-1.8…...

Swift 周报 第二十三期

前言 本期是 Swift 编辑组自主整理周报的第十四期,每个模块已初步成型。各位读者如果有好的提议,欢迎在文末留言。 欢迎投稿或推荐内容。目前计划每两周周一发布,欢迎志同道合的朋友一起加入周报整理。 勇敢是即便知道好结局不会每每降临在…...

android系统屏幕旋转角度,应用界面横竖屏,设备旋转角度,三者的区别以及使用。

注意区分以下三种概念的区别!!!。以及使用这三种方式判断横竖屏的方式。系统屏幕旋转角度fun getSystemRotation(): Int {val angle (getSystemService(WINDOW_SERVICE) as WindowManager).defaultDisplay.rotation//系统屏幕旋转的角度值re…...

【华为云-开发者专属集市】DevCloud+ECS、MySQL搭建WordPress

文章目录AppBazaar官网选择与购买项目项目概况操作过程购买DevCloud服务创建项目添加制品库应用部署购买ECS添加部署模板并执行任务故障排除安装及访问WordPress登录网站管理后台访问网站完善部署模板资源释放使用总结AppBazaar官网 首先,我们来到AppBazaar的官网&…...

[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?

🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里&#xf…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

企业如何增强终端安全?

在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...

智能AI电话机器人系统的识别能力现状与发展水平

一、引言 随着人工智能技术的飞速发展,AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术,在客户服务、营销推广、信息查询等领域发挥着越来越重要…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下,卢森堡罗伯特舒曼医院(the Robert Schuman Hospitals, HRS)凭借在无菌制剂生产流程中引入增强现实技术(AR)创新项目,荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...

Golang——9、反射和文件操作

反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一:使用Read()读取文件2.3、方式二:bufio读取文件2.4、方式三:os.ReadFile读取2.5、写…...

python爬虫——气象数据爬取

一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用: 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests:发送 …...