Android的OpenCV-使用SURF描述符训练SVM
我需要一些帮助来训练Android应用程序的SVM。 我有一组不同类别(12个类别)的图像,并从中获取所有描述符。我设法为每幅图像获得相同数量的描述符。我需要的是用这些描述符为我的android应用程序训练一个SVM。 我不确定我是否应该在Android仿真器中训练它或者写一个C++程序来训练SVM然后加载到我的应用程序中(如果我使用OpenCV的LIB for Windows来训练SVM然后保存它,我用Android的LIB会识别保存的SVM文件吗?)我想我不应该在模拟器中用这么大的数据集来训练SVM。Android的OpenCV-使用SURF描述符训练SVM,android,opencv,svm,surf,Android,Opencv,Svm,Surf,我需要一些帮助来训练Android应用程序的SVM。 我有一组不同类别(12个类别)的图像,并从中获取所有描述符。我设法为每幅图像获得相同数量的描述符。我需要的是用这些描述符为我的android应用程序训练一个SVM。 我不确定我是否应该在Android仿真器中训练它或者写一个C++程序来训练SVM然后加载到我的应用程序中(如果我使用OpenCV的LIB for Windows来训练SVM然后保存它,我用Android的LIB会识别保存的SVM文件吗?)我想我不应该在模拟器中用这么大的数据集来训
我已经在Weka()的SMO上测试了描述符的数据集,并获得了很好的结果,但我需要实现(或使用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++界面中保存SVMs。当然,您始终可以在Android中训练SVM,并使用类似的方法将XML文件保存到仿真程序的SD卡中
File datasetFile = new File(Environment.getExternalStorageDirectory(), "dataset.xml");
svm.save(datasetFile.getAbsolutePath());
然后将其从SD卡中取出并存储在应用程序的
/res/raw
文件夹中 非常感谢你的回答!我在设置火车数据时遇到了一些问题,但在阅读了这篇文章和之后,我找到了它。@1'':你能提供一些建议吗?我是OpenCV的新手,我想问你一个问题。你有12门不同的课是什么意思?