private void btnDetect_Click(object sender, EventArgs e) { btnDetect.Enabled = false; List <string> errors = new List <string>(); if (image == null) { errors.Add("Please select Image"); } string cascade = cbxHaarCascade.SelectedItem.ToString(); double scaleFactor = Convert.ToDouble(cbxScaleFactor.SelectedItem); int minNeighbors = Convert.ToInt32(cbxMinNeighbors.SelectedItem); HAAR_DETECTION_TYPE detectionType = (ckbDetectionType.Checked) ? HAAR_DETECTION_TYPE.DO_CANNY_PRUNING : HAAR_DETECTION_TYPE.DEFAULT; int min = Convert.ToInt32(cbxMinimumSize.SelectedItem); int max = Convert.ToInt32(cbxMaximumSize.SelectedItem); if (max != 0 && max < min) { errors.Add("Maximum Size cannot be less than Minium Size"); } if (errors.Count > 0) { MessageBox.Show(string.Join(Environment.NewLine, errors.ToArray()), "ERROR!", MessageBoxButtons.OK); btnDetect.Enabled = true; return; } try { Rectangle[] detected = Detector.Detect(image, cascade, scaleFactor, minNeighbors, detectionType, min, max); using (Image <Bgr, Byte> imageCopy = image.Copy()) { foreach (Rectangle region in detected) { imageCopy.Draw(region, new Bgr(Color.Blue), 2); } imgResult.Image = imageCopy; } } catch (Exception ex) { MessageBox.Show(ex.Message, "ERROR!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } finally { btnDetect.Enabled = true; } }
public IList <RoI> DetectFaces(Image image, EnumDetectionType detectionType, double scale, int minNeighbors, Size minSize) { IList <RoI> rois = new List <RoI>(); // convert to openCV format HAAR_DETECTION_TYPE detectionTypeOpenCV = EnumHelper.StringToEnum <HAAR_DETECTION_TYPE>(detectionType.ToString()); try { Image <Gray, byte> gray = new Image <Gray, byte>(new Bitmap(image)); //Face Detector MCvAvgComp[][] facesDetected = gray.DetectHaarCascade( face, scale, minNeighbors, detectionTypeOpenCV, minSize ); // create a RoI object for every detected face foreach (MCvAvgComp f in facesDetected[0]) { RoI roi = new RoI(); roi.X = f.rect.X; roi.Y = f.rect.Y; roi.Width = f.rect.Width; roi.Height = f.rect.Height; rois.Add(roi); } } catch { throw new FaceDetectionException("Error while detecting faces!"); } return(rois); }
public Detect(string faceFile, string eyeFile) { EyeCascade = new HaarCascade(eyeFile); FaceCascade = new HaarCascade(faceFile); detectType = HAAR_DETECTION_TYPE.DO_CANNY_PRUNING; }