我开始编写一个简单的脚本来从图像中读取数据。这是我使用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回来了(我可以解决)。但是,以下3
,0
,8
根本没有返回。现在我知道它已经知道如何读取3和0,因为它在第一个数字中完成了。我认为它有一些问题呈现以下数字,所以我把它变成黑白。
这是我试过的第二张图片:
然而,结果仍然显示为:132B 4
。
最后,我剪切了图像并尝试了最后的3个数字。
这是图片:
但是当我运行脚本时,它没有返回任何结果。关于为什么我无法阅读最终数字的任何想法?
我使用的是Ruby 2.2.2,rTesseract 2.1.0和MiniMagick 4.5.1。
我使用的是Tesseract 3.04.01
答案 0 :(得分:2)
我在我的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