Распознавание текста (OCR) в Linux

Вам приходилось распознавать отсканированные документы под linux? Мне нет, но вот пришлось, слышал есть свободные аналоги, и вроде все хорошо. Вроде…

Как оказалось, есть 2 основных свободных консольных движка, cuneiform и tesseract, с них я и начал.

Сперва поставил cuneiform, но как его не крутил, он мне выдавал buffer overflow, и сыпал дампами в консоль, в общем вел себя крайне не прилично. Снес его нафиг.  Ставил из репозитория, версия 1.1.0+dfsg-4.

Следующим на очереди был tesseract-ocr, версия в репе была 3.03.02-3, ее и поставил. В Debian\Ubuntu для этого нужно установить 2 пакета:

tesseract-ocr,
tesseract-ocr-rus

Остальные встанут автоматом. Документ распознался с первого раза без танцев с бубном. Опции подсмотрел тут: https://habrahabr.ru/post/153617/, в результате команды:

tesseract input.png output.txt -l rus -psm 6

получил нормальный текст, разбитый по блокам как и в оригинале, без единой ошибки (правда качество скана было хорошее). -psm 6 означает:

6 = Assume a single uniform block of text.

В общем задачу он свою выполнил, но мне интересно стало, неужели нет ни одного нормального gui приложения? Я конечно не надеялся на уровень abby finereader, но все же.

Оказалось – есть. Причем есть кроссплатформенные решения на java, а есть gui к вышеупомянутым движкам. По понытным причинам гуй для cuneiform  я искать не стал, потому поставил YAGF и OCRFeeder.

Первым испытывал YAGF.

Программа написана под qt, интерфейс очень простой, функционала минимум – открыть файл, распознать и по сути все, можно выбрать движек для распознавания.

Текст на скане был нумерованным списком, тот же самый, который распознавал в консоли. После YAGF распознанный текст получился в виде каши, все одной строкой. Кнопка  “разбить текст на блоки” в программе есть, но у меня не сработала.

Следующим в очереди был OCRFeeder.

Этот фронтэнд написан под gtk+, опций сильно больше, умеет выравнивать тест с помощью unpaper, по умолчанию у меня почему то распознал размер шрифта в тексте как 99, и при экспорте в LibreOffice Writer (есть такая кнопочка в программе), получилась ерунда. Но если перед импортом посмотреть, какой номер шрифта он показал, и исправить, то все ок.

На блоки тест был разбит как положено, движки тоже может использовать разные. Один раз прога у меня вылетела, т.е. тоже сыровата, но пользоваться можно.

Пока писал этот текст, решил заглянуть в “Центр приложений Ubuntu”, оказалось там есть еще один претендент: hocr-gtk, впрочем который не запустился после установки, в консоль выдал:

serp@serp-desktop:~/ocr$ hocr-gtk
Traceback (most recent call last):
File “/usr/bin/hocr-gtk”, line 34, in <module>
from hocr import *
File “/usr/lib/python2.7/dist-packages/hocr.py”, line 26, in <module>
_hocr = swig_import_helper()
File “/usr/lib/python2.7/dist-packages/hocr.py”, line 22, in swig_import_helper
_mod = imp.load_module(‘_hocr’, fp, pathname, description)
ImportError: /usr/lib/python2.7/dist-packages/_hocr.so: undefined symbol: ho_font_cross

что бы запустить это, сперва нужно поставить libhocr0, а затем запускать из консоли командой LD_PRELOAD="/usr/lib/libhocr.so.0.0.0" hocr-gtk, тогда приложение запускается.

Интерфейс не удобный, но функционала много. Сперва попробовал распознать используя движек hocr, получился правосторонний трактат на идише. Выбрал в настройках текст “с лева на право”, результат тот же.

Выбрал движек tesseract, текст получился левосторонним, но вместо русских букв, палочки и черточки из английского алфавита. Выбрать язык приложение не позволяет, просто нет такой настройки.

В общем все печально. Загуглил этот вопрос и накопал еще пяток гуевых приложений, но сейчас уже с ними разбираться нет желания. Может потом еще напишу.

Для себя взял на заметку консольный tesseract, ибо это единственное нормально решение, хотя если спешишь, можно и OCRFeeder использовать, т.к. в нем есть еще и функция сканирования.

Добавить комментарий

Войти с помощью: