Tesseract OCR不会识别分区符号“÷”

时间:2014-11-16 12:29:57

标签: ios objective-c ocr tesseract

我在iOS 8中使用Tesseract作为基于OCR的应用,但它错误地将图像中的“÷”符号转换为加号“+”符号。

例如,此图片

Simple arithmetic expression

始终转换为文本字符串“8 + 4 + 4”。它应该是“8 + 4÷4”。

我尝试使用不同的训练数据语言文件“eng + equ”,“ita”,将“÷”添加到白名单,将ocr_engine变量设置为立方体,将图像转换为灰度或黑色&白色,将图像增大2倍和4倍。

我尝试过的所有内容总是返回加号“+”而不是分号“÷”符号。

我尝试仅使用“equ”训练的数据文件并且正确返回分割符号 - 但所有其他字符都是垃圾。

我一直在研究这个问题(谷歌,Stackoverflow)几天,但无法理解。

如何让Tesseract包含并识别除“÷”符号?

更新

我能做的最好的事情是将AVCaptureSession预设设置为高

AVCaptureSession *session = [[AVCaptureSession alloc] init];
session.sessionPreset = AVCaptureSessionPresetHigh;

尺寸以上的拍摄图像为676×405像素。使用Tesseract OCR UIImage类别(图像命名为“source”)来对图像进行二值化:

// Binarize the source image to improve contrast (using the UIImage category provided by TesseractOCR)
UIImage *blackAndWhiteImage = [source blackAndWhite];
[self.tesseract setImage:blackAndWhiteImage];

这通常会将分割符号转换为文本“-1-”,但我看到“ - : - ”以及减号之间的其他数字和大写字符。

我可以在返回的文本中检查它。但是,不可能知道是否将返回的文本“8-1-2”视为真正的减法或“可能​​”除法。

5 个答案:

答案 0 :(得分:4)

使用不同的字体训练或引擎。

Here是培训引擎的工具。 看看this

或者您可以使用JTessBoxEditor

答案 1 :(得分:2)

确保您的“白名单”包含“÷”符号。

在swift中,这样做:tesseract.setVariableValue("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ:;,.!-()#&÷", forKey: "tessedit_char_whitelist")

在objective-C中,这是代码:

[tesseract setVariableValue:@"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ:;,.!-()#&÷" forKey:@"tessedit_char_whitelist"];

您可以根据需要自定义字符集。

答案 2 :(得分:1)

似乎符号未包含在现有数据中。您需要train表示该符号,然后将结果训练数据与现有符号结合使用。

您可以使用jTessBoxEditor等工具来协助您完成培训。

答案 3 :(得分:0)

您还可以尝试通过unicharambigs文件捕获此歧义。阅读更多 https://github.com/tesseract-ocr/tesseract/blob/master/doc/unicharambigs.5.asc

1       +       1      ÷    0

Tesseract将其读作“可选(上述配置中的尾随0)将1字符序列'+'替换为1字符序列'÷'”。

答案 4 :(得分:0)

在Swift中,更改engineMode对我有用

let tesseract = G8Tesseract(language: "eng")!
tesseract.engineMode = .tesseractCubeCombined