人脸识别流程:
1. 人脸定位
输入是原始图像,输出是人脸所在位置的矩形框,这里需要用到一个模型(这个模型可以用回归的方式去训练);
2. 人脸特征点检测(landmarks)
输入是(原始图像+人脸矩形框=人脸图像),输出是特征点坐标(嘴巴的坐标,眼睛的坐标等),这里需要用到一个模型(这个模型可以用回归的方式去训练);
3. 人脸对齐&特征提取
输入是(当前人脸landmarks+标准人脸landmarks+特征提取矩阵),过程是将对齐后的人脸输入到CNN之类的网络,得到人脸特征(如128维的人脸特征)(详细了解请看这里)
4. 应用
接下来就可以根据具体需求做不同的事了,比如判断两张照片是不是一个人,就可以对比步骤3得到的128维矩阵的相似度,如果高于阈值就是一个人,一般计算人脸特征矩阵的相似度会用余弦距离
ps:可以直接使用dlib库来提取人脸128维特征,支持cpu
其他
人脸识别范围很广泛,目前有十个关键技术
1. 人脸检测(face detection)是检测出图像中人脸位置的技术
一般输入是一张图片,输出是人脸所在位置,常用矩形框标记在原图之上;
2. 人脸配准(face alignment)是定位人脸五官关键点坐标的技术
一般输入是人脸图像+人脸坐标框,输出是五官关键点坐标序列,输入一般会统一尺寸;
3. 人脸属性识别(face atrribute)是识别人脸的性别、年龄、姿态、表情等属性的技术
一般输入是人脸图像+五官关键点坐标,输出是人脸属性值,输入一般会调整统一尺寸和旋转角度,保证数据的统一性再做分析;
4. 人脸特征提取(face feature extraction)是将人脸图像转化为一串固定长度的数字串的技术
一般输入是人脸图像+五官关键点坐标,输出是一串固定长度的数字串;
5. 人脸对比(face compare)是对比两张人脸相似度的技术
一般输入是两张人脸的特征(即两个固定长度的数字串),输出是两张人脸的相似度,人脸验证、人脸识别、人脸检索都是在人脸比对的基础上加一些策略来实现;
6. 人脸验证(face verification)判断两张人脸是否为同一个人的技术
一般输入是两个人脸特征,通过计算相似度并且和预先设置的阈值进行比较,输出为是否为同一个人;
7. 人脸识别(face recognition)是识别出输入人脸对应身份的技术
一般输入是一个人脸特征,通过对比数据库已有的人脸特征计算最高的相似度并与阈值比较,输出是人脸对应的身份,当相似度小于阈值时,输入人脸不在数据库中;
8. 人脸检索,是查询和输入人脸相似的人脸序列的技术
一般输入是一个人脸特征,通过对比数据库已有人脸特征计算相似度,并对一定数量的人脸根据相似度由高到低进行排序作为输出;
9. 人脸聚类(face cluster)是将一个集合内的人脸按身份进行分组的技术(这个集合中可能会有多张人脸属于一个身份)
一般输入是一个人脸集合,将集合内的人脸两两对比相似度,通过分析,将集合内的人脸图按身份进行分组作为输出;