| | |
| | | using System; |
| | | using System.Runtime.InteropServices; |
| | | using OpenCvSharp; |
| | | //using System; |
| | | //using System.Runtime.InteropServices; |
| | | //using OpenCvSharp; |
| | | |
| | | namespace FaceAI |
| | | { |
| | | /** |
| | | * @brief 人脸表情属性枚举 |
| | | */ |
| | | enum BDFaceAttributeEmotionType |
| | | { |
| | | BDFACE_ATTRIBUTE_EMOTION_FROWN = 0, // 皱眉 |
| | | BDFACE_ATTRIBUTE_EMOTION_SMILE = 1, // 笑 |
| | | BDFACE_ATTRIBUTE_EMOTION_CALM = 2, // 平静 |
| | | }; |
| | | //namespace FaceAI |
| | | //{ |
| | | // /** |
| | | // * @brief 人脸表情属性枚举 |
| | | // */ |
| | | // enum BDFaceAttributeEmotionType |
| | | // { |
| | | // BDFACE_ATTRIBUTE_EMOTION_FROWN = 0, // 皱眉 |
| | | // BDFACE_ATTRIBUTE_EMOTION_SMILE = 1, // 笑 |
| | | // BDFACE_ATTRIBUTE_EMOTION_CALM = 2, // 平静 |
| | | // }; |
| | | |
| | | /** |
| | | * @brief 人脸种族属性枚举 |
| | | */ |
| | | enum BDFaceRace |
| | | { |
| | | BDFACE_RACE_YELLOW = 0, // 黄种人 |
| | | BDFACE_RACE_WHITE = 1, // 白种人 |
| | | BDFACE_RACE_BLACK = 2, // 黑种人 |
| | | BDFACE_RACE_INDIAN = 3, // 印第安人 |
| | | }; |
| | | // /** |
| | | // * @brief 人脸种族属性枚举 |
| | | // */ |
| | | // enum BDFaceRace |
| | | // { |
| | | // BDFACE_RACE_YELLOW = 0, // 黄种人 |
| | | // BDFACE_RACE_WHITE = 1, // 白种人 |
| | | // BDFACE_RACE_BLACK = 2, // 黑种人 |
| | | // BDFACE_RACE_INDIAN = 3, // 印第安人 |
| | | // }; |
| | | |
| | | /** |
| | | * @brief 眼镜状态属性枚举 |
| | | */ |
| | | enum BDFaceGlasses |
| | | { |
| | | BDFACE_NO_GLASSES = 0, // 无眼镜 |
| | | BDFACE_GLASSES = 1, // 有眼镜 |
| | | BDFACE_SUN_GLASSES = 2, // 墨镜 |
| | | }; |
| | | // /** |
| | | // * @brief 眼镜状态属性枚举 |
| | | // */ |
| | | // enum BDFaceGlasses |
| | | // { |
| | | // BDFACE_NO_GLASSES = 0, // 无眼镜 |
| | | // BDFACE_GLASSES = 1, // 有眼镜 |
| | | // BDFACE_SUN_GLASSES = 2, // 墨镜 |
| | | // }; |
| | | |
| | | /** |
| | | * @brief 性别属性枚举 |
| | | */ |
| | | enum BDFaceGender |
| | | { |
| | | BDFACE_GENDER_FEMAILE = 0, // 女性 |
| | | BDFACE_GENDER_MALE = 1, // 男性 |
| | | }; |
| | | // /** |
| | | // * @brief 性别属性枚举 |
| | | // */ |
| | | // enum BDFaceGender |
| | | // { |
| | | // BDFACE_GENDER_FEMAILE = 0, // 女性 |
| | | // BDFACE_GENDER_MALE = 1, // 男性 |
| | | // }; |
| | | |
| | | |
| | | /** |
| | | * @brief 人脸属性结构体 |
| | | */ |
| | | [StructLayout(LayoutKind.Sequential, Pack = 1)] |
| | | struct BDFaceAttribute |
| | | { |
| | | public int age; // 年龄 |
| | | public BDFaceRace race; // 种族 |
| | | public BDFaceAttributeEmotionType emotion; // 表情 |
| | | public BDFaceGlasses glasses; // 戴眼镜状态 |
| | | public BDFaceGender gender; // 性别 |
| | | }; |
| | | // /** |
| | | // * @brief 人脸属性结构体 |
| | | // */ |
| | | // [StructLayout(LayoutKind.Sequential, Pack = 1)] |
| | | // struct BDFaceAttribute |
| | | // { |
| | | // public int age; // 年龄 |
| | | // public BDFaceRace race; // 种族 |
| | | // public BDFaceAttributeEmotionType emotion; // 表情 |
| | | // public BDFaceGlasses glasses; // 戴眼镜状态 |
| | | // public BDFaceGender gender; // 性别 |
| | | // }; |
| | | |
| | | // 人脸属性示例及接口 |
| | | class FaceAttr |
| | | { |
| | | // 获取人脸属性 |
| | | [DllImport("BaiduFaceApi.dll", EntryPoint = "face_attr", CharSet = CharSet.Ansi |
| | | , CallingConvention = CallingConvention.Cdecl)] |
| | | public static extern int face_attr(IntPtr ptr, IntPtr mat); |
| | | // // 人脸属性示例及接口 |
| | | // class FaceAttr |
| | | // { |
| | | // // 获取人脸属性 |
| | | // [DllImport("BaiduFaceApi.dll", EntryPoint = "face_attr", CharSet = CharSet.Ansi |
| | | // , CallingConvention = CallingConvention.Cdecl)] |
| | | // public static extern int face_attr(IntPtr ptr, IntPtr mat); |
| | | |
| | | // 测试获取人脸属性 |
| | | public void test_get_face_attr() |
| | | { |
| | | int max_face_num = 5; // 设置最多检测跟踪人数(多人脸检测),默认为1,最多可设为50 |
| | | // // 测试获取人脸属性 |
| | | // public void test_get_face_attr() |
| | | // { |
| | | // int max_face_num = 5; // 设置最多检测跟踪人数(多人脸检测),默认为1,最多可设为50 |
| | | |
| | | BDFaceAttribute[] attr_info = new BDFaceAttribute[max_face_num]; |
| | | int size = Marshal.SizeOf(typeof(BDFaceAttribute)); |
| | | IntPtr ptT = Marshal.AllocHGlobal(size * max_face_num); |
| | | string img_path = "../images/rgb.png"; |
| | | Mat mat = Cv2.ImRead(img_path); |
| | | int faceNum = face_attr(ptT, mat.CvPtr); |
| | | Console.WriteLine("faceNum is:" + faceNum); |
| | | for (int index = 0; index < faceNum; index++) |
| | | { |
| | | IntPtr ptr = new IntPtr(); |
| | | if (8 == IntPtr.Size) |
| | | { |
| | | ptr = (IntPtr)(ptT.ToInt64() + size * index); |
| | | } |
| | | else if (4 == IntPtr.Size) |
| | | { |
| | | ptr = (IntPtr)(ptT.ToInt32() + size * index); |
| | | } |
| | | // BDFaceAttribute[] attr_info = new BDFaceAttribute[max_face_num]; |
| | | // int size = Marshal.SizeOf(typeof(BDFaceAttribute)); |
| | | // IntPtr ptT = Marshal.AllocHGlobal(size * max_face_num); |
| | | // string img_path = "../images/rgb.png"; |
| | | // Mat mat = Cv2.ImRead(img_path); |
| | | // int faceNum = face_attr(ptT, mat.CvPtr); |
| | | // Console.WriteLine("faceNum is:" + faceNum); |
| | | // for (int index = 0; index < faceNum; index++) |
| | | // { |
| | | // IntPtr ptr = new IntPtr(); |
| | | // if (8 == IntPtr.Size) |
| | | // { |
| | | // ptr = (IntPtr)(ptT.ToInt64() + size * index); |
| | | // } |
| | | // else if (4 == IntPtr.Size) |
| | | // { |
| | | // ptr = (IntPtr)(ptT.ToInt32() + size * index); |
| | | // } |
| | | |
| | | attr_info[index] = (BDFaceAttribute)Marshal.PtrToStructure(ptr, typeof(BDFaceAttribute)); |
| | | // 年龄 |
| | | Console.WriteLine("age is {0}:", attr_info[index].age); |
| | | // 种族 |
| | | Console.WriteLine("race is:{0}", attr_info[index].race); |
| | | // 表情 |
| | | Console.WriteLine("emotion is:{0}", attr_info[index].emotion); |
| | | // 戴眼镜状态 |
| | | Console.WriteLine("glasses is:{0}", attr_info[index].glasses); |
| | | // 性别 |
| | | Console.WriteLine("gender is:{0}", attr_info[index].gender); |
| | | } |
| | | Marshal.FreeHGlobal(ptT); |
| | | } |
| | | // attr_info[index] = (BDFaceAttribute)Marshal.PtrToStructure(ptr, typeof(BDFaceAttribute)); |
| | | // // 年龄 |
| | | // Console.WriteLine("age is {0}:", attr_info[index].age); |
| | | // // 种族 |
| | | // Console.WriteLine("race is:{0}", attr_info[index].race); |
| | | // // 表情 |
| | | // Console.WriteLine("emotion is:{0}", attr_info[index].emotion); |
| | | // // 戴眼镜状态 |
| | | // Console.WriteLine("glasses is:{0}", attr_info[index].glasses); |
| | | // // 性别 |
| | | // Console.WriteLine("gender is:{0}", attr_info[index].gender); |
| | | // } |
| | | // Marshal.FreeHGlobal(ptT); |
| | | // } |
| | | |
| | | } |
| | | } |
| | | // } |
| | | //} |