口罩人脸识别

这学期的一门开放实验课的选题,网上关于口罩人脸识别这一部分内容还不是很全,于是利用现有的人脸检测、人脸识别资源组装了一个,因为课程要求不是很严格,因此很多地方可能不是很严谨,这里重点分享一下思路。

目前(2020.06.14)来说,一些博客找得到资源只完成了口罩检测,即判断有没有戴口罩这一部分,也有看到有人做出了戴口罩的人脸识别,但是没有公开代码。

先放参考

  • facenet(https://github.com/davidsandberg/facenet):这个项目代码很完善,包含了MTCNN人脸检测和facenet提取人脸特征的全部内容,需要用的代码基本都包含了。我这里用了它的框架,一些内容做了替换。
  • MTCNN模型和mobilenet(https://github.com/bubbliiiing/mask-recognize):小哥完成了戴没戴口罩的检测,在B站有视频,讲的很详细,在评论区也能找到博客链接。我这里用了他的MTCNN和mobilenet的代码,合并到上面的facenet项目中了。
  • 人脸关键点检测(https://github.com/610265158/Peppa_Pig_Face_Engine):因为我用到了在人脸上P口罩的代码,这个项目用来检测人脸关键点。

方案

MTCNN网络用来检测人脸,它利用三个子网络,由粗到精的提取人脸。对于戴口罩的人脸检测也具有一定鲁棒性,使用的时候最好图片质量好一点。

口罩人脸识别_第1张图片

实现流程(R U OK?)

口罩人脸识别_第2张图片

  • 这里我假设这样一个情境:在创建识别样本库时采集的为无口罩人脸图像,进行识别时采集的时有口罩人脸图像(这里假设MTCNN对两种情况鲁棒,实际使用发现效果可以)。之后为无人脸图像添加口罩,然后比对人工处理的口罩人脸和采集的口罩人俩进行比对。最后输出人的身份信息。
  • 对于MTCNN网络,我只是简单的调节了Pnet、Rnet和Onet的阈值。三个阈值控制候选框最终被认作人脸的难易程度。

口罩人脸识别_第3张图片

  • 对于facenet,我利用加了口罩的Casia-FaceV5重新进行了训练,简单调参后达到92%的训练准确率。

数据准备

选择Casia-FaceV5数据集作为训练数据是因为其为亚洲人脸数据集,且数据集样本个数比较少,自己的电脑可以训练,太大了就不行了。原图如下

口罩人脸识别_第4张图片

加了口罩之后的效果如下

口罩人脸识别_第5张图片

之后我又建立了一个用于测试的数据库。数据库中包含8个人的照片,每人设置一个文件夹,放置5~10张图片,经过人脸检测及添加口罩等步骤后,处理成160*160像素的图片。

口罩人脸识别_第6张图片

口罩人脸识别_第7张图片

口罩人脸识别_第8张图片

人脸加口罩程序

加口罩主要应用了人脸的68个关键点。为人脸添加口罩的流程如下:

  1. 检测人脸的68个关键点;
  2. 确定人的鼻子(本研究使用上图中标号为29的点)和脸轮廓;
  3. 通过脸轮廓确定脸左点(本研究使用上图中标号为2的点)、脸底点(本研究使用上图中标号为8的点)和脸右点(本研究使用上图中标号为14的点);
  4. 由鼻子和脸底点确定口罩大小的高度、中心线;
  5. 将口罩左右平均分为两个部分;调整左口罩大小,宽度为脸左点到中心线的距离。调整右口罩大小,宽度为脸右点到中心线的距离。合并左右口罩为新口罩。
  6. 旋转新口罩,角度为中心线相对于y轴的旋转角,最后将口罩放在原图适当位置。

口罩人脸识别_第9张图片

口罩人脸识别_第10张图片

最终效果

本地图片识别

口罩人脸识别_第11张图片

摄像头实时识别

口罩人脸识别_第12张图片

口罩人脸识别_第13张图片

口罩人脸识别_第14张图片

代码

两个链接的代码一样,gitee的访问速度快

https://gitee.com/mext169/detect-and-recognize-mask-face

https://github.com/mext169/detect-and-recognize-mask-face

我自己训练的模型

在自己造的训练集上准确率90%多一点,仅供参考,下载地址如下:麻烦多点赞啊

链接:https://pan.baidu.com/s/1_FZzqaMzOL5NpuSIG5ArKQ 
提取码:bgyj 
复制这段内容后打开百度网盘手机App,操作更方便哦

https://download.csdn.net/download/mengxt169/14926392

模型放置方式如下:

口罩人脸识别_第15张图片

你可能感兴趣的:(口罩人脸识别,深度学习,机器学习)