Оптическое распознавание символов в Linux
Эта статья была создана с целью разобраться, что и как реально может распознать русский и английский языки в Linux.
Это не просто обзор существующих OCR (мы будем говорить всего о трёх) и не руководство по установке (хотя установка будет описана). Эта статья была создана с целью разобраться, что и как реально может распознать русский и английский языки в Linux.
Распознавание документов и хранение в архиве Пару слов для того, чтобы вникнуть в суть описываемых процессов. OCR — оптическое распознавание символов. Технология необходима для оцифровки печатных документов; некоторые используют OCR в целях автоматизации (к примеру, для распознавания «капчи» или для защиты от спам-ботов).
OCR в Linux
Повторюсь еще раз: здесь будут рассмотрены программы, распознающие русский язык. Под Linux есть несколько OCR, предназначенных для работы с латиницей, есть специализированные комплексы, работающие только с ивритом, к примеру, — все это не относится к нашей теме.
По сути, речь будет идти только о трех продуктах: Cuneiform, Tesseract и Finereader Engine. Все они сами по себе предоставляют только консольный интерфейс, хотя для первых двух разработано достаточно GUI.
Я использую Debian Squeeze, но зачастую буду давать ссылки на исходники и пояснять сборку пакетов (можете воспользоваться репозиториями на notesalexp.org или репозиториями вашего дистрибутива — я просто даю пример сборки).
Тема будет раскрываться в следующем порядке:
1. Установка OCR для Linux (3 движка), их установка.
2. Сравнение CLI OCR на примерах [прим. ред. CLI — command line interface]
3. GUI для OCR, их сравнение.
4. Небольшой тест online-OCR.
5. Выводы и некоторые прогнозы и предложения.
Установка OCR для Linux
Cuneiform
Страница о проекте на Википедии.
Заявленные возможности: поддержка множества языков, сохранение форматирования исходного документа, вывод в txt, hocr, html, распознавание факсов и текстов, отпечатанных на матричном принтере.
Мы рассмотрим два реальных пути использования Cuneiform под Linux: нативный и с помощью Wine (в этом есть необходимость, ниже вы сможете убедиться сами).
1. Нативный Cuneiform
Приступим к установке.
Скачиваем исходники и распаковываем их.
Далее все стандартно (см. readme.txt в комплекте с исходниками). Переходим в директорию с исходниками и последовательно выполняем:
mkdir builddir sudo checkinstall sudo ldconfig |
Готово.
2. Установка под Wine.
Плюс этого способа в том, что мы сразу получаем оригинальный функциональный GUI. Версия Wine не важна (Cuneiform работал и под Wine 1.0). Единственная особенность: необходимо в настройках Wine указать новое замещение для библиотеки msvcrt.
Дистрибутив доступен по этой ссылке.
Tesseract.
Страница о проекте на Википедии.
Страница на Google Code.
Заявленные возможности: поддержка множества языков, вывод в txt и hocr, тренировка программы на своих примерах (я это рассматривать не буду, работаем as is), использование файла конфигурации для конкретного образца.
Я в кратком и вольном варианте описываю данный Readme.
Разрешение зависимостей перед установкой:
sudo apt-get install autoconf automake libtool libpng12-dev libjpeg62-dev libtiff4-dev zlib1g-dev |
Также Tesseract зависит от libleptonica-dev версии не ниже 1.67. В Squeeze этот пакет устарел, поэтому пришлось его собирать.
Получаем исходный код, распаковываем и выполняем сборку:
./autobuild |
Теперь получаем исходники Tesseract, распаковываем и переходим в директорию с ними.
Далее выполняем:
./autogen.sh |
Tesseract установлен. Получим пакеты для распознавания языков: русского и английского — и распакуем их в директорию tessdata (/usr/local/share/tessdata по умолчанию).
Можно работать.
FineReader Engine
Анонс можно просмотреть здесь.
Как получить? Идем сюда, внимательно читаем и запрашиваем триал (лимит в 100 распознаваний). Можно попросить и на русском.
Установка проста: скачать, запустить под рутом abbyyocr.run и выполнить текстовые указания.
Заявленные возможности: поддержка множества языков, различных кодировок, работа с паролями, нумерацией страниц, распознавание таблиц, штрихкодов, текстов, отпечатанных на матричном принтере, печатной машинке, готических шрифтов и т. д., вывод в txt, rtf, html, xml, xls.
Rubyquet+
Раз уж я заговорил о CLI OCR, упомяну CLI Rubyquet+ для Tesseract и Cuneiform.
Тестировать я его не стал (этим можете заняться вы) — тот же CLI для вышеупомянутых OCR доступен и сам по себе.
Сравнение CLI OCR
Читайте раздел в блоге автора.
Заключение
Мы рассмотрели три системы OCR, умеющие работать с русским и английским языками.
Без сомнения, лучший результат показал FineReader Engine v9.0. Он великолепно распознает как сканированные, так и сфотографированные изображения. Однако, минимальная стоимость его составляет 149€ за лицензию на 12000 распознаваний в год — надо ли вам это?
Свободные OCR: Cuneiform и Tesseract — сами по себе могут адекватно обрабатывать только отсканированные изображения с равномерно распределенной по полю яркостью и высоким контрастом.
С англоязычным образцом неплохо справились оба этих движка, тогда как с русским текстом возникали проблемы — вообще, по ходу теста выяснилось, что результаты работы свободных OCR «плавают» от образца к образцу.
При этом CuneiformV12, запущенный под Wine, с русскими текстами справился лучше, чем нативная версия под Linux.
Интересным оказался тот факт, что на рассмотренных образцах оптимальным качеством изображения было 200 dpi — при большем количестве точек на дюйм начиналось ухудшение качества распознавания.
GUI для Cuneiform и Tesseract создано много, но они не приносят реальной пользы.
На примере FineReader и онлайн-системы New OCR отлично видно, что нормальный функциональный OCR должен обязательно существовать в совокупности с системой предварительной обработки изображений и системой постобработки текста, основанной на словарном контроле результатов.
При этом данная технология для свободных движков уже фактически реализована (у New OCR распознавание происходит весьма качественно).
Достаточно поделиться такой технологией либо реализовать её самим — и свободные OCR будут стоять на одном уровне с продуктами ABBYY — после этого можно говорить о написании хорошего GUI.
Подытожу: свободные OCR не дают стабильного результата даже на отсканированных изображениях, Finereader стоит денег — простому пользователю проще пользоваться онлайн-сервисами.
Ну, а если вы собираетесь использовать OCR в других масштабах — тут другой разговор: придется платить или тратить время на корректировку результатов вручную.
P. S. Если у вас есть готовые наработки или скрипты по подготовке изображения к распознаванию — делитесь в комментариях. Всем будет интересно и полезно.
Источник: Блог автора kedobear
Комментарии 0