У меня есть папка с изображениями автомобиля со всех сторон. Я хочу использовать подход «мешок слов», чтобы научить систему распознавать машину. После того, как обучение будет завершено, я хочу, чтобы, если дается изображение этой машины, он мог ее распознать.
Я пытался изучить функцию BOW в opencv, чтобы сделать эту работу, и пришел к уровню, когда я не знаю, что делать сейчас, и некоторые рекомендации будут оценены.
Вот мой код, который я использовал для создания мешка слов:
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``?