如何使用OpenCV进行人脸识别?

时间:2011-10-31 02:38:13

标签: c++ opencv face-recognition

我正在尝试使用OpenCV进行一些人脸识别(不是检测)。我发现这篇文章有一些代码:

http://www.cognotics.com/opencv/servo_2007_series/index.html

但是,此代码是使用较旧的C风格的OpenCV API编写的。是否有人使用像OpenCV 2.3.1这样的更新版本的C ++ API版本?

2 个答案:

答案 0 :(得分:10)

更新:OpenCV 2.4.2现在附带了全新的cv::FaceRecognizer。请参阅以下详细文档:

我发布了libfacerec,一个用于OpenCV C ++ API(BSD许可证)的现代人脸识别库。 libfacerec没有其他依赖关系,并实现了Eigenfaces方法,Fisherfaces方法和局部二进制模式直方图。该部分库将包含在OpenCV 2.4中。

libfacerec的最新版本可在以下网址获得:

该库是为OpenCV 2.3.1编写的,考虑到即将推出的OpenCV 2.4,因此我不支持早于2.3.1的OpenCV版本。这个项目是一个带有详细记录的API的CMake项目,还有一个关于性别分类的教程。您可以在以下位置查看文档的HTML版本:

如果您想了解这些算法的工作原理,您可能需要阅读我的人脸识别指南(包括Python和GNU Octave / MATLAB示例):

相关出版物是:

  • Turk,M。和Pentland,A。用于识别的特征脸。。 Journal of Cognitive Neuroscience 3(1991),71-86。
  • Belhumeur,P。N.,Hespanha,J。和Kriegman,D。 Eigenfaces vs. Fisherfaces:使用类特定线性投影进行识别。。 IEEE Transactions on Pattern Analysis and Machine Intelligence 19,7(1997),711-720。
  • Ahonen,T.,Hadid,A。和Pietikainen,M。使用局部二进制模式进行人脸识别。。计算机视觉 - ECCV 2004(2004),469-481。

答案 1 :(得分:3)

我正在使用c ++ api为我的工程师学位做面部识别项目。我认为c ++中关于面部识别的所有内容都相当简单,甚至比C(更少的指针)更简单。要使用PCA,您有一个名为PCA的类here。只需使用正确的方法并阅读文档即可理解。要使用输入数据构建矩阵,我创建了一个适当大小的矩阵,然后将图片粘贴为行(使用方法重塑)(cv :: Mat中有一个方法可以让你轻松获得一行矩阵) )。您只需要确保基础数据和测试数据具有相同的参数(通道,大小等)

修改

     using namespace cv; //somewhere near top

将数据插入数据矩阵:

    62       Mat reshaped=img.reshape(1,1);
    63       Mat dataRow=_data.row(y++);
    64       resize(reshaped,dataRow,dataRow.size(),0,0,CV_INTER_LINEAR);

计算pca:

    251 _pca(_data,Mat(),CV_PCA_DATA_AS_ROW); //compute pca 
    252 _pca.project(_data,_vectors); // project original data to new coordinates

由于opencv的文档不是最好的,所以花一些时间阅读它并没有什么坏处。大多数c api函数在c ++ api中都有它们的等价物,你只需要做一些“写入搜索窗口并点击输入”搜索。而且,还有c ++教程可以掌握c ++ api。