Ask Your Question
0

Java face detection example produces 0 faces

asked 2013-11-04 20:45:35 -0600

KonradZuse gravatar image

updated 2013-11-05 05:01:09 -0600

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

edit retag flag offensive close merge delete

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 ( 2013-11-05 05:00:05 -0600 )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 ( 2013-11-05 09:16:11 -0600 )edit

1 answer

Sort by ยป oldest newest most voted
0

answered 2016-06-07 08:15:38 -0600

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.

edit flag offensive delete link more

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 ( 2016-11-10 09:31:53 -0600 )edit

Question Tools

Stats

Asked: 2013-11-04 20:45:35 -0600

Seen: 2,468 times

Last updated: Nov 04 '13