前言
人脸识别技术已经应用到了生活的方方面面,刷脸进门、刷脸支付等。本文介绍一种简单的基于 MTCNN 和 facenet 的人脸识别实现。让初学者有个大致的体感,人脸识别是怎么做的。
框架
训练流程:
对训练集中已标注好人物名称 (label) 的图片:
- 使用 MTCNN 提取图片中的人脸
- 使用 facenet 模型编码图片生成 128 维的 embedding 特征向量 (features)
- 使用 SVM(Support Vector Machine) 对所有 features 和对应的 label 做分类,得到训练模型。
识别流程:
对要识别的目标图片,和训练图片一样提取出 features 向量,使用训练过程得到的模型做分类。
实现
可以下载 face-recognition-mtcnn 源代码 直接使用。
一、环境安装
# tensorflow
pip install tensorflow
# mtcnn
pip install mtcnn
# PIL
pip install Pillow
# numpy
pip install numpy
# matplotlib
pip install matplotlib
二、准备数据
下载 5-celebrity-faces-dataset 数据集,其中包含 5 个人脸的训练和验证数据。当然这里你也可以自己搜集数据。数据集的目录格式:
- dataset-name
- train
- person1
- xxx.jpg
- xxx.jpg
…
- person2
… - personM
- person1
- val
- person1
- person2
… - personM
- train
下载已训练好的 facenet 模型 facenet_keras.h5
将上述资源放在工程 res
目录中。
三、代码实现
人脸提取
将测试集和训练集中的图片进行处理,提取人脸图片,用于作为后续特征提取的输入。
preprocess.py
- 从单个图片文件中提取人脸图片
def extract_face