人臉識別初始化
安裝注冊好之后就可以開始使用了。我這里使用的是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文件,進去找錯誤信息就行了

