Ask Your Question

Revision history [back]

OpenCV - predict_label returns a huge value

I have trained faceRecognizer in Java. But when i predict a label it returns a huge value which is not the actual label which i stored during training. Please have a look at my training code and tell me how this error can be resolved.

String trainingDir = "res/";
        File root = new File(trainingDir);
        FilenameFilter imgFilter = new FilenameFilter() {
            public boolean accept(File dir, String name) {
                name = name.toLowerCase();
                return name.endsWith(".jpg") || name.endsWith(".pgm") || name.endsWith(".png");
            }
        };
    File[] imageFiles = root.listFiles(imgFilter);
    ArrayList <mat> images = new ArrayList(imageFiles.length);
    Mat labels = new Mat(imageFiles.length,1,CvType.CV_32SC1);
    ArrayList <integer>labelsBuf = new ArrayList<>(imageFiles.length);

    int counter =0;
    for(File image: imageFiles){
        Mat img = Imgcodecs.imread(image.getAbsolutePath(),Imgcodecs.CV_LOAD_IMAGE_GRAYSCALE);
        int label = Integer.parseInt(image.getName().split("\\.")[2]);
        //images.add(label, img);
        images.add(img);
        labelsBuf.add(counter, label); 
        counter++;
    }
    FaceRecognizer faceRecognizer = Face.createFisherFaceRecognizer();

    faceRecognizer.train(images, labels);

Thanks in advance

click to hide/show revision 2
retagged

updated 2017-05-19 14:27:07 -0600

berak gravatar image

OpenCV - predict_label returns a huge value

I have trained faceRecognizer in Java. But when i predict a label it returns a huge value which is not the actual label which i stored during training. Please have a look at my training code and tell me how this error can be resolved.

String trainingDir = "res/";
        File root = new File(trainingDir);
        FilenameFilter imgFilter = new FilenameFilter() {
            public boolean accept(File dir, String name) {
                name = name.toLowerCase();
                return name.endsWith(".jpg") || name.endsWith(".pgm") || name.endsWith(".png");
            }
        };
    File[] imageFiles = root.listFiles(imgFilter);
    ArrayList <mat> images = new ArrayList(imageFiles.length);
    Mat labels = new Mat(imageFiles.length,1,CvType.CV_32SC1);
    ArrayList <integer>labelsBuf = new ArrayList<>(imageFiles.length);

    int counter =0;
    for(File image: imageFiles){
        Mat img = Imgcodecs.imread(image.getAbsolutePath(),Imgcodecs.CV_LOAD_IMAGE_GRAYSCALE);
        int label = Integer.parseInt(image.getName().split("\\.")[2]);
        //images.add(label, img);
        images.add(img);
        labelsBuf.add(counter, label); 
        counter++;
    }
    FaceRecognizer faceRecognizer = Face.createFisherFaceRecognizer();

    faceRecognizer.train(images, labels);

Thanks in advance