导读

本文主要介绍如何使用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 含源码)相关推荐

  1. 如何快速搭建一个完整的移动直播系统?

    **如何快速搭建一个完整的移动直播系统?** 原文连接:http://toutiao.com/a6301796359717945601/ http://toutiao.com/a62784095597 ...

  2. 如何快速搭建一个 linux 全方位资源监控系统并带有炫酷的表盘图形统计?

    如何快速搭建一个 linux 全方位资源监控系统并带有炫酷的表盘图形统计? 使用prometheus.grafana或者zabbix 这些监控软件,也是非常不错的一个选择,但是还有更简单.更小巧的统计 ...

  3. 2 小时快速搭建一个高可用的 IM 系统

    知道的越多,不知道的就越多,业余的像一棵小草! 编辑:业余草 来源:https://www.xttblog.com/?p=4994 本文快速搭建的 IM 系统也是使用 Go 语言来快速实现的,这里先和 ...

  4. 利用多线程爬虫搭建代理ip池的两种方法(含源码)

    搭建爬虫代理ip池的两种方法(含源码) 前言 一.ip池是什么? 二.爬取原理 三.使用步骤 方法一 爬取网站https://www.kuaidaili.com/ 验证 存取到mysql 方法二 爬取 ...

  5. 五分钟快速搭建Serverless免费邮件服务

    1. 引言 本文将带你快速基于 Azure Function 和 SendGrid 构建一个免费的Serverless(无服务器)的邮件发送服务,让你感受下Serverless的强大之处. 该服务可以 ...

  6. FTP服务器—(5分钟快速搭建一个FTP服务器)

    一.什么是FTP FTP(File Transfer Protocol)是TCP/IP网络上两台计算机传送文件的协议,使得主机间可以共享文件. 二.搭建前期准备 1.首先打开控制面板找到"程 ...

  7. 【YOLOv5】LabVIEW+YOLOv5快速实现实时物体识别(Object Detection)含源码

    文章目录 前言 一.关于YOLOv5 二.YOLOv5模型的获取 1.下载源码 2.安装模块 3.下载预训练模型 4.转换为onnx模型 三.LabVIEW调用YOLOv5模型实现实时物体识别(yol ...

  8. java制作管理系统视频_阶段1:手把手快速做一个Java swing mysql学生信息管理系统附带完整源码及视频开发教程【猿来入此自营】...

    <p> <span style="color:#666666;font-family:"font-size:16px;background-color:#FFFF ...

  9. ADI Blackfin DSP处理器-BF533的开发详解21:RTC实时时钟的原理及应用(含源码)

    硬件准备 ADSP-EDU-BF533:BF533开发板 AD-HP530ICE:ADI DSP仿真器 软件准备 Visual DSP++软件 硬件链接 硬件设计原理图 功能介绍 ADSP-BF53x ...

最新文章

  1. SAP MM PR单据类型的配置里‘Control’和’Doc.Type’字段的作用?
  2. SPCOMM的一些用法注意
  3. 数据结构 - 把二元查找树转变成排序的双向链表(C++)
  4. 云信市场运营总监:产品运营不得不避免的5个大坑
  5. log4j2.xml
  6. webpack(1)-简介和基础知识
  7. 自定义背景android,Android自定义Button并设置不同背景图片的方法
  8. 学三极管能遇到这篇巧文,我太幸福了!
  9. 工作总结1:代码中漫花谷出现很多NBSP
  10. oracle+视图+图形化,如何利用Object Browser图形化工具提高Oracle开发工作效率(二)对象创建管理篇...
  11. 路径规划之DWA类算法简述
  12. Vue CLI安装 Vue项目创建 Vue Devtools安装
  13. vray渲染器的工作流程你清楚吗?
  14. BMW Trojan 样本分析
  15. 关于安装Spacy以及de和en模块遇到的坑---附最终解决方案
  16. [Git] 009 逆转未来
  17. flink流处理示例开发
  18. 打开catia界面全是白色怎么办_CATIA复合材料设计教程:1.软件安装
  19. 李宏毅ML2021 HW7 BERT-Question Answering
  20. C# Socket 长连接设置Keepalive

热门文章

  1. oracle 12cdba pdf,【C26】《深入理解Oracle12c数据库管理》PDF 下载
  2. 【Java UI】智能手表如何实现负一屏功能
  3. Python读取txt文件数据 每行以空格间隔(列表推导式)
  4. bios sgx需要开启吗_BIOS中设置内存的XMP模式有什么用?
  5. 通过freemaker导出word文档SpringBoot+idea,做成浏览器下载
  6. 网付刷脸支付│2021年,刷脸支付代理的机会在哪里?
  7. diff命令比较两个文件的不同
  8. 偶是个女程序员,能不能转行,转行了能做什么呢?
  9. excel smart流程图增加_大神们原来是这样画出流程图的,怪不得画的又快又好看!...
  10. 「学编程常见问题」学Java要准备什么配置的电脑?