欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【GitHub开源项目实践】人脸口罩检测

程序员文章站 2022-07-12 20:57:15
...

昨天在GitHub上看到一个有趣的开源项目,它能检测我们是否有戴口罩,跑起程序测试后,发现识别率挺高的,也适应不同环境;于是分享给大家。

首先感谢AIZOOTech 的开源项目--FaceMaskDetection  ????

人脸口罩检测工程--GitHub地址

测试环境

windows 系统; 软件:pyCharm;    使用模型:tenforflow ;           

先看一下效果:

【GitHub开源项目实践】人脸口罩检测

检测出帅气的胡歌没有带口罩。红色框框是圈出人脸部分,上方的字体:NoMask ,准确率 1 (即有100%把握认为没带口罩)

 

如果在多人的情况下,能检测出来吗?

【GitHub开源项目实践】人脸口罩检测

不错不错,这个模型能同时检测多人的,并且准确高。

 

有人带口罩,有人没带口罩,能检测出来吗?

【GitHub开源项目实践】人脸口罩检测

哇,这个模型很棒。检测出带口罩大叔,和两个没带口罩的小伙子。

 

大家先到网页体验一下呀

https://aizoo.com/face-mask-detection.html

【GitHub开源项目实践】人脸口罩检测

 

 

下面介绍一下此项目:

1)支持5大主流深度学习框架(PyTorch、TensorFlow、MXNet、Keras和Caffe),已经写好接口了;可以根据自身的环境选择合适的框架,比如:TensorFlow;所有模型都在models文件夹下。

2)公开了进8000张的人脸口罩数据和模型,数据集来自于WIDER FaceMAFA数据集, 重新修改了标注并进行了校验(主要是 MAFA和WIDER Face的人脸位置定义不一样,所以进行了修改标注)并将其开源出来。

需要数据的朋友可以去拿,放到了网盘:https://pan.baidu.com/s/1eV07j2Vi8h3mn9X7xUKSgw    

提取码:45ku

 

模型结构

在本项目中使用了SSD类型的架构,为了让模型可以实时的跑在浏览器以及终端设备上,我们将模型设计的非常小,只有101.5万个参数。模型结构在本文附录部分。

本模型输入大小为260x260,主干网络只有8个卷积层,加上定位和分类层,一共只有24层(每层的通道数目基本都是32\64\128),所以模型特别小,只有101.5万参数。模型对于普通人脸基本都能检测出来,但是对于小人脸,检测效果肯定不如大模型。具体效果,大家可以点击以下链接,访问我们的网站在线体验效果。 aizoo.com跑在您浏览器的口罩检测模型

网页使用了Tensorflow.js库,所以模型是完全运行在浏览器里面的。运行速度的快慢,取决于电脑配置的高低。

模型在五个卷积层上接出来了定位分类层,其大小和anchor设置信息如下表.

【GitHub开源项目实践】人脸口罩检测

 

工程包目录结构分析

GitHub工程包下载:https://github.com/AIZOOTech/FaceMaskDetection

下载完FaceMaskDetection压缩包后,解压后如下图:

【GitHub开源项目实践】人脸口罩检测

如果觉得工程包在GitHub下载太慢了,有时下载中断,可以到我网盘中拿:

https://pan.baidu.com/s/1h_cw4XYwYw5y5aaIz0CI6Q   提取码:240d

 

如何运行程序

以 tenforflow 模型为例子

如果想运行图片:

python tenforflow_infer.py  --img-path /path/to/your/img

比如,img目录中作者放了一些图片的,选择demo2.jpg

python tenforflow_infer.py  --img-path  img/demo2.jpg

运行结果: 

【GitHub开源项目实践】人脸口罩检测

 

如果想运行运行视频

python pytorch_infer.py --img-mode 0 --video-path /path/to/video  

/path/to/video   为视频所在的路径+视频名

 

如果想实时使用摄像头检测

python pytorch_infer.py --img-mode 0 --video-path 0

这里的0 ,代表在电脑中设备号;0默认为电脑自带的摄像头;

如果想使用外接摄像头,可以改为1 (比如:外接上一个USB摄像头)

 

测试集PR曲线

因为WIDER face是一个任务比较复杂的数据集,模型又设计的非常小,所以对于人脸的PR曲线并不是那么性感。这点可以通过设计大模型来提升对于小人脸的检测效果。

【GitHub开源项目实践】人脸口罩检测

 

再次感谢AIZOOTech 的开源项目--FaceMaskDetection