这是一个有关在OpenCV4Android中训练SVM的例子。变量trainData
是一个MatOfFloat
,其形式取决于您用于获取特征向量的方法。我使用Core.hconcat()
将数据集中每个元素的特征向量连接成一个单独的Mat
,来创建trainData
。
Mat responses = new Mat(1, sizeOfDataset, CvType.CV_32F);
responses.put(0, 0, labelArray); // labelArray is a float[] of labels for the data
CvSVM svm = new CvSVM();
CvSVMParams params = new CvSVMParams();
params.set_svm_type(CvSVM.C_SVC);
params.set_kernel_type(CvSVM.LINEAR);
params.set_term_crit(new TermCriteria(TermCriteria.EPS, 100, 1e-6)); // use TermCriteria.COUNT for speed
svm.train_auto(trainData, responses, new Mat(), new Mat(), params);
我相信OpenCV在Android和C++接口中使用相同的格式保存SVM。当然,你可以在Android上训练SVM,并使用类似以下方式将XML文件保存到模拟器的SD卡中:
File datasetFile = new File(Environment.getExternalStorageDirectory(), "dataset.xml")
svm.save(datasetFile.getAbsolutePath())
然后从SD卡中取出它并将其存储在您的应用程序的
/res/raw
文件夹中。