2016-03-01 4 views
0

Я немного новичок в SVM и распознавании объектов, и в настоящее время я пытаюсь подготовить SVM с помощью Emgu CV 3.0, сохранить его в файл и загрузить его (для использования в HOGDescriptor.SetSVMDetector) ,Загрузить тренировку SVM - Emgu CV

Однако, среди других проблем, я не могу найти способ загрузить SVM после того, как сохранил его.

До сих пор, мой код в основном выполняет следующие действия:

SVM myFirstSVM = new SVM(); 

// do some stuff, set some parameters... 

myFirstSVM.Train(someParameters); 

myFirstSVM.Save("filePath"); 

Отсюда, проблема заключается в перегрузки SVM после сохранения. Я проверил несколько разделов справки и страниц, а только связанные вещи, которые я мог бы найти относились к OpenCV, который используется следующий метод:

SVM mySecondSVM; 

mySecondSVM.load("filePath"); 

Однако, я не мог найти метод «.load()» в Emgu 3.0 , хотя он, казалось, присутствовал в предыдущих версиях. Есть ли эквивалент этого метода OpenCV в Emgu 3.0? Я бы предположил, что есть, и я уверен, что это довольно просто, но я не могу, чтобы жизнь меня находила.

ответ

0

Для EmguCV 1.5.0:

Load Method (fileName):

унаследованные от StatModel

Загрузите статистические модели из файла

FileName (String)

Файл для загрузки модели из

Для EmguCV 3.0+:

Load() не доступен, так как вы можете увидеть в исходном коде: https://sourceforge.net/p/emgucv/code/ci/master/tree/Emgu.CV.ML/StatModel.cs

+0

я сделал. Нет метода расширения «.Load (« путь к файлу »)» в Emgu для объектов SVM. –

+0

@JohiasburgFrowell Вы уверены? Эта информация исходит из его документации: http://www.emgu.com/wiki/files/1.5.0.0/Help/html/5c8147fa-4959-df3f-4d73-f1c549c06738.htm – Berriel

+0

Я использую версию 3.0, документацию, которую вы ссылка сильно устарела. 3.0 можно найти по адресу http://www.emgu.com/wiki/files/3.0.0/document/html/5c8147fa-4959-df3f-4d73-f1c549c06738.htm –

1

I сохранили и прочитали модель SVM с использованием указанных функций. Но я работаю с 3.1.0 версии и надеюсь, что он работает для вас, а также:

Я сохранил модель в файле XML, так как функция чтения работает на XML-файл, насколько я знаю:

Emgu.CV.ML.SVM model = new Emgu.CV.ML.SVM(); 
model.SetKernel(Emgu.CV.ML.SVM.SvmKernelType.Linear); 
model.Type = Emgu.CV.ML.SVM.SvmType.CSvc; 
model.C = 1; 
model.TermCriteria = new MCvTermCriteria(100, 0.00001); 
bool trained = model.TrainAuto(my_trainData, 5); 
model.Save("SVM_Model.xml"); 

и я прочитал модель следующим образом:

Emgu.CV.ML.SVM model_loaded = new Emgu.CV.ML.SVM(); 
FileStorage fsr = new FileStorage("SVM_Model.xml", FileStorage.Mode.Read); 
model_loaded.Read(fsr.GetFirstTopLevelNode()); 

и он работает правильно. Надеюсь, это сработает для вас.

2

Для EmguCV 3.0.0 функциональность Save/Load, похоже, не поддерживается (Load не существует), вы можете использовать вместо этого Write/Read.

Функция, чтобы сохранить модель SVM:

public static void SaveSVMToFile(SVM model, String path) { 
    if (File.Exists(path)) File.Delete(path); 
    FileStorage fs = new FileStorage(path, FileStorage.Mode.Write); 
    model.Write(fs); 
    fs.ReleaseAndGetString(); 
} 

Функция для загрузки модели SVM при условии, что правильный путь:

public static SVM LoadSVMFromFile(String path) { 
    SVM svm = new SVM(); 
    FileStorage fs = new FileStorage(path, FileStorage.Mode.Read); 
    svm.Read(fs.GetRoot()); 
    fs.ReleaseAndGetString(); 
    return svm; 
} 
Смежные вопросы