人脸识别大致分为如下三个部分:
face detection通常认为是在图片中找到人脸的过程,这个过程常用的办法有用openCV调用’haarcascade_frontalface_default.xml’或者其他xml文件构建分类器对象,通过detectMultiScale函数返回人脸框坐标,在图像中框出人脸。也可以通过深度学习的方法定位人脸。
编译过程中如果出现问题,参考faster rcnn +cudnn V5方法2,Caffe + CUDNN V5:
在根目录下运行python ./tools/run_face_detection_on_fddb.py,可返回坐标
facenet正是利用MTCNN检测人脸和inception-resnet-v1来识别。
- github: facenet
需要配合识别3.4节一起使用,自己修改后可以利用opencv读入摄像头直接识别人脸。
face alignment指在标定人脸位置后对人脸上的特征进一步定位,可以对人脸检测的侧脸进行校正,旋转,3d变换等,也可以对特征点进行特定的表情变化。常用的有5点和68点特征。如DCNN,TCDCN,MTCNN等方法。
https://github.com/luoyetx/deep-landmark
下载LFW数据进行训练和测试
人脸识别是由CNN提取人脸的特征,将两张待测图片输入至训练好的CNN,提取全连接层的特征。模型一般是由预训练的分类模型演变,如1000个人,每个人50张图片训练的CNN模型。
两张待测图片在训练好的模型上提取全连接层特征,如vgg的fc7层的4096维特征,进行cosin距离计算。利用vgg-facecaffemodel,如果角度光照相同,可以达到0.93左右的准确率,戴眼镜的影响很大。经过测试vgg-face在0.71至0.73表现最好。
将图片库的每张图片(小规模100人至大规模上百万)在训练好的模型上提取全连接特征,将待测图片同样提取特征,对所有特征进行相似度计算,排序后得到相似度最大的图片。vgg-face,GTX970排序一个特征约 10−5s 10 − 5 s 。在大规模数据集的排序可使用LSH等方法。
http://www.cppblog.com/guijie/archive/2015/10/14/212015.html
下载caffe模型,作为model,可以直接进行测试。也可以进行finetune。verification和identification都可以利用vgg-face实现。利用CASIA测试,最佳阈值约0.71至0.73。
可以利用triplet loss 或 softmax loss + center loss 训练,最终的结果呈现为128维特征。可以自行修改为opencv读入摄像头直接识别版本。其LFW验证率为99.2%。
import Image,ImageFont,ImageDraw
以及drwa.text
在输出照片添加中文。