Пример #1
0
        void ProcessFrame(object sender, EventArgs e)
        {
            //FindAverageFrameTime();

            fps++;
            if (videoDevice == null)
            {
                return;
            }
            try
            {
                for (int i = 0; i < 10; i++)
                {
                    videoDevice.QueryFrame();
                }

                Mat currentFrame = videoDevice.QueryFrame();
                //Emgu.CV.CvInvoke.Resize(currentFrame, currentFrame, new Size(), 0.5, 0.5,Emgu.CV.CvEnum.Inter.Cubic);
                //CvInvoke.GaussianBlur(currentFrame, currentFrame,new Size(5,5),2);


                int         type  = 0;
                Rectangle[] faces = face.FindAllFaces(currentFrame, ref type);


                if (faces.Length != 0)
                {
                    var image     = currentFrame.ToImage <Gray, Byte>();
                    var colorFace = currentFrame.ToImage <Bgr, byte>();
                    image.ROI     = faces[0];
                    colorFace.ROI = faces[0];
                    Image <Gray, Byte> faceImage = image.Copy().Resize(100, 100, Emgu.CV.CvEnum.Inter.Cubic);

                    double distance = 0;
                    int    personId = face.MatchedFace(faceImage, ref distance);

                    //if (personId != -1)
                    //{


                    int guess = GuessFace(personId);
                    if (guess == -1)
                    {
                        // Unauthorized
                        pbView.Image = DrawController.DrawRectangle(faces, currentFrame, Color.Red, 2).ToBitmap();

                        for (int i = 0; i < unauthorized.Count; i++)
                        {
                            if (unauthorized[i].id == personId)
                            {
                                return;
                            }
                        }
                        unauthorized.Add(new PersonInfo(personId, "unknown", colorFace.Copy().Resize(100, 100, Emgu.CV.CvEnum.Inter.Cubic).ToBitmap()));
                        MessageBox.Show("Unauthorized Person Detected", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    }
                    else if (guess == -2)
                    {
                        pbView.Image = DrawController.DrawRectangle(faces[0], "Working...", currentFrame.ToImage <Bgr, byte>(), Color.Yellow, 2).ToBitmap();
                    }
                    else
                    {
                        // Authorized

                        string personName = face.GetPersonName(personId);
                        pbView.Image = DrawController.DrawRectangle(faces[0], personName, currentFrame.ToImage <Bgr, Byte>(), Color.Green, 2).ToBitmap();
                        //BeginInvoke((MethodInvoker)delegate { tbConsole.Text += "\n" + pr.Label.ToString()+" Detected"; });

                        for (int i = 0; i < authorized.Count; i++)
                        {
                            if (authorized[i].id == personId)
                            {
                                return;
                            }
                        }

                        authorized.Add(new PersonInfo(personId, personName, colorFace.Copy().Resize(100, 100, Emgu.CV.CvEnum.Inter.Cubic).ToBitmap()));
                    }
                    //}
                    //else
                    //{
                    //    // Face Mismatched
                    //    pbView.Image = DrawController.DrawRectangle(faces, currentFrame, Color.Red, 2).ToBitmap();
                    //}

                    BeginInvoke((MethodInvoker) delegate { tbConsole.Text = distance + " " + personId.ToString(); });
                }
                else
                {
                    pbView.Image = currentFrame.Bitmap;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + "\n" + ex.InnerException);
            }
        }
Пример #2
0
        void ProcessFrame(object sender, EventArgs e)
        {
            try
            {
                fps++;
                if (videoDevice == null)
                {
                    return;
                }
                for (int i = 0; i < 5; i++)
                {
                    videoDevice.QueryFrame();
                }
                Mat currentFrame = videoDevice.QueryFrame();

                //Mat tempFrame;
                //while(true)
                //{
                //    tempFrame = videoDevice.QueryFrame();
                //    if (tempFrame != null)
                //        currentFrame = tempFrame;
                //    else
                //        break;
                //}


                //Emgu.CV.CvInvoke.Resize(currentFrame, currentFrame, new Size(), 0.5, 0.5,Emgu.CV.CvEnum.Inter.Cubic);
                //CvInvoke.GaussianBlur(currentFrame, currentFrame,new Size(5,5),2);

                int         type  = 0;
                Rectangle[] faces = face.FindAllFaces(currentFrame, ref type);

                if (isExpertMode)
                {
                    BeginInvoke((MethodInvoker) delegate { tbConsole.Text += "\n" + type; });
                }


                pbView.Image = DrawController.DrawRectangle(faces, currentFrame, Color.Green, 1).ToBitmap();



                if (faces.Length != 0)
                {
                    // Standardize the Value (hsV)
                    // Increase contrast
                    //var enhanced = currentFrame.ToImage<Hsv, byte>().Copy();
                    //enhanced._EqualizeHist();
                    //enhanced._GammaCorrect(1.5d);
                    //for (int i = 0; i < enhanced.Size.Height; i++)
                    //    for (int j = 0; j < enhanced.Size.Width; j++)
                    //        enhanced.Data[i, j, 1] = 250;


                    var image = currentFrame.ToImage <Gray, byte>();

                    //var image = currentFrame.ToImage<Gray, byte>();

                    image.ROI = faces[0];
                    var faceImage = image.Copy().Resize(100, 100, Emgu.CV.CvEnum.Inter.Cubic);


                    if (registeredImages.Count == 0)
                    {
                        registeredImages.Add(faceImage.Convert <Gray, Byte>());
                        registeredImages.Add(faceImage.Convert <Gray, Byte>());
                        PictureBox pb = new PictureBox();
                        pb.Size     = new Size(50, 50);
                        pb.Image    = faceImage.ToBitmap();
                        pb.SizeMode = PictureBoxSizeMode.StretchImage;
                        flpFaces.Controls.Add(pb);
                    }
                    else
                    {
                        bool isMatched = face.IsFaceMatched(faceImage, registeredImages.ToArray());
                        pbFace.Image = faceImage.ToBitmap();

                        //flpFaces.Controls.Clear();
                        //for(int i=1;i< registeredImages.Count;i++)
                        //{
                        //    PictureBox pb = new PictureBox();
                        //    pb.Size = new Size(50, 50);
                        //    pb.Image = registeredImages[i].ToBitmap();
                        //    pb.SizeMode = PictureBoxSizeMode.StretchImage;
                        //    flpFaces.Controls.Add(pb);
                        //}

                        //if(isExpertMode)
                        //    BeginInvoke((MethodInvoker)delegate { tbConsole.Text = isMatched.ToString() ; });

                        if (!isMatched)
                        {
                            registeredImages.Add(faceImage.Convert <Gray, Byte>());
                            PictureBox pb = new PictureBox();
                            pb.Size     = new Size(50, 50);
                            pb.Image    = faceImage.ToBitmap();
                            pb.SizeMode = PictureBoxSizeMode.StretchImage;
                            flpFaces.Controls.Add(pb);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("--> " + ex.Message);
            }
        }