OpenCV for Android -用SURF描述符训练SVM



我需要一些帮助来训练一个Android应用程序的SVM。我有一组图像在不同的类(12类),并得到所有的描述符从他们。我设法为每个图像获得相同数量的描述符。我需要的是用这些描述符为我的android应用程序训练一个SVM。我不确定我是否应该在Android模拟器中训练它,或者编写一个c++程序来训练SVM,然后在我的应用程序中加载它(如果我使用OpenCV的lib for windows来训练SVM,然后保存它,我使用的lib for Android会识别保存的SVM文件吗?)。我想我不应该与这些大数据集训练支持向量机模拟器。我已经在Weka的SMO (http://www.cs.waikato.ac.nz/ml/weka/)上测试了我的描述符的数据集,并获得了很好的结果,但是我需要实现(或使用openCV的)SVM并将其保存为将来的分类。

下面是一个在OpenCV4Android中训练SVM的例子。trainData是一个MatOfFloat,它的形式取决于你用来获得特征向量的方法。为了制作trainData,我使用Core.hconcat()将数据集的每个元素的特征向量连接到单个Mat中。

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文件夹中。

最新更新