四川网站建设设计公司排名,物理服务器,WordPress在线转义,多语言网站实现文章目录一、项目思路二、环境配置1.1、PaddlenHub模块#xff08;飞桨预训练模型应用工具#xff09;#xff08;1#xff09;预训练模型#xff1a;pyramidbox_lite_mobile_mask#xff08;2#xff09;face_detection人脸检测模型#xff08;默认为 pyramidbox_lite…
文章目录一、项目思路二、环境配置1.1、PaddlenHub模块飞桨预训练模型应用工具1预训练模型pyramidbox_lite_mobile_mask2face_detection人脸检测模型默认为 pyramidbox_lite_mobile3PaddleHub与PytorchHub的区别4安装paddlehub paddlepaddle1.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是针对于移动端优化过的模型适合部署于移动端或者边缘检测等算力受限的设备上。可用于检测人脸是否佩戴口罩。 2face_detection人脸检测模型默认为 pyramidbox_lite_mobile
作用识别输入图片中的所有的人脸并判断有无戴口罩。
def face_detection(imagesNone, pathsNone, batch_size1, use_gpuFalse, visualizationFalse, output_dirdetection_result, use_multi_scaleFalse, shrink0.5, confs_threshold0.6)
输入参数1images (list[numpy.ndarray]): 图片数据ndarray.shape 为 [H, W, C]BGR格式2paths (list[str]): 图片的路径3batch_size (int): batch 的大小4use_gpu (bool): 是否使用 GPU5visualization (bool): 是否将识别结果保存为图片文件6output_dir (str): 图片的保存路径默认设为 detection_result7use_multi_scale (bool) : 用于设置是否开启多尺度的人脸检测开启多尺度人脸检测能够更好的检测到输入图像中不同尺寸的人脸但是会增加模型计算量降低预测速度8shrink (float): 用于设置图片的缩放比例该值越大则对于输入图片中的小尺寸人脸有更好的检测效果模型计算成本越高反之则对于大尺寸人脸有更好的检测效果9confs_threshold (float): 置信度的阈值。输出参数res (list[dict]): 识别结果的列表列表中每一个元素为 dict各字段为:1path (str): 原输入图片的路径2data (list): 检测结果list的每一个元素为 dict各字段为:11、label (str): 识别标签为 NO MASK 或者 MASK22、confidence (float): 识别的置信度33、left (int): 边界框的左上角x坐标44、top (int): 边界框的左上角y坐标55、right (int): 边界框的右下角x坐标66、bottom (int): 边界框的右下角y坐标3PaddleHub与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是播放标志的组合。1SND_APPLICATION用应用程序指定的关联来播放声音。2SND_ALIASpszSound参数指定了注册表或WIN.INI中的系统事件的别名。3SND_ALIAS_IDpszSound参数指定了预定义的声音标识符。4SND_ASYNC用异步方式播放声音PlaySound函数在开始播放后立即返回。5SND_FILENAMEpszSound参数指定了WAVE文件名。6SND_LOOP重复播放声音必须与SND_ASYNC标志一块使用。7SND_MEMORY播放载入到内存中的声音此时pszSound是指向声音数据的指针。8SND_NODEFAULT不播放缺省声音若无此标志则PlaySound在没找到声音时会播放缺省声音。9SND_NOSTOPPlaySound不打断原来的声音播出并立即返回FALSE。10SND_NOWAIT如果驱动程序正忙则函数就不播放声音并立即返回。11SND_PURGE停止所有与调用任务有关的声音。若参数pszSound为NULL就停止所有的声音否则停止pszSound指定的声音。12SND_RESOURCEpszSound参数是WAVE资源的标识符这时要用到hmod参数。13SND_SYNC同步播放声音在播放完后PlaySound函数才返回。 1playsound安装WIN R cmd 运行 pip install playsound。** 2playsound功能演示一秒提示音下载地址
# 注意不能写成import playsound, 将导致报错。from playsound import playsound
playsound(path/play.mp3)运行后若出现以下报错 报错原因直接更改语音包的后缀进行格式转换将导致报错。 解决方法音频格式转换地址 三、项目实战基于PaddlenHub的口罩检测与语音提示Opencv import paddlehub
from playsound import playsound
import cv2
################################################################################################
module paddlehub.Module(namepyramidbox_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(datainput_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 或者 MASKleft 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(rC:\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() # 释放内存