其实,这种技术当年在renren红极一时的时候,就已经出现了。最初是由FaceBook最先使用的。
这种推荐tag的算法,讲究的就是一个top-1识别率,比较啥top-5识别率的算法都是在耍流氓!当然,人家FaceBook的top-1识别率那肯定要比QQ,renren啥的强一些!但当时用renren时,感觉它的推荐结果也不错(纯印象流)!可能是我好友太少,类间差距太大导致的!
所以,总结一下,这种
人脸检测->人脸对齐->人脸识别->tag推荐的算法不说是臭大街了吧,在数据量不大的情况下,上述流程中随便找几个开源算法,都能达到不错的效果。
废话了这么多,具体是怎么做到的,容小弟来一一讲解!
===============================================
首先,一张非限定条件下(不是正面摆拍的)图片中肯定存在人脸姿态的变化。因此,就需要一个人脸检测器。10年前的算法——
Viola-Jones detector 就能做到这点[1][2]。其实检测器的性能不需要要求很高,只要检测的差不多就行!像你上的这张图,扣脸扣的明显就不太行,但这种程度也够了。因为还有后续的工作可以一步步的提升最终的tag识别的性能。
===============================================
扣完脸之后!脸要是歪着肿么办?!对齐人脸!
目前而言,绝大部分的人脸识别算法,都需要进行alignment(对齐)操作,即将上一步抠出来的人脸图像都对齐到一组基准点上。说白了就是将抠出来的人脸的各个基准点(双眼、鼻尖、内外眼角)都对齐到一组标准位置上上。下面是对齐前后的对比图像(图均来自LFW数据库)。对齐以后,所有人的双眼都在图像上同一像素点了,当然鼻尖,眼角啥的都对上了!
人脸对齐方法开源的也很多。比如说UMASS的[3]和Wolf等人的[4]。

图1

图2

图1对齐后

图2对齐后
===============================================
本想答完的,
妈蛋,实验室大楼要关门了,先占着坑!明儿接着填recognition部分和最后tag推荐的部分!
参考文献:
[1].
http://www.vision.rwth-aachen.de/teaching/cvws08/additional/viola-facedetection-ijcv04.pdf
[2].
Viola
[3].
http://vis-www.cs.umass.edu/faceAlignment/
[4].
Labeled Faces in the Wild-a