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/FaceAI/FaceTrack.cs | 406 +++++++++++++++++++++++++++++----------------------------- 1 files changed, 203 insertions(+), 203 deletions(-) diff --git a/project/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/FaceAI/FaceTrack.cs b/project/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/FaceAI/FaceTrack.cs index 156e38a..ed4b280 100644 --- a/project/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/FaceAI/FaceTrack.cs +++ b/project/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/FaceAI/FaceTrack.cs @@ -1,221 +1,221 @@ -锘縰sing System; -using System.Runtime.InteropServices; -using System.Collections.Generic; -using OpenCvSharp; +锘�//using System; +//using System.Runtime.InteropServices; +//using System.Collections.Generic; +//using OpenCvSharp; -// 浜鸿劯璺熻釜 -namespace FaceAI -{ - // 浜鸿劯璺熻釜閰嶇疆缁撴瀯浣� - [StructLayout(LayoutKind.Sequential, Pack = 1)] - struct BDFaceTrackConf - { - public float detect_intv_before_track; // 鏈窡韪埌浜鸿劯鍓嶇殑妫�娴嬫椂闂撮棿闅� - public float detect_intv_during_track; // 宸茶窡韪埌浜鸿劯鍚庣殑妫�娴嬫椂闂撮棿闅� - }; +//// 浜鸿劯璺熻釜 +//namespace FaceAI +//{ +// // 浜鸿劯璺熻釜閰嶇疆缁撴瀯浣� +// [StructLayout(LayoutKind.Sequential, Pack = 1)] +// struct BDFaceTrackConf +// { +// public float detect_intv_before_track; // 鏈窡韪埌浜鸿劯鍓嶇殑妫�娴嬫椂闂撮棿闅� +// public float detect_intv_during_track; // 宸茶窡韪埌浜鸿劯鍚庣殑妫�娴嬫椂闂撮棿闅� +// }; - [StructLayout(LayoutKind.Sequential, Pack = 1)] - public struct BDFaceBBox - { - public int index; // 浜鸿劯绱㈠紩鍊� - public float center_x; // 浜鸿劯涓績鐐箈鍧愭爣 - public float center_y; // 浜鸿劯涓績鐐箉鍧愭爣 - public float width; // 浜鸿劯瀹藉害 - public float height; // 浜鸿劯楂樺害 - public float score; // 浜鸿劯缃俊搴� - } +// [StructLayout(LayoutKind.Sequential, Pack = 1)] +// public struct BDFaceBBox +// { +// public int index; // 浜鸿劯绱㈠紩鍊� +// public float center_x; // 浜鸿劯涓績鐐箈鍧愭爣 +// public float center_y; // 浜鸿劯涓績鐐箉鍧愭爣 +// public float width; // 浜鸿劯瀹藉害 +// public float height; // 浜鸿劯楂樺害 +// public float score; // 浜鸿劯缃俊搴� +// } - [StructLayout(LayoutKind.Sequential, Pack = 1)] - public struct BDFaceLandmark - { - public int index; // 浜鸿劯鍏抽敭鐐圭储寮曞�� - public int size; // 浜鸿劯鍏抽敭鐐规暟閲� - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 144)] - public float[] data;// = new float[144]; - public float score; // 浜鸿劯鍏抽敭鐐圭疆淇″害 - } - [StructLayout(LayoutKind.Sequential, Pack = 1)] - public struct BDFaceTrackInfo - { - public int face_id; - [MarshalAs(UnmanagedType.Struct)] - public BDFaceBBox box; - [MarshalAs(UnmanagedType.Struct)] - public BDFaceLandmark landmark; - } +// [StructLayout(LayoutKind.Sequential, Pack = 1)] +// public struct BDFaceLandmark +// { +// public int index; // 浜鸿劯鍏抽敭鐐圭储寮曞�� +// public int size; // 浜鸿劯鍏抽敭鐐规暟閲� +// [MarshalAs(UnmanagedType.ByValArray, SizeConst = 144)] +// public float[] data;// = new float[144]; +// public float score; // 浜鸿劯鍏抽敭鐐圭疆淇″害 +// } +// [StructLayout(LayoutKind.Sequential, Pack = 1)] +// public struct BDFaceTrackInfo +// { +// public int face_id; +// [MarshalAs(UnmanagedType.Struct)] +// public BDFaceBBox box; +// [MarshalAs(UnmanagedType.Struct)] +// public BDFaceLandmark landmark; +// } - // 浜鸿劯璺熻釜 - class FaceTrack - { - [DllImport("BaiduFaceApi.dll", EntryPoint = "track", CharSet = CharSet.Ansi - , CallingConvention = CallingConvention.Cdecl)] - // type 涓�0鏃跺�欐墽琛孯GB浜鸿劯璺熻釜锛�1鏃跺�欐墽琛孨IR浜鸿劯璺熻釜 - public static extern int track(IntPtr ptr, IntPtr mat, int type); +// // 浜鸿劯璺熻釜 +// class FaceTrack +// { +// [DllImport("BaiduFaceApi.dll", EntryPoint = "track", CharSet = CharSet.Ansi +// , CallingConvention = CallingConvention.Cdecl)] +// // type 涓�0鏃跺�欐墽琛孯GB浜鸿劯璺熻釜锛�1鏃跺�欐墽琛孨IR浜鸿劯璺熻釜 +// public static extern int track(IntPtr ptr, IntPtr mat, int type); - [DllImport("BaiduFaceApi.dll", EntryPoint = "clear_track_history", CharSet = CharSet.Ansi - , CallingConvention = CallingConvention.Cdecl)] - // type 涓�0鏃跺�欐墽琛孯GB浜鸿劯璺熻釜锛�1鏃跺�欐墽琛孨IR浜鸿劯璺熻釜 - public static extern void clear_track_history(int type); +// [DllImport("BaiduFaceApi.dll", EntryPoint = "clear_track_history", CharSet = CharSet.Ansi +// , CallingConvention = CallingConvention.Cdecl)] +// // type 涓�0鏃跺�欐墽琛孯GB浜鸿劯璺熻釜锛�1鏃跺�欐墽琛孨IR浜鸿劯璺熻釜 +// public static extern void clear_track_history(int type); - // 娴嬭瘯浜鸿劯璺熻釜 - public void image_track() - { - Console.WriteLine("test_track"); - int max_track_num = 50; // 璁剧疆鏈�澶氭娴嬭窡韪汉鏁帮紙澶氫汉鑴告娴嬶級锛岄粯璁や负1锛屾渶澶氬彲璁句负50 +// // 娴嬭瘯浜鸿劯璺熻釜 +// public void image_track() +// { +// Console.WriteLine("test_track"); +// int max_track_num = 50; // 璁剧疆鏈�澶氭娴嬭窡韪汉鏁帮紙澶氫汉鑴告娴嬶級锛岄粯璁や负1锛屾渶澶氬彲璁句负50 - BDFaceTrackInfo[] track_info = new BDFaceTrackInfo[max_track_num]; - for (int i = 0; i < max_track_num; i++) - { - track_info[i] = new BDFaceTrackInfo(); - track_info[i].box = new BDFaceBBox(); - track_info[i].box.score = 0; - track_info[i].box.width = 0; - track_info[i].landmark.data = new float[144]; - track_info[i].face_id = 0; - } - int sizeTrack = Marshal.SizeOf(typeof(BDFaceTrackInfo)); - IntPtr ptT = Marshal.AllocHGlobal(sizeTrack * max_track_num); - Mat mat = Cv2.ImRead("../images/2.jpg"); - // faceNum涓鸿繑鍥炵殑妫�娴嬪埌鐨勪汉鑴镐釜鏁� - int type = 0; - int faceNum = track(ptT, mat.CvPtr, type); - Console.WriteLine("faceSize is:" + faceNum); - // 鍥犱负闇�棰勫垎閰嶅唴瀛橈紝鎵�浠ヨ繑鍥炵殑浜鸿劯鏁拌嫢澶т簬棰勫厛鍒嗛厤鐨勫唴瀛樻暟锛屽垯浠呬粎鏄剧ず棰勫垎閰嶇殑浜鸿劯鏁� - if (faceNum > max_track_num) - { - faceNum = max_track_num; - } - for (int index = 0; index < faceNum; index++) { +// BDFaceTrackInfo[] track_info = new BDFaceTrackInfo[max_track_num]; +// for (int i = 0; i < max_track_num; i++) +// { +// track_info[i] = new BDFaceTrackInfo(); +// track_info[i].box = new BDFaceBBox(); +// track_info[i].box.score = 0; +// track_info[i].box.width = 0; +// track_info[i].landmark.data = new float[144]; +// track_info[i].face_id = 0; +// } +// int sizeTrack = Marshal.SizeOf(typeof(BDFaceTrackInfo)); +// IntPtr ptT = Marshal.AllocHGlobal(sizeTrack * max_track_num); +// Mat mat = Cv2.ImRead("../images/2.jpg"); +// // faceNum涓鸿繑鍥炵殑妫�娴嬪埌鐨勪汉鑴镐釜鏁� +// int type = 0; +// int faceNum = track(ptT, mat.CvPtr, type); +// Console.WriteLine("faceSize is:" + faceNum); +// // 鍥犱负闇�棰勫垎閰嶅唴瀛橈紝鎵�浠ヨ繑鍥炵殑浜鸿劯鏁拌嫢澶т簬棰勫厛鍒嗛厤鐨勫唴瀛樻暟锛屽垯浠呬粎鏄剧ず棰勫垎閰嶇殑浜鸿劯鏁� +// if (faceNum > max_track_num) +// { +// faceNum = max_track_num; +// } +// for (int index = 0; index < faceNum; index++) { - IntPtr ptr = new IntPtr(); - if (8 == IntPtr.Size) - { - ptr = (IntPtr)(ptT.ToInt64() + sizeTrack * index); - } - else if (4 == IntPtr.Size) - { - ptr = (IntPtr)(ptT.ToInt32() + sizeTrack * index); - } +// IntPtr ptr = new IntPtr(); +// if (8 == IntPtr.Size) +// { +// ptr = (IntPtr)(ptT.ToInt64() + sizeTrack * index); +// } +// else if (4 == IntPtr.Size) +// { +// ptr = (IntPtr)(ptT.ToInt32() + sizeTrack * index); +// } - track_info[index] = (BDFaceTrackInfo)Marshal.PtrToStructure(ptr, typeof(BDFaceTrackInfo)); - Console.WriteLine("track face_id is {0}:", track_info[index].face_id); - Console.WriteLine("track landmarks is:"); +// track_info[index] = (BDFaceTrackInfo)Marshal.PtrToStructure(ptr, typeof(BDFaceTrackInfo)); +// Console.WriteLine("track face_id is {0}:", track_info[index].face_id); +// Console.WriteLine("track landmarks is:"); - for(int i = 0; i < 144; i++) - { - Console.WriteLine("lanmark data is {0}:", track_info[index].landmark.data[i]); - } - Console.WriteLine("track landmarks score is:{0}", track_info[index].landmark.score); - Console.WriteLine("track landmarks index is:{0}", track_info[index].landmark.index); +// for(int i = 0; i < 144; i++) +// { +// Console.WriteLine("lanmark data is {0}:", track_info[index].landmark.data[i]); +// } +// Console.WriteLine("track landmarks score is:{0}", track_info[index].landmark.score); +// Console.WriteLine("track landmarks index is:{0}", track_info[index].landmark.index); - // 绱㈠紩鍊� - Console.WriteLine("track score is:{0}", track_info[index].box.index); - // 缃俊搴� - Console.WriteLine("track score is:{0}", track_info[index].box.score); - // 浜鸿劯瀹藉害 - Console.WriteLine("track mWidth is:{0}", track_info[index].box.width); - // 涓績鐐筙,Y鍧愭爣 - Console.WriteLine("track mCenter_x is:{0}", track_info[index].box.center_x); - Console.WriteLine("track mCenter_y is:{0}", track_info[index].box.center_y); - } - // 鐢讳汉鑴告 - FaceDraw.draw_rects(ref mat, faceNum, track_info); - // 鍥剧墖鐢绘淇濆瓨 - mat.ImWrite("track.jpg"); - Marshal.FreeHGlobal(ptT); - } +// // 绱㈠紩鍊� +// Console.WriteLine("track score is:{0}", track_info[index].box.index); +// // 缃俊搴� +// Console.WriteLine("track score is:{0}", track_info[index].box.score); +// // 浜鸿劯瀹藉害 +// Console.WriteLine("track mWidth is:{0}", track_info[index].box.width); +// // 涓績鐐筙,Y鍧愭爣 +// Console.WriteLine("track mCenter_x is:{0}", track_info[index].box.center_x); +// Console.WriteLine("track mCenter_y is:{0}", track_info[index].box.center_y); +// } +// // 鐢讳汉鑴告 +// FaceDraw.draw_rects(ref mat, faceNum, track_info); +// // 鍥剧墖鐢绘淇濆瓨 +// mat.ImWrite("track.jpg"); +// Marshal.FreeHGlobal(ptT); +// } - //usb鎽勫儚澶村疄鏃朵汉鑴告娴嬬ず渚� - public void usb_video_track() - { - // 榛樿鐢佃剳鑷甫鎽勫儚澶达紝device鍙兘涓�0锛岃嫢澶栨帴usb鎽勫儚澶达紝鍒檇evice鍙兘涓�1. - int dev = 0; - using (var window = new Window("face")) - using (VideoCapture cap = VideoCapture.FromCamera(dev)) - { - if (!cap.IsOpened()) - { - Console.WriteLine("open camera error"); - return; - } - // Frame image buffer - Mat image = new Mat(); - // When the movie playback reaches end, Mat.data becomes NULL. - while (true) - { - cap.Read(image); // same as cvQueryFrame - if (!image.Empty()) - { - int ilen = 10;//浼犲叆鐨勪汉鑴告暟 - BDFaceTrackInfo[] track_info = new BDFaceTrackInfo[ilen]; - for (int i = 0; i < ilen; i++) - { - track_info[i].box = new BDFaceBBox(); - track_info[i].box.score = 0; - track_info[i].box.width = 0; - track_info[i].landmark.data = new float[144]; - track_info[i].face_id = 0; - } - int sizeTrack = Marshal.SizeOf(typeof(BDFaceTrackInfo)); - IntPtr ptT = Marshal.AllocHGlobal(sizeTrack* ilen); - //Cv2.ImWrite("usb_track_Cv2.jpg", image); - /* trackMat - * 浼犲叆鍙傛暟: maxTrackObjNum:妫�娴嬪埌鐨勬渶澶т汉鑴告暟锛屼紶鍏ュ閮ㄥ垎閰嶄汉鑴告暟锛岄渶瑕佸垎閰嶅搴旂殑鍐呭瓨澶у皬銆� - * 浼犲嚭妫�娴嬪埌鐨勬渶澶т汉鑴告暟 - * 杩斿洖鍊�: 浼犲叆鐨勪汉鑴告暟 鍜� 妫�娴嬪埌鐨勪汉鑴告暟 涓殑鏈�灏忓��,瀹為檯杩斿洖鐨勪汉鑴搞�� - ****/ - int faceSize = ilen;//杩斿洖浜鸿劯鏁� 鍒嗛厤浜鸿劯鏁板拰妫�娴嬪埌浜鸿劯鏁扮殑鏈�灏忓�� - int curSize = ilen;//褰撳墠浜鸿劯鏁� 杈撳叆鍒嗛厤鐨勪汉鑴告暟锛岃緭鍑哄疄闄呮娴嬪埌鐨勪汉鑴告暟 - int type = 0; - faceSize = track(ptT, image.CvPtr, type); - for (int index = 0; index < faceSize; index++) - { - IntPtr ptr = new IntPtr(); - if( 8 == IntPtr.Size) - { - ptr = (IntPtr)(ptT.ToInt64() + sizeTrack * index); - } - else if(4 == IntPtr.Size) - { - ptr = (IntPtr)(ptT.ToInt32() + sizeTrack * index); - } +// //usb鎽勫儚澶村疄鏃朵汉鑴告娴嬬ず渚� +// public void usb_video_track() +// { +// // 榛樿鐢佃剳鑷甫鎽勫儚澶达紝device鍙兘涓�0锛岃嫢澶栨帴usb鎽勫儚澶达紝鍒檇evice鍙兘涓�1. +// int dev = 0; +// using (var window = new Window("face")) +// using (VideoCapture cap = VideoCapture.FromCamera(dev)) +// { +// if (!cap.IsOpened()) +// { +// Console.WriteLine("open camera error"); +// return; +// } +// // Frame image buffer +// Mat image = new Mat(); +// // When the movie playback reaches end, Mat.data becomes NULL. +// while (true) +// { +// cap.Read(image); // same as cvQueryFrame +// if (!image.Empty()) +// { +// int ilen = 10;//浼犲叆鐨勪汉鑴告暟 +// BDFaceTrackInfo[] track_info = new BDFaceTrackInfo[ilen]; +// for (int i = 0; i < ilen; i++) +// { +// track_info[i].box = new BDFaceBBox(); +// track_info[i].box.score = 0; +// track_info[i].box.width = 0; +// track_info[i].landmark.data = new float[144]; +// track_info[i].face_id = 0; +// } +// int sizeTrack = Marshal.SizeOf(typeof(BDFaceTrackInfo)); +// IntPtr ptT = Marshal.AllocHGlobal(sizeTrack* ilen); +// //Cv2.ImWrite("usb_track_Cv2.jpg", image); +// /* trackMat +// * 浼犲叆鍙傛暟: maxTrackObjNum:妫�娴嬪埌鐨勬渶澶т汉鑴告暟锛屼紶鍏ュ閮ㄥ垎閰嶄汉鑴告暟锛岄渶瑕佸垎閰嶅搴旂殑鍐呭瓨澶у皬銆� +// * 浼犲嚭妫�娴嬪埌鐨勬渶澶т汉鑴告暟 +// * 杩斿洖鍊�: 浼犲叆鐨勪汉鑴告暟 鍜� 妫�娴嬪埌鐨勪汉鑴告暟 涓殑鏈�灏忓��,瀹為檯杩斿洖鐨勪汉鑴搞�� +// ****/ +// int faceSize = ilen;//杩斿洖浜鸿劯鏁� 鍒嗛厤浜鸿劯鏁板拰妫�娴嬪埌浜鸿劯鏁扮殑鏈�灏忓�� +// int curSize = ilen;//褰撳墠浜鸿劯鏁� 杈撳叆鍒嗛厤鐨勪汉鑴告暟锛岃緭鍑哄疄闄呮娴嬪埌鐨勪汉鑴告暟 +// int type = 0; +// faceSize = track(ptT, image.CvPtr, type); +// for (int index = 0; index < faceSize; index++) +// { +// IntPtr ptr = new IntPtr(); +// if( 8 == IntPtr.Size) +// { +// ptr = (IntPtr)(ptT.ToInt64() + sizeTrack * index); +// } +// else if(4 == IntPtr.Size) +// { +// ptr = (IntPtr)(ptT.ToInt32() + sizeTrack * index); +// } - track_info[index] = (BDFaceTrackInfo)Marshal.PtrToStructure(ptr, typeof(BDFaceTrackInfo)); - //face_info[index] = (BDFaceBBox)Marshal.PtrToStructure(info_ptr, typeof(BDFaceBBox)); - Console.WriteLine("in Liveness::usb_track face_id is {0}:",track_info[index].face_id); - Console.WriteLine("in Liveness::usb_track landmarks is:"); +// track_info[index] = (BDFaceTrackInfo)Marshal.PtrToStructure(ptr, typeof(BDFaceTrackInfo)); +// //face_info[index] = (BDFaceBBox)Marshal.PtrToStructure(info_ptr, typeof(BDFaceBBox)); +// Console.WriteLine("in Liveness::usb_track face_id is {0}:",track_info[index].face_id); +// Console.WriteLine("in Liveness::usb_track landmarks is:"); - Console.WriteLine("in Liveness::usb_track score is:{0:f}", track_info[index].box.score); - // 浜鸿劯瀹藉害 - Console.WriteLine("in Liveness::usb_track mWidth is:{0:f}", track_info[index].box.width); - // 涓績鐐筙,Y鍧愭爣 - Console.WriteLine("in Liveness::usb_track mCenter_x is:{0:f}", track_info[index].box.center_x); - Console.WriteLine("in Liveness::usb_track mCenter_y is:{0:f}", track_info[index].box.center_y); +// Console.WriteLine("in Liveness::usb_track score is:{0:f}", track_info[index].box.score); +// // 浜鸿劯瀹藉害 +// Console.WriteLine("in Liveness::usb_track mWidth is:{0:f}", track_info[index].box.width); +// // 涓績鐐筙,Y鍧愭爣 +// Console.WriteLine("in Liveness::usb_track mCenter_x is:{0:f}", track_info[index].box.center_x); +// Console.WriteLine("in Liveness::usb_track mCenter_y is:{0:f}", track_info[index].box.center_y); - } +// } - FaceDraw.draw_rects(ref image, faceSize, track_info); - // FaceDraw.draw_shape(ref image, faceSize, track_info); - Marshal.FreeHGlobal(ptT); - window.ShowImage(image); - Cv2.WaitKey(1); - Console.WriteLine("mat not empty"); - } - else - { - Console.WriteLine("mat is empty"); - } - } - } - } +// FaceDraw.draw_rects(ref image, faceSize, track_info); +// // FaceDraw.draw_shape(ref image, faceSize, track_info); +// Marshal.FreeHGlobal(ptT); +// window.ShowImage(image); +// Cv2.WaitKey(1); +// Console.WriteLine("mat not empty"); +// } +// else +// { +// Console.WriteLine("mat is empty"); +// } +// } +// } +// } - // 娓呴櫎璺熻釜鐨勪汉鑴镐俊鎭� - public void test_clear_tracked_faces() - { - int type = 0; - clear_track_history(type); - Console.WriteLine("after clear tracked faces"); - } +// // 娓呴櫎璺熻釜鐨勪汉鑴镐俊鎭� +// public void test_clear_tracked_faces() +// { +// int type = 0; +// clear_track_history(type); +// Console.WriteLine("after clear tracked faces"); +// } - } - } +// } +// } -- Gitblit v1.9.3