//using System; //using System.Runtime.InteropServices; //using System.IO; //using OpenCvSharp; //// 人脸比对(备注:人脸比对,实际上是人脸的特征值比对,提取出人脸特征值,用compare_feature方法比对) //namespace FaceAI //{ // // 人脸比较1:1、1:N、抽取人脸特征值、按特征值比较等 // public class FaceCompare // { // // 提取人脸特征值(传图片文件路径) // /// // /// 提取人脸特征值,为512个浮点值,已加密 // /// // /// 图片信息,数据大小小于10M,传入图片文件路径 // /// 通过引用返回特征值的长度,若为2048表示提取正确,其他值表示提取了错误的特征值 // /// // [DllImport("BaiduFaceApi.dll", EntryPoint = "get_face_feature", CharSet = CharSet.Ansi // , CallingConvention = CallingConvention.Cdecl)] // public static extern IntPtr get_face_feature(string file_name, ref int length); // // 提取人脸特征值(传二进制图片buffer) // /// // /// 提取人脸特征值,为2048个byte (传入二进制图片buffer) // /// // /// // /// // /// // /// // [DllImport("BaiduFaceApi.dll", EntryPoint = "get_face_feature_by_buf", CharSet = CharSet.Ansi // , CallingConvention = CallingConvention.Cdecl)] // public static extern IntPtr get_face_feature_by_buf(byte[] buf, int size, ref int length); // //// 获取人脸特征值(传入opencv视频帧及人脸信息,适应于多人脸) // ///// // ///// 获取人脸特征值(传入opencv视频帧及人脸信息,适应于多人脸) // ///// // ///// // ///// // ///// // ///// // //[DllImport("BaiduFaceApi.dll", EntryPoint = "get_face_feature_by_face", CharSet = CharSet.Ansi // // , CallingConvention = CallingConvention.Cdecl)] // //public static extern int get_face_feature_by_face(IntPtr mat, ref TrackFaceInfo info, ref IntPtr feaptr); // // 人脸1:1比对(传图片文件路径) // /// // /// 人脸对比接口(传入图片文件路径) // /// // /// 需要对比的第一张图片,小于10M,传入图片文件路径 // /// 需要对比的第二张图片,小于10M,传入图片文件路径 // /// // [DllImport("BaiduFaceApi.dll", EntryPoint = "match", CharSet = CharSet.Ansi // , CallingConvention = CallingConvention.Cdecl)] // public static extern IntPtr match(string file_name1, string file_name2); // // 人脸1:1比对(传二进制图片buffer) // /// // /// 人脸对比接口(传入二进制图片buffer) // /// // /// 需要对比的第一张图片,小于10M // /// 图片1的大小 // /// 需要对比的第二张图片,小于10M // /// 图片2的大小 // /// // [DllImport("BaiduFaceApi.dll", EntryPoint = "match_by_buf", CharSet = CharSet.Ansi // , CallingConvention = CallingConvention.Cdecl)] // public static extern IntPtr match_by_buf(byte[] buf1, int size1, byte[] buf2, int size2); // // 人脸1:1比对(传opencv视频帧) // /// // /// 人脸1:1比对(传opencv视频帧) // /// // /// // /// // /// // [DllImport("BaiduFaceApi.dll", EntryPoint = "match_by_mat", CharSet = CharSet.Ansi // , CallingConvention = CallingConvention.Cdecl)] // public static extern IntPtr match_by_mat(IntPtr img1, IntPtr img2);// byte[] buf1, int size1, byte[] buf2, int size2); // // 人脸1:1比对(传人脸特征值和二进制图片buffer) // /// // /// 人脸对比接口(传入二进制图片buffer) // /// // /// 文件特征 // /// // /// // /// // /// // [DllImport("BaiduFaceApi.dll", EntryPoint = "match_by_feature", CharSet = CharSet.Ansi // , CallingConvention = CallingConvention.Cdecl)] // public static extern IntPtr match_by_feature(byte[] feature, int fea_len, byte[] buf2, int size2); // // 特征值比对(传2个人脸的特征值) // /// // /// 特征值比对 // /// // /// // /// // /// // /// // /// // [DllImport("BaiduFaceApi.dll", EntryPoint = "compare_feature", CharSet = CharSet.Ansi // , CallingConvention = CallingConvention.Cdecl)] // public static extern float compare_feature(byte[] f1, int f1_len, byte[] f2, int f2_len); // // 1:N人脸识别(传图片文件路径和库里的比对) // /// // /// 人脸识别,提供1:N查找 (传入图片文件路径) // /// // /// 图片信息,数据大小小于10M,传入图片文件路径 // /// 组id列表。默认至少填写一个group_id,从指定的group中进行查找。需要同时查询多个group,用逗号分隔,上限10个 // /// 用户id,若指定了某个user,则只会与指定group下的这个user进行对比;若user_id传空字符串” ”,则会与此group下的所有user进行1:N识别 // /// 识别后返回的用户top数,默认为1,最多返回50个结果 // /// // [DllImport("BaiduFaceApi.dll", EntryPoint = "identify", CharSet = CharSet.Ansi // , CallingConvention = CallingConvention.Cdecl)] // public static extern IntPtr identify(string image, string group_id_list, string user_id, int user_top_num = 1); // // 1:N人脸识别(传图片二进制文件buffer和库里的比对) // /// // /// 人脸识别,提供1:N查找 (传入二进制图片buffer) // /// // /// 二进制图片信息,数据大小小于10M // /// 图片大小 // /// 组id列表。默认至少填写一个group_id,从指定的group中进行查找。需要同时查询多个group,用逗号分隔,上限10个 // /// 用户id,若指定了某个user,则只会与指定group下的这个user进行对比;若user_id传空字符串” ”,则会与此group下的所有user进行1:N识别 // /// 识别后返回的用户top数,默认为1,最多返回50个结果 // /// // [DllImport("BaiduFaceApi.dll", EntryPoint = "identify_by_buf", CharSet = CharSet.Ansi // , CallingConvention = CallingConvention.Cdecl)] // public static extern IntPtr identify_by_buf(byte[] buf, int size, string group_id_list, // string user_id, int user_top_num = 1); // // 1:N人脸识别(传人脸特征值和库里的比对) // /// // /// 1:N人脸识别(传人脸特征值和库里的比对) // /// // /// // /// // /// 组id列表。默认至少填写一个group_id,从指定的group中进行查找。需要同时查询多个group,用逗号分隔,上限10个 // /// 用户id,若指定了某个user,则只会与指定group下的这个user进行对比;若user_id传空字符串” ”,则会与此group下的所有user进行1:N识别 // /// 识别后返回的用户top数,默认为1,最多返回50个结果 // /// // [DllImport("BaiduFaceApi.dll", EntryPoint = "identify_by_feature", CharSet = CharSet.Ansi // , CallingConvention = CallingConvention.Cdecl)] // public static extern IntPtr identify_by_feature(byte[] feature, int fea_len, string group_id_list, // string user_id, int user_top_num = 1); // // 提前加载库里所有数据到内存中 // /// // /// 提前加载库里所有数据到内存中 // /// // /// // [DllImport("BaiduFaceApi.dll", EntryPoint = "load_db_face", CharSet = CharSet.Ansi // , CallingConvention = CallingConvention.Cdecl)] // public static extern bool load_db_face(); // // 1:N人脸识别(传人脸图片文件和内存已加载的整个库数据比对) // /// // /// 1:N人脸识别(传人脸图片文件和内存已加载的整个库数据比对) // /// // /// // /// // /// // [DllImport("BaiduFaceApi.dll", EntryPoint = "identify_with_all", CharSet = CharSet.Ansi // , CallingConvention = CallingConvention.Cdecl)] // public static extern IntPtr identify_with_all(string image, int user_top_num = 1); // // 1:N人脸识别(传人脸图片文件和内存已加载的整个库数据比对) // /// // /// // /// // /// 图片的二进制文件 // /// // /// // /// // [DllImport("BaiduFaceApi.dll", EntryPoint = "identify_by_buf_with_all", CharSet = CharSet.Ansi // , CallingConvention = CallingConvention.Cdecl)] // public static extern IntPtr identify_by_buf_with_all(byte[] image, int size, int user_top_num = 1); // // 1:N人脸识别(传人脸特征值和内存已加载的整个库数据比对) // /// // /// 1:N人脸识别(传人脸特征值和内存已加载的整个库数据比对) // /// // /// // /// // /// // /// // [DllImport("BaiduFaceApi.dll", EntryPoint = "identify_by_feature_with_all", CharSet = CharSet.Ansi // , CallingConvention = CallingConvention.Cdecl)] // public static extern IntPtr identify_by_feature_with_all(byte[] feature, int fea_len, int user_top_num = 1); // // 测试获取人脸特征值(2048个byte) // public void test_get_face_feature() // { // byte[] fea = new byte[2048]; // string file_name = "G:\\Development\\Application\\testface\\img\\beckham\\2.jpg"; // int len = 0; // IntPtr ptr = get_face_feature(file_name, ref len); // if (ptr == IntPtr.Zero) // { // Console.WriteLine("get face feature error"); // } // else // { // if (len == 2048) // { // Console.WriteLine("get face feature success"); // Marshal.Copy(ptr, fea, 0, 2048); // // 可保存特征值2048个字节的fea到文件中 // // FileUtil.byte2file("G:\\Development\\Application\\testface\\img\\beckham\\fea1.txt",fea, 2048); // } // else // { // Console.WriteLine("get face feature error"); // } // } // } // /// // /// 获取人脸特征值(2048个byte) // /// // /// // /// // public string GetFaceFeature(string fileName) // { // try // { // byte[] fea = new byte[2048]; // string file_name = fileName == null ? fileName : "G:\\Development\\Application\\testface\\img\\beckham\\2.jpg"; // int len = 0; // IntPtr ptr = get_face_feature(file_name, ref len); // if (ptr == IntPtr.Zero) // { // Console.WriteLine("get face feature error"); // return "error"; // } // else // { // if (len == 2048) // { // Console.WriteLine("get face feature success"); // Marshal.Copy(ptr, fea, 0, 2048); // return fea.ToString(); // // 可保存特征值2048个字节的fea到文件中 // // FileUtil.byte2file("G:\\Development\\Application\\testface\\img\\beckham\\fea1.txt",fea, 2048); // } // else // { // Console.WriteLine("get face feature error"); // return "error"; // } // } // } // catch (Exception e) // { // throw e; // } // } // /// // /// 获取人脸特征值 2048Byte // /// // /// 图片信息,数据大小小于10M,传入图片文件路径 // /// 通过引用返回特征值的长度,若为2048表示提取正确,其他值表示提取了错误的特征值 // /// // public string GetFaceFeature(string file_name, ref int length) // { // byte[] fea = new byte[2048]; // int len = length == 0 ? 0 : length; //defalut=0 // string result = ""; // IntPtr ptr = get_face_feature(file_name, ref len); // if (ptr == IntPtr.Zero) // { // result = ("get face feature error"); // } // else // { // if (len == 2048) // { // result = ("get face feature success"); // Marshal.Copy(ptr, fea, 0, 2048); // // 可保存特征值2048个字节的fea到文件中 // // FileUtil.byte2file("G:\\Development\\Application\\testface\\img\\beckham\\fea1.txt",fea, 2048); // } // else // { // result = ("get face feature error"); // } // } // return result; // } // //// 测试获取人脸特征值(2048个byte) // //public void test_get_face_feature_by_buf() // //{ // // byte[] fea = new byte[2048]; // // System.Drawing.Image img = System.Drawing.Image.FromFile("G:\\Development\\Application\\testface\\img\\beckham\\2.jpg"); // // byte[] img_bytes = ImageUtil.img2byte(img); // // int len = 0; // // IntPtr ptr = get_face_feature_by_buf(img_bytes, img_bytes.Length, ref len); // // if (ptr == IntPtr.Zero) // // { // // Console.WriteLine("get face feature error"); // // } // // else // // { // // if (len == 2048) // // { // // Console.WriteLine("get face feature success"); // // Marshal.Copy(ptr, fea, 0, 2048); // // // 可保存特征值2048个字节的fea到文件中 // // // FileUtil.byte2file("G:\\Development\\Application\\testface\\img\\beckham\\fea2.txt",fea, 2048); // // } // // else // // { // // Console.WriteLine("get face feature error"); // // } // // } // //} // ///// // ///// 获取人脸特征值 2048byte // ///// // ///// // ///// // //public string GetFaceFeatureByBuffer(string filePath) // //{ // // byte[] fea = new byte[2048]; // // string result = ""; // // System.Drawing.Image img = System.Drawing.Image.FromFile(filePath); // // byte[] img_bytes = ImageUtil.img2byte(img); // // int len = 0; // // IntPtr ptr = get_face_feature_by_buf(img_bytes, img_bytes.Length, ref len); // // if (ptr == IntPtr.Zero) // // { // // result = ("get face feature error"); // // } // // else // // { // // if (len == 2048) // // { // // result = ("get face feature success"); // // Marshal.Copy(ptr, fea, 0, 2048); // // // 可保存特征值2048个字节的fea到文件中 // // // FileUtil.byte2file("G:\\Development\\Application\\testface\\img\\beckham\\fea2.txt",fea, 2048); // // } // // else // // { // // result = ("get face feature error"); // // } // // } // // return result; // //} // // 测试1:1比较,传入图片文件路径 // public void test_match() // { // string file1 = "G:\\Development\\Application\\testface\\img\\beckham\\1.jpg"; // string file2 = "G:\\Development\\Application\\testface\\img\\beckham\\9.jpg"; // IntPtr ptr = match(file1, file2); // string buf = Marshal.PtrToStringAnsi(ptr); // Console.WriteLine("match res is:" + buf); // } // /// // /// 1:1比较 传入图片文件路径 // /// // /// // /// // /// // public string FaceMatch(string file1, string file2) // { // IntPtr ptr = match(file1, file2); // string buf = Marshal.PtrToStringAnsi(ptr); // Console.WriteLine("match res is:" + buf); // return buf; // } // // 测试1:1比较,传入图片文件二进制buffer // //public void test_match_by_buf() // //{ // // System.Drawing.Image img1 = System.Drawing.Image.FromFile("d:\\444.bmp"); // // byte[] img_bytes1 = ImageUtil.img2byte(img1); // // System.Drawing.Image img2 = System.Drawing.Image.FromFile("d:\\555.png"); // // byte[] img_bytes2 = ImageUtil.img2byte(img2); // // Console.WriteLine("IntPtr ptr = match_by_buf"); // // IntPtr ptr = match_by_buf(img_bytes1, img_bytes1.Length, img_bytes2, img_bytes2.Length); // // string buf = Marshal.PtrToStringAnsi(ptr); // // Console.WriteLine("match_by_buf res is:" + buf); // //} // /// // /// 1:1比较 传图片二进制Buffer // /// // /// // /// // /// // public string FaceMatchByBuffer(byte[] file1, byte[] file2) // { // // System.Drawing.Image img1 = System.Drawing.Image.FromFile(file1); // byte[] img_bytes1 = file1; // ImageUtil.img2byte(img1); // // System.Drawing.Image img2 = System.Drawing.Image.FromFile(file2); // byte[] img_bytes2 = file2; // ImageUtil.img2byte(img2); // Console.WriteLine("IntPtr ptr = match_by_buf"); // IntPtr ptr = match_by_buf(img_bytes1, img_bytes1.Length, img_bytes2, img_bytes2.Length); // string buf = Marshal.PtrToStringAnsi(ptr); // return ("match_by_buf res is:" + buf); // } // // 测试1:1比较,传入opencv视频帧 // public void test_match_by_mat() // { // Mat img1 = Cv2.ImRead("d:\\444.bmp"); // Mat img2 = Cv2.ImRead("d:\\555.png"); // IntPtr ptr = match_by_mat(img1.CvPtr, img2.CvPtr);// img_bytes1, img_bytes1.Length, img_bytes2, img_bytes2.Length); // string buf = Marshal.PtrToStringAnsi(ptr); // Console.WriteLine("match_by_buf res is:" + buf); // } // /// // /// 1:1比较,传入opencv视频帧 // /// // /// // /// // /// // public string FaceMatchByMat(string file1, string file2) // { // Mat img1 = Cv2.ImRead(file1); // Mat img2 = Cv2.ImRead(file2); // IntPtr ptr = match_by_mat(img1.CvPtr, img2.CvPtr);// img_bytes1, img_bytes1.Length, img_bytes2, img_bytes2.Length); // string buf = Marshal.PtrToStringAnsi(ptr); // return ("match_by_buf res is:" + buf); // } // // 测试根据特征值和图片二进制buf比较 // //public void test_match_by_feature() // //{ // // // 获取特征值2048个字节 // // byte[] fea = new byte[2048]; // // string file_name = "G:\\Development\\Application\\testface\\img\\beckham\\2.jpg"; // // int len = 0; // // IntPtr ptr = get_face_feature(file_name, ref len); // // if (len != 2048) // // { // // Console.WriteLine("get face feature error!"); // // return; // // } // // Marshal.Copy(ptr, fea, 0, 2048); // // // 获取图片二进制buffer // // System.Drawing.Image img2 = System.Drawing.Image.FromFile("G:\\Development\\Application\\testface\\img\\beckham\\8.jpg"); // // byte[] img_bytes2 = ImageUtil.img2byte(img2); // // IntPtr ptr_res = match_by_feature(fea, fea.Length, img_bytes2, img_bytes2.Length); // // string buf = Marshal.PtrToStringAnsi(ptr_res); // // Console.WriteLine("match_by_feature res is:" + buf); // //} // /// // /// 根据特征值和图片二进制buf比较 // /// // /// 需要对比的特征值 // /// 需要对比的第二张图片,小于10M // /// // public string FaceMatchByFeature(byte[] file_name, byte[] file_buffer) // { // // 获取特征值2048个字节 // byte[] fea = file_name; // new byte[2048]; // //int len = 0; // //IntPtr ptr = get_face_feature(file_name, ref len); // //if (len != 2048) // //{ // // return ("get face feature error!"); // //} // //Marshal.Copy(ptr, fea, 0, 2048); // //// 获取图片二进制buffer // //System.Drawing.Image img2 = System.Drawing.Image.FromFile(file_buffer); // byte[] img_bytes2 = file_buffer; // ImageUtil.img2byte(img2); // IntPtr ptr_res = match_by_feature(fea, fea.Length, img_bytes2, img_bytes2.Length); // string buf = Marshal.PtrToStringAnsi(ptr_res); // Console.WriteLine("match_by_feature res is:" + buf); // return buf; // } // // 测试1:N比较,传入图片文件路径 // public /*void*/string test_identify(string str, string usr_grp, string usr_id) // { // string file1 = str;//"G:\\Development\\Application\\testface\\img\\beckham\\6.jpg"; // string user_group = usr_grp;//"test_group"; // string user_id = usr_id;//"test_user"; // IntPtr ptr = identify(file1, user_group, user_id); // string buf = Marshal.PtrToStringAnsi(ptr); // Console.WriteLine("identify res is:" + buf); // return buf; // } // /// // /// 1:N比较,传入图片文件路径 // /// // /// 图片信息,数据大小小于10M,传入图片文件路径 // /// 组id列表。默认至少填写一个group_id,从指定的group中进行查找。需要同时查询多个group,用逗号分隔,上限10个 // /// 用户id,若指定了某个user,则只会与指定group下的这个user进行对比;若user_id传空字符串” ”,则会与此group下的所有user进行1:N识别 // /// // public static string FaceIdentify(string file, string user_group, string user_id) // { // string file1 = file; // IntPtr ptr = identify(file1, user_group, user_id); // string buf = Marshal.PtrToStringAnsi(ptr); // Console.WriteLine("identify res is:" + buf); // return buf; // } // // 测试1:N比较,传入图片文件二进制buffer // //public void test_identify_by_buf(string str, string usr_grp, string usr_id) // //{ // // System.Drawing.Image img = System.Drawing.Image.FromFile(str);//"G:\\Development\\Application\\testface\\img\\beckham\\2.jpg"); // // byte[] img_bytes = ImageUtil.img2byte(img); // // string user_group = usr_grp;//"test_group"; // // string user_id = usr_id;// "test_user"; // // IntPtr ptr = identify_by_buf(img_bytes, img_bytes.Length, user_group, user_id); // // string buf = Marshal.PtrToStringAnsi(ptr); // // Console.WriteLine("identify_by_buf res is:" + buf); // //} // /// // /// 1:N比较,传入图片文件二进制buffer // /// // /// 二进制图片信息,数据大小小于10M // /// 组id列表。默认至少填写一个group_id,从指定的group中进行查找。需要同时查询多个group,用逗号分隔,上限10个 // /// 用户id,若指定了某个user,则只会与指定group下的这个user进行对比;若user_id传空字符串” ”,则会与此group下的所有user进行1:N识别 // /// // public string FaceIdentifyByBuffer(byte[] str, string usr_grp, string usr_id) // { // // System.Drawing.Image img = System.Drawing.Image.FromFile(str); // byte[] img_bytes = str; // ImageUtil.img2byte(img); // string user_group = usr_grp;//"test_group"; // string user_id = usr_id;// "test_user"; // IntPtr ptr = identify_by_buf(img_bytes, img_bytes.Length, user_group, user_id); // string buf = Marshal.PtrToStringAnsi(ptr); // Console.WriteLine("identify_by_buf res is:" + buf); // return buf; // } // // 测试1:N比较,传入提取的人脸特征值 // public void test_identify_by_feature() // { // // 获取特征值2048个字节 // byte[] fea = new byte[2048]; // string file_name = "G:\\Development\\Application\\testface\\img\\beckham\\2.jpg"; // int len = 0; // IntPtr ptr = get_face_feature(file_name, ref len); // if (len != 2048) // { // Console.WriteLine("get face feature error!"); // return; // } // Marshal.Copy(ptr, fea, 0, 2048); // string user_group = "test_group"; // string user_id = "test_user"; // IntPtr ptr_res = identify_by_feature(fea, fea.Length, user_group, user_id); // string buf = Marshal.PtrToStringAnsi(ptr_res); // Console.WriteLine("identify_by_feature res is:" + buf); // } // /// // /// 1:N比较,传入提取的人脸特征值 // /// // /// 传入图片特征 // /// 组id列表。默认至少填写一个group_id,从指定的group中进行查找。需要同时查询多个group,用逗号分隔,上限10个 // /// 用户id,若指定了某个user,则只会与指定group下的这个user进行对比;若user_id传空字符串” ”,则会与此group下的所有user进行1:N识别 // /// // public static string FaceIdentifyByFeature(string file_name, string userGroup, string userId) // { // // 获取特征值2048个字节 // byte[] fea = new byte[2048]; // int len = 0; // IntPtr ptr = get_face_feature(file_name, ref len); // if (len != 2048) // { // return ("get face feature error!"); // } // Marshal.Copy(ptr, fea, 0, 2048); // string user_group = userGroup == null ? "test_group" : userGroup; // string user_id = userId == null ? "test_user" : userId; // IntPtr ptr_res = identify_by_feature(fea, fea.Length, user_group, user_id); // string buf = Marshal.PtrToStringAnsi(ptr_res); // Console.WriteLine("identify_by_feature res is:" + buf); // return buf; // } // // 通过特征值比对(1:1) // public void test_compare_feature() // { // // 获取特征值1 共2048个字节 // byte[] fea1 = new byte[2048]; // string file_name1 = "G:\\Development\\Application\\testface\\img\\beckham\\2.jpg"; // int len1 = 0; // IntPtr ptr1 = get_face_feature(file_name1, ref len1); // if (len1 != 2048) // { // Console.WriteLine("get face feature error!"); // return; // } // Marshal.Copy(ptr1, fea1, 0, 2048); // // 获取特征值2 共2048个字节 // byte[] fea2 = new byte[2048]; // string file_name2 = "G:\\Development\\Application\\testface\\img\\beckham\\8.jpg"; // int len2 = 0; // IntPtr ptr2 = get_face_feature(file_name2, ref len2); // if (len2 != 2048) // { // Console.WriteLine("get face feature error!"); // return; // } // Marshal.Copy(ptr2, fea2, 0, 2048); // // 比对 // float score = compare_feature(fea1, len1, fea2, len2); // Console.WriteLine("compare_feature score is:" + score); // } // /// // /// 通过特征值比对(1:1) 对人脸特征值进行比较,可返回人脸特征相似分值(百分制) // /// // /// 2048个byte数组的特征值(传图片路径) // /// 2048个byte数组的特征值(传图片路径) // /// // public static string FaceCompareFeature(string file_name1, string file_name2) // { // string mes = "入:"; // try // { // // 获取特征值1 共2048个字节 // byte[] fea1 = new byte[2048]; // int len1 = 0; // IntPtr ptr1 = get_face_feature(file_name1, ref len1); // if (len1 != 2048) // { // return mes += "get face feature error!"; // } // Marshal.Copy(ptr1, fea1, 0, 2048); // // 获取特征值2 共2048个字节 // byte[] fea2 = new byte[2048]; // int len2 = 0; // IntPtr ptr2 = get_face_feature(file_name2, ref len2); // if (len2 != 2048) // { // return mes += "get face feature error!"; // } // Marshal.Copy(ptr2, fea2, 0, 2048); // // 比对 // // len1 特征值1的长度 // float score = compare_feature(fea1, len1, fea2, len2); // Console.WriteLine("compare_feature score is:" + score); // return mes += score.ToString(); // } // catch (Exception ex) // { // return mes += ex; // } // } // /// // /// 通过特征值比对(1:1) 对人脸特征值进行比较,可返回人脸特征相似分值(百分制) // /// // /// 2048个byte数组的特征值 // /// 2048个byte数组的特征值 // /// // public string FaceCompareFeatureByBuffer(byte[] face1, byte[] face2) // { // if (face1.Length == 2048 && face2.Length == 2048) // { // // 获取特征值1 共2048个字节 // byte[] fea1 = new byte[2048]; // fea1 = face1; // int len1 = 0; // // 获取特征值1 共2048个字节 // byte[] fea2 = new byte[2048]; // fea2 = face2; // int len2 = 0; // // 比对 // // len1 特征值1的长度 // float score = compare_feature(fea1, len1, fea2, len2); // Console.WriteLine("compare_feature score is:" + score); // return score.ToString(); // } // else // { // return "byte should be 2048"; // } // } // // 测试1:N比较,传入提取的人脸特征值和已加载的内存中整个库比较 // public void test_identify_by_feature_with_all() // { // // 加载整个数据库到内存中 // load_db_face(); // // 获取特征值2048个字节 // byte[] fea = new byte[2048]; // string file_name = "G:\\Development\\Application\\testface\\img\\beckham\\2.jpg"; // int len = 0; // IntPtr ptr = get_face_feature(file_name, ref len); // if (len != 2048) // { // Console.WriteLine("get face feature error!"); // return; // } // Marshal.Copy(ptr, fea, 0, 2048); // IntPtr ptr_res = identify_by_feature_with_all(fea, fea.Length); // string buf = Marshal.PtrToStringAnsi(ptr_res); // Console.WriteLine("identify_by_feature_with_all res is:" + buf); // } // /// // /// 1:N比较,传入提取的人脸特征值和已加载的内存中整个库比较 // /// // /// 传入人脸文件特征值 // /// // public string FaceIdentifyByFeatureWithAll(byte[] file_name) // { // // 加载整个数据库到内存中 // load_db_face(); // // 获取特征值2048个字节 // byte[] fea = new byte[2048]; // fea = file_name; // int len = 0; // //IntPtr ptr = get_face_feature(file_name, ref len); // //if (len != 2048) // //{ // // Console.WriteLine("get face feature error!"); // // return "error"; // //} // // Marshal.Copy(ptr, fea, 0, 2048); // IntPtr ptr_res = identify_by_feature_with_all(fea, fea.Length); // string buf = Marshal.PtrToStringAnsi(ptr_res); // Console.WriteLine("identify_by_feature_with_all res is:" + buf); // return buf; // } // // 测试1:N比较,传入图片文件路径和已加载的内存中整个库比较 // public void test_identify_with_all() // { // // 加载整个数据库到内存中 // load_db_face(); // // 1:N // string file1 = "G:\\Development\\Application\\testface\\img\\beckham\\3.jpg"; // IntPtr ptr = identify_with_all(file1); // string buf = Marshal.PtrToStringAnsi(ptr); // Console.WriteLine("identify_with_all res is:" + buf); // } // /// // /// 1:N比较,传入图片文件路径和已加载的内存中整个库比较 // /// // /// 传入图片路径 // /// // public string FaceIndentifyWithAll(string file1) // { // // 加载整个数据库到内存中 // load_db_face(); // // 1:N // IntPtr ptr = identify_with_all(file1); // string buf = Marshal.PtrToStringAnsi(ptr); // Console.WriteLine("identify_with_all res is:" + buf); // return buf; // } // /// // /// 1:N比较,传入图片文件二进制buffer和已加载的内存中整个库比较 // /// // /// // /// // public string FaceIdentifyByBufferWithAll(byte[] file_name) // { // // 加载整个数据库到内存中 // load_db_face(); // // 1:N // // System.Drawing.Image img = System.Drawing.Image.FromFile(file_name); // byte[] img_bytes = file_name;// ImageUtil.img2byte(img); // IntPtr ptr = identify_by_buf_with_all(img_bytes, img_bytes.Length); // string buf = Marshal.PtrToStringAnsi(ptr); // Console.WriteLine("identify_by_buf_with_all res is:" + buf); // return buf; // } // } //}