Java OpenCV SVM TrainAuto()方法崩溃程序没有任何错误

时间:2018-06-06 04:28:07

标签: java opencv svm

我正在使用SVM对OCR分类器进行培训。这是我的培训部分的Java代码

public static void train() {
    svm = SVM.create();

    svm.setType(SVM.C_SVC);
    svm.setKernel(SVM.RBF);

    Mat samples = new Mat();
    Mat labels = new Mat();

    File folder = new File("./demo/char");
    File[] listOfDir = folder.listFiles();

        for (int i = 0; i < listOfDir.length; i++) {
            if (listOfDir[i].isDirectory()) {
                String charCode =  listOfDir[i].getName();
                System.out.println("Directory " + charCode);
                File subFolder = new File("./demo/char/" + charCode);

                File[] listOfImages = subFolder.listFiles();

                for (int x = 0; x < listOfImages.length; x++) {
                    if (listOfImages[x].isFile()) {

                        //System.out.println(listOfImages[x].getPath()+"/" + list);
                        Mat m = Imgcodecs.imread(listOfImages[x].getPath(), 0);

                        Imgproc.resize(m, m, new Size(40,70));                  
                        m = m.reshape(1,1);
                        m.convertTo(m, CvType.CV_32FC1);

                        samples.push_back(m);
                        labels.push_back(new MatOfInt(charCode.charAt(0)));
                    }
                }   
          }
    }

    System.out.println(samples);
    System.out.println(labels);

    svm.trainAuto(samples, Ml.ROW_SAMPLE, labels);

    svm.save("./trainedData.txt");
}

一切似乎都没问题,直到程序在到达 svm.trainAuto()时明确崩溃。 当我手动选择参数并使用 train() 时,它很有效。

我尝试增加JVM堆大小但不是更好。

0 个答案:

没有答案