First time here? Check out the FAQ!

Ask Your Question
0

Java face detection example produces 0 faces

asked Nov 5 '13

KonradZuse gravatar image

updated Nov 5 '13

berak gravatar image

Hello all,

I just started with the tutorials and I went directly into the example with Netbeans IDE.

I tried a couple of the xml face classifers, none worked. I used a few different pictures with faces, including the lena.png, none worked.

the outputted picture is correct(without the green box) so I don't know why it's not detecting.

Output:

run: Hello, OpenCV

Running DetectFaceDemo Detected 0 faces Writing faceDetection.png

package imagerecognition;

import org.opencv.core.Core; import org.opencv.core.Mat; import org.opencv.core.MatOfRect; import org.opencv.core.Point; import org.opencv.core.Rect; import org.opencv.core.Scalar; import org.opencv.highgui.Highgui; import org.opencv.objdetect.CascadeClassifier;

// // Detects faces in an image, draws boxes around them, and writes the results // to "faceDetection.png". // class DetectFaceDemo { public void run() { System.out.println("\nRunning DetectFaceDemo");

// Create a face detector from the cascade file in the resources
// directory.
CascadeClassifier faceDetector = new CascadeClassifier(getClass().getResource("lbpcascade_frontalface.xml").getPath());
Mat image = Highgui.imread("F:/lena.png");

// Detect faces in the image.
// MatOfRect is a special container class for Rect.
MatOfRect faceDetections = new MatOfRect();
faceDetector.detectMultiScale(image, faceDetections);

System.out.println(String.format("Detected %s faces", faceDetections.toArray().length));

// Draw a bounding box around each face.
for (Rect rect : faceDetections.toArray()) {
    Core.rectangle(image, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height), new Scalar(0, 255, 0));
}

// Save the visualized detection.
String filename = "faceDetection.png";
System.out.println(String.format("Writing %s", filename));
Highgui.imwrite(filename, image);

} }

public class ImageRecognition { public static void main(String[] args) { System.out.println("Hello, OpenCV");

// Load the native library.
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
new DetectFaceDemo().run();

} }

I figured I might have skipped over something since I didn't try SBT or the ant build, but tried what I thought would work. Am I missing anything?

Thanks,

~KZ

Preview: (hide)

Comments

i bet, it could not find the cascade file. this construct:

 new CascadeClassifier(getClass().getResource("lbpcascade_frontalface.xml").getPath());

assumes, it's packed with your code. that's probably not the case. try an absolute path, and please check faceDetector.empty()

berak gravatar imageberak (Nov 5 '13)edit
1

Thanks for the reply. the file is in my classpath, int he same package as the class. If I change the text it will say the file does not exist. I tried this and the haar_frontalFace_alt.xml

I just put in the actual path and it worked, I should have realized this when I had to do that for the actual picture since it idnd't like reading it from my classpath.

and I will check for the detector.isEmpty().

Thank you!

KonradZuse gravatar imageKonradZuse (Nov 5 '13)edit

1 answer

Sort by » oldest newest most voted
0

answered Jun 7 '16

mrfromage gravatar image

Thanks a lot! This solved my problem.

In this official tutorial http://docs.opencv.org/2.4/doc/tutori... it uses ...getResource... But it ain't work with the xml and image as a resource! Putting it inside the project's basdir works just fine.

Preview: (hide)

Comments

I have the similar issue , its not detecting faces on any pictures but just the one I used from the demo called "lena1.png" , can you help ? take a look at my post please

link text

aliyesami gravatar imagealiyesami (Nov 10 '16)edit

Question Tools

Stats

Asked: Nov 5 '13

Seen: 2,760 times

Last updated: Nov 04 '13