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