Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android的OpenCV-使用SURF描述符训练SVM_Android_Opencv_Svm_Surf - Fatal编程技术网

Android的OpenCV-使用SURF描述符训练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文件吗?)我想我不应该在模拟器中用这么大的数据集来训

我需要一些帮助来训练Android应用程序的SVM。 我有一组不同类别(12个类别)的图像,并从中获取所有描述符。我设法为每幅图像获得相同数量的描述符。我需要的是用这些描述符为我的android应用程序训练一个SVM。 我不确定我是否应该在Android仿真器中训练它或者写一个C++程序来训练SVM然后加载到我的应用程序中(如果我使用OpenCV的LIB for Windows来训练SVM然后保存它,我用Android的LIB会识别保存的SVM文件吗?)我想我不应该在模拟器中用这么大的数据集来训练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门不同的课是什么意思?