2

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

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

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

4

2 回答 2

10

更新:OpenCV 2.4.2 现在带有非常新的cv::FaceRecognizer。请在以下位置查看非常详细的文档:

我已经发布了libfacerec,这是一个用于 OpenCV C++ API(BSD 许可证)的现代人脸识别库。libfacerec 没有额外的依赖,并实现了 Eigenfaces 方法、Fisherfaces 方法和 Local Binary Patterns Histograms。部分库将包含在 OpenCV 2.4 中。

libfacerec 的最新版本位于:

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

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

相关出版物有:

  • Turk, M. 和 Pentland, A.用于识别的特征脸。. 认知神经科学杂志 3(1991),71-86。
  • Belhumeur, PN, 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。
于 2012-04-07T19:51:18.187 回答
3

我正在为我的工程师学位做一个人脸识别项目,使用 c++ api。我认为 C++ 中有关人脸识别的所有内容都相当简单,甚至比 C 中的更简单(更少的指针)。要使用 PCA,您需要在此处描述一个名为 PCA 的类。只需使用正确的方法并在理解的情况下阅读文档即可。要使用输入数据构建矩阵,我创建了一个适当大小的矩阵,然后将图片作为行(使用方法 reshape)粘贴到其中(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 中都有它们的等价物,您只需要执行一些“写入搜索窗口并按 Enter”搜索。而且,还有 c++ 教程来掌握 c++ api。

于 2011-10-31T10:47:47.803 回答