Tesseract OCR 无法识别除法符号“÷”

Posted

技术标签:

【中文标题】Tesseract OCR 无法识别除法符号“÷”【英文标题】:Tesseract OCR won't recognize division symbol "÷" 【发布时间】:2015-01-13 10:24:24 【问题描述】:

我在 ios 8 中将 Tesseract 用于基于 OCR 的应用程序,但它错误地将图像中的除法“÷”符号转换为加号“+”。

例如这张图片

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

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

我尝试过的所有方法总是返回一个加号“+”而不是除号“÷”。

我尝试只使用“equ”训练的数据文件,并且确实返回了除法符号 - 但所有其他字符都是垃圾。

我已经研究这个(谷歌,***)好几天了,但无法弄清楚。

如何让 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”视为真正的减法还是“可能”的除法。

【问题讨论】:

为什么这个问题被否决了? 不幸的是,OCR 并不完美,Tesseract 专门将它认为可能是单个字符的像素“聚集”在一起,以牺牲精度为代价来补偿较差的图像质量。本质上,Tesseract 无法分辨除法符号是印刷不良的“+”还是实际的除法符号。 Here's more reading on how Tesseract reads text. 谢谢摩根。我对此感到疑惑,但它在检测和正确转换诸如“i j : ;”之类的字符时没有问题。 您可以尝试在此处打开问题:github.com/gali8/Tesseract-OCR-iOS/issues 可能在这里您会得到答案。 【参考方案1】:

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

Here 是训练引擎的工具。 也可以看看this

或者你可以使用JTessBoxEditor

【讨论】:

【参考方案2】:

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

很快,这会做到:tesseract.setVariableValue("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ:;,.!-()#&÷", forKey: "tessedit_char_whitelist")

在 Objective-C 中,代码如下:

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

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

【讨论】:

我已经试过了,结果和完全不使用白名单一样。【参考方案3】:

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

您可以使用jTessBoxEditor 等工具在培训过程中为您提供帮助。

【讨论】:

【参考方案4】:

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

1       +       1      ÷    0

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

【讨论】:

您提供的链接无效。你能提供任何其他链接吗? @Ramakrishna github.com/tesseract-ocr/tesseract/blob/master/doc/…【参考方案5】:

在 Swift 中,更改 engineMode 对我有用

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

【讨论】:

以上是关于Tesseract OCR 无法识别除法符号“÷”的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Tesseract OCR 库(iOS)根本无法识别文本?

带有 Tesseract OCR 的 EmguCV 甚至无法识别二进制黑白单字符图像

iOS .Tesseract OCR 为啥识别如此纯粹。发动机原理

ffmpeg Tesseract-OCR 识别文字滤镜 中文识别输出文本

Tesseract-OCR-03-图片文字识别

Python调用Tesseract-OCR完成图片OCR识别