示例#1
0
文件: DataForm.cs 项目: bug8975/FET
 //开始测量
 private void Measure_Click(object sender, EventArgs e)
 {
     AddButton.Invoke(sender, EventArgs.Empty);
 }
示例#2
0
        private void ProcessFrame(object sender, EventArgs e)
        {
            //capturing video
            if (videoCapture != null && videoCapture.Ptr != IntPtr.Zero)
            {
                videoCapture.Retrieve(frame, 0);
                currentFrame = frame.ToImage <Bgr, Byte>().Resize(CaptureCamera.Width, CaptureCamera.Height, Inter.Cubic);

                //Detecting face
                if (facesDetectionEnabled)
                {
                    //Converting from blue green red format to grey picture format
                    Mat grayImage = new Mat();
                    CvInvoke.CvtColor(currentFrame, grayImage, ColorConversion.Bgr2Gray);
                    //Enhance for better image quality
                    CvInvoke.EqualizeHist(grayImage, grayImage);

                    Rectangle[] faces = faceCasacdeClassifier.DetectMultiScale(grayImage, 1.1, 3, Size.Empty, Size.Empty);
                    if (faces.Length > 0)
                    {
                        foreach (var face in faces)
                        {
                            //Adding Preson profile
                            Image <Bgr, Byte> resultImage = currentFrame.Convert <Bgr, Byte>();
                            resultImage.ROI   = face;
                            Detected.SizeMode = PictureBoxSizeMode.StretchImage;
                            Detected.Image    = resultImage.Bitmap;

                            if (EnableSaveImage)
                            {
                                string path = Directory.GetCurrentDirectory() + @"\TrainedImages";
                                if (!Directory.Exists(path))
                                {
                                    Directory.CreateDirectory(path);
                                }
                                //saving 10 images with certain delay
                                Task.Factory.StartNew(() => {
                                    for (int i = 0; i < 10; i++)
                                    {
                                        resultImage.Resize(200, 200, Inter.Cubic).Save(path + @"\" + PersonName.Text + "_" + DateTime.Now.ToString("dd-mm-yyyy-hh-mm-ss") + ".jpg");
                                        Thread.Sleep(1000);
                                    }
                                });
                            }
                            EnableSaveImage = false;

                            if (AddButton.InvokeRequired)
                            {
                                AddButton.Invoke(new ThreadStart(delegate {
                                    AddButton.Enabled = true;
                                }));
                            }

                            // recognizing face
                            if (isTrained)
                            {
                                Image <Gray, Byte> grayFaceResult = resultImage.Convert <Gray, Byte>().Resize(200, 200, Inter.Cubic);
                                CvInvoke.EqualizeHist(grayFaceResult, grayFaceResult);
                                var result = recognizer.Predict(grayFaceResult);
                                pictureBox1.Image = grayFaceResult.Bitmap;
                                pictureBox2.Image = TrainedFaces[result.Label].Bitmap;
                                Debug.WriteLine(result.Label + ". " + result.Distance);
                                if (result.Label != -1 && result.Distance < 2000)
                                {
                                    CvInvoke.PutText(currentFrame, PersonsNames[result.Label], new Point(face.X - 2, face.Y - 2),
                                                     FontFace.HersheyComplex, 1.0, new Bgr(Color.Orange).MCvScalar);
                                    CvInvoke.Rectangle(currentFrame, face, new Bgr(Color.Green).MCvScalar, 2);
                                }
                                else
                                {
                                    CvInvoke.PutText(currentFrame, "Unknown", new Point(face.X - 2, face.Y - 2),
                                                     FontFace.HersheyComplex, 1.0, new Bgr(Color.Orange).MCvScalar);
                                    CvInvoke.Rectangle(currentFrame, face, new Bgr(Color.Red).MCvScalar, 2);
                                }
                            }
                        }
                    }
                }

                CaptureCamera.Image = currentFrame.Bitmap;
            }

            if (currentFrame != null)
            {
                currentFrame.Dispose();
            }
        }