Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java OpenCV人脸检测无法找到任何_Java_Opencv_Face Detection - Fatal编程技术网

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或类似版本