C#人脸识别百度离线版(三)

1. 人脸检测(传入图片文件路径),返回json

进入主函数,调用test_face_track()方法

       // 人脸c#入口方法
        static void Main(string[] args)
        {
            Console.WriteLine("in main");
            bool id = false;
            
            int n = sdk_init(id);
            if(n != 0)
            {
                Console.WriteLine("auth result is {0:D}", n);
                Console.ReadLine();
            }

            // 测试是否授权
            bool authed = is_auth();
            Console.WriteLine("authed res is:"+authed);
            test_get_device_id();
            long t_begin = TimeUtil.get_time_stamp();
            // 测试获取人脸属性
            // FaceAttr attr = new FaceAttr();
            // attr.test_get_face_attr();
            // attr.test_get_face_attr_by_buf();
            //attr.test_get_face_attr_by_mat();
            //attr.test_get_face_attr_by_face();
             test_face_setting();
            // 测试获取人脸质量
            // FaceQuality quality = new FaceQuality();
            //  quality.test_get_face_quality();
            //  quality.test_get_face_quality_by_buf();
            //  quality.test_get_face_quality_by_mat();
            //quality.test_get_face_quality_by_face();

        // 测试人脸设置相关
        // test_face_setting();

        // 测试人脸管理
        // test_face_manager();

        // 测试人脸检测
        test_face_track();            

        // 测试人脸比较&识别
        // test_face_compare();
        // 测试人脸活体检测
        //test_face_liveness();
        long t_end = TimeUtil.get_time_stamp();
            Console.WriteLine("time cost is:"+(t_end-t_begin));
          
            sdk_destroy();
            Console.WriteLine("end main");
            Console.ReadLine();
        }
 // 测试人脸检测
        public static void test_face_track()
        {
            FaceTrack ft = new FaceTrack();
            // 人脸检测(传入图片文件路径),返回json
              ft.test_track();
            // 最大人脸检测(传入图片文件路径),返回json
            //ft.test_track_max_face();
            // 人脸检测(传入图片二进制文件buffer),返回json
            // ft.test_track_by_buf();
            // 最大人脸检测(传入图片二进制文件buffer),返回json
           // ft.test_track_max_face_by_buf();
            //usb 摄像头实时人脸检测
            //ybz ft.test_usb_track_face_info();
            // 清除跟踪的人脸信息
            //ft.test_clear_tracked_faces();
        }
// 测试人脸检测
        public void test_track()
        {
            // 传入图片文件绝对路径
            string file_name = "d:\\kehu2.jpg";
            int max_track_num = 1; // 设置最多检测人数(多人脸检测),默认为1,最多可设为10
            IntPtr ptr = track(file_name, max_track_num);
            string buf = Marshal.PtrToStringAnsi(ptr);
            Console.WriteLine("track res is:" + buf);
        }

d盘根目录需要放入一个kehu2.jpg照片

运行结果

返回参数说明:

count: 检测的人脸数量
width: 人脸宽度, angle: 角度
center_x, center_y: 人脸中心位置坐标
face_id: 人脸id
score:人脸得分
headpos: 人脸三个角度( x, y, z方向) landmark: 人脸轮廓关键点坐标

2. 人脸注册

调用test_user_add_by_buf()方法,d盘需要放一张4.jpg照片

参数必须类型示例描述
user_idstring用户id,字母、数字、下划线组成,最多128个字符
group_idstring用户组id,标识一组用户(由数字、字母、下划线组成),长度限制128B。用户组和user_id之间,仅为映射关系。如传入的groupid并未事先创建完毕,则注册用户的同时,直接完成group的创建
imagestring图片信息,须小于10M,传入图片的本地文件地址
user_infostring用户资料,256个字符以内
 // 测试人脸注册(传入二进制图片buffer)
        public void test_user_add_by_buf()
        {
            // 人脸注册
            string user_id = "test_user";
            string group_id = "test_group";
            System.Drawing.Image img = System.Drawing.Image.FromFile("d:\\4.jpg");
            byte[] img_bytes = ImageUtil.img2byte(img);
            string user_info = "user_info";
            IntPtr ptr = user_add_by_buf(user_id, group_id, img_bytes, img_bytes.Length, user_info);
            string buf = Marshal.PtrToStringAnsi(ptr);
            Console.WriteLine("user_add_by_buf res is:" + buf);
        }

运行结果:

返回信息

errno信息:

errno=0 : Success
errno>0 : 错误码对应的详细msg

人脸信息录入成功之后,数据存放在x64目录下的face.db下

我们可以打开face.db验证是否保存成功

表:USER保存用户的个人信息

表:FEATURE保存用户的人脸特征值信息

到此已经完成人脸检测和人脸录入功能。

 

 

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
本DEMO参考了https://download.csdn.net/download/abill425/10554049?tdsourcetag=s_pctim_aiomsg 资料; 非常感谢,如有侵权,请与本人联系; 与参考的资料相比,不同的是:参考资料是百度人脸SDK离线本V1.0本的; 而本DEMO是百度人脸SDK离线本V1.1本的; 本demo是x64的,封装成可供c#调用的dll是BaiduFaceDll.dll 使用步骤: 1.到百度AI开放平台 https://ai.baidu.com ,下载百度人脸离线SDK,(注意本V1.1.0,修改日期:2018.08.31) 2.下载后,把sdk包里那个443 MB的face-resource目录,复制到本demo的BaiduFaceDll\x64目录下(就是BaiduFaceDll.dll所在目录的上级目录) 3.打开BaiduFaceDll\x64\\Release\LicenseTool.exe,输入试用序列号(在百度AI开放平台取得,有效期30天),完成激活。注意,激活时需要联网。或者将已有的license.ini和license.key文件拷贝至此目录,注意注册序列号是与硬件相关的; 4.将本demo的BaiduFaceDll\x64\Release路径,加到系统的path变量中。 5.运行本demo的BaiduFaceDll\x64\Release目录下的WindowsFormsApplication1.exe,可以测试封装的dll,输入两张图片;然后单击:图像对比,会显示对比结果; 在C#中的函数注册: //请将"BaiduFaceDll.dll"修改为实际路径,如@"d:\BaiduFaceDll\x64\Release\BaiduFaceDll.dll", 或者直接把该实际路径加到系统的path变量中。 [DllImport("BaiduFaceDll.dll")] public static extern void Init();//初始化 [DllImport("BaiduFaceDll.dll")] public static extern void UnInit();//销毁 [DllImport("BaiduFaceDll.dll")] public extern static int Track(string imgstr, ref StringBuilder res);//人脸检测,imgstr为图片的base64编码字符串 [DllImport("BaiduFaceDll.dll")] public static extern int User_Add(string user_id, string imgstr);//添加用户,imgstr为图片的base64编码字符串 [DllImport("BaiduFaceDll.dll")] public static extern int User_Delete(string user_id);//删除用户 [DllImport("BaiduFaceDll.dll")] public extern static void Identify(string imgstr, ref StringBuilder res);//人脸识别,imgstr为图片的base64编码字符串 [DllImport("BaiduFaceDll.dll")] public extern static void Match(string image1, int img_type1, string image2, int img_type2, ref StringBuilder res);//人脸1:1对比编码字符串 sdk调用流程: 初始化 -> 图片对比 -> 销毁 具体详细的windows-sdk使用说明,参见 http://ai.baidu.com/docs#/Face-Offline-SDK-Windows/top 源码: 本demo的BaiduFaceDll\BaiduFaceDll目录,是本封装dll的c++源码。VS本为2015,Framework本为4.0。 本DEMO只是封装了几个示例,其余封装,参考样式自行编写;
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bzhyan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值