百度人臉識別離線模式的SDK下載及使用(2)

人臉識別初始化  

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章