Xcode上Tesseract运行出错

7

我一直在Xcode上测试Tesseract。我按照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!`

我有一个问题,在StackOverflow上被问到,但答案并不令人满意。请问有人能告诉我为什么出现这个问题以及可能的解决方案吗?我非常渴望得到正确的答案。

3个回答

5

这是因为您的文档文件夹中没有语言文件。使用下面的代码将添加到捆绑包中的语言文件保存到文档文件夹中。在初始化Tesseract之前调用此方法:Tesseract *tesseract = [[Tesseract alloc] initWithDataPath:@"tessdata" language:@"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;
    }

1
感谢您的回答。我已经尝试了您提到的方法,但它在控制台上显示了不同类型的字符串(数字),而不是图像上的原始文本。例如:“1111111111115111111116 601515011111 151 11111 11 11111111 11010110911110 5018118 51181111310175 11110111113130 11 13151185151 511117111116 14112311511111011121121111111 50110 01141 1111121 111011275311 0111 011 011151”。现在我该怎么办? - AppleLover
Md.RiduanulIslam,所以错误已经被修复了,现在的问题是检测到文本是否正确。我说得对吗? - Vaisakh
是的,没错。请告诉我如何解决它。 - AppleLover
请点击这里查看:https://dev59.com/G3vaa4cB1Zd3GeqPIuHt#21575881 - Vaisakh
1
嗨,我尝试使用Tesseract来检测孟加拉字体。检测的准确率只有30-40%,非常低劣。我猜应该达到70-80%的准确率。我需要设置什么参数才能读取那种字体(比如孟加拉字体)?如果你有任何建议,请告诉我。@Vaisakh - AppleLover
显示剩余6条评论

0
经过数天的寻找解决方案,由于我在xcode中使用了objective C++,所提出的所有解决方案都没有起作用。但是经过大量实验,对于仍然需要解决此问题的任何人来说,解决方案只需添加一个1行代码(如果您正在使用TessBaseAPI),在api.init(...)之前添加 G8Tesseract *tesseract = [[G8Tesseract alloc] initWithLanguage:@"eng"]; 这个神奇地消除了TESSDATA_PREFIX错误。

0

在将TESSDATA_PREFIX添加到系统变量后,请尝试重新启动计算机。我正在运行Windows 10,这是解决此错误的方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接