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 Main(string[] args) { string[] _files = System.IO.Directory.GetFiles(@"./", "*.jpg", System.IO.SearchOption.AllDirectories); var cascade_face = Accord.Vision.Detection.Cascades.FaceHaarCascade.FromXml(@"haarcascade_frontalface.xml"); var face_detector = new Accord.Vision.Detection.HaarObjectDetector(cascade_face); foreach (var str in _files.Select((value, index) => new { value, index })) { Console.Write("Processing image {0} of {1}...", _files.Length, 1 + @str.index); var image = new Bitmap(@str.value); var face = face_detector.ProcessFrame(image); Bitmap cropped = image.Clone(face[0], image.PixelFormat); cropped.Save(str.value.Substring(0, str.value.Length - 4) + "_cropped.jpg"); Console.Write("Done.\r\n"); } Console.Write("Process Finished."); }
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; }); }
private static Accord.Vision.Detection.HaarObjectDetector Create(DetectorType type) { Accord.Vision.Detection.HaarCascade cascade = null; float scalingFactor = 1.2f; string data = ""; switch (type) { case DetectorType.Face: { data = Properties.Resources.haarcascade_frontalface_default; scalingFactor = 1.2f; } break; case DetectorType.Eye: { data = Properties.Resources.haarcascade_eye; scalingFactor = 1.1f; } break; case DetectorType.Nose: { data = Properties.Resources.haarcascade_mcs_nose; scalingFactor = 1.2f; } break; case DetectorType.Mouth: { data = Properties.Resources.haarcascade_mcs_mouth; scalingFactor = 1.05f; } break; case DetectorType.EarLeft: { data = Properties.Resources.haarcascade_mcs_leftear; scalingFactor = 1.15f; } break; case DetectorType.EarRight: { data = Properties.Resources.haarcascade_mcs_rightear; scalingFactor = 1.15f; } break; case DetectorType.FaceProfile: { data = Properties.Resources.haarcascade_profileface; scalingFactor = 1.2f; } break; } cascade = Accord.Vision.Detection.HaarCascade.FromXml(new System.IO.StringReader(data)); var detector = new Accord.Vision.Detection.HaarObjectDetector(cascade); detector.MinSize = new System.Drawing.Size(10, 10); detector.ScalingFactor = scalingFactor; detector.ScalingMode = Accord.Vision.Detection.ObjectDetectorScalingMode.SmallerToGreater; detector.SearchMode = Accord.Vision.Detection.ObjectDetectorSearchMode.Single; detector.UseParallelProcessing = true; return(detector); }