예제 #1
0
 private void Track()
 {
     _faceTracker.Update(_frame, out _faceRect);
     _faceMat = new Mat(_frame, _faceRect);
     _eyeLTracker.Update(_faceMat, out _eyeLRect);
     _eyeRTracker.Update(_faceMat, out _eyeRRect);
 }
        void ProcessFrame()
        {
            //tracker = new TrackerKCF();
            //tracker.Init(first_frame, to_be_trucked);
            temp_rec_trucked = to_be_trucked;
            if (!_cameraCapture.IsOpened)
            {
                MessageBox.Show("error with openning the file");
                return;
            }
            Mat frame        = _cameraCapture.QueryFrame();
            var watch        = System.Diagnostics.Stopwatch.StartNew();
            int camera_speed = (int)(800.0 / FrameRate);

            while (frame != null)
            {
                try
                {
                    watch = System.Diagnostics.Stopwatch.StartNew();
                    bool ok = tracker.Update(frame.Clone(), out temp_rec_trucked);
                    if (ok)
                    {
                        //frame.CopyTo(last_seen_frame);
                        last_seen_frame_rec = temp_rec_trucked;
                        CvInvoke.Rectangle(frame, temp_rec_trucked, new MCvScalar(255.0, 0, 0), 1);
                        camera_imageBox.Image = frame.Bitmap;
                    }
                    else
                    {
                        CvInvoke.PutText(frame, "Tracking failure detected", new Point(100, 50), FontFace.HersheyPlain, 1.0, new MCvScalar(255.0, 255.0, 255.0));
                        camera_imageBox.Image = frame.Bitmap;

                        //if (!nextCameraStarted)
                        //    checkTheNextCamera();
                    }
                    frame = _cameraCapture.QueryFrame();
                    frameNum++;
                    watch.Stop();
                    var elapsedMs = watch.ElapsedMilliseconds;
                    if (camera_speed - elapsedMs > 0)
                    {
                        //Thread.Sleep(camera_speed - (int)elapsedMs);
                        Thread.Sleep(800 / (int)FrameRate);
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                }
            }
        }