2015-06-17 2 views
0

Использование привязок Python 2.7 для OpenCV/SimpleCV Я написал код, который обучает классификатор SVM для трех классов.Как сохранить сохраненный вывод SVM в файл? (OpenCV/SimpleCV)

Я использую функции извлечения HueHistogramFeatureExtractor(), EdgeHistogramFeatureExtractor() и HaarLikeFeatureExtractor() для тренировки.

Я положил все эти экстракторов в мой SVM классификатор, как так:

hhfe = HueHistogramFeatureExtractor(10) 
ehfe = EdgeHistogramFeatureExtractor(10) 
haarfe = HaarLikeFeatureExtractor(fname="haar.txt") 
extractors = [hhfe,ehfe,haarfe] 
svm = SVMClassifier(extractors) 

Тогда я тренируюсь, используя свои наборы данных и классы.

trainPaths = ['./data/train/bike','./data/train/plane','../data/train/car'] 
classes = ['bike','plane','car'] 
print svm.train(trainPaths,classes,verbose=False) 

Все это работает и является достаточно точным. Но мне нужно повторно обучать мой классификатор каждый раз, когда я хочу повторно запустить код.

выхода я получаю, когда я запускаю этот код (помните: многословные выключен.) Заключается в следующем:

[100.0, 0.0, [[17.0, 0.0, 0.0], [0.0, 17.0, 0.0], [0.0, 0.0, 0.0]]] 

feature5x1_11 (<17.000, 17.000, 0.000>) 
: <=2194135.000 --> plane (<0.000, 15.000, 0.000>) 

: >2194135.000 
    Angle_feature5x3_8 (<17.000, 2.000, 0.000>) 
    : <=2937533.000 --> bike (<14.000, 0.000, 0.000>) 

    : >2937533.000 --> bike (<3.000, 2.000, 0.000>) 
[94.11764705882352, 5.88235294117647, [[17.0, 0.0, 0.0], [2.0, 15.0, 0.0], [0.0, 0.0, 0.0]]] 

Как сохранить классификатор я обученный, так что я могу использовать его позже?

ответ

1

Может быть, я неправильно здесь, как я знаю, C++, а не Python, но looking at this это должно быть просто вдоль линий:

Чтобы сохранить:

svm.train(trainPaths,classes,verbose=False) 
svm.save("your_svm.xml") 

Чтобы повторно использовать позже:

svm.load("your_svm.xml") 
svm.predict(...) 
+0

Я попробую это. Сохранение, похоже, работает, но как мне передать .predict() изображение? (Даже если вы можете дать мне пример на C++, я бы не смог его адаптировать.) –

+0

Вы не передаете svm.predict() _image_, вы извлекаете из изображения те же функции оттенка, края и харама N, сохраняете их в массиве и передать его для прогнозирования. –

+0

[C++ SVM Model Code] (https://github.com/bkornel/OpenCV_BOW_SVM/blob/master/main.cpp) – MLMLTL

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