Ошибка запуска Tesseract на Xcode

Я тестировал Тессеракт на Xcode.Я следовал инструкциям из визита http://lois.di-qual.net/blog/install-and-use-tesseract-on-ios-with-tesseract-ios/ .Но проблема в том, что при запуске программы я получаю следующие ошибки на консоли:

Error opening data file /Users/mdriduanulislam/Library/Application Support/iPhone 
Simulator/7.0/Applications/0ABCEAB3-3793-44C9-8914-
A99BB6B4EF9F/Documents/tessdata/eng.traineddata

Please make sure the TESSDATA_PREFIX environment variable is set to the parent directory
of your "tessdata" directory.

Failed loading language 'eng'
Tesseract couldn't load any languages!`

У меня есть 1 проблема, которая была задана на StackOveflow, но ответ не был удовлетворительным.Может кто-нибудь, пожалуйста, скажите мне, почему проблема происходит и возможное решение проблемы, пожалуйста.Я с нетерпением жду правильного ответа.

3 ответов


Это потому, что ваша папка документа не содержит языкового файла. Используйте код ниже, чтобы сохранить языковой файл, который добавлен в пакет в папку документа. вызовите этот метод, прежде чем инициировать tesseract Tesseract* tesseract = [[Tesseract alloc] initWithDataPath:@"tessdata" язык:@ "eng"];

- (void)storeLanguageFile {

        NSFileManager *fileManager = [NSFileManager defaultManager];
        NSString *docsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
        NSString *path = [docsDirectory stringByAppendingPathComponent:@"/tessdata/eng.traineddata"];
        if(![fileManager fileExistsAtPath:path])
        {
            NSData *data = [NSData dataWithContentsOfFile:[[[NSBundle mainBundle] resourcePath] stringByAppendingString:@"/tessdata/eng.traineddata"]];
            NSError *error;
            [[NSFileManager defaultManager] createDirectoryAtPath:[docsDirectory stringByAppendingPathComponent:@"/tessdata"] withIntermediateDirectories:YES attributes:nil error:&error];
            [data writeToFile:path atomically:YES];
        }
}

- (NSString *)scanImage:(UIImage *)image {

        Tesseract *tesseract = [[Tesseract alloc] initWithDataPath:@"/tessdata" language:@"eng"];

        [tesseract setVariableValue:@"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" forKey:@"tessedit_char_whitelist"];
        [tesseract setVariableValue:@".,:;'" forKey:@"tessedit_char_blacklist"];

        if (image) {
            [tesseract setImage:image];
            [tesseract setRect:CGRectMake(0, point.y- 25, image.size.width, 50)];
            [tesseract recognize];
            return [tesseract recognizedText];
        }
        return nil;
    }

после нескольких дней поиска решения ни одно из предложенных решений не сработало для меня, потому что я использую objective C++ в xcode. Но после тонны экспериментов, для тех, кто все еще нуждается в этом решении, решение является 1-лайнером (если используется tessbaseapi), перед api.инициализация.(..) добавлять G8Tesseract * tesseract = [[g8tesseract alloc] initWithLanguage:@ " eng"]; Это волшебным образом избавляется от ошибки TESSDATA_PREFIX


после добавления TESSDATA_PREFIX в системные переменные попробуйте перезагрузить компьютер. Я запускаю Windows 10, и именно это исправило эту ошибку для меня.