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 为啥识别如此纯粹。发动机原理