Java face detection example produces 0 faces
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
i bet, it could not find the cascade file. this construct:
assumes, it's packed with your code. that's probably not the case. try an absolute path, and please check faceDetector.empty()
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!