170

我正在为一个大学项目寻找一个免费的人脸识别库。我不是在寻找人脸检测。我正在寻找真正的认可。这意味着查找包含指定人脸的图像或计算特定人脸之间距离的库。

我目前正在使用OpenCV来检测人脸,并使用粗略的Eigenface算法进行识别。但我认为应该有比自写的特征脸算法性能更好的东西。我不是在谈论速度作为性能,我正在寻找一个比简单的 Eigenface 方法具有更好结果的库。

我看了一下Faint,但似乎该库对于我自己的应用程序不是很可重用。

我对 Python、Java、C++、C 或类似的库感到满意。最好的办法是它可以在 Windows 机器上运行,因为我目前依赖于一些外部的仅限 Windows 的代码。

4

11 回答 11

85

以下是为在 Windows 上运行的面部识别提供现成软件包的商业供应商列表:

  1. Cybula - 关于他们的面部识别 SDK的信息。这是一家由大学教授创立的公司,因此他们的网站看起来不专业。没有可以下载的定价信息或演示。您需要与他们联系以获取定价信息。

  2. NeuroTechnology - 有关其面部识别 SDK的信息。这家公司既有前期定价信息,也有SDK 的 30 天实际试用期

  3. Pittsburgh Pattern Recognition -(已被 Google 收购)有关其面部跟踪和识别 SDK的信息。他们提供的演示可以帮助您评估他们的技术,但不能帮助您评估他们的 SDSK。您需要与他们联系以获取定价信息。

  4. Sensible Vision - 有关其SDK的信息。他们的网站使您可以轻松获得报价,您还可以订购评估套件,以帮助您评估他们的技术。

于 2009-06-22T11:19:40.630 回答
55

更新

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 示例):

我的 github 存储库中还有一个算法的 Python 和 GNU Octave/MATLAB 实现。facerec中的两个项目还包括几种用于评估算法的交叉验证方法:

相关出版物有:

  • 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。
于 2011-11-22T22:22:14.830 回答
19

pam-face-authentication一个用于面部认证的 PAM 模块:但它需要一些工作才能得到你想要的。快速测试表明,识别率不如 NeuroTechnology 的 VeriLook。

Malic是另一个开源的人脸识别软件,它使用 Gabor Wavelet 描述符。但是源的最后一次更新是 3 年。

来自网站:“ Malic 是一个使用 gabor 小波的开源人脸识别软件。它是基于 Malib 和 CSU 人脸识别评估系统 (csuFaceIdEval) 的实时人脸识别系统。使用 Malib 库进行实时图像处理和一些 csuFaceIdEval 用于人脸认同。

此外,这可能是有趣的:

gaborboosting : 一个应用在人脸识别上的科学程序,使用 Gabor Wavelet 和 AdaBoost 算法

特征提取库 - FELib参考“Transductive Kernel Fisher Discriminant 的人脸注释”

于 2009-08-03T18:07:30.617 回答
13

如果你想计算人脸之间的距离,我认为你已经在做的Eigenface是要走的路。您可以尝试不同的方法,例如Support Vector MachineHidden Markov Model。我发现一个页面列出了可用于面部识别的主要算法:Face Recognition Homepage

另外,当您说“更好的性能”时,您是指速度还是准确性?你有什么样的问题?数据的差异有多大?它们主要是正面还是包括轮廓?

于 2009-06-21T05:47:17.900 回答
9

如果你的项目是在电影或电视上,或者任何有剧本的东西上,看起来你肯定想看看Mark Everingham 人的作品。. 该软件可用Buffy 插曲的结果也可用。

于 2009-06-25T22:47:42.700 回答
7

你应该看看http://libccv.org/

它相当新,但它提供了一个免费的开源高级 API 用于人脸检测。

(......而且,我敢说,真是太棒了)

编辑:还值得注意的是,这是少数几个不依赖于 opencv 的库之一,只是为了好玩,这里是文档页面上用于面部检测的代码副本,让您了解所涉及的内容:

#include <ccv.h>
int main(int argc, char** argv)
{
    ccv_dense_matrix_t* image = 0;
    ccv_read(argv[1], &image, CCV_IO_GRAY | CCV_IO_ANY_FILE);
    ccv_bbf_classifier_cascade_t* cascade = ccv_load_bbf_classifier_cascade(argv[2]);         ccv_bbf_params_t params = { .interval = 8, .min_neighbors = 2, .accurate = 1, .flags = 0, .size = ccv_size(24, 24) };
    ccv_array_t* faces = ccv_bbf_detect_objects(image, &cascade, 1, params);
    int i;
    for (i = 0; i < faces->rnum; i++)
    {
        ccv_comp_t* face = (ccv_comp_t*)ccv_array_get(faces, i);
        printf("%d %d %d %d\n", face->rect.x, face->rect.y, face->rect.width, face->rect.y);
    }
    ccv_array_free(faces);
    ccv_bbf_classifier_cascade_free(cascade);
    ccv_matrix_free(image);
    return 0;
} 
于 2012-07-03T01:03:39.780 回答
5

我知道这已经有一段时间了,但是对于其他感兴趣的人来说,有Faint项目,它将许多这些功能(检测、识别等)捆绑到一个不错的软件包中。

于 2010-01-30T21:13:54.380 回答
4

我们正在使用OpenCV。它也有很多非人脸识别的东西,但请放心,它确实可以进行人脸识别。

于 2009-06-10T15:39:15.277 回答
1

您可以尝试打开 MVG 库,它也可以用于多个接口。

于 2013-10-30T10:42:05.937 回答
0

下一步将是FisherFaces。试试看,看看它们是否适合你。 是一个很好的比较。

于 2009-06-22T14:48:45.903 回答
0

不是您真正想要的,但它可能对您有用。MATLAB 中的人脸检测/计算机视觉算法。

于 2009-06-25T10:53:02.100 回答