戴口罩的人脸识别

Posted 浪子彦卿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了戴口罩的人脸识别相关的知识,希望对你有一定的参考价值。

戴口罩的人脸识别

 

 

1.前情提要

 

  这学期ZUCC计算的人工智能导论课,老师之前说是以考试的形式考核,后来改成了大作业。大作业的分为三类。组队的人数不同,难度也不同。一共有三类,我们选择的是难度最高的三人组,选题是鲁棒性人脸识别系统,另一个是新冠肺炎的图像检测,我们觉得自己能力有限,还是就选择了人脸识别。

  (ps:建议小组展示早点讲掉,不然越到后面越“卷”,原本20mins的时间,大伙儿竟然会“水”到30甚至40mins)

  在鲁棒性人脸识别系统这个大作业的选题中,我们选择了去遮挡的方向,具体到生活中的体现就是在戴口罩的情况下也能正确识别人脸的身份信息。当然,我们并没有徒手撸代码从零开始搞起,而是“借鉴和参考”了玄谔博主的代码,想要了解原作者实现方法的同学点击此处转到原文,当然下面的内容也差不多。

  最后十分感谢玄谔博主在GitHub、CSDN上的指导和转载支持,十分感谢小组成员建子哥葛兄的辛苦付出,没有你们这个项目很难落地。本着开源共享,少让后人走弯路的精神,我计划写了这篇博客。

 

2.配置环境

 

  此开源项目是基于Tensorflow 1.0实现的,所以需要在自己的电脑上安装好,最好(一定)是“一条龙服务”,如tensorflow的套餐:CUDA10.0+cuDNN7.6.1+python3.7+tensorflow1.13.1

 

  Tensorflow官网上也有配套说明,这里我给出我搭环境的指南链接

 

  如果之前已经搭好了2.0的环境,没关系,在运行报错的代码处添加版本转换的代码就好了。注意,有些报错也许是因为库和包是版本不匹配而无法搭配工作,也许根本没有导入这个库,不要心急慢慢搞。还有一点很重要,配环境的电脑最好是运存16GB的游戏本,我在自己8GB的全能本上试了一下FPS帧率很低,而且emmmm........

 

 

3.项目资料

 

  代码地址

       演示视频  提取码:coma

 

4.实现流程

 

 

  MTCNN:人脸检测,人脸对齐,从图片中框出人脸。旗下三个子网络 P-Net, R-Net 和 O-Net层层递进,做出精细化处理确定合格的人脸。

  FaceNet:提取128维人脸特征向量,生成人脸特征信息并与本尊名字对应。

  MobileNet:判断人脸是否佩戴口罩。

 

  简易流程图:

 

  用一句话概括实现原理:

  摄像头或者本地传入带有人脸的照片,MTCNN框出人脸,FaceNet提取其人脸特征(128维的特征向量),然后和数据库里的特征向量做对比(数据库里的特征向量是训练分类器时存储的,作为识别样本库),选择小于阈值且欧式距离最小的一个,最后输出其对应的标签信息。

 

 

  此时FaceNet比较的是数据库里戴口罩人脸和摄像头输入的人脸信息,选取距离最短,并且小于一定门限的人脸作为输出结果,所以能在戴口罩的情况下正确识别人脸信息。最后通过MobileNet判断人脸是否佩戴口罩。

 

5.项目实现的tips

 

  • 首先在models文件夹下面如图放置20200505-085843文件

 

  下图是20200505-085843文件夹内的文件,这些数据是利用加了口罩的Casia-FaceV5重新进行了训练的,是提取了特征向量的模型。

关于怎么获取20200505-085843文件,可以见原博客。

 

  • 让real_time.py 和local_img.py 能正常运行

  real_time.py 调用摄像头实时检测和识别   local_img.py 识别传入的本地图片

  这两个是主要运行文件,若它们能正常运行,那么环境就基本没问题了(通过配置好的jupyter运行.ipynb文件)

 

  • 训练自己的模型

  训练自己的分类器模型是为了能识别自己和想要识别的对象。

  在datas/DL/mask下面新建一个数据集,每人按照人名设置一个文件夹,里面放上此人戴口罩的160*160像素的图片。可以使用里面批量处理口罩的代码,但本人时间紧迫,探索失败了,是自己手动P的口罩,压缩成统一像素倒是用了批量处理的代码。

  运行程序classifier.py。

  在Tensorflow 的环境下cd到facenet_src,执行命令:

  python classifier.py TRAIN(运行模式) 数据集路径 模型路径 要生成的pkl文件路径

如图:

 

  最后把生成的pkl文件改成“dl_classifier_masks_65.pkl”替换原来就好了。

  生成的pkl文件是保存特征向量和人的身份信息的文件。

 

 

 

  同理把运行模式从TRAIN改为CLASSIFY就可以测试分类器了。

 

 

 

6.总结

 

  基于原博主的文章,我们踩过了许多坑。写这篇博客,就是想在自己做过的基础上让后人少踩一点坑。回头看,发现最头痛还是配环境和如何食用这份代码,结合原博主的文章,我想在你阅读后应该有所帮助,记得素质三连,不要下次一定哦。

 

德丽莎世界第一可爱!

 

以上是关于戴口罩的人脸识别的主要内容,如果未能解决你的问题,请参考以下文章

戴口罩人脸检测和戴口罩识别(含Python Android源码)

Android实现戴口罩人脸检测和戴口罩识别(附Android源码)

Android实现戴口罩人脸检测和戴口罩识别(附Android源码)

Android实现戴口罩人脸检测和戴口罩识别(附Android源码)

AI抗疫系统是如何做到戴口罩也能识别出人的身份信息的?

AI人脸识别测温一体机设计