Tesseract 无法读取这个极其简单的数字字符串

Posted

技术标签:

【中文标题】Tesseract 无法读取这个极其简单的数字字符串【英文标题】:Tesseract has trouble reading this extremely simple string of numbers 【发布时间】:2013-11-25 22:12:38 【问题描述】:

我目前正在用 python 编写一个脚本,它需要使用 tesseract 来读取这样的数字:

仅使用数字和 -psm 6(或 7)输出 5.551

我在其他数字上取得了一些成功(5.700 作品),但这个特定的数字给我带来了很多问题。不幸的是,我的程序需要高度的准确性,但我认为 tesseract 能够破译这样一个简单的字符串。

我也尝试使用 GOCR,它正确读取 6.881(耶!),但输出 5._00 为 5.700(嘘!)

知道为什么会这样做吗?

或者更重要的是,我可以做任何事情来解决这个问题(最好不用训练 tesseract)。

【问题讨论】:

【参考方案1】:

我使用 Imagemagick 将其大小加倍并删除了透明度(将其替换为白色)(如果需要,您可以使用其他东西),并且 Tesseract OCR 正确地对增强后的图像进行了处理:

$ convert I1Zau.png -background white -flatten -resize 200% I1Zau_2.png
$ tesseract I1Zau_2.png o.txt
$ cat o.txt.txt 
6.881

【讨论】:

太棒了,我会用更多的数字来测试它,看看会发生什么。 @Loocid:我想补充一点,我最近也在使用 Tesseract,我今天发现使用 Imagemagick 预处理文件(去除压缩伪影并将大小翻倍)大大增加了准确性。【参考方案2】:

欢迎来到 OCR 的世界!不幸的是,即使是那些简单的情况,对于基本的 OCR 应用程序也可能存在问题。我已经成功使用的一种解决方法是实际上使您的图像更大(使用 imagemagick),然后输入 Tesseract。这只能在一定程度上起作用。您还可以尝试对图像进行形态学操作的标准策略。

根据您的总体要求(数字是否始终采用此字体/大小,背景是否嘈杂等...)您可能需要手动将每个数字设为单独的图像,以确保 Tesseract 可以处理字体类型您正在使用。如果它不能在个位数上工作,那么它不太可能在你通过它的其他任何东西上工作。

【讨论】:

反过来对我有用:我需要顶部使图像更小 数字将始终采用与上述相同的格式,只是位数有所不同(最多 5 位)。我会玩一下 imagemagick,看看能不能找到 Tesseract 喜欢的设置。【参考方案3】:

图像分辨率太低。简单地重新缩放到 300 DPI 对我来说已经产生了正确的结果。

【讨论】:

以上是关于Tesseract 无法读取这个极其简单的数字字符串的主要内容,如果未能解决你的问题,请参考以下文章

Pytesseract (Tesseract OCR) 没有收到一些数字

仅在我的 iOS 应用程序中将 tesseract 字符限制为 a-z 和数字

Tesseract OCR:如何找到每个返回字符的读取错误大小?

OCR Tesseract 只设置数字

Tesseract OCR 不会忽略黑名单字符

如何训练 tesseract 识别低 DPI 下的小数字?