12 октября 2009 г.

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

Cuneiform for Linux - Cистема оптического распознавания (OCR), портированная для использования в POSIX-совместимых операционных системах, с открытыми исходными текстами.

Возможно многие из вас сталкивались с необходимостью/желанием отсканировать текст и для этого необходимо было держать форточки с FineReader или же с ним но под wine'ом. В линуксе с OCR було просто ужасно! Проектов много, но понимающих кириллицу не встречал (gocr и т.д.). Давно читал ибо следил за этой темой об  Cuneiform (даже как-то видел под форточками)...

Из истории: Система оптического распознавания OCR CuneiForm создана российским разработчиком программного обеспечения Cognitive Technologies, что был организован в 1993 году на базе лаборатории искусственного интеллекта Института Системного Анализа РАН.

Первоначально система CuneiForm была разработана компанией Cognitive Technologies как коммерческий продукт. CuneiForm поставлялся с некоторыми моделями сканеров. Однако после нескольких лет перерыва разработки, 12 декабря 2007 года анонсировано открытие исходных текстов программы, которое состоялось 2 апреля 2008 года Для распространения программы выбрана лицензия BSD (Berkeley Software Distribution). Подробнее на WIKI

Версия для "Линукс" этой программы на текущий момент представляет собой исключительно движок распознавания без каких-либо дополнительных сервисов и функций. Работа осуществляется через командную строку. Это, в свою очередь, даёт возможность оценить уровень именно алгоритмов распознавания. В настоящее время идет активное портирование Cuneiform на Linux и другие Unix-платформы.

Released:  2009-09-02   cuneiform-linux-0.8.0.tar.bz2
Можно скачать *.deb на http://www.mediafire.com/alexp там же и  yagf (GUI - qt-морда).

Сначала скачал пакет для ubuntu_jaunty, но он на нарушение зависимости libMagick++1 так как он есть в репозитории 9.04, но нет в 9.10 (осмелюсь напомнить, что давно тестирую Ubuntu 9.10 Karmic, официальный релиз будет через дней 18).

sudo ln -s /usr/lib/libMagick++.so.2 /usr/lib/libMagick++.so.1

решает эту проблему и все работает до первого updete/upgrade/install пакет при котором автоматически удаляется cuneiform+yagf. Пришлось пойти на ленивые хитрости, что человек не сделает, чтобы только трафик сэкономить?! ;-) Возникло желание пересобрать, чем баловался впервые, пакет с изменением зависимости без исходных кодов или как-то так... ;-)

paulul@ubuntolog:~$ mkdir ~/temp/someprog
paul@ubuntolog:~$ dpkg -x /home/paul/temp/cuneiform_0.8.0~bzr412-1_jaunty_i386.deb ~/temp//someprog
paul@ubuntolog:~$ mkdir ~/temp/someprog/DEBIAN
paul@ubuntolog:~$ dpkg -e /home/paul/temp/cuneiform_0.8.0~bzr412-1_jaunty_i386.deb ~/temp/someprog/DEBIAN

vim ~/temp/DBIAN/control  --> libmagick++1 заменил на libmagick++2

paul@ubuntolog:~$ dpkg -b ~/temp/someprog ~/temp/cuneiform_0.8.0~bzr412-1karmic_i386.deb
dpkg-deb: сборка пакета cuneiform в файл /home/paul/temp/cuneiform_0.8.0~bzr412-1karmic_i386.deb.

После установки этого пакета таки ошибка о нарушении зависимости и последующем удалении файла таки пропала, но все таки приходилось делать симлинк:

sudo ln -s /usr/lib/libMagick++.so.2 /usr/lib/libMagick++.so.1

Конечно можно было поступить проще и доустановить на karmic три пакета c dvd_jaunty (libmagick++1, libmagickwand1, libmagickcore1), проверив что так таки тоже работает все режил еще пострадать, благо время и желание было. снес...

И любопытсво и желание не иметь, по возможности, таки лишних/дублирующих пакетов скачал таки сборку для debian_sid (cuneiform_0.8.0~bzr412-1_sid_i386.deb) - установка и использование под KARMIC не требует телодвижений, просто установите...

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

$ cuneiform[-l languagename -f format -o result_file imagefile

Список поддерживаемых языков можно вывести командой cuneiform -l
paul@ubuntolog:~$ cuneiform -l
Cuneiform for Linux 0.8.0
Supported languages: eng ger fra rus swe spa ita ruseng ukr srp hrv pol dan por dut cze rum hun bul slo lav lit est tur.

а список форматов вывода - командой cuneiform -f
paul@ubuntolog:~$ cuneiform -f
Cuneiform for Linux 0.8.0
Supported formats:
    html         HTML format
    hocr         hOCR HTML format
    native       Cuneiform 2000 format
    rtf          RTF format
    smarttext    plain text with TeX paragraphs
    text         plain text

Изображения документов перед распознаванием должны быть подготовлены по всем типовым правилам, этим у меня занят Gimp+Xsane: разрешение при сканировании должно быть 300 dpi, файлы по одной странице (иначе у меня не получалось). Хотя Yagf может обрабатывать и разворот книги, если выделять по одной странице (таже морока, но другим боком)

В итоге, можно сказать, что линуксоидов, понимающих язык Пушкина и Шевченко, вполне можно поздравить с появлением, отличного свободного инструмента для распознавания текста. Особенно если сравнить с gocr, hocr и т.д. Подождем пока они его доведут до уровня приложения существующего под виндовс, ну а потом и лучше! :-) Одним словом ждем ещё большего усовершенствования самого движка распознавания CuneiForm. С надеждой жду, когда он станет лучше wine FineReader 8.0. Но уже начал с ним работать, ибо что после FineReader'a, что после CuneiForm'a нужно править/форматировать текст руками о ОпенОфисе, но так как-то: Free software for free people!

Конечно рядовым пользователям и для десктопа важен графический интерфей GUI (хотелось бы gtk или уж qt, но без привязки с КДЕ!, что очень часто потом начинают делать) с автоматизацией подготовки изображений к распознаванию, хорошего встроенного редактора и поддерживающего все функции имеющиеся в самом движке (например форматы).

Оболочка YAGF (читайте больше по ссылке!) предоставляет графический интерфейс для консольной программы распознавания тектов cuneiform на платформе Linux. Кроме того, YAGF позволяет управлять сканированием изображений, их предварительной обработкой и собственно распознаванием из единого центра. Программа YAGF также упрощает последовательное распознавание большого числа отсканированных страниц.



Новейшая версия YAGF - 0.8.1, обновлена 14 августа 2009 года. Еще есть Cuneiform-Qt, но YAGF более продвинутый.

Распознавание простого текста (жирный, курсив) практически без ошибок, но таблицы и сложное оформление не понимает вообще (будем надеяться, пока...). Не пытайтесь подсовывать не подготовленные изображения cuneiform'y, а потом писать, на форумах и сайтах, что он вообще не работает. Я никуда не писал, но сначала тоже был озадачен когда пытался перевернутые страницы распознать... Не повторяйте чужих ошибок :-)

--
P.S. в процессе поисков и вопросов, pehser собрал и сделал нормальные пакеты (работает как 8.04 так и 9.04) и выложил в свой репозитарий, а так же для  любителей всего самого свежего, то в репе лежит пакет cuneiform-svn это cuneiform bzr420 собраный в debian sid
так что по зависимостям без проблем становится и должен работать в karmic (YAGF 0.8.1 и cuneiform 0.8.0)
deb http://debway.org.ua/repository/ unstable main

Спасибо alexp за его сборки, которые я использовал и pehser за сборки, которые буду использовать из репа, ведь так удобнее.

--
N.B. Всего этого можно было бы избежать (хотя бы лишних телодвижений), если сам бы учился собирать deb-пакеты (возможно, когда-нибудь...), но все же было интересно и познавательно... Вот за что и люблю линукс! :-)

--
P.P.S. пока мучался с это статейкой, alexp, собрал пакеты и для karmic :-) cuneiform_0.8.0+bzr420-1_karmic_i386.deb