Tesseract 不读取某些数字

Cam*_*nes 5 ruby ocr tesseract minimagick

我开始编写一个简单的脚本来从图像中读取数据。这是我的 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
Run Code Online (Sandbox Code Playgroud)

我从这张图片开始:

在此输入图像描述

返回的结果是:132B 4

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

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

在此输入图像描述

然而结果仍然是:132B 4

最后我剪切了图像并尝试了最后 3 个数字。

这是图像:

在此输入图像描述

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

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

我正在使用 Tesseract 3.04.01

Eri*_*nil 3

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

它也返回132B 4

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

image = RTesseract.new("myImage.jpg", options: :digits)
Run Code Online (Sandbox Code Playgroud)

它返回13223 4

启动不带参数的 tesseract 会为您提供可能选项的列表。“pagesegmode 7”看起来很有趣:7 = Treat the image as a single text line.

所以 :

image = RTesseract.new("myImage.jpg", options: :digits, psm: 7)
Run Code Online (Sandbox Code Playgroud)

它返回13223 4 3 21 8

对于您的第二张图像,它会返回3 21 8.

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

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

在此输入图像描述

Rtesseract 返回:

1320 4 3 0 8
Run Code Online (Sandbox Code Playgroud)

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

convert myImage.jpg -geometry x200 -threshold 13% -negate myImage.png
Run Code Online (Sandbox Code Playgroud)

  • 通过将图像裁剪为数字并将阈值移至 20%,使其发挥作用。感谢您的帮助! (2认同)