Tesseract ios SDK错误打开数据文件/tessdata/eng.traineddata

时间:2015-04-04 11:38:14

标签: ios ocr tesseract scanning

我正在使用openCV和Tesseract框架开发应用程序。 它在“无64位支持”下运行良好,但苹果现在需要在每个版本中支持64位。 所以我已经将tesseract框架更新为

  

pod'TesseractOCRiOS','3.4.0'

在我的项目中。 现在项目运行良好的所有设备。 但是当我扫描任何图像时,我总是得到以下错误:

  

打开数据文件/tessdata/eng.traineddata时出错请确保   TESSDATA_PREFIX环境变量设置为父目录   你的“tessdata”目录。加载语言'eng'Tesseract失败   无法加载任何语言!

我在google上浏览了每个链接都没有成功。 我可以确保在项目中添加了“tessdata”文件夹作为文件夹引用。

1 个答案:

答案 0 :(得分:4)

无论如何,我得到了解决方案。 只需将pod更新为最新版本,以便您的pod文件看起来像

  

pod' 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;
}