Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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
        }
Exemplo n.º 3
0
        // 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
        }
Exemplo n.º 7
0
 unsafe private static int OnNewTarget(Target *targets, int num)
 {
     for (int i = 0; i < num; ++i)
     {
         TargetListController.AddNewTarget(targets[i]);
     }
     return(0);
 }
Exemplo n.º 8
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();
                }
            }
        }
Exemplo n.º 9
0
 internal unsafe static extern void DebugTargets(ref Frame frame, Target *targets, int nbTarget);
Exemplo n.º 10
0
 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);
Exemplo n.º 17
0
        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
        }