Использование OpenCV FileStorage на iOS - PullRequest
7 голосов
/ 12 марта 2012

Я создаю классификатор объектов с использованием OpenCV, и чтобы избежать необходимости обучать классификаторы при каждом запуске приложения, я бы хотел как-то сохранить их в файле.Кажется, наиболее удобный доступный способ - использовать OpenCVs FileStorage class .

. Я попробовал, но это не сработало.Сохраненный файл нигде не показывался, хотя я не получил ошибку.Я полагаю, iOS не просто позволяет вам сохранять файлы.Альтернативным способом было бы получить YAML как строку, преобразовать ее в строку NSString и сохранить ее в списке свойств, но я не уверен, как это можно сделать или вообще возможно.

Любойпомощь будет принята с благодарностью.

1 Ответ

14 голосов
/ 14 марта 2012

Мне удалось заставить класс FileStorage работать с iOS.Проблема заключалась в том, что мне нужно было убедиться, что файл создается в iOS, обозначенном как Document Documents.Вот пример кода:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docs = [paths objectAtIndex:0];
NSString *vocabPath = [docs stringByAppendingPathComponent:@"vocabulary.xml"];
FileStorage fs([vocabPath UTF8String], FileStorage::WRITE);
// vocab is a CvMat object representing the vocabulary in my bag of features model
fs << "vocabulary" << vocab;
fs.release();

// READING

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docs = [paths objectAtIndex:0];
NSString *vocabPath = [docs stringByAppendingPathComponent:@"vocabulary.xml"];
FileStorage fs([vocabPath UTF8String], FileStorage::READ);
// vocab is a CvMat object representing the vocabulary in my bag of features model
fs["vocabulary"] >> vocab;
fs.release();
...