/// <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(); }
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()); } } }
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(); }
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; }); }
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); } } }
/// <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); }