yanjinhui
2025-06-12 69b4b758498b839aedbd82f7d4dee9d879ba65fe
project/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/FaceAI/FaceAttr.cs
@@ -1,109 +1,109 @@
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);
//        }
       
    }
}
//    }
//}