Python 20行代码检测人脸是否佩戴口罩_python

最近,口罩成为绝对热门的话题,在疫情之下,出门不戴口罩不仅对自己不负责,对他人而言也是一种潜在的威胁。所以许多小区都有保安在门口守着,谁要是不戴口罩就吼回去​(吓死我了)

尽管如此,人工检测总有可能漏掉人,而且无时无刻地盯着,保安叔叔也特别累。今天我们就来尝试用计算机自动检测人脸是否佩戴口罩的可行性,如果可行,那么根据我们以前的推送:​​人脸检测自动开机​​,就可以做一个实时摄像头,如果发现有人没戴口罩则发送警告给保安,以提高保安的工作效率。

当然,想要识别人脸是否佩戴口罩,需要做很多训练数据的收集,不过最近百度开源了他们的人脸口罩识别模型 ​PaddleHub 口罩检测:
​​

我们今天就来试试这个模型的效果。

1.准备

为了实现这个实验,Python是必不可少的,如果你还没有安装Python,建议阅读我们的这篇文章哦:​​超详细Python安装指南​​。

然后,我们需要安装百度的paddlepaddle, 进入他们的官方网站就有详细的指引:

​​

Python 20行代码检测人脸是否佩戴口罩_paddle_02

根据你自己的情况选择这些选项,最后一个CUDA版本,由于本实验不需要训练数据,也不需要太大的计算量,所以直接选择CPU版本即可。选择完毕,下方会出现安装指引,不得不说,Paddlepaddle这些方面做的还是比较贴心的​(就是名字起的不好)

Python 20行代码检测人脸是否佩戴口罩_paddle_03

要注意,如果你的Python3环境变量里的程序名称是Python,记得将python3 xxx 语句改为Python xxx 如下进行安装:

python -m pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple

2.编写代码

Paddlehub作为一个深度学习平台,用起来还是相当方便的,尤其是对于我这种(​调包小王子​)非研究型应用者。一共就只有四个步骤:


  • 1.引入模块和图片
  • 2.载入模型
  • 3.分类与预测
  • 4.结果展示

把我们需要测试的图片保存在该代码文件的同一目录下,命名为3.jpg:

Python 20行代码检测人脸是否佩戴口罩_数据_04

想看这个小姐姐摘下口罩的样子

代码如下:

Python 20行代码检测人脸是否佩戴口罩_paddle_05

没错,你没看错,就是这么简单。去掉空行和注释只有12行代码,再狠一点,把matplot展示部分全部去掉,只有6行代码。再再狠一点,把​test_img_path和input_path变量​以及​module.face_detection​语句合并,你会发现只有3行代码:

Python 20行代码检测人脸是否佩戴口罩_数据_06


执行完后的分类结果在同一目录下的​detection_result​目录下查看即可。
所以说,说20行代码是谦虚,3行代码就够了。

3.结果展示

我们测试的那张图片,结果如下:

Python 20行代码检测人脸是否佩戴口罩_python


MASK:97.64% 代表这个人戴了口罩,可信度为97.64%。

NO MASK: 97.41% 代表这个人没戴口罩,可信度为97.41%

最后面那个大叔也是MASK,但是它的可信度只有54.31%,所以很可能是误判,在我们实际应用的时候,只需要把警告阈值(比如80%)提高,即可筛去这些不可信的分类。

不过,这个模型有一个缺点就是,对于远距离的人判断并不是很精确:

Python 20行代码检测人脸是否佩戴口罩_paddle_08


离镜头最近的这个人可能是因为侧脸的原因,脸部特征不明显识别不出来。但是远处的这些戴着口罩却被识别为没戴口罩的,就是这个模型的锅了。不过,通过​阈值过滤​和​缩短摄像头摄影距离​还是可以将这个模型用于实际生活中的。


如果你喜欢今天的Python 教程,请持续关注Python实用宝典,如果对你有帮助,麻烦在下面点一个赞Python 20行代码检测人脸是否佩戴口罩_数据_09,有任何问题都可以在下方留言,我们会耐心解答的!

Python实用宝典 (pythondict.com)

不只是一个宝典

欢迎关注公众号:Python实用宝典Python 20行代码检测人脸是否佩戴口罩_paddle_10