我正在为大学项目寻找一个免费的人脸识别库.我不是在寻找面部检测.我正在寻找实际的认可.这意味着查找包含指定面或库的图像,以计算特定面之间的距离.
我目前正在使用OpenCV来检测面部,并使用粗略的Eigenface算法进行识别.但我认为应该有一些比自编的Eigenface算法更好的性能.我不是在谈论速度和性能,我正在寻找一个比简单的Eigenface方法更好的结果库.
我看了一下Faint,但看起来这个库对我自己的应用程序来说不是很可重用.
我很高兴使用Python,Java,C++,C等类似的库.最好的办法是,如果它可以在Windows机器上运行,因为我现在依赖于一些外部的Windows专用代码.
以下是商业供应商列表,这些供应商提供在Windows上运行的面部识别的现成软件包:
Cybula - 面部识别SDK的信息.这是一家由大学教授创立的公司,因此他们的网站看起来不专业.您可以下载没有定价信息或演示.您需要与他们联系以获取价格信息.
NeuroTechnology - 面部识别SDK的信息.该公司既有前期定价信息,也有实际30天的SDK试用版.
匹兹堡模式识别 - (由Google收购)有关其面部跟踪和识别SDK的信息.他们提供的演示可以帮助您评估他们的技术,而不是他们的SDSK.您需要与他们联系以获取价格信息.
明智的愿景 - 有关其SDK的信息.他们的网站允许您轻松获得报价,您还可以订购评估套件,以帮助您评估他们的技术.
OpenCV 2.4.2现在附带了新的cv :: FaceRecognizer.请参阅以下详细文档:
http://docs.opencv.org/2.4/modules/contrib/doc/facerec/index.html
我发布了libfacerec,一个用于OpenCV C++ API(BSD许可证)的现代人脸识别库.libfacerec没有其他依赖关系,并实现了Eigenfaces方法,Fisherfaces方法和局部二进制模式直方图.该库的部分内容将包含在OpenCV 2.4中.
libfacerec的最新版本可在以下网站获得:
https://github.com/bytefish/libfacerec
该库是为OpenCV 2.3.1编写的,考虑到即将推出的OpenCV 2.4,因此我不支持早于2.3.1的OpenCV版本.这个项目是一个带有详细记录的API的CMake项目,还有一个关于性别分类的教程.您可以在以下位置查看文档的HTML版本:
http://www.bytefish.de/dev/libfacerec/
如果您想了解这些算法的工作原理,您可能需要阅读我的人脸识别指南(包括Python和GNU Octave/MATLAB示例):
http://www.bytefish.de/blog/face_recognition_with_opencv2
还有一个Python和GNU八度/ MATLAB实现的算法我的github仓库.facerec中的两个项目还包括几种用于评估算法的交叉验证方法:
https://github.com/bytefish/facerec
相关出版物是:
Turk,M.和Pentland,A.Eigenfaces for recognition..Journal of Cognitive Neuroscience 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.
pam-face-authentication用于面部身份验证的PAM模块:但是需要一些工作来获得你想要的东西.快速测试显示,识别率不如NeuroTechnology的VeriLook.
Malic是另一种开源人脸识别软件,它使用Gabor Wavelet描述符.但对源代码的最后更新是3年.
来自网站:" Malic是一款使用gabor小波的开源人脸识别软件.它是基于Malib和CSU人脸识别评估系统(csuFaceIdEval)的实时人脸识别系统.使用Malib库进行实时图像处理,并使用面部csuFaceIdEval认可. "
此外,这可能是有趣的:
gaborboosting:用Gabor小波和AdaBoost算法应用于人脸识别的科学程序
特征提取库 - FELib是指"由Transductive Kernel Fisher判别的面部注释"
如果你想计算面部之间的距离,我认为你已经在做的Eigenface是你要走的路.您可以尝试不同的方法,如支持向量机或隐马尔可夫模型.我找到了一个页面,其中列出了可用于面部识别的主要算法:人脸识别主页.
另外,当你说"性能更好"时,你的意思是速度还是准确度?你有什么问题?数据有多大差异?它们主要是正面还是包含型材?
如果您的项目是在电影或电视上,或者任何有脚本的东西,看起来您肯定想看看Mark Everingham 等 人的工作..该软件可用,以及Buffy剧集的结果.
你应该看看http://libccv.org/
这是相当新的,但它提供了一个免费的开源高级API用于人脸检测.
(...而且,我敢说,真是太神奇了)
编辑:值得注意的是,这是少数不依赖opencv的lib之一,只是为了踢,这里是文档页面上面部检测代码的副本,让你了解所涉及的内容:
#includeint 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; }
我知道它已经有一段时间了,但对于其他感兴趣的人来说,有一个Faint项目,它将许多这些功能(检测,识别等)捆绑到一个不错的软件包中.