Search code examples
rubyocrtesseractminimagick

Tesseract not reading certain numbers


I started off writing a simple script to read data from an image. Here is my Ruby code that uses RTesseract to read it:

require 'rtesseract'
require 'mini_magick'

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

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

I started off with this image:

enter image description here

The results that came back were: 132B 4.

I understand that the 0 came back as a B (I can solve that). But the following 3, 0, 8 did not return at all. Now I know it already knows how to read a 3 and 0, because it did it in the first number. I figure it had some issues rendering the following numbers, so I made it black and white.

This is the second image I tried:

enter image description here

However the results still came back as: 132B 4.

Finally I cut the image and just tried the final 3 numbers.

Here is the image:

enter image description here

But when I ran the script, it returned no result. Any thoughts on why I am not able to read the final numbers?

I'm using Ruby 2.2.2, rTesseract 2.1.0 and MiniMagick 4.5.1.

I am using Tesseract 3.04.01


Solution

  • I tested your script on my Linux Mint 17 machine, with tesseract 3.03 , Ruby 2.1.5 and MiniMagick 4.5.1

    It also returns 132B 4.

    If you're sure that digits are encoded, you could try :

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

    It returns 13223 4.

    Launching tesseract without parameter gives you a list of possible options. "pagesegmode 7" looks interesting : 7 = Treat the image as a single text line.

    So :

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

    It returns 13223 4 3 21 8.

    With your second image, it returns 3 21 8.

    I think the biggest problem now is that the JPG artifacts are pretty strong and the contrast is relatively low between digits and background. A PNG image would probably yield better results.

    With gimp, I resized the image to 200px height, cropped close to the digits to remove some artifacts, used Colors/Threshold at 150, inverted the image and saved as png :

    enter image description here

    Rtesseract returns :

    1320 4 3 0 8
    

    With Image Magick, this command achieved the same result :

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