コード例 #1
0
ファイル: Form1.cs プロジェクト: yuehuiwang/HaarDetection
        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;
            }
        }
コード例 #2
0
        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);
        }
コード例 #3
0
 public Detect(string faceFile, string eyeFile)
 {
     EyeCascade  = new HaarCascade(eyeFile);
     FaceCascade = new HaarCascade(faceFile);
     detectType  = HAAR_DETECTION_TYPE.DO_CANNY_PRUNING;
 }