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