/// <summary>
        /// Called when MainForm loads.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void MainForm_Load(object sender, EventArgs e)
        {
            // activate the camera
            SetCamera();

            // set up a haar object detector to find the face
            var faceCascade = new Accord.Vision.Detection.Cascades.FaceHaarCascade();

            faceDetector               = new HaarObjectDetector(faceCascade);
            faceDetector.MinSize       = new Size(150, 150);
            faceDetector.ScalingFactor = 1.03f;
            faceDetector.SearchMode    = ObjectDetectorSearchMode.Single;
            faceDetector.ScalingMode   = ObjectDetectorScalingMode.SmallerToGreater;

            // set up a new haar object detector to find the nose
            var noseCascade = new Accord.Vision.Detection.Cascades.NoseHaarCascade();

            noseDetector             = new HaarObjectDetector(noseCascade);
            noseDetector.SearchMode  = ObjectDetectorSearchMode.Single;
            noseDetector.ScalingMode = ObjectDetectorScalingMode.SmallerToGreater;

            // load the mustache
            mustache = Bitmap.FromFile(@"./mustache.png") as Bitmap;

            // start the player
            videoPlayer.Start();
        }
예제 #2
0
        private void faceDetect(ushort j)
        {
            cvsbmp = UtilFn.BitmapImage2Bitmap(images[j]);

            var cascade = new Accord.Vision.Detection.Cascades.FaceHaarCascade();

            var detector = new Accord.Vision.Detection.HaarObjectDetector(cascade, minSize: 50,
                                                                          searchMode: Accord.Vision.Detection.ObjectDetectorSearchMode.Average);


            System.Drawing.Rectangle[] rectangles = detector.ProcessFrame(cvsbmp);
            List <Bitmap> listBitmap = new List <Bitmap>();

            foreach (System.Drawing.Rectangle r in rectangles)
            {
                listBitmap.Add(UtilFn.CropImage(cvsbmp, r.X, r.Y, r.Width, r.Height));
            }

            if (rectangles.Count() == 0)
            {
                imageInfo.Text = "No faces detected!";
            }
            else
            {
                //imagesEdited[j] = (converter.Convert(UtilFn.MergeImages(listBitmap), Type.GetType("BitmapImage"), null, null) as BitmapImage).Clone();
                foreach (var x in listBitmap)
                {
                    imagesEdited.Add((converter.Convert(x, Type.GetType("BitmapImage"), null, null) as BitmapImage).Clone());
                }
            }
        }
예제 #3
0
        static void TestHaar()
        {
            if (Environment.Is64BitProcess)
            {
                throw new Exception("Run in 32-bits");
            }

            // Let's test the detector using a sample video from
            // the collection of test videos in the framework:
            TestVideos ds       = new TestVideos();
            string     fileName = ds["crowd.mp4"];

            // In this example, we will be creating a cascade for a Face detector:
            var cascade = new Accord.Vision.Detection.Cascades.FaceHaarCascade();

            // Now, create a new Haar object detector with the cascade:
            var detector = new HaarObjectDetector(cascade, minSize: 25,
                                                  searchMode: ObjectDetectorSearchMode.Average,
                                                  scalingMode: ObjectDetectorScalingMode.SmallerToGreater,
                                                  scaleFactor: 1.1f)
            {
                Suppression = 5 // This should make sure we only report regions as faces if
                                // they have been detected at least 5 times within different cascade scales.
            };

            // Now, let's open the video using FFMPEG:
            var video = new VideoFileReader();

            video.Open(fileName);

            Stopwatch sw = Stopwatch.StartNew();

            // Now, for each frame of the video
            for (int frameIndex = 0; frameIndex < video.FrameCount; frameIndex++)
            {
                // Read the current frame into the bitmap data
                Bitmap bmp = video.ReadVideoFrame(frameIndex);

                // Feed the frame to the tracker
                Rectangle[] faces = detector.ProcessFrame(bmp);

                Console.WriteLine(faces.Length);
                Console.WriteLine(bmp.Flags);
            }

            sw.Stop();

            Console.WriteLine(sw.Elapsed);

            video.Close();
        }
예제 #4
0
        public void FindFace(PictureBox pb)
        {
            AForge.Video.DirectShow.VideoCaptureDevice   FinalVideoSource;
            AForge.Video.DirectShow.FilterInfoCollection VideoCaptuerDevices;
            VideoCaptuerDevices = new AForge.Video.DirectShow.FilterInfoCollection(AForge.Video.DirectShow.FilterCategory.VideoInputDevice);
            FinalVideoSource    = new AForge.Video.DirectShow.VideoCaptureDevice(VideoCaptuerDevices[0].MonikerString);

            FinalVideoSource.NewFrame += new AForge.Video.NewFrameEventHandler((sender, eventArgs) =>
            {
                Bitmap image = (Bitmap)eventArgs.Frame.Clone();
                pb.Image     = image;
            });

            FinalVideoSource.Start();
            FinalVideoSource.NewFrame += new AForge.Video.NewFrameEventHandler((sender, eventArgs) =>
            {
                Bitmap image = (Bitmap)eventArgs.Frame.Clone();
                //görüntüde yüz aranacağı belirtilir.
                Accord.Vision.Detection.Cascades.FaceHaarCascade cascade = new Accord.Vision.Detection.Cascades.FaceHaarCascade();
                //görüntü üzerinde arama yapar. İkinci parametresi minimum arama alanıdır.
                Accord.Vision.Detection.HaarObjectDetector detector = new Accord.Vision.Detection.HaarObjectDetector(cascade, 1);

                detector.SearchMode            = Accord.Vision.Detection.ObjectDetectorSearchMode.Single;
                detector.ScalingFactor         = 1.5f;
                detector.ScalingMode           = Accord.Vision.Detection.ObjectDetectorScalingMode.GreaterToSmaller;
                detector.UseParallelProcessing = true;
                detector.Suppression           = 3;
                Rectangle[] faces = detector.ProcessFrame(image);
                Graphics g        = Graphics.FromImage(image);
                foreach (var face in faces)
                {
                    Pen p = new Pen(Color.Red, 10f);
                    g.DrawRectangle(p, face);
                }
                g.Dispose();

                pb.Image = image;
            });
        }
예제 #5
0
        public static bool HasFace(string imagePath)
        {
            var cascade = new Accord.Vision.Detection.Cascades.FaceHaarCascade();

            var detector = new HaarObjectDetector(cascade, minSize: 50,
                                                  searchMode: ObjectDetectorSearchMode.NoOverlap);

            using (Image image = Image.FromFile(imagePath))
                using (Bitmap bmp = new Bitmap(image))
                {
                    detector.UseParallelProcessing = true;
                    Rectangle[] result = detector.ProcessFrame(bmp);

                    if (result != null && result.Length > 0)
                    {
                        return(true);
                    }
                    else
                    {
                        return(false);
                    }
                }
        }
예제 #6
0
        /// <summary>
        /// This method helps to face detection
        /// </summary>
        /// <param name="image">Original image</param>
        /// <returns>Face detection result</returns>
        public static FaceDetectionResult FaceDetection(Bitmap image)
        {
            // Creating an face detection instance
            var result  = new FaceDetectionResult();
            var cascade = new Accord.Vision.Detection.Cascades.FaceHaarCascade();
            // set min size in the picture to detect faces
            var detector = new HaarObjectDetector(cascade, minSize: 100, searchMode: ObjectDetectorSearchMode.NoOverlap);
            var bmp      = Accord.Imaging.Image.Clone(image);
            // execute detection
            var faces = detector.ProcessFrame(bmp);
            // set rectangle color
            var objectMarker = new RectanglesMarker(Color.Red)
            {
                Rectangles = faces
            };
            // apply filter and get a new image
            var resultImage = objectMarker.Apply(image); // overwrite the frame

            result.ImageResult = resultImage;
            // set result parameters
            result.TotalFacesDetected = faces?.Length ?? 0;
            result.Rectangles         = faces;
            return(result);
        }
        private Bitmap ProcessImage(Bitmap image)
        {
            // convert to grayscale
            var gray  = new GrayscaleBT709();
            var frame = gray.Apply(image);

            // boost contrast
            var contrast = new ContrastCorrection();

            contrast.ApplyInPlace(frame);

            // set up a haar object detector to find faces
            var cascade  = new Accord.Vision.Detection.Cascades.FaceHaarCascade();
            var detector = new HaarObjectDetector(cascade);

            detector.MinSize       = new Size(150, 150);
            detector.ScalingFactor = 1.03f;
            detector.SearchMode    = ObjectDetectorSearchMode.Average;
            detector.ScalingMode   = ObjectDetectorScalingMode.SmallerToGreater;

            // scan the image
            var faces = detector.ProcessFrame(frame);

            // create thumbnails for each face
            var resizer = new ResizeNearestNeighbor(128, 128);

            foreach (var rect in faces)
            {
                // zoom out a bit
                var r = rect;
                r.Inflate(50, 50);
                r.X = r.X < 0 ? 0 : r.X;
                r.Y = r.Y < 0 ? 0 : r.Y;

                // copy the face into a new picturebox
                using (var face = image.Clone(r, PixelFormat.Format24bppRgb))
                {
                    var smallFace = resizer.Apply(face);
                    var thumbnail = new PictureBox()
                    {
                        Image    = smallFace,
                        SizeMode = PictureBoxSizeMode.Zoom,
                        Width    = 62,
                        Height   = 62
                    };
                    imagesPanel.Controls.Add(thumbnail);
                }
            }

            // highlight all detected faces in the main image
            using (Graphics g = Graphics.FromImage(image))
            {
                var pen = new Pen(Color.LightGreen, 4);
                foreach (var face in faces)
                {
                    g.DrawRectangle(pen, face);
                }
            }

            return(image);
        }