2016-10-25 17 views
3

Я начал писать простой скрипт для чтения данных с изображения. Вот мой рубин код, который использует RTesseract прочитать его:Tesseract не читает определенные номера

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 (я могу это решить). Но следующие 3, 0, 8 не вернулся вообще. Теперь я знаю, что он уже знает, как читать 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

+0

Поверните изображение в черный текст на белом и удалите артефакты сжатия изображения, предложение la @ eric-duminil. Анекдотически, для последовательного и известного шрифта, у меня была лучшая точность, просто выполняющая наивные сопоставления пикселей и символов для каждого персонажа. – Kache

+0

@Kache: Звучит интересно. У вас есть связь? –

+0

@ EricDuminil ах, у меня нет ссылки. Это был очень наивный метод: 1. изменить и разрезать текст на нормализованные символы «черный на белом». 2. datamine все возможные изображения и вариации персонажей, которые могут отображаться для шрифта, 3. выберите символ с наименьшими пиксельно-пиксельными различиями , используя некоторые трюки, чтобы не требовать подсчета каждого пикселя каждого символа (например, высота/ширина пикселя персонажа, число черно-белых пикселей и т. д.) – Kache

ответ

2

Я тестировал скрипт на моем Linux Mint 17 машины, с тессеракта 3.03 , Ruby 2.1.5 и 4.5.1 MiniMagick

Она также возвращает 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, вероятно, даст лучшие результаты.

С канителью, я изменил размер изображения до 200px высоты, укороченное близко к цифрам, чтобы удалить некоторые артефакты, используемые цвета/Порог в 150, перевернул изображение и сохранить как PNG:

enter image description here

Rtesseract возвращает:

1320 4 3 0 8 

с Image Magick, эта команда достигла того же результата:

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

Я следил за вашими инструкциями, и это почти сработало. Я получаю 132. 4 3 8. Итак, у него все еще есть проблемы с нулями. Любые мысли о том, почему это может произойти? –

+0

(Примечание: обратите внимание, что он помещает «.» Для первого 0 и ничего для второго) –

+0

Не могли бы вы обновить Tesseract или сыграть с пороговым значением? –