2013-04-23 4 views
4

Мне нужна помощь в обучении SVM для Android-приложения. У меня есть набор изображений в разных классах (12 классов) и получил от них все дескрипторы. Мне удалось получить одинаковое количество дескрипторов для каждого изображения. Мне нужно подготовить SVM для моего приложения Android с этими дескрипторами. Я не уверен, что я должен обучить его в эмуляторе Android или написать программу на C++ для обучения SVM, а затем загрузить его в свое приложение (если я использую библиотеку OpenCV для Windows для обучения SVM, а затем сохраните ее, lib, который я использую для Android, распознает сохраненный SVM-файл?). Думаю, я не должен тренировать SVM с таким большим набором данных в эмуляторе. Я уже тестировал набор данных моего дескриптора на SMO Weka (http://www.cs.waikato.ac.nz/ml/weka/) и получил хорошие результаты, но мне нужно реализовать SVM или использовать OpenMV SVM и сохранить его для будущей классификации.OpenCV для Android - обучение SVM с дескрипторами SURF

+0

Я новичок в OpenCV, и я хотел бы задать вам вопрос. Что значит, что у вас 12 классов? – definera

ответ

6

Вот пример обучения вашего SVM в OpenCV4Android. 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 использует тот же формат для сохранения SVM как на интерфейсах Android, так и на C++. Конечно, вы всегда можете обучить SVM в Android и сохранить файл XML на SD-карте вашего эмулятора, используя что-то вроде

File datasetFile = new File(Environment.getExternalStorageDirectory(), "dataset.xml"); 
svm.save(datasetFile.getAbsolutePath()); 

затем вытащить его из SD-карты и сохранить его в папке /res/raw вашего приложения.

+0

Спасибо за ответ! У меня была небольшая проблема с настройкой trainData, но после прочтения [this] (http://stackoverflow.com/questions/14694810/using-opencv-and-svm-with-images) сообщения и [документации] (http: // docs.opencv.org/doc/tutorials/ml/introduction_to_svm/introduction_to_svm.html) Я понял это. –

+0

Рад помочь вам :) –

+0

@ 1 '': можете ли вы предложить некоторые предложения по [этому вопросу] (http://stackoverflow.com/questions/29072000/opencv4android-template-matching-using-camera)? –

 Смежные вопросы

  • Нет связанных вопросов^_^