我正在使用OpenCV库在C ++中进行图像处理,这是我的问题:你能否通过比较框架认为可以进行面部识别(根据照片数据库说出一个人的名字)使用图像直方图比较技术在数据库中使用摄像机拍摄图像? (请注意,我只使用opecv库中包含的示例比较图像的面部区域。)
我问这个是因为我刚尝试做上面的程序,但我遇到了很多问题(通常我会发现错误的人)
答案 0 :(得分:7)
您可能希望从编译Face Detection using OpenCV示例开始。正如其他人所指出的,一般的面部识别并不是一个容易解决的问题。 EigenFaces是一种常见的人脸识别技术,相当容易理解和实施。
正如其他人所说,这是一个难题,但这给你一个开始的地方。
答案 1 :(得分:7)
我遇到过的一些方法是
专门用于此任务的数据集和基准是labeled faces in the wild。您可以找到有关检测后比较面部的工作方法的参考。
<强>更新强>
我有一个关于面部聚类的实验的描述:无监督的面部识别。
该实验在Section 4.4 of my thesis中描述
基本流程如下
公制学习:如何确定两个人是否属于同一个人。
这部分是受监督的,因为它需要输入面部图像,标有每张照片中出现的人的身份。
一个。检测基准点(眼睛,口角,鼻子) 您可以使用this code或更新版本,例如this one。
湾在检测到的基准点处提取SIFT描述符。
℃。构造“面部描述符”:使用单个向量描述每个面
此向量是所有SIFT描述符的 sqrt
的串联。
d。使用here描述的方法来了解不同人的面部之间的马哈拉诺比斯距离。
无人监督的面部识别:一旦学会了指标,您就可以使用新人的新照片(这些人不需要成为训练集的一部分,你可以使用看不见的人的照片!)。
一个。重复阶段a-c,为每个输入面构建相同的“面部描述符”向量。
湾使用学习的马哈拉诺比斯距离比较描述符向量。
答案 2 :(得分:0)
我建议使用现有的算法,例如Luxand FaceSDK中提供的算法:http://www.luxand.com/facesdk/,而不是尝试开发自己的算法。
答案 3 :(得分:0)
很好的示例代码: https://github.com/Itseez/opencv/blob/master/samples/cpp/facerec_demo.cpp