0
votes

all,

I just tried the face detection example in latest version of Emgu CV, And my program works well, but i cannot have any faces from either image or the webcam live captures.

My OS is windows 8 Enterprise x64. And my IDE is VS2012.

BTW, I also tried HaarCascade and CascadeClassifier. Neither of them can get a result. The returned variable's value will always be {Emgu.CV.Structure.MCvAvgComp[0]}

cap = new Capture(0);
// adjust path to find your xml
//ccf = new CascadeClassifier("D:\\haarcascade_frontalface_alt_tree.xml");
haar = new HaarCascade("D:\\haarcascade_frontalface_alt_tree.xml");
Image inputImg = Image.FromFile(@"D:\1.jpg");

Image<Bgr, byte> imageFrame = new Image<Bgr, byte>(new Bitmap(inputImg));

if (imageFrame != null) {
    Image<Gray, byte> grayFrame = imageFrame.Convert<Gray, byte>();

var faces = grayFrame.DetectHaarCascade(haar, 1.1, 10, HAAR_DETECTION_TYPE.DO_CANNY_PRUNING, new Size(20, 20))[0];

foreach (var face in faces) {
                imageFrame.Draw(face.rect, new Bgr(Color.Green), 3);
            }
}
pictureBox1.Image = imageFrame.ToBitmap();

Any thoughts or help? Thank you very much.

Solved thank you.

1

1 Answers

0
votes

I have done a similar program to detected pedestrians using the Haar cascaades method, see if the following code can help with something:

private void Haar(object sender, EventArgs arg)
        {

            Image<Bgr, Byte> frame;
            Image<Gray, Byte> Gray_frame;

            HaarCascade UpperBody = new HaarCascade("haarcascade_mcs_upperbody.xml");
            HaarCascade LowerBody = new HaarCascade("haarcascade_lowerbody.xml");
            HaarCascade FullBody = new HaarCascade("haarcascade_lowerbody.xml");

            try
            {
                frame = _capture.QueryFrame();

                Gray_frame = frame.Convert<Gray, byte>();

                double fps = _capture.GetCaptureProperty(Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FPS);
                //Gray_frame = foreground(frame);

                if (inteiro == false)
                {

                    MCvAvgComp[] cima = UpperBody.Detect(Gray_frame, escala, vizinhos,
                        Emgu.CV.CvEnum.HAAR_DETECTION_TYPE.DO_CANNY_PRUNING,
                        new System.Drawing.Size(size1, size2));

                    MCvAvgComp[] baixo = LowerBody.Detect(Gray_frame, escala, vizinhos,
                        Emgu.CV.CvEnum.HAAR_DETECTION_TYPE.DO_CANNY_PRUNING,
                        new System.Drawing.Size(size1, size2));


                    foreach (MCvAvgComp body in cima)
                    {
                        Gray_frame.Draw(body.rect, new Emgu.CV.Structure.Gray(10), 2);
                        cout++;
                    }
                    foreach (MCvAvgComp body in baixo)
                    {
                        Gray_frame.Draw(body.rect, new Emgu.CV.Structure.Gray(10), 2);
                        cout++;
                    }
                }

                //Full Body

                if (inteiro == true)
                {

                    MCvAvgComp[] full = FullBody.Detect(Gray_frame, escala, vizinhos,
                        Emgu.CV.CvEnum.HAAR_DETECTION_TYPE.DO_CANNY_PRUNING,
                        new System.Drawing.Size(size1, size2));


                    foreach (MCvAvgComp body in full)
                    {

                        Gray_frame.Draw(body.rect, new Emgu.CV.Structure.Gray(10), 2);
                        cout++;
                    }
                }

                this.Text = cout.ToString();
                imageBox1.Image = Gray_frame;
            }
            catch { }
        }