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

Posted

技术标签:

【中文标题】Tesseract ios SDK 打开数据文件 /tessdata/eng.traineddata 时出错【英文标题】:Tesseract ios SDK Error opening data file /tessdata/eng.traineddata 【发布时间】:2015-06-09 08:31:27 【问题描述】:

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

pod 'TesseractOCRios', '3.4.0'

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

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

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

【问题讨论】:

【参考方案1】:

无论如何,我得到了解决方案。 只需将 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;

【讨论】:

以上是关于Tesseract ios SDK 打开数据文件 /tessdata/eng.traineddata 时出错的主要内容,如果未能解决你的问题,请参考以下文章

Tesseract 找不到经过训练的数据文件

Android 中的 Tesseract 字符识别问题(但 iOS 上没有?)

OCR学习及tesseract的一些测试

Tesseract OCR win 32位编译

ios7中的Tesseract集成

iOS小技能:文件预览分享