Java OpenCV人脸检测无法找到任何
我学习了在线教程,并编写了一个简单的类,如下所示:Java OpenCV人脸检测无法找到任何,java,opencv,face-detection,Java,Opencv,Face Detection,我学习了在线教程,并编写了一个简单的类,如下所示: public class FaceDetector { public static void detect(String imageFile) { System.loadLibrary(Core.NATIVE_LIBRARY_NAME); System.out.println("\nRunning FaceDetector"); CascadeClassifier faceDetec
public class FaceDetector
{
public static void detect(String imageFile) {
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
System.out.println("\nRunning FaceDetector");
CascadeClassifier faceDetector = new CascadeClassifier(FaceDetector.class.getResource("haarcascade_frontalface_alt.xml").getPath());
Mat image = Highgui.imread(imageFile);
MatOfRect faceDetections = new MatOfRect();
faceDetector.detectMultiScale(image, faceDetections);
int faceCount = faceDetections.toArray().length;
System.out.println(String.format("Detected %s faces", faceCount));
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));
}
String filename = imageFile+"_output.png";
System.out.println(String.format("Writing %s", filename));
Highgui.imwrite(filename, image);
}
}
然而,我已经尝试了200多张个人资料图片,但它没有检测到一张。由于它重写的图像文件未被触及,我知道它读取图像正确。它没有给出任何错误。我现在该怎么办?有重定向吗?我应该在哪里读书?我遗漏了什么?使用标准opencv人脸检测器很难找到轮廓人脸,特别是如果使用默认的haardcascade_frontalface分类器 基本上,opencv使用的Viola-Jones算法必须经过正反两方面的训练,因此xml文件之间存在差异。带有“frontalface”的人使用正面图像进行训练,从正面姿势到+/-30°左右的检测率良好。对于更陡峭的姿势,您可能应该尝试使用不同的分类器:您可以找到一个非常好的选择。您会注意到opencv“人脸检测器”实际上只是一个为人脸调整的对象检测器 你也可以试着训练你自己的adaboost cascade进行人脸检测,有几个教程,但我在这方面没有太多成功 因此,总结一下答案:使用标准opencv人脸检测器的侧面人脸检测率很低是很常见的,除了尝试更改级联分类器之外,您对此无能为力
希望这有帮助。尝试:
faceDetector.isopend()
看看它是否找到了级联注意:我还尝试了haarcascade_frontalface_default.xml作为分类器,并验证了它的有效性。如果某人有类似问题;我将XML移到了一个文件夹名classifier下,并创建了如下faceDetector:CascadeClassifier faceDetector=new CascadeClassifier();load(“分类器/haarcascade_frontalface_alt.xml”);同样,不要将frontalface级联用于配置文件图像。请尝试lbpcascade_profileface.xml或类似版本