facenet + Mtcnn 实现人脸识别(实现步骤)

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_41368074/article/details/90638730

网上关于facenet以及Mtcnn原理的博客有很多,本文便不再赘述,如果有不明白的可以参考该博客http://www.uml.org.cn/ai/201806124.asp

本文更多的是帮助大家使用facenet以及Mtcnn 实现人脸识别功能,这里我们利用的是Github上的一个开源项目,项目链接:https://github.com/davidsandberg/facenet

解压后得到facenet文件夹,我们把它放到主目录下,方便使用,如图:

值得注意的是如果单单git该项目的话,并不能实现功能我们还要下载其附带的预训练模型:

这里的资源是需要连接外网的,有篇博客提供了国内资源下载:https://pan.baidu.com/share/init?surl=LLPIitZhXVI_V3ifZ10XNg

密码:12mh。下载后我们会得到一个20170512-110547的压缩文件,解压后放入之前的facenet文件夹,这里我用到的是20180402-114759,不过并不影响。

到这里我们的一切项目准备工作就已经完成了,接下来我们按步骤进行。

1.给代识别的人脸建造数据库

在facenet文件夹中新建文件夹test_imgs,在文件夹下创建若干个文件夹存放若干个人的照片,形如:

每个文件夹下的照片具体是多少并没有严格要求,但是不能太少,10张以上是必须的,不然SVM分类的准确率会下降。

2.对已经建好的数据库的图片进行Mtcnn和剪裁处理

在运行之前我们要先配置python路径,在终端以此输入:

export PYTHONPATH=~/facenet/src/align

export PYTHONPATH=~/facenet/src

如果依然报缺少模块错误,就将二者顺序反一下输入,注意此处每打开一次终端就得重新输入一次,想要彻底解决,需要修改配置文件,具体见下文,接下来开始处理:

因为训练网络里所用到的图片的大小均为160x160像素,所以我们要将图片处理成对应像素,并利用Mtcnn将图片中的人脸剪裁出来。这里我们用到的代码是位于facenet/src/align中的align_dataset_mtcnn.py,具体使用方法如下。

1.进入align_dataset_mtcnn.py所在的文件夹。

2.执行上述指令,参数解析:(1).py文件(2)待处理的人脸数据库绝对路径(3)处理后的人脸数据库路径,此处给出就好,具体将由程序代码自动生成(4)--image_size 160 图像尺寸 (5)在Mtcnn检测得到的人脸的基础上缩小32像素。

执行后我们产生了如图所示的文件夹test_imgs_160:

3.利用处理好的数据库进行SVM分类,产生.pkl文件

此处我们用到了位于/facenet/src中的classifier.py文件具体使用如下图。

1.进入classifier.py所在的文件夹,已在则忽略

2.运行上述命令,参数解析(1).py文件 (2)模式选择,仔细看源码我们发现,有两种模式可供选择,这里我们选择TRAIN(训练模式)(3)待分类的人脸数据库(4)之前下载的模型,这里要替换成所下载的版本,我的是20180402-114759。(5)pkl文件所在的位置及名字,此处同样给出就好,代码会自动创建。

4.修改原项目自带的模型文件,以及.pkl文件

1.进入/facenet/contributed,打开face.py文件。

2.修改选中部分为自己的模型文件以及.pkl文件,并保存。

5.调用代码实现时实人脸识别

在facenet/contributed文件夹下运行real_time_face_recognization.py文件即可查看效果。

/----------------------------------------------------------------------------------------------------------------------------------------------------------------/

文章截止到这里就已经可以实现基本的人脸识别效果,以下内容为自己修改部分。

1.解决需要重复导入python路径问题:

回到主目录打开配置文件:

在文件最下面添加:

保存文件。

注意要根据自己的实际情况对路径作出修改!

2.原有的项目仅能对数据库中的人进行识别,而未在数据库中的人物也能识别,不符合我们的需求,所以我们对阈值做了修改

打开上文提到的face.py文件

添加a = unknow,修改阈值,如果分类的预测率 小于 设定阈值,则返回 a.

 

 

 

 

 

 

 

展开阅读全文

没有更多推荐了,返回首页