人脸识别库

170

我正在为一项大学项目寻找一个免费的人脸识别库,而不是人脸检测。我需要实际的识别功能,也就是要找到包含指定面部特征的图像或计算特定面部之间距离的库。

目前,我正在使用OpenCV来检测人脸,并使用粗略的Eigenface算法进行识别。但我认为一定有更好的性能比我自己编写的Eigenface算法更好的东西。我的意思并不是速度上的性能,而是希望能够比简单的Eigenface方法更好地实现识别。

我看了看Faint,但似乎这个库对于我的应用来说并不太可重用。

我可以接受Python、Java、C++、C或类似的语言的库。最好的情况是它能够在Windows机器上运行,因为我目前依赖于一些仅适用于Windows的外部代码。


1
需要出于政治或实际原因免费吗?如果这是一个纯研究项目,您可能可以从商业供应商中获得免费的学术许可证。 - Christoffer
2
我在只使用特征脸方法时取得了相对不错的结果,但目前似乎缺乏一个免费可用的良好人脸检测API。 - Janusz
http://stackoverflow.com/questions/12723856 - Manoj
https://dev59.com/U2jWa4cB1Zd3GeqPuM56 - Manoj
4
虽然在2009年时这个问题是完全可以接受的,但现在不再被认为是适合在Stack Overflow上讨论的话题:询问我们推荐或找到工具、库或收藏的外部资源的问题,在Stack Overflow上被视为不适当的话题。 请参阅Stack Overflow的预定义不适当话题应该是什么? - JDB
11个回答

85
以下是提供在 Windows 上运行的商用人脸识别现成软件包的厂商列表:
  1. Cybula - 提供关于他们的面部识别 SDK的信息。该公司由一位大学教授创立,因此其网站看起来不太专业。没有定价信息或可下载的演示文稿。您需要联系他们以获取定价信息。

  2. NeuroTechnology - 提供关于他们的面部识别 SDK的信息。该公司提供预付定价信息以及实际为期30天的SDK试用版

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

  4. Sensible Vision - 提供关于他们的 SDK 的信息。他们的网站允许您轻松地获得报价,并且您还可以订购一个评估工具包,以帮助您评估其技术。


5
谢谢提供链接,但目前我需要找到一个免费的图书馆。 - Janusz
1
这可能不是针对人脸识别本身的,但 http://numenta.com/ 可能会引起您的兴趣。 - RCIX
7
您可以将face.com的免费REST API添加到该列表中。 - Omry Yadan
请访问http://www.face-rec.org/vendors/以及http://www.face-rec.org/了解更多关于人脸识别技术的信息。 - 2vision2
Microsoft Cognitive Services Face API-它提供面部检测、识别、分组、验证、相似面部搜索等功能。 - Raj Trivedi
显示剩余4条评论

55

更新

OpenCV 2.4.2 现已推出全新的 cv::FaceRecognizer。详细文档请参见:

原始帖子

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

最新版本的 libfacerec 可在以下链接获取:

该库是基于 CMake 构建的项目,具有良好的文档式 API,同时还提供了一份有关性别分类的教程。您可以在以下链接查看文档的 HTML 版本:

如果您想了解这些算法是如何工作的,可以阅读我的《人脸识别指南》(包括 Python 和 GNU Octave/MATLAB 示例):

我的 github 存储库 中,还有以 Python 和 GNU Octave/MATLAB 为基础的两个项目实现了这些算法。其中,facerec 中的两个项目均包括了多种交叉验证方法,用于评估算法:

相关论文包括:

  • Turk, M.和Pentland, A.的文献《使用特征脸进行识别》发表于《认知神经科学杂志》(1991年,第3期,71-86页)。
  • Belhumeur, P. N.、Hespanha, J.和Kriegman, D.的文献《使用类别特定线性投影的特征脸与费舍尔脸进行人脸识别》发表于《IEEE图案分析与机器智能交易》(1997年,第19卷,第7期,711-720页)。
  • Ahonen, T.、Hadid, A.和Pietikainen, M.的文献《使用局部二进制模式进行人脸识别》发表于《计算机视觉-ECCV 2004》(2004年,469-481页)。

https://github.com/KohrAhr/MicrosoftCognitiveServices - Zam

19

pam-face-authentication 是一种用于面部认证的PAM模块,但需要一些工作才能获得所需的结果。快速测试表明,识别率不如NeuroTechnology的VeriLook。

Malic 是另一种使用Gabor小波描述符的开源人脸识别软件,但源代码的最后更新是3年前。

从网站上可以看到:

"Malic是一个基于gabor小波的开源人脸识别软件。它是一个实时人脸识别系统,基于Malib和CSU Face Identification Evaluation System (csuFaceIdEval)。使用Malib库进行实时图像处理,一些csuFaceIdEval用于人脸识别。"

此外,这可能会引起您的兴趣:

gaborboosting:一个应用于人脸识别的科学程序,使用Gabor小波和AdaBoost算法

特征提取库-FELib 是指“通过传导核Fisher判别进行人脸注释”


13

如果你想计算人脸之间的距离,我觉得你已经在做的特征脸是个不错的选择。你可以尝试使用其他方法,比如支持向量机或者隐马尔可夫模型。我找到了一个罗列了主要用于面部识别的算法的页面:面部识别主页

此外,当你说“更好的性能”时,指的是速度还是准确性?你遇到的问题是什么?数据有多种各样吗?它们主要是正脸还是侧脸?


5
我的要求是准确检测。虽然特征脸(Eigenfaces)不错,但我需要的是一个现成的人脸识别软件包,因为我不想重复造轮子,而且时间也紧迫。 - Janusz

9

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;
} 

5

我知道已经有一段时间了,但是对于其他人感兴趣的话,有一个名为Faint的项目,将许多这些功能(检测、识别等)整合到一个好用的软件包中。


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

2
我认为OpenCV中没有直接的人脸识别算法。但是,OpenCV库中的人脸检测功能很好用。 - Janusz
3
没错,你说得对。我把人脸识别和人脸检测混淆了。 - Paul J. Lucas
顺便提一下,现在有cv::FaceRecognizer可以用于人脸识别。 - huesforalice

1
你可以尝试使用开源的MVG库,它也可以用于多个接口。

0
下一步是使用FisherFaces。尝试一下并检查它们是否适合您。 这里链接有一个不错的比较。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接