Tesseract无法识别某些数字

5

我最开始写了一个简单的脚本来读取图片数据。这里是我的Ruby代码,它使用RTesseract来读取:

require 'rtesseract'
require 'mini_magick'

RTesseract.configure do |config|
    config.processor = "mini_magick"
end

image = RTesseract.new("myImage.jpg")
puts image.to_s

我使用了这张图片作为起点:
enter image description here 结果返回的是:132B 4
我知道0会返回成B(我可以解决)。但是接下来的308却没有返回。现在我知道它已经知道如何读取3和0了,因为它在第一个数字中已经读出来了。我想它可能在渲染后面的数字时遇到了一些问题,所以我将其变成了黑白色。
这是我尝试的第二张图片:
enter image description here 然而,结果仍然是132B 4
最后,我剪切了图片并只尝试了最后3个数字。
这是图片:
enter image description here 但是当我运行脚本时,它没有返回任何结果。有什么想法为什么我无法读取最后几个数字吗?
我正在使用Ruby 2.2.2、rTesseract 2.1.0和MiniMagick 4.5.1。
我正在使用Tesseract 3.04.01。

将图像转换为黑色文字在白色背景上,并消除图像压缩伪影,类似于@eric-duminil的建议。据传,对于一致且已知的字体,我个人更倾向于自己进行基于像素差异的字符匹配,以获得更好的准确性。 - Kache
@Kache:听起来很有趣。你有链接吗? - Eric Duminil
@EricDuminil 啊,我没有链接。这是一个非常天真的方法:1.修改并切割文本以获得标准化的黑白字符2.数据挖掘可能出现在字体中的所有可能字符图像和变体3.选择具有最少像素差异的字符,使用一些技巧来不需要计算每个字符的每个像素(例如字符像素高度/宽度,黑/白像素数等) - Kache
1个回答

3

我在我的Linux Mint 17机器上测试了您的脚本,使用的是tesseract 3.03、Ruby 2.1.5和MiniMagick 4.5.1。

它还返回132B 4

如果您确定数字已编码,可以尝试:

image = RTesseract.new("myImage.jpg", options: :digits)

它返回13223 4

启动tesseract而不带参数会给出可能选项的列表。"pagesegmode 7"看起来很有趣:7 = 将图像视为单个文本行。

所以:

image = RTesseract.new("myImage.jpg", options: :digits, psm: 7)

它返回13223 4 3 21 8

对于您的第二张图片,它返回3 21 8

我认为现在最大的问题是JPG伪像非常强烈,数字和背景之间的对比度相对较低。使用PNG图像可能会产生更好的结果。

使用gimp,我将图像调整为200px高度,紧贴数字进行裁剪以去除一些伪像,使用Colors / Threshold在150处,反转图像并保存为png:

enter image description here

Rtesseract返回:

1320 4 3 0 8

使用Image Magick,这个命令可以实现相同的结果:
convert myImage.jpg -geometry x200 -threshold 13% -negate myImage.png

我按照你的指示操作了一遍,差不多就成功了。我得到了132. 4 3 8这个结果。所以似乎还是有零的问题。你对此有何想法? - dev
(注意:它在第一个0后面放了一个“。”,而在第二个0后面没有放任何东西)请返回翻译后的文本。 - dev
你能否更新Tesseract,或者尝试调整阈值? - Eric Duminil
看起来我已经跟上了Tesseract的最新版本。我之前编写的是rTesseract版本。Tesseract目前的版本是3.04.01。 - dev
2
通过将图像裁剪到数字并将阈值提高到20%,使其正常工作。感谢您的帮助! - dev
显示剩余2条评论

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