我正在使用openCV和Tesseract框架开发应用程序。 它在“无64位支持”下运行良好,但苹果现在需要在每个版本中支持64位。 所以我已经将tesseract框架更新为
pod'TesseractOCRiOS','3.4.0'
在我的项目中。 现在项目运行良好的所有设备。 但是当我扫描任何图像时,我总是得到以下错误:
打开数据文件/tessdata/eng.traineddata时出错请确保 TESSDATA_PREFIX环境变量设置为父目录 你的“tessdata”目录。加载语言'eng'Tesseract失败 无法加载任何语言!
我在google上浏览了每个链接都没有成功。 我可以确保在项目中添加了“tessdata”文件夹作为文件夹引用。
答案 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;
}