百度人脸识别离线模式的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文件,进去找错误信息就行了

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