Вам приходилось распознавать отсканированные документы под 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 использовать, т.к. в нем есть еще и функция сканирования.