人脸识别初始化
安装注册好之后就可以开始使用了。我这里使用的是C/S版的,开发环境为Microsoft .NET Framework 4.5 ,开发工具为vs2015 社区版。
首先,添加dll的引用。
[UnmanagedFunctionPointer (CallingConvention.Cdecl)]
delegate void FaceCallback ( IntPtr bytes, int size, String res );
// sdk初始化
[DllImport ("BaiduFaceApi.dll", EntryPoint = "sdk_init", CharSet = CharSet.Ansi
, CallingConvention = CallingConvention.Cdecl)]
private static extern int sdk_init ( bool id_card );
// 是否授权
[DllImport ("BaiduFaceApi.dll", EntryPoint = "is_auth", CharSet = CharSet.Ansi
, CallingConvention = CallingConvention.Cdecl)]
private static extern bool is_auth ();
// 获取设备指纹
[DllImport ("BaiduFaceApi.dll", EntryPoint = "get_device_id", CharSet = CharSet.Ansi
, CallingConvention = CallingConvention.Cdecl)]
private static extern IntPtr get_device_id ();
// sdk销毁
[DllImport ("BaiduFaceApi.dll", EntryPoint = "sdk_destroy", CharSet = CharSet.Ansi
, CallingConvention = CallingConvention.Cdecl)]
private static extern void sdk_destroy ();
//默认电脑自带摄像头,device可能为0,若外接usb摄像头,则device可能为1.
[DllImport ("BaiduFaceApi.dll", EntryPoint = "usb_track_face_info", CharSet = CharSet.Ansi
, CallingConvention = CallingConvention.Cdecl)]
private static extern IntPtr usb_track_face_info ( FaceCallback callback, int dev );
// 清除跟踪的人脸信息
[DllImport ("BaiduFaceApi.dll", EntryPoint = "clear_tracked_faces", CharSet = CharSet.Ansi
, CallingConvention = CallingConvention.Cdecl)]
private static extern void clear_tracked_faces ();
// 测试获取设备指纹device_id
public static void test_get_device_id ()
{
IntPtr ptr = get_device_id ();
string buf = Marshal.PtrToStringAnsi (ptr);
Console.WriteLine ("device id is:" + buf);
}
private void FaceScan_Load ( object sender, EventArgs e )
{
//设备初始化
sdk_init (false);
//是否激活
bool authed = is_auth ();
if (authed)//激活成功
{
//获取设备指纹
test_get_device_id ();
}
else
{
MessageBox.Show ("该设备未激活");
}
System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
//另起线程扫描人脸
th = new Thread (test_face_track);
th.IsBackground = true;
th.Start ();
}
主要是初始化和激活这两个方法比较折腾,其他的调用方法就按照文档进行就OK 了,百度云开发文档上面方法还是很详尽的。
sdk_init (false) 返回为-1表示失败,0表示成功 。
第一次使用会遇到很多问题,比如在init这一步就迟迟无法过去。
即使将该dll放在debug下面,也是显示其他的问题,这里有个比较粗暴的解决方法,将百度的demo中的dll全部拷贝到debug下,就可以了,这里肯定会有一些没用的dll,但是我也没细看。
然后再调用人脸识别方法的时候提示没有resource ,这里是因为百度人脸识别的特征库是在本地的,可能是由于离线的原因(个人猜想),将特征库放在了本地,所以demo中的face-resource需要拷贝到项目的bin目录下,db文件夹需要放在debug下。
当然,是数据库就可以访问,这里可以通过sqlitestudio来访问这个数据库,下一个sqlitestudio,然后在将db文件夹中的文件选择就行了。
如果有其他的问题报错,在debug文件夹下有两个log文件,进去找错误信息就行了