あらゆる角度からの車の画像のフォルダがあります。言葉の袋のアプローチを使用して、車を認識するシステムをトレーニングしたいと思います。トレーニングが終わったら、その車の画像が与えられれば、それを認識できるようにしたいと思います。
私はこれを機能させるためにopencvでBOW関数を学習しようとしてきましたが、今何をすべきかわからないレベルに達しました。いくつかのガイダンスをいただければ幸いです。
これが私が言葉の袋を作るために使用した私のコードです:
Ptr<FeatureDetector> features = FeatureDetector::create("SIFT");
Ptr<DescriptorExtractor> descriptors = DescriptorExtractor::create("SIFT");
Ptr<DescriptorMatcher> matcher = DescriptorMatcher::create("FlannBased");
//defining terms for bowkmeans trainer
TermCriteria tc(MAX_ITER + EPS, 10, 0.001);
int dictionarySize = 1000;
int retries = 1;
int flags = KMEANS_PP_CENTERS;
BOWKMeansTrainer bowTrainer(dictionarySize, tc, retries, flags);
BOWImgDescriptorExtractor bowDE(descriptors, matcher);
//training data now
Mat features;
Mat img = imread("c:\\1.jpg", 0);
Mat img2 = imread("c:\\2.jpg", 0);
vector<KeyPoint> keypoints, keypoints2;
features->detect(img, keypoints);
features->detect(img2,keypoints2);
descriptor->compute(img, keypoints, features);
Mat features2;
descripto->compute(img2, keypoints2, features2);
bowTrainer.add(features);
bowTrainer.add(features2);
Mat dictionary = bowTrainer.cluster();
bowDE.setVocabulary(dictionary);
これはすべてBOWのドキュメントに基づいています。
この段階で私のシステムは訓練されていると思います。次のステップは予測です。
これは私が何をすべきかわからないところです。私が使用する場合SVM
、またはNormalBayesClassifier
両方が「トレーニング」および「予測」という用語を使用する場合。
この後、どのように予測してトレーニングしますか?どんなガイダンスでも大歓迎です。分類器のトレーニングを`bowDE``関数に接続するにはどうすればよいですか?