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

发布时间:2026/6/10 5:00:08

【OpenCV项目实战】基于PaddlenHub的口罩检测与语音提示 文章目录博主精品专栏导航一、项目思路二、环境配置1.1、PaddlenHub模块飞桨预训练模型应用工具1预训练模型pyramidbox_lite_mobile_mask2face_detection人脸检测模型默认为 pyramidbox_lite_mobile3PaddleHub与PytorchHub的区别4安装paddlehub paddlepaddle1.2、PlaySound模块音频播放三、项目实战基于PaddlenHub的口罩检测与语音提示博主精品专栏导航 【深度学习环境配置】详细教程资源已上传 【深度学习项目实战目录】算法详解 项目详解 数据集 完整源码 【sklearn】线性回归、最小二乘法、岭回归、Lasso回归 【yolo系列详解】yolov1、yolov2、yolov3、yolov4、yolov5、yolov7 卷积神经网络CNN的经典模型 卷积神经网络CNN的实战知识 Pytorch基础全 Opencv图像处理全 Python常用内置函数全 Pillow图像处理PIL.Image类的详细使用一、项目思路1调用PaddlenHub模块的口罩检测预训练模型通过PaddlenHub.face_detectionAPI完成图片检测或实时检测任务。2若未佩戴口罩则使用PlaySound模块播放录制的MP3文件一秒钟提示音完成警告提示。二、环境配置1.1、PaddlenHub模块飞桨预训练模型应用工具PaddleHub 是基于 PaddlePaddle 开发的预训练模型管理工具。PaddlenHub官网配合使用 Fine-tune API快速完成迁移学习到应用部署的全流程工作。让预训练模型能更好地服务于用户特定场景的应用也让开发者体验到大规模预训练模型的价值。PaddleHub 目前提供的预训练模型覆盖了图像分类、目标检测、词法分析、Transformer、情感分析五大类别。1预训练模型pyramidbox_lite_mobile_maskPyramidBox-Lite是基于2018年百度发表于计算机视觉顶级会议ECCV 的论文所提出的PyramidBox网络而研发的轻量级模型。模型基于主干网络FaceBoxes对于光照、口罩遮挡、表情变化、尺度变化等常见问题具有很强的鲁棒性。该PaddleHub Module是针对于移动端优化过的模型适合部署于移动端或者边缘检测等算力受限的设备上。可用于检测人脸是否佩戴口罩。2face_detection人脸检测模型默认为 pyramidbox_lite_mobile作用识别输入图片中的所有的人脸并判断有无戴口罩。defface_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): 是否使用 GPU 5visualization (bool): 是否将识别结果保存为图片文件 6output_dir (str): 图片的保存路径默认设为 detection_result 7use_multi_scale (bool) : 用于设置是否开启多尺度的人脸检测开启多尺度人脸检测能够更好的检测到输入图像中不同尺寸的人脸但是会增加模型计算量降低预测速度 8shrink (float): 用于设置图片的缩放比例该值越大则对于输入图片中的小尺寸人脸有更好的检测效果模型计算成本越高反之则对于大尺寸人脸有更好的检测效果 9confs_threshold (float): 置信度的阈值。 输出参数res (list[dict]): 识别结果的列表列表中每一个元素为 dict各字段为: 1path (str): 原输入图片的路径 2data (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坐标 3PaddleHub与PytorchHub的区别PytorchHub 目前支持18个模型PaddleHub支持29个。60分钟教你上手PaddleHubPytorchHub涉及的方向更多但是每个方向的模型并不多对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/simplegpu:pip install paddlepaddle-gpu-i https://mirror.baidu.com/pypi/simple1.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, 将导致报错。fromplaysoundimportplaysound playsound(path/play.mp3)运行后若出现以下报错报错原因直接更改语音包的后缀进行格式转换将导致报错。解决方法音频格式转换地址三、项目实战基于PaddlenHub的口罩检测与语音提示importpaddlehubfromplaysoundimportplaysoundimportcv2################################################################################################modulepaddlehub.Module(namepyramidbox_lite_mobile_mask)# 调用paddlehub模块中的口罩检测模型pyramidbox_lite_mobile_mask。capcv2.VideoCapture(0)# 调用本机摄像头# 循环判断面部区域位置whilecap.isOpened():framecap.read()[1]# 读取帧图像input_dict{data:[frame]}# 字典的形式存储resultsmodule.face_detection(datainput_dict)# face_detection人脸检测模型resultresults[0]# 获取识别后的标签、置信度、四元数组位置# waitKey可以控制视频的播放速度数值越小播放速度越快kcv2.waitKey(1)0xFF# 0xFF 27 表示退出键Esc# 若检测结果存在即当前图像中是否有人脸ifresult[data]![]:# 判断字典中的某个键对应的值是否为空labelresult[data][0][label]# label(str): 识别标签:NO MASK 或者 MASKleftresult[data][0][left]# left(int): 边界框的左上角x坐标rightresult[data][0][right]# top(int): 边界框的左上角y坐标topresult[data][0][top]# right(int): 边界框的右下角x坐标bottomresult[data][0][bottom]# bottom(int): 边界框的右下角y坐标# 当判断为肯定时绘制绿色矩形及文字iflabelMASK:color(0,255,0)color2(0,255,0)# 当判断为否定时绘制红色矩形及文字iflabelNO 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)# 监听键盘事件: 按空格键退出.ifkord( ):breakcap.release()# 释放摄像头cv2.destroyAllWindows()# 释放内存

相关新闻