private unsafe Target[] SearchFaces() { IntPtr retTarget = IntPtr.Zero; int count = NativeIconExtractor.SearchFaces(ref retTarget); if (count <= 0) { return(new Target[0]); } Target *pTarget = (Target *)retTarget; IList <Target> targets = new List <Target>(); for (int i = 0; i < count; i++) { Target face = pTarget[i]; targets.Add(face); } Target[] tgArr = new Target[targets.Count]; targets.CopyTo(tgArr, 0); return(tgArr); }
public static unsafe void DebugTargetsWrapped(ref Frame frame, Target *targets, int maxTarget) { #if UNITY_EDITOR debug_targets(ref frame, targets, maxTarget); #else DebugTargets(ref frame, targets, maxTarget); #endif }
// The plugin methods are wrapped in order to be transparent for the users when they are being executed in // editor or standalone mode. #region Wrapped methods public static unsafe void ManualRegisterWrapped(ref Frame frame, Target *targets, ref int nbTarget, int maxTarget) { #if UNITY_EDITOR manual_register(ref frame, targets, ref nbTarget, maxTarget); #else ManualRegister(ref frame, targets, ref nbTarget, maxTarget); #endif }
public static unsafe void TrackWrapped(ref Frame frame, Target *targets, int maxTarget) { #if UNITY_EDITOR CARDSTrackingPlugin.track(ref frame, targets, maxTarget); #else Track(ref frame, targets, maxTarget); #endif }
public static unsafe void UnRegisterWrapped(int id, Target *targets, ref int nbTarget) { #if UNITY_EDITOR CARDSTrackingPlugin.un_register(id, targets, ref nbTarget); #else UnRegister(id, targets, ref nbTarget); #endif }
public static unsafe void CloseWrapped(Target *targets, ref int nbTarget, int maxTarget) { #if UNITY_EDITOR CARDSTrackingPlugin.close(targets, ref nbTarget, maxTarget); #else Close(targets, ref nbTarget, maxTarget); #endif }
unsafe private static int OnNewTarget(Target *targets, int num) { for (int i = 0; i < num; ++i) { TargetListController.AddNewTarget(targets[i]); } return(0); }
unsafe void SearchFace() { while (true) { Frame[] frames = null; lock (locker) { if (frameQueue.Count > 0) { frames = frameQueue.Dequeue(); } } if (frames != null) { for (int i = 0; i < frames.Length; ++i) { Debug.WriteLine("addin frame"); Frame frame = frames[i]; NativeMethods.AddInFrame(ref frame); IplImage ipl = new IplImage(frame.image); Bitmap bmp = BitmapConverter.ToBitmap(ipl); ipl.IsEnabledDispose = false; this.pictureFiltered.Image = bmp; } IntPtr target = IntPtr.Zero; int count = NativeMethods.SearchFaces(ref target); Target *pTarget = (Target *)target; for (int i = 0; i < count; i++) { Target face = pTarget[i]; for (int j = 0; j < face.FaceCount; ++j) { IntPtr * f = ((IntPtr *)(face.FaceData)) + j; IplImage ipl = new IplImage(*f); ipl.IsEnabledDispose = false; Bitmap faceBmp = ipl.ToBitmap(); pictureFace.Image = faceBmp; } } NativeMethods.ReleaseMem(); Array.ForEach(frames, f => Cv.Release(ref f.image)); } else { Debug.WriteLine("zzzzzzzzzzzzz....."); go.WaitOne(); } } }
internal unsafe static extern void DebugTargets(ref Frame frame, Target *targets, int nbTarget);
internal unsafe static extern void ManualRegister(ref Frame frame, Target *targets, ref int nbTarget, int maxTarget);
internal unsafe static extern void Close(Target *targets, ref int nbTarget, int maxTarget);
public static unsafe void RegisterWrapped(ref Frame frame, ref RectStruct zone, Target *targets, ref int nbTarget, int maxTarget) { #if UNITY_EDITOR CARDSTrackingPlugin.register(ref frame, ref zone, targets, ref nbTarget, maxTarget); #else Register(ref frame, ref zone, targets, ref nbTarget, maxTarget); #endif }
internal unsafe static extern void Track(ref Frame frame, Target *targets, int maxTarget);
internal unsafe static extern bool Detect(ref Frame frame, ref Frame frameBackground, ref RectStruct zoneDetection, Target *targets, ref int nbTarget, int maxTarget, int mode);
internal unsafe static extern void UnRegister(int id, Target *targets, ref int nbTarget);
internal unsafe static extern int Register(ref Frame frame, ref RectStruct zone, Target *targets, ref int nbTarget, int maxTarget);
unsafe void SearchFace() { while (true) { Frame[] frames = null; lock (locker) { if (framesQueue.Count > 0) { frames = framesQueue.Dequeue(); } } if (frames != null) { for (int i = 0; i < frames.Length; ++i) { DateTime dt = DateTime.FromBinary(frames[i].timeStamp); NativeIconExtractor.AddInFrame(frames[i]); } IntPtr target = IntPtr.Zero; int count = NativeIconExtractor.SearchFaces(ref target); if (count > 0) { Target *pTarget = (Target *)target; IList <Target> targets = new List <Target>(); int upLimit = count; if (frames.Length > 1 && Properties.Settings.Default.DetectMotion && Properties.Settings.Default.removeDuplicatedFace) { upLimit = Math.Min(count, Properties.Settings.Default.MaxDupFaces); } for (int i = 0; i < upLimit; i++) { Target face = pTarget[i]; Frame frm = face.BaseFrame; int idx = Array.FindIndex(frames, fm => fm.cameraID == frm.cameraID && fm.image == frm.image && fm.timeStamp == frm.timeStamp); Debug.Assert(idx != -1); targets.Add(face); } Target[] tgArr = new Target[targets.Count]; targets.CopyTo(tgArr, 0); ImageDetail[] imgs = this.SaveImage(tgArr); this.screen.ShowImages(imgs); } NativeIconExtractor.ReleaseMem(); Array.ForEach(frames, f => Cv.Release(ref f.image)); } else { goSearch.WaitOne(); } } }
public static unsafe bool DetectWrapped(ref Frame frame, ref Frame frameBackground, ref RectStruct zoneDetection, Target *targets, ref int nbTarget, int maxTarget, int mode) { #if UNITY_EDITOR return(CARDSTrackingPlugin.detect(ref frame, ref frameBackground, ref zoneDetection, targets, ref nbTarget, maxTarget, mode)); #else return(Detect(ref frame, ref zoneDetection, targets, ref nbTarget, maxTarget, mode)); #endif }