我正在使用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堆大小但不是更好。