4

Android アプリ用に SVM をトレーニングする際に助けが必要です。さまざまなクラス (12 クラス) の一連の画像があり、それらからすべての記述子を取得しました。各画像に対して同じ量の記述子を取得することができました。私が必要としているのは、これらの記述子を使用して Android アプリケーション用の SVM をトレーニングすることです。Androidエミュレーターでトレーニングする必要があるのか​​ 、SVMをトレーニングしてアプリにロードするC ++プログラムを作成する必要があるのか​​ わかりません(Windows用のOpenCVのライブラリを使用してSVMをトレーニングしてから保存すると、私が Android 用に使用している lib は、保存された SVM ファイルを認識しますか?)。エミュレーターでこのような大きなデータセットを使用して SVM をトレーニングするべきではないと思います。Weka の SMO で記述子のデータセットを既にテストしました ( http://www.cs.waikato.ac.nz/ml/weka/)そして良い結果が得られましたが、SVMを実装(またはopenCVの使用)し、将来の分類のためにトレーニングして保存する必要があります。

4

1 に答える 1

6

OpenCV4Android で SVM をトレーニングする例を次に示します。 trainDataの形式は、MatOfFloat特徴ベクトルを取得するために使用している方法によって異なります。を作成するためtrainDataCore.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);

Android と C++ の両方のインターフェイスで、OpenCV が同じ形式を使用して SVM を保存していることは確かです。もちろん、いつでも Android で SVM をトレーニングし、次のような方法で XML ファイルをエミュレーターの SD カードに保存できます。

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

次に、SD カードから取り出して、アプリの/res/rawフォルダーに保存します。

于 2013-04-25T04:34:19.977 に答える