2015-04-04 4 views
3

Я разрабатываю приложение с каркасом openCV и Tesaract. Он хорошо работал с поддержкой «NO 64 бит», но для каждой версии теперь требуется поддержка 64-бит. Так я обновил базу tessaract дляTesasract ios SDK Ошибка открытия файла данных /tessdata/eng.traineddata

стручка 'TesseractOCRiOS', '3.4.0'

в моем проекте. Теперь проект хорошо работает со всеми устройствами. Но когда я отсканировать изображение, я всегда получаю ниже ошибки:

Ошибка открытия файла данных /tessdata/eng.traineddata Пожалуйста, убедитесь, что переменная среды TESSDATA_PREFIX устанавливается в родительском каталоге вашей «tessdata» каталог. Не удалось загрузить язык 'eng' Tesseract не удалось загрузить языки!

Я прошел через каждую ссылку на Google без успеха. Я могу убедиться, что у меня есть папка «tessdata», добавленная в качестве ссылки на папку в моем проекте.

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

ответ

4

В любом случае, я получил решение. Просто обновите стручок до последней версии, так что ваш файл стручок должен выглядеть

стручка «TesseractOCRiOS», «4.0.0»

Он автоматически управляет «tessdata», если не найден в каталоге документов. Вам просто нужно убедиться, что он существует в вашем приложении.

Затем вы можете инициализировать его как

_tesseract = new tesseract::TessBaseAPI(); 
_tesseract->Init([[self pathToLangugeFIle] cStringUsingEncoding:NSUTF8StringEncoding], "eng"); 

Функция должна быть как

- (NSString*) pathToLangugeFIle{ 

    // Set up the tessdata path. This is included in the application bundle 
    // but is copied to the Documents directory on the first run. 
    NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentPath = ([documentPaths count] > 0) ? [documentPaths objectAtIndex:0] : nil; 

    NSString *dataPath = [documentPath stringByAppendingPathComponent:@"tessdata"]; 
    NSFileManager *fileManager = [NSFileManager defaultManager]; 
    // If the expected store doesn't exist, copy the default store. 
    if (![fileManager fileExistsAtPath:dataPath]) { 
     // get the path to the app bundle (with the tessdata dir) 
     NSString *bundlePath = [[NSBundle mainBundle] bundlePath]; 
     NSString *tessdataPath = [bundlePath stringByAppendingPathComponent:@"tessdata"]; 
     if (tessdataPath) { 
      [fileManager copyItemAtPath:tessdataPath toPath:dataPath error:NULL]; 
     } 
    } 

    setenv("TESSDATA_PREFIX", [[documentPath stringByAppendingString:@"/"] UTF8String], 1); 

    return dataPath; 
}