计算机系统应用教程网站

网站首页 > 技术文章 正文

Python丨利用MTCNN和facenet实现人脸检测和人脸识别

btikc 2024-09-20 14:31:21 技术文章 23 ℃ 0 评论

欢迎点击右上角关注小编,除了分享技术文章之外还有很多福利,私信学习资料可以领取包括不限于Python实战演练、PDF电子文档、面试集锦、学习资料等。

本文转载自:https://blog.csdn.net/guyuealian/article/details/84896733

作者:pan_jinquan

前言

人脸检测和人脸识别技术算是目前人工智能方面应用最成熟的技术了。本篇文章将利用mtcnn和faceNet搭建一个实现人脸检测和人脸识别的系统。

基本思路

  1. 利用mtcnn的进行人脸检测,当然也可以使用其他的人脸检测方法,如Dilb,OpenCV,OpenFace人脸检测等等,
  2. 利用faceNet进行人脸识别,faceNet可简单看成是提取人脸特征的CNN网络,这个特征就是embadding了,有了人脸特征embadding。
  3. 需要与数据库人脸特征进行相似性比较,即可完成人脸识别的任务。

一、项目结构:

二、实现流程

1.通过MTCNN人脸检测模型,从照片中提取人脸图像。

2.把人脸图像输入到FaceNet,计算Embedding的特征向量。

3.比较特征向量间的欧式距离,判断是否为同一人,例如当特征距离小于1的时候认为是同一个人,特征距离大于1的时候认为是不同人。

三、MTCNN人脸检测

这里提供一个使用MTCNN进行人脸检测的方法:

当然,实际应用中,建议还是封装成一个类吧,方面初始化和单独调用:

四、faceNet人脸识别

下面是鄙人已经封装好的facenetEmbedding类,其中类函数get_embedding(self,images)方法用于提取facenet的人脸特征embadding,有了人脸embadding特征,就可以比较人脸相似性啦!

五、产生数据库

既然是人脸识别,数据库肯定要有已知人脸的数据库,不然怎么知道被检测的人脸是哪位大神,所以先制作人脸数据库。

(1)制作人脸数据图库:

把相关大神的人像收集放在dataset/images文件夹下:

特别说明:

  1. 这里只收集了4张胡歌和4张周杰伦的单人照片,
  2. 注意制作人脸数据图库时,所使用的照片必须是单人照片!!!
  3. 若需要新增图库,只需在dataset/images下,新建一个文件夹,如,新增“xietingfeng”(谢霆锋)的文件夹,然后把谢霆锋的单人照片放在里面即可,图片名称可以是任意
  4. 函数image_list,names_list=file_processing.gen_files_labels(images_dir,postfix='jpg')可以获取目录images_dir下所有文件,包括子目录下的所有文件路径(image_list),其中names_list就是子目录的文件名,一般子目录作为样本的标签。

然后使用下面的代码,进行人脸检测,把人脸都crop下来,并保存在项目dataset\emb_face中,这些emb_face人脸数据图库将用于生成embedding数据库

(2)生成embedding数据库

有了人脸数据图库,就可以生成embedding数据库(人脸特征),后面待检测识别的人脸,只需要与这些embedding数据库(人脸特征)进行相似性比较,就可以识别人脸啦!!!

六、人脸识别过程

(1)加载人脸数据库

把上面制作的,已知的人脸数据库加载进来:

(2)进行人脸检测

(3)人脸识别(比较相似性)

比较特征向量间的欧式距离

(4)人脸识别效果

一切准备好了,开始run:

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表