//using OpenCvSharp; //using System; //using System.Runtime.InteropServices; ///** // * 备注(人脸数据库管理说明): // * 人脸数据库为采用sqlite3的数据库,会自动生成一个db目录夹,下面有数据库face.db文件保存数据库 // * 可用sqliteExpert之类的可视化工具打开查看,亦可用命令行,方法请自行百度。 // * 该数据库仅仅可适应于5w人左右的人脸库,且设计表格等属于小型通用化。 // * 若不能满足客户个性化需求,客户可自行设计数据库保存数据。宗旨就是每个人脸图片提取一个特征值保存。 // * 人脸1:1,1:N比对及识别实际就是特征值的比对。1:1只要提取2张不同的图片特征值调用compare_feature比对。 // * 1:N是提取一个特征值和数据库中已保存的N个特征值一一比对(比对速度很快,不用担心效率问题), // * 最终取分数高的值为最高相似度。 // * 相似度识别的分数可自行测试根据实验结果拟定,一般推荐相似度大于80分为同一人。 // * // */ //namespace FaceAI //{ // class FaceManager // { // // 人脸注册(传特征值,特征值可参考FaceFeature.cs提取,亦可参考FaceCompare.cs查看特征值的比对) // [DllImport("BaiduFaceApi.dll", EntryPoint = "user_add", CharSet = CharSet.Ansi // , CallingConvention = CallingConvention.Cdecl)] // public static extern IntPtr user_add(ref BDFaceFeature f1, string user_id, string group_id, // string user_info=""); // // 人脸注册(传opencv图片帧,特征值可参考FaceFeature.cs提取,亦可参考FaceCompare.cs查看特征值的比对) // [DllImport("BaiduFaceApi.dll", EntryPoint = "user_add_by_mat", CharSet = CharSet.Ansi // , CallingConvention = CallingConvention.Cdecl)] // public static extern IntPtr user_add_by_mat(IntPtr mat, string user_id, string group_id, // string user_info = ""); // // 人脸更新(传图片帧) // [DllImport("BaiduFaceApi.dll", EntryPoint = "user_update", CharSet = CharSet.Ansi // , CallingConvention = CallingConvention.Cdecl)] // public static extern IntPtr user_update(IntPtr mat, string user_id, string group_id, // string user_info = ""); // // 用户删除 // [DllImport("BaiduFaceApi.dll", EntryPoint = "user_delete", CharSet = CharSet.Ansi // , CallingConvention = CallingConvention.Cdecl)] // public static extern IntPtr user_delete(string user_id, string group_id); // // 组添加 // [DllImport("BaiduFaceApi.dll", EntryPoint = "group_add", CharSet = CharSet.Ansi // , CallingConvention = CallingConvention.Cdecl)] // public static extern IntPtr group_add(string group_id); // // 组删除 // [DllImport("BaiduFaceApi.dll", EntryPoint = "group_delete", CharSet = CharSet.Ansi // , CallingConvention = CallingConvention.Cdecl)] // public static extern IntPtr group_delete(string group_id); // // 查询用户信息 // [DllImport("BaiduFaceApi.dll", EntryPoint = "get_user_info", CharSet = CharSet.Ansi // , CallingConvention = CallingConvention.Cdecl)] // public static extern IntPtr get_user_info(string user_id, string group_id); // // 查询用户图片 // [DllImport("BaiduFaceApi.dll", EntryPoint = "get_user_image", CharSet = CharSet.Ansi // , CallingConvention = CallingConvention.Cdecl)] // public static extern int get_user_image(IntPtr out_mat, string user_id, string group_id); // // 用户组列表查询 // [DllImport("BaiduFaceApi.dll", EntryPoint = "get_user_list", CharSet = CharSet.Ansi // , CallingConvention = CallingConvention.Cdecl)] // public static extern IntPtr get_user_list(string group_id, int start = 0, int length = 100); // // 组列表查询 // [DllImport("BaiduFaceApi.dll", EntryPoint = "get_group_list", CharSet = CharSet.Ansi // , CallingConvention = CallingConvention.Cdecl)] // public static extern IntPtr get_group_list(int start = 0, int length = 100); // // 数据库人脸数量查询 // [DllImport("BaiduFaceApi.dll", EntryPoint = "db_face_count", CharSet = CharSet.Ansi // , CallingConvention = CallingConvention.Cdecl)] // public static extern int db_face_count(string group_id); // // 测试人脸注册 // public void test_user_add() // { // // 人脸注册 // string user_id = "test_user"; // string group_id = "test_group"; // string file_name = "../images/1.jpg"; // string user_info = "user_info"; // // 提取人脸特征值数组(多人会提取多个人的特征值) ///* // FaceFeature feature = new FaceFeature(); // BDFaceFeature[] feaList1 = feature.test_get_face_feature_by_path(file_name // if (feaList1 == null) // { // Console.WriteLine("get feature fail"); // return; // } // // 假设测试的图片是1个人, // BDFaceFeature f1 = feaList1[0]; // // 人脸注册 (传特征值人脸注册,该方法注册不保存人脸图片入库) // IntPtr ptr = user_add(ref f1, user_id, group_id, user_info); // string buf = Marshal.PtrToStringAnsi(ptr); // Console.WriteLine("user_add res is:" + buf); //*/ // // 通过图片帧人脸注册(只有该方法进行的人脸注册,人脸库才会保存人脸图片) // Mat mat = Cv2.ImRead(file_name); // IntPtr mptr = user_add_by_mat(mat.CvPtr, user_id, group_id, user_info); // string mbuf = Marshal.PtrToStringAnsi(mptr); // Console.WriteLine("user_add_by_mat res is:" + mbuf); // } // // 测试人脸更新 // public void test_user_update() // { // string user_id = "test_user"; // string group_id = "test_group"; // string file_name = "../images/1.jpg"; // Mat mat = Cv2.ImRead(file_name); // string user_info = "user_info"; // // 人脸更新 // IntPtr ptr = user_update(mat.CvPtr, user_id, group_id, user_info); // string buf = Marshal.PtrToStringAnsi(ptr); // Console.WriteLine("user_update res is:" + buf); // } // // 测试用户删除 (用户删除后,人脸数据也被删除) // public void test_user_delete() // { // string user_id = "test_user"; // string group_id = "test_group"; // IntPtr ptr = user_delete(user_id, group_id); // string buf = Marshal.PtrToStringAnsi(ptr); // Console.WriteLine("user_delete res is:" + buf); // } // // 组添加 // public void test_group_add() // { // string group_id = "test_group2"; // IntPtr ptr = group_add(group_id); // string buf = Marshal.PtrToStringAnsi(ptr); // Console.WriteLine("group_add res is:" + buf); // } // // 组删除 // public void test_group_delete() // { // string group_id = "test_group2"; // IntPtr ptr = group_delete(group_id); // string buf = Marshal.PtrToStringAnsi(ptr); // Console.WriteLine("group_delete res is:" + buf); // } // // 查询用户信息 // public void test_get_user_info() // { // string user_id = "test_user"; // string group_id = "test_group"; // IntPtr ptr = get_user_info(user_id , group_id); // string buf = Marshal.PtrToStringAnsi(ptr); // Console.WriteLine("get_user_info res is:" + buf); // } // // 查询用户图片 // public void test_get_user_image() // { // string user_id = "test_user"; // string group_id = "test_group"; // Mat out_mat = new Mat(); // int res = get_user_image(out_mat.CvPtr, user_id, group_id); // if (res == 0) // { // Console.WriteLine("get_user_image success"); // // 图片保存到本地 // out_mat.ImWrite("user.jpg"); // } // else // { // Console.WriteLine("get_user_image error{0}:", res); // } // } // // 用户组列表查询 // public void test_get_user_list() // { // string group_id = "test_group"; // IntPtr ptr = get_user_list(group_id); // string buf = Marshal.PtrToStringAnsi(ptr); // Console.WriteLine("get_user_list res is:" + buf); // } // // 组列表查询 // public void test_get_group_list() // { // IntPtr ptr = get_group_list(); // string buf = Marshal.PtrToStringAnsi(ptr); // Console.WriteLine("get_group_list res is:" + buf); // } // // 人脸库数量查询 // public void test_db_face_count() // { // string group_id = "test_group"; // // 参数传组id表示查该组都人脸数量 // int count = db_face_count(group_id); // Console.WriteLine("count is:" + count); // string group_id2 = null; // // 参数传null表示查整个库 // int count2 = db_face_count(group_id2); // Console.WriteLine("all count is:" + count2); // } // } //}