From ee5e3a086a5dc145e7f5df3de32e0e072c183949 Mon Sep 17 00:00:00 2001
From: z8018 <1282578289@qq.com>
Date: 星期五, 06 六月 2025 15:19:40 +0800
Subject: [PATCH] 1

---
 project/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/Face/TH_Faces.cs |  210 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 210 insertions(+), 0 deletions(-)

diff --git a/project/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/Face/TH_Faces.cs b/project/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/Face/TH_Faces.cs
new file mode 100644
index 0000000..f9cbc4d
--- /dev/null
+++ b/project/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/Face/TH_Faces.cs
@@ -0,0 +1,210 @@
+锘縰sing System.Runtime.InteropServices;
+
+namespace WIDESEAWCS_Common.Face
+{
+    public class TH_Faces // 浜鸿劯妫�娴嬪強璇嗗埆SDK鎺ュ彛锛屽彲鍙傝 IdFaceSdk.h锛堝唴鍚墍鏈夋帴鍙g殑鍔熻兘銆佸弬鏁般�佽繑鍥炲�肩殑鍏蜂綋鎻忚堪锛�
+    {
+        #region 缁撴瀯浣撳畾涔�
+
+        public struct RECT
+        {
+            public Int32 left;
+            public Int32 top;
+            public Int32 right;
+            public Int32 bottom;
+        };
+
+        public struct POINT
+        {
+            public Int32 x;
+            public Int32 y;
+        };
+
+        // 浜鸿劯妫�娴嬭繑鍥炵殑浜鸿劯鍧愭爣鍙傛暟
+        public struct FACE_DETECT_RESULT
+        {
+            public RECT rcFace;//coordinate of face
+            public POINT ptLeftEye;//coordinate of left eye
+            public POINT ptRightEye;//coordinate of right eye
+            public POINT ptMouth;//coordinate of mouth
+            public POINT ptNose;//coordinate of nose								
+            public Int32 nAngleYaw, nAnglePitch, nAngleRoll;//value of face angle
+            public Int32 nQuality;//quality of face(from 0 to 100)
+            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 512)]
+            public Byte[] FaceData;
+        };
+
+        // 浜鸿劯璐ㄩ噺妫�娴嬭繑鍥炵殑浜鸿劯璐ㄩ噺鍙傛暟
+        public struct FACE_QUALITY_LEVEL
+        {
+            public Int32 nHalf; // 浜鸿劯瀹屾暣鎬�: 0-姝e父锛�1-浜鸿劯涓嶅お瀹屾暣锛�2-浜鸿劯闈炲父涓嶅畬鏁�
+            public Int32 nSmall; // 浜鸿劯澶у皬锛�0-姝e父锛�1-浜鸿劯杈冨皬锛�2-浜鸿劯澶皬
+            public Int32 nPosture; // 濮挎�侊細0-姝e父锛�1-鍋忓ご杈冨锛�2-鍋忓ご澶
+            public Int32 nMask; // 鑴搁儴閬尅: 0-姝e父锛�1-浜鸿劯鏈夐伄鎸★紝2-浜鸿劯閬尅澶
+            public Int32 nFaceMask; // 鍙g僵锛�0-姝e父锛�1-鏈夋埓鍙g僵锛�2-纭鎴村彛缃�
+            public Int32 nHat; // 甯藉瓙锛�0-姝e父锛�1-鏈夋埓甯斤紝2-甯藉瓙閬尅鑴搁儴
+            public Int32 nGlasses; // 鐪奸暅: 0-姝e父锛�1-鏈夋埓鐪奸暅锛�2-纭鎴寸溂闀�
+            public Int32 nGape; // 寮犲槾: 0-姝e父锛�1-寮犲槾锛�2-寮犲ぇ鍢�
+            public Int32 nBlur; // 妯$硦搴︼細0-姝e父锛�1-杈冩ā绯婏紝2-澶ā绯�
+            public Int32 nBright; // 鑴搁儴鏇濆厜搴︼細0-姝e父锛�1-澶殫锛�2-杩囩垎
+            public Int32 nLight; // 鍏夋簮鏂瑰悜: 0-姝e父锛�1-渚у厜锛�2-椤跺厜, 3-閫嗗厜       
+        };
+
+        #endregion
+
+        #region 鍒濆鍖栧強鍩烘湰鍔熻兘
+
+        // 杩斿洖SDK鐗堟湰鍙凤紙闅忔椂鍙皟鐢級
+        [DllImport("IdFaceSdk.dll", EntryPoint = "IdFaceSdkVer", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
+        public static extern Int32 IdFaceSdkVer();
+
+        // 杩斿洖璁惧杩愯鐮�
+        [DllImport("IdFaceSdk.dll", EntryPoint = "IdFaceSdkGetRunCode", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
+        public static extern Int32 IdFaceSdkGetRunCode([Out] IntPtr pStrRunCode);
+
+        // SDK鍒濆鍖栵紝鎴愬姛杩斿洖0锛堝悗闈㈤櫎杈呭姪鎺ュ彛澶栫殑鎵�鏈夊姛鑳芥帴鍙i兘蹇呴』鏄疭DK鍒濆鍖栨垚鍔熷悗鎵嶆湁鐢級
+        [DllImport("IdFaceSdk.dll", EntryPoint = "IdFaceSdkInit", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
+        public static extern Int32 IdFaceSdkInit();
+
+        // SDK鍙嶅垵濮嬪寲锛堝悗闈㈤櫎杈呭姪鎺ュ彛澶栫殑鎵�鏈夊姛鑳芥帴鍙e湪璋冪敤鍙嶅垵濮嬪寲鍚庡潎涓嶅彲鐢紝闄ら潪鍐嶆鍒濆鍖栵級
+        [DllImport("IdFaceSdk.dll", EntryPoint = "IdFaceSdkUninit", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
+        public static extern void IdFaceSdkUninit();
+
+        // 璁剧疆妫�娴嬪ぇ灏忥紙閽堝楂樺垎杈ㄧ巼涓斾汉鑴稿崰姣旇緝灏忔椂璁剧疆妫�娴嬪ぇ灏忥紝閫氬父涓嶅繀璋冪敤锛�
+        [DllImport("IdFaceSdk.dll", EntryPoint = "IdFaceSdkSetDetectSize", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
+        public static extern void IdFaceSdkSetDetectSize(Int32 nDetectSize);
+
+        // 杩斿洖鐗瑰緛鐮佸ぇ灏�
+        [DllImport("IdFaceSdk.dll", EntryPoint = "IdFaceSdkFeatureSize", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
+        public static extern Int32 IdFaceSdkFeatureSize();
+
+        // 杩斿洖褰撳墠鐨勬巿鏉冩槸鍚︽敮鎸佹椿浣撴娴�
+        [DllImport("IdFaceSdk.dll", EntryPoint = "IdFaceSdkGetLiveFaceStatus", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
+        public static extern Int32 IdFaceSdkGetLiveFaceStatus();
+
+        #endregion
+
+        #region 鍗曚汉鑴告娴�
+
+        // 妫�娴嬫渶澶т汉鑴�
+        [DllImport("IdFaceSdk.dll", EntryPoint = "IdFaceSdkDetectFace", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
+        public static extern Int32 IdFaceSdkDetectFace(IntPtr pImage, Int32 nWidth, Int32 nHeight, ref FACE_DETECT_RESULT Face);
+
+        #endregion
+
+        #region 澶氫汉鑴告娴嬪苟鎻愬彇鐗瑰緛
+
+        // 妫�娴嬪浜鸿劯鍚屾椂鎻愬彇鍚勪汉鑴哥殑鐗瑰緛锛坣MaxFace 琛ㄧず鏈�澶氳妫�娴嬬殑浜鸿劯涓暟锛孎aces 蹇呴』鎸夋渶澶т汉鑴镐釜鏁板垎閰嶄汉鑴稿潗鏍囩┖闂达紝 pFeatures 蹇呴』鎸夋渶澶т汉鑴镐釜鏁板垎閰嶇壒寰佺爜绌洪棿锛宲Features 鍙傛暟浼� 0 鏃跺垯鍙娴嬩汉鑴镐笉鎻愮壒寰侊級
+        [DllImport("IdFaceSdk.dll", EntryPoint = "IdFaceSdkFaceFeature", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
+        public static extern Int32 IdFaceSdkFaceFeature(IntPtr pImage, Int32 nWidth, Int32 nHeight, Int32 nMaxFace, [Out] FACE_DETECT_RESULT[] Faces, [Out] IntPtr pFeatures);
+
+        #endregion
+
+        #region 浜鸿劯璐ㄩ噺妫�娴�
+
+        // 妫�娴嬩汉鑴歌川閲忥紙闇�杈撳叆浜鸿劯妫�娴嬭繑鍥炵殑浜鸿劯鍧愭爣锛�
+        [DllImport("IdFaceSdk.dll", EntryPoint = "IdFaceSdkFaceQualityLevel", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
+        public static extern Int32 IdFaceSdkFaceQualityLevel(IntPtr pImage, Int32 nWidth, Int32 nHeight, ref FACE_DETECT_RESULT Face, ref FACE_QUALITY_LEVEL FaceQualityLevel);
+
+        #endregion
+
+        #region SDK鐗瑰緛鎻愬彇
+
+        // 鎻愬彇浜鸿劯鐗瑰緛锛堥渶杈撳叆浜鸿劯妫�娴嬭繑鍥炵殑浜鸿劯鍧愭爣锛宲Feature闇�鍒嗛厤涓嶅皬浜庝竴涓汉鑴哥壒寰佺殑绌洪棿锛�
+        [DllImport("IdFaceSdk.dll", EntryPoint = "IdFaceSdkFeatureGet", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
+        public static extern Int32 IdFaceSdkFeatureGet(IntPtr pImage, Int32 nWidth, Int32 nHeight, ref FACE_DETECT_RESULT Face, [Out] IntPtr pFeature);
+
+        #endregion
+
+        #region 涓�瀵逛竴姣斿锛�1:1锛屽鐢ㄤ簬浜鸿瘉鏍搁獙锛�
+
+        // 涓や釜浜鸿劯鐗瑰緛姣斿鍑虹浉浼煎害
+        [DllImport("IdFaceSdk.dll", EntryPoint = "IdFaceSdkFeatureCompare", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
+        public static extern Byte IdFaceSdkFeatureCompare(IntPtr pFeature1, IntPtr pFeature2);
+
+        #endregion
+
+        #region 涓�瀵瑰姣斿锛�1:N锛屽鐢ㄤ簬鏈嶅姟鍣ㄨ瘑鍒級
+
+        // 鍒涘缓涓�瀵瑰浜鸿劯姣斿鍒楄〃
+        [DllImport("IdFaceSdk.dll", EntryPoint = "IdFaceSdkListCreate", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
+        public static extern IntPtr IdFaceSdkListCreate(Int32 nMaxFeatureNum);
+
+        // 鍚戜汉鑴告瘮瀵瑰垪琛ㄤ腑澧炲姞/鎻掑叆妯℃澘鐨勪汉鑴哥壒寰�
+        [DllImport("IdFaceSdk.dll", EntryPoint = "IdFaceSdkListInsert", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
+        public static extern Int32 IdFaceSdkListInsert(IntPtr hList, [In, Out] ref Int32 nPos, IntPtr pFeatures, Int32 nFeatureNum);
+
+        // 浠庝汉鑴告瘮瀵瑰垪琛ㄤ腑鍒犻櫎閮ㄥ垎浜鸿劯鐗瑰緛
+        [DllImport("IdFaceSdk.dll", EntryPoint = "IdFaceSdkListRemove", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
+        public static extern Int32 IdFaceSdkListRemove(IntPtr hList, Int32 nPos, Int32 nFeatureNum);
+
+        // 娓呯┖浜鸿劯姣斿鍒楄〃涓殑鎵�鏈変汉鑴哥壒寰�
+        [DllImport("IdFaceSdk.dll", EntryPoint = "IdFaceSdkListClearAll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
+        public static extern void IdFaceSdkListClearAll(IntPtr hList);
+
+        // 涓�瀵瑰浜鸿劯姣斿锛岃繑鍥炲弬涓庢瘮瀵圭殑鐗瑰緛鏁帮紝pnScores 闇�鍒嗛厤涓嶅皬浜庢ā鏉跨壒寰佹暟鐨勭┖闂达紝璋冪敤鍚庡皢杈撳嚭涓庢瘡涓ā鏉跨壒寰佹瘮瀵圭殑缁撴灉锛堢壒寰佺浉浼煎害锛�
+        [DllImport("IdFaceSdk.dll", EntryPoint = "IdFaceSdkListCompare", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
+        public static extern Int32 IdFaceSdkListCompare(IntPtr hList, IntPtr pFeature, Int32 nPosBegin, Int32 nFeatureNum, [Out] IntPtr pnScores);
+
+        // 閿�姣佷竴瀵瑰鐗瑰緛姣斿鍒楄〃
+        [DllImport("IdFaceSdk.dll", EntryPoint = "IdFaceSdkListDestroy", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
+        public static extern void IdFaceSdkListDestroy(IntPtr hList);
+
+        #endregion
+
+        #region 娲讳綋妫�娴�
+
+        // 娲讳綋妫�娴嬶紙杩斿洖1琛ㄧず娲讳綋锛夛紝闇�浼犲叆浜鸿劯妫�娴嬭繑鍥炵殑浜鸿劯鍧愭爣锛宲ImageColor 涓� pImageBW 鍧囨湁鏁堝垯杩涜鍙岀洰娲讳綋妫�娴嬶紝濡� pImageBW 涓� 0 鍒欒繘琛屽僵鑹插崟鐩椿浣撴娴嬶紝pImageColor 涓� 0 鍒欒繘琛岀孩澶栧弻鐩椿浣撴娴�
+        [DllImport("IdFaceSdk.dll", EntryPoint = "IdFaceSdkLiveFaceDetect", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
+        public static extern Int32 IdFaceSdkLiveFaceDetect(Int32 nWidth, Int32 nHeight, IntPtr pImageColor, ref FACE_DETECT_RESULT FaceColor, IntPtr pImageBW, ref FACE_DETECT_RESULT FaceBW);
+
+        // 娲讳綋妫�娴嬪苟杈撳嚭娲绘鍒嗘暟锛堝彲鏍规嵁娲绘鍒嗘暟鏄惁杈惧埌闃堝�煎垽鍒槸鍚︿负娲讳綋锛夛紝闇�浼犲叆浜鸿劯妫�娴嬭繑鍥炵殑浜鸿劯鍧愭爣锛宲ImageColor 涓� pImageBW 鍧囨湁鏁堝垯杩涜鍙岀洰娲讳綋妫�娴嬶紝濡� pImageBW 涓� 0 鍒欒繘琛屽僵鑹插崟鐩椿浣撴娴嬶紝pImageColor 涓� 0 鍒欒繘琛岀孩澶栧弻鐩椿浣撴娴�
+        [DllImport("IdFaceSdk.dll", EntryPoint = "IdFaceSdkLiveFaceDetectEx", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
+        public static extern Int32 IdFaceSdkLiveFaceDetectEx(Int32 nWidth, Int32 nHeight, IntPtr pImageColor, ref FACE_DETECT_RESULT FaceColor, IntPtr pImageBW, ref FACE_DETECT_RESULT FaceBW, ref Int32 nScore);
+
+        #endregion
+
+        #region 杈呭姪鎺ュ彛
+
+        // 璇诲浘璞℃枃浠跺埌RGB24鍥捐薄鏁版嵁缂撳啿鍖猴紝鏀寔BMP銆丣PG銆丳NG鍥捐薄鏂囦欢锛宲RgbBuf 蹇呴』鍒嗛厤瓒冲鐨勭紦鍐插尯锛堜笉灏忎簬 nWidth * nHeight * 3锛�,濡備笉鐭ラ亾鍥捐薄鍒嗚鲸鐜囧彲灏嗘鍙傛暟浼� 0 鍒欐湰娆¤皟鐢ㄥ彧杩斿洖鍥捐薄鍒嗚鲸鐜囷紝鐒跺悗鍒嗛厤瓒冲鐨勭紦鍐插尯鍐嶆璋冪敤璇诲嚭鍥捐薄鏁版嵁
+        [DllImport("IdFaceSdk.dll", EntryPoint = "ReadImageFile", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
+        public static extern Int32 ReadImageFile(IntPtr filename, [Out] IntPtr pRgbBuf, Int32 nBufSize, ref Int32 nWidth, ref Int32 nHeight, Int32 nDepth);
+
+        // 璇诲浘璞℃枃浠舵暟鎹埌RGB鍥捐薄鏁版嵁缂撳啿鍖猴紝鏀寔BMP銆丣PG銆丳NG鍥捐薄鏂囦欢锛宲RgbBuf 蹇呴』鍒嗛厤瓒冲鐨勭紦鍐插尯锛堜笉灏忎簬 nWidth * nHeight * 3锛�,濡備笉鐭ラ亾鍥捐薄鍒嗚鲸鐜囧彲灏嗘鍙傛暟浼� 0 鍒欐湰娆¤皟鐢ㄥ彧杩斿洖鍥捐薄鍒嗚鲸鐜囷紝鐒跺悗鍒嗛厤瓒冲鐨勭紦鍐插尯鍐嶆璋冪敤璇诲嚭鍥捐薄鏁版嵁
+        [DllImport("IdFaceSdk.dll", EntryPoint = "ReadImageFileData", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
+        public static extern Int32 ReadImageFileData(IntPtr pFileData, Int32 nFileDataSize, [Out] IntPtr pRgbBuf, Int32 nBufSize, ref Int32 nWidth, ref Int32 nHeight, Int32 nDepth);
+
+        // 鏃嬭浆RGB24鍥捐薄鏁版嵁锛宯Degree涓烘棆杞搴︼紙鏀寔0銆�90銆�180銆�270锛夛紝nMirror涓�0琛ㄧず涓嶉暅璞★紝涓�1琛ㄧず宸﹀彸闀滆薄
+        [DllImport("IdFaceSdk.dll", EntryPoint = "RotateRgb24Data", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
+        public static extern Int32 RotateRgb24Data(IntPtr pSrc, Int32 nWidth, Int32 nHeight, Int32 nDegree, Int32 nMirror, [Out] IntPtr pDst);
+
+        // 浠嶳GB24鍥捐薄鏁版嵁瑁佸壀鍑哄皬鍥�
+        // 杈撳叆鍙傛暟锛�
+        //           pSrc ---- 鍘熷浘鏁版嵁锛圧GB24鏍煎紡锛�
+        //           nSrcWidth ---- 鍘熷浘瀹藉害
+        //           nSrcHeight ---- 鍘熷浘楂樺害
+        //           nLeft ---- 瑁佸壀鍖哄煙宸︿笂瑙扻鍧愭爣
+        //           nTop ---- 瑁佸壀鍖哄煙宸︿笂瑙扽鍧愭爣
+        //           nWidth ---- 瑁佸壀鍖哄煙瀹藉害
+        //           nHeight ---- 瑁佸壀鍖哄煙楂樺害
+        //           nRate ---- 瑁佸壀鍥捐薄缂╁皬鍊嶆暟锛�0-涓嶇缉灏忥紝1-瀹介珮缂╁皬鑷冲師鏉ョ殑1/2锛�2-瀹介珮缂╁皬鑷冲師鏉ョ殑1/3锛�...锛�
+        // 杈撳嚭鍙傛暟锛�
+        //           pDst ---- 灏忓浘鏁版嵁(RGB24鏍煎紡锛岃皟鐢ㄥ墠闇�鍒嗘瀽瓒冲鐨勭紦鍐插尯)
+        // 杩斿洖鍊硷細
+        //        0 ---- 鎴愬姛
+        //       -1 ---- 鍙傛暟閿欒
+        // 澶囨敞锛氳鍓悗鐨勫浘璞″垎杈ㄧ巼涓猴細瀹藉害 = nWidth / (nRate + 1), 楂樺害 = nHeight / (nRate + 1)
+        [DllImport("IdFaceSdk.dll", EntryPoint = "CropImage", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
+        public static extern Int32 CropImage(IntPtr pSrc, Int32 nSrcWidth, Int32 nSrcHeight, [Out] IntPtr pDst, int nLeft, int nTop, int nWidth, int nHeight, int nRate);
+
+        // 灏哛GB24鍥捐薄鏁版嵁淇濆瓨涓篔PEG鏂囦欢
+        [DllImport("IdFaceSdk.dll", EntryPoint = "SaveJpegFile", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
+        public static extern Int32 SaveJpegFile(IntPtr filename, IntPtr pRgbData, Int32 nWidth, Int32 nHeight, Int32 nDepth, Int32 nQuality);
+
+        // 灏哛GB24鍥捐薄鏁版嵁淇濆瓨涓篔PEG鏂囦欢鏁版嵁
+        [DllImport("IdFaceSdk.dll", EntryPoint = "SaveJpegFileData", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
+        public static extern Int32 SaveJpegFileData(IntPtr pRgbData, Int32 nWidth, Int32 nHeight, Int32 nDepth, Int32 nQuality, [Out] IntPtr pFileDataBuf, Int32 nBufSize, ref Int32 nFileDataSize);
+
+        #endregion
+    }
+}

--
Gitblit v1.9.3