Luxand FaceSDK是一个比较强大的Face API,它支持VC++、C#、object C、Java、VB、Delphi等语言,相对于其他的face api来说,Luxand FaceSDK算是支持的语言比较多的处理人脸的库。
Luxand FaceSDK的地址:http://www.luxand.com/facesdk/
总的来时,它有以下一些优势:
1 Face identification and tracking in live video streams.
实时的检测视频中的人脸,检测人脸现在技术已经比较成熟了,也很很容易实现,opencv中已有自带的检测人脸的分类器。但是显然opencv中自带的人脸检测器如果不用多线程处理的话,在视频中实时检测人脸速度是很慢的。
FaceSDK中的检测人脸速度显然比opencv中自带的快得多,这在实时处理视频时比较有优势。
2 Stable face recognition independent of lighting conditions.
它对光照的变化有比较强的鲁棒性
3 Fast and precise face detection in stills and videos.
更准确的检测出人脸,这与它使用的检测人脸的技术有关,具体可以看它的官方简介。
4 Fast and robust eye detection in stills and videos.
这个我是我主要要用的功能,运行了下Demo,感觉它检测的准确性比opencv自带的检测人眼效果要好得多,速度也更快。但当人的眼睛闭合的时候依然检测不到。
5 Detection of 66 facial features, smooth facial feature tracking in video.
能提取出人脸的66个特征点,提取人脸的特征点是比较热门的研究,尤其是其准确性。因为提取特征点后要用于其他的后续研究,比如人脸建模AAM.FaceSDK检测出的特征点我准备性我感觉一般,不是特高。不够一般的需求应该还是能满足的。
6 Automated gender recognition in stills and videos.
识别人的性别,从人脸识别性别也是比较热门的研究,对它的准备我没有测试。
除此,它还支持从摄像头中实时检测跟踪人眼、特征点以及人脸识别等功能。
总的来说,它的检测成功率和速度都要比opencv自带的好(要不然别人就不会开发这个包了)。
下面是Luxand FaceSDK的配置过程,这里只是在Visual studio开发环境的中的配置。比较简单,几步就可以搞定。
Step 1: 下载Luxand FaceSDK,并安装激活。安装完成后在开始菜单你找到Luxand,里面有个License Key Wizard,运行它按要求填上你的Email地址,key就到你邮箱了。然后你就可以用了。
Step 2: 安装FaceSDK后,在VS中新建一个项目,建好项目后把SDK包中的include\C\LuxandFaceSDK.h这个文件拷贝到当前工程目录下。
Step 3: 把SDK包中的bin\win32\facesdk.dll 和 bin\win32\facesdk.lib 两个文件拷到工程的输出目录下。输出目录就是项目的Debug这个目录,注意在VS中建好项目编译后会生成两个Debug目录,这里的输出目录是指最外层的那个Debug目录。
Step 4:右击选择项目属性,在 Project Properties – Linker – Input – Additional Dependencies中添加 facesdk.lib
Step 5: 在Project Properties – Linker – General – Additional Library Directories Dependencies中添加 $(OutDir), 这里 $(OutDir)表示第四步添加的facesdk.lib所在的位置。
Step 6: 在你的代码中添加 include "LuxandFaceSDK.h",至此,整个配置已经over了。可以开始享受Luxand FaceSDK便捷的代码了。
下面是整个我测试的代码。
#include "LuxandFaceSDK.h"
#include <stdio.h>
int main( )
{
if (FSDKE_OK != FSDK_ActivateLibrary("你获得的Key")) {
exit(-1);
}
HImage img1; //注意这里的声明是HImage
TFacePosition FacePosition;
FSDK_Initialize("");
FSDK_LoadImageFromFile(&img1, "01.png"); // load .bmp file
FSDK_DetectFace(img1, &FacePosition);
printf("face position: %d %d %d", FacePosition.xc, FacePosition.yc, FacePosition.angle);
return 0;
}
关注这个代码有两点需要说明:
第一:在正式使用那些代码前一定要先激活(通过上面的FSDK_ActivateLibrary函数)。如果不激活,编译是能没有问题的,但运行时结果是错的。比如如上面这段代码是获得人脸区域的位置信息,如果不激活,最后获得的那些值就是错的。
第二:声明img1时要用HImage,官方SDK文档中给的例子声明时用的是int,但是如果用int定义img1则不能通过编译,这里看官方的sdk文档时要注意。PS:其实HImage是用typedef给int加的一个马甲,按理说int跟HImage是等价的,但实际编译时只能用HImage才行。
本文系原创,转载请注明转自:http://blog.csdn.net/computerme/article/details/38302701