五分钟快速搭建一个实时人脸口罩检测系统(OpenCV+PaddleHub 含源码)
导读
本文主要介绍如何使用OpenCV和PaddleHub实现一个实时人脸口罩检测系统。(公众号:OpenCV与AI深度学习)
背景介绍
从19年疫情爆发到现在,佩戴口罩对大家来说已是常态。应运而生的就有了很多相关应用,如病毒发展预测、口罩佩戴检测以及戴口罩的人脸识别等。
今天介绍的人脸口罩佩戴检测系统主要使用OpenCV和百度飞浆(PaddlePaddle)的PaddleHub提供的检测模型。PaddleHub提供了很多实用的模型,包括图像处理、文字处理、音频处理、视频处理和工业应用等。github地址:https://github.com/PaddlePaddle/PaddleHub
人脸口罩检测
人脸检测部分的模型如下:
红框内的两个模型支持人脸口罩检测,这里选择pyramidbox_lite_server_mask,实现详细步骤:
【1】安装PaddlePaddle、PaddleHub和OpenCV(opencv-python)
pip install paddlepaddle -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host https://pypi.tuna.tsinghua.edu.cn
pip install paddlehub -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host https://pypi.tuna.tsinghua.edu.cn
pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host https://pypi.tuna.tsinghua.edu.cn
本文使用的版本:
PaddlePaddle---2.3.0
PaddleHun---2.2.0
opencv-python---4.6.0.66
注意:安装PaddlePaddle可能会遇到一些问题,导致import paddle失败,大家根据报错信息搜索解决方法即可。
【2】图片人脸口罩检测
准备待测图,运行下面代码,修改图片路径即可:
import paddlehub as hub
import cv2mask_detector = hub.Module(name="pyramidbox_lite_server_mask")
img_path = './imgs/A0.png'
img = cv2.imread(img_path)input_dict = {"data": [img]}
result = mask_detector.face_detection(data=input_dict)count = len(result[0]['data'])
if count < 1:print('There is no face detected!')
else:for i in range(0,count):#print(result[0]['data'][i])label = result[0]['data'][i].get('label')score = float(result[0]['data'][i].get('confidence'))x1 = int(result[0]['data'][i].get('left'))y1 = int(result[0]['data'][i].get('top'))x2 = int(result[0]['data'][i].get('right'))y2 = int(result[0]['data'][i].get('bottom'))cv2.rectangle(img,(x1,y1),(x2,y2),(255,200,0),2)if label == 'NO MASK':cv2.putText(img,label,(x1,y1),0,0.8,(0,0,255),2)else:cv2.putText(img,label,(x1,y1),0,0.8,(0,255,0),2)cv2.imwrite('result.jpg',img)
cv2.imshow('mask-detection', img)
cv2.waitKey()
cv2.destroyAllWindows()
print('Done!')
代码开始第一次会先下载对应的模型到如下位置:
C:\Users\xxx\.paddlehub\modules,以后不用再下载
测试图1:
运行结果:
测试图2:
运行结果:
测试图3:
运行结果:
测试图4:
运行结果:
从上面测试结果来看,效果还不错!
【3】视频或摄像头实时人脸口罩检测
准备测试视频或直接打开摄像头检测,选择对应的代码即可:
cap = cv2.VideoCapture('2.mp4') #视频文件检测
# cap = cv2.VideoCapture(0) #摄像头检测
完整代码:
import paddlehub as hub
import cv2mask_detector = hub.Module(name="pyramidbox_lite_server_mask")def mask_detecion(img):input_dict = {"data": [img]}result = mask_detector.face_detection(data=input_dict) count = len(result[0]['data'])if count < 1:#print('There is no face detected!')passelse:for i in range(0,count):#print(result[0]['data'][i])label = result[0]['data'][i].get('label')score = float(result[0]['data'][i].get('confidence'))x1 = int(result[0]['data'][i].get('left'))y1 = int(result[0]['data'][i].get('top'))x2 = int(result[0]['data'][i].get('right'))y2 = int(result[0]['data'][i].get('bottom'))cv2.rectangle(img,(x1,y1),(x2,y2),(255,200,0),2)if label == 'NO MASK':cv2.putText(img,label,(x1,y1),0,0.8,(0,0,255),2)else:cv2.putText(img,label,(x1,y1),0,0.8,(0,255,0),2)return imgif __name__ == '__main__':cap = cv2.VideoCapture('2.mp4') #视频文件检测#cap = cv2.VideoCapture(0) #摄像头检测if(cap.isOpened()): #视频打开成功while(True):ret,frame = cap.read()#读取一帧result = mask_detecion(frame)cv2.imshow('mask_detection',result)if cv2.waitKey(1)&0xFF ==27: #按下Esc键退出breakelse:print ('open video/camera failed!')cap.release()cv2.destroyAllWindows()
测试结果:
下载1:Pytoch常用函数手册
在「OpenCV与AI深度」号后台回复:Pytorch函数手册,能够学习下载全网第一份Pytorch函数常用手册,包括Tensors介绍、基础函数介绍、数据处理函数、优化函数、CUDA编程、多处理等十四章内容。
下载2:145个OpenCV实例应用代码
在「OpenCV与AI深入」公众号后台回复:OpenCV145,能够学习下载145个OpenCV实例应用代码(Python和C++双语言实现)。
五分钟快速搭建一个实时人脸口罩检测系统(OpenCV+PaddleHub 含源码)相关推荐
- 如何快速搭建一个完整的移动直播系统?
**如何快速搭建一个完整的移动直播系统?** 原文连接:http://toutiao.com/a6301796359717945601/ http://toutiao.com/a62784095597 ...
- 如何快速搭建一个 linux 全方位资源监控系统并带有炫酷的表盘图形统计?
如何快速搭建一个 linux 全方位资源监控系统并带有炫酷的表盘图形统计? 使用prometheus.grafana或者zabbix 这些监控软件,也是非常不错的一个选择,但是还有更简单.更小巧的统计 ...
- 2 小时快速搭建一个高可用的 IM 系统
知道的越多,不知道的就越多,业余的像一棵小草! 编辑:业余草 来源:https://www.xttblog.com/?p=4994 本文快速搭建的 IM 系统也是使用 Go 语言来快速实现的,这里先和 ...
- 利用多线程爬虫搭建代理ip池的两种方法(含源码)
搭建爬虫代理ip池的两种方法(含源码) 前言 一.ip池是什么? 二.爬取原理 三.使用步骤 方法一 爬取网站https://www.kuaidaili.com/ 验证 存取到mysql 方法二 爬取 ...
- 五分钟快速搭建Serverless免费邮件服务
1. 引言 本文将带你快速基于 Azure Function 和 SendGrid 构建一个免费的Serverless(无服务器)的邮件发送服务,让你感受下Serverless的强大之处. 该服务可以 ...
- FTP服务器—(5分钟快速搭建一个FTP服务器)
一.什么是FTP FTP(File Transfer Protocol)是TCP/IP网络上两台计算机传送文件的协议,使得主机间可以共享文件. 二.搭建前期准备 1.首先打开控制面板找到"程 ...
- 【YOLOv5】LabVIEW+YOLOv5快速实现实时物体识别(Object Detection)含源码
文章目录 前言 一.关于YOLOv5 二.YOLOv5模型的获取 1.下载源码 2.安装模块 3.下载预训练模型 4.转换为onnx模型 三.LabVIEW调用YOLOv5模型实现实时物体识别(yol ...
- java制作管理系统视频_阶段1:手把手快速做一个Java swing mysql学生信息管理系统附带完整源码及视频开发教程【猿来入此自营】...
<p> <span style="color:#666666;font-family:"font-size:16px;background-color:#FFFF ...
- ADI Blackfin DSP处理器-BF533的开发详解21:RTC实时时钟的原理及应用(含源码)
硬件准备 ADSP-EDU-BF533:BF533开发板 AD-HP530ICE:ADI DSP仿真器 软件准备 Visual DSP++软件 硬件链接 硬件设计原理图 功能介绍 ADSP-BF53x ...
最新文章
- SAP MM PR单据类型的配置里‘Control’和’Doc.Type’字段的作用?
- SPCOMM的一些用法注意
- 数据结构 - 把二元查找树转变成排序的双向链表(C++)
- 云信市场运营总监:产品运营不得不避免的5个大坑
- log4j2.xml
- webpack(1)-简介和基础知识
- 自定义背景android,Android自定义Button并设置不同背景图片的方法
- 学三极管能遇到这篇巧文,我太幸福了!
- 工作总结1:代码中漫花谷出现很多NBSP
- oracle+视图+图形化,如何利用Object Browser图形化工具提高Oracle开发工作效率(二)对象创建管理篇...
- 路径规划之DWA类算法简述
- Vue CLI安装 Vue项目创建 Vue Devtools安装
- vray渲染器的工作流程你清楚吗?
- BMW Trojan 样本分析
- 关于安装Spacy以及de和en模块遇到的坑---附最终解决方案
- [Git] 009 逆转未来
- flink流处理示例开发
- 打开catia界面全是白色怎么办_CATIA复合材料设计教程:1.软件安装
- 李宏毅ML2021 HW7 BERT-Question Answering
- C# Socket 长连接设置Keepalive
热门文章
- oracle 12cdba pdf,【C26】《深入理解Oracle12c数据库管理》PDF 下载
- 【Java UI】智能手表如何实现负一屏功能
- Python读取txt文件数据 每行以空格间隔(列表推导式)
- bios sgx需要开启吗_BIOS中设置内存的XMP模式有什么用?
- 通过freemaker导出word文档SpringBoot+idea,做成浏览器下载
- 网付刷脸支付│2021年,刷脸支付代理的机会在哪里?
- diff命令比较两个文件的不同
- 偶是个女程序员,能不能转行,转行了能做什么呢?
- excel smart流程图增加_大神们原来是这样画出流程图的,怪不得画的又快又好看!...
- 「学编程常见问题」学Java要准备什么配置的电脑?