【问题标题】:Tesseract not reading certain numbersTesseract 不读取某些数字
【发布时间】:2017-03-07 20:23:32
【问题描述】:

我开始编写一个简单的脚本来从图像中读取数据。这是我使用 RTesseract 读取它的 Ruby 代码:

require 'rtesseract'
require 'mini_magick'

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

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

我从这张图片开始:

返回的结果是:132B 4

我知道 0 以 B 的形式返回(我可以解决这个问题)。但是下面的308 根本没有返回。现在我知道它已经知道如何读取 3 和 0,因为它在第一个数字中做到了。我认为它在渲染以下数字时存在一些问题,所以我将其设为黑白。

这是我尝试的第二张图片:

但结果仍然返回为:132B 4

最后我剪掉了图片,只试了最后的 3 个数字。

图片如下:

但是当我运行脚本时,它没有返回任何结果。关于为什么我无法读取最终数字的任何想法?

我正在使用 Ruby 2.2.2、rTesseract 2.1.0 和 MiniMagick 4.5.1。

我正在使用 Tesseract 3.04.01

【问题讨论】:

  • 将图像转换为白底黑字并删除图像压缩伪影,这是 @eric-dumiil 的建议。有趣的是,对于一个一致且已知的字体,我自己对每个字符进行简单的像素差异匹配就有了更好的准确性。
  • @Kache:听起来很有趣。有链接吗?
  • @EricDuminil 啊,我没有链接。这是一种非常幼稚的方法: 1. 将文本修改并剪切成标准化的黑白字符 2. 数据挖掘所有可能的字符图像和字体可能出现的变化 3. 选择像素与像素差异最小的字符, 使用一些技巧不需要计算每个字符的每个像素(例如字符像素高度/宽度,黑色/白色像素数等)

标签: ruby ocr tesseract minimagick


【解决方案1】:

我在我的 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 = Treat the image as a single text line.

所以:

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

它返回13223 4 3 21 8

第二张图片返回3 21 8

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

使用 gimp,我将图像大小调整为 200px 高度,裁剪接近数字以去除一些伪影,使用 150 的颜色/阈值,反转图像并保存为 png:

Rtesseract 返回:

1320 4 3 0 8

使用 Image Magick,此命令达到了相同的结果:

convert myImage.jpg -geometry x200 -threshold 13% -negate myImage.png

【讨论】:

  • 我按照您的指示进行操作,几乎成功了。我得到 132. 4 3 8. 所以它似乎仍然有零的问题。关于为什么会发生这种情况的任何想法?
  • (注意:注意它为第一个 0 加上一个“.”,第二个没有)
  • 你能更新 Tesseract,或者玩弄阈值吗?
  • 我会尝试更新 tesseract。我弄乱了几何设置和阈值,但它似乎没有用。我也删除了 negate 但这似乎并没有改变任何方式。
  • 通过将图像切割成数字并将阈值移动到 20% 来使其工作。感谢您的帮助!
猜你喜欢
  • 2022-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多