Вернуться к разделу "Материалы по сканированию и оцифровке бумажных книг".
Программа CuneiDjVu v1.4 (24,1 МБ) предназначена для создания распознанного текстового слоя (OCR) в DjVu-файлах - в операционных системах Windows 98 / NT / XP. Программа имеет cвободно-бесплатную лицензию "GPL 2 и выше" и полностью открытые исходные коды (24 КБ).
CuneiDjVu - это визуальная оболочка (GUI), управляющая консольными утилитами (которые непосредственно выполняют работу программы).
CuneiDjVu использует для распознавания DjVu консольную версию российской OCR программы CuneiForm. См. также CuneiForm в Википедии http://ru.wikipedia.org/wiki/CuneiForm.
Программа имеет русский (по желанию - английский) интерфейс. Все изменённые пользователем настройки автоматически запоминаются.
CuneiDjVu не нуждается в инсталляции и не хранит никакие свои данные в реестре Windows. Программа может работать напрямую с флешки.
ВАЖНО: К сожалению, качество распознавания CuneiForm (OCR-движок CuneiDjVu) оставляет желать лучшего - поэтому CuneiDjVu не рекомендуется использовать всерьёз для распознавания DjVu. Взамен используйте коммерческие OCR-продукты.
Иконка программы символизирует глиняную табличку с клинописью (CuneiForm - англ. "Клинопись") и символом DjVu на ней:
Рис. 1. Значок программы.
CuneiDjVu довольно проста в использовании:
Рис. 2. Главное окно CuneiDjVu.
На рисунке 2 изображено главное окно программы. Последовательность действий по распознаванию DjVu проста:
1. Выбираем DjVu-файл, который мы хотим распознать - в поле ввода Укажите DjVu-файл:.
2. Указываем папку вывода - в поле ввода Папка вывода: - в которую будет помещён результат (распознанная копия исходного DjVu-файла - т.е. уже с внедрённым текстовым слоем).
3. Выбираем язык распознавания - в выпадающем списке Язык распознавания:. Язык распознавания - этот тот язык, на котором написан текст внутри DjVu-файла.
ВАЖНО: Правильный выбор языка распознавания - залог корректного распознавания DjVu-файла.
1 2 3 4 5 6 7 8 |
Русско-английский Русский Английский Украинский Немецкий Французский Испанский Итальянский |
9 10 11 12 13 14 15 16 |
Шведский Сербский Хорватский Польский Датский Португальский Голландский Чешский |
17 18 19 20 21 22 23 24 |
Румынский Венгерский Болгарский Словакский Латвийский Литовский Эстонский Турецкий |
4. (Необязательно). Можно дополнительно установить параметры распознавания:
Детализация текста:
Детализация текста - это уровень детальности геометрических координат распознанной информации (координат на плоскости скана).
Слово - Каждое распознанное слово имеет свои 4 координаты. Это значение по умолчанию.
Символ - Более детальный режим, при нём каждая буква имеет свои 4 координаты.
Одна колонка - Отключает режим анализа структуры страницы и предполагает, что Ваша страница состоит только из одной колонки текста. Это значение по умолчанию.
Матричный принтер - Использует режим распознавания, оптимизированный для текста, напечатанного на матричном принтере.
Факс - Использует режим распознавания, оптимизированный для текста, присланного по факсу.
Можно установить сразу несколько значений.
5. Жмём кнопку Пуск и ждём, пока задание не выполнится. По умолчанию результат помещается на Рабочий Стол с именем CuneiDjVu Result. При этом исходный DjVu-файл остаётся неизменным, результатом работы программы является распознанная копия исходного DjVu-файла.
Окно опций программы можно вызвать путём нажатия кнопки Опции в главном окне программы (см. рис. 3).
Однако, при обычном повседневном использовании программы ни одну из этих опций менять не потребуется.
Рис. 3. Вкладка общих опций.
На рисунке 3 показано окно общих опций программы. Рассмотрим эти опции подробнее:
Имя готового OCR-DjVu файла - здесь можно задать имя DjVu-файла, который создаётся при распознавании исходного DjVu. Кнопка С справа - для очистки этого поля.
Выводить на Рабочий Стол - эта опция устанавливает в качестве папки вывода Рабочий Стол (в поле ввода Папка вывода:). Это удобно для малоквалифицированных пльзователей. По умолчанию включено.
Открыть DjVu-файл после обработки - эта опция открывает на просмотр созданный в результате распознавания DjVu-файл - в DjVu-просмотрщике, ассоцированном с файлами формата *.djvu (если такой есть). Это удобно для того, чтобы сразу же после распознавания визуально оценить его результат.
Language - здесь можно выбрать язык интерфейса программы. По умолчанию при первом запуске на русскоязычных Windows авто-устанавливается русский язык интерфейса, а на не-русскоязычных - английский.
1. Файл CuneiDjVu.exe - это просто GUI (визуальная оболочка), управляющий соответствующими консольными утилитами.
Пакет содержит следующие рабочие утилиты:
- djvudumpm.exe - консольная утилита для получения информации о внутренней структуре DjVu-файла. Версия: 1.2. Представляет из себя утилиту djvudump.exe http://djvu.sourceforge.net/ с добавленной возможностью выгрузки информации в текстовый файл.
- fi_ddjvu.exe - консольная утилита для декодирования любых DjVu-файлов: одно- и многостраничных; содержащих чёрно-белые, серые и цветные изображения (при декодировании автоматически создаются файлы соответствующей битовой разрядности). Версия: 1.4. Представляет из себя утилиту ddjvu http://djvu.sourceforge.net/ с добавленной поддержкой FreeImage.
- cuneiform.exe - консольная программа СuneiForm-Linux v1.1 (скомпилированная под Windows в MS VC++ 6.0).
- hocr2djvuxml.exe - консольная утилита для преобразования файлов в формате CuneiForm-hOCR в файлы в формате DjVu XML.
- djvuxmlparser.exe - стандартная консольная DjVuLibre-утилита для внедрения OCR-слоя (в виде DjVu XML-файла) в DjVu.
В папке cuneiform находится консольная программа СuneiForm-Linux v1.1 (скомпилированная под Windows в MS VC++ 6.0) со всеми необходимыми для её работы файлами. Содержимое папки cuneiform может использоваться полностью автономно от CuneiDjVu - для произвольных задач распознавания (в качестве входного формата поддерживается только BMP).
2. Схема работы программы выглядит так:
Сначала исходный DjVu-файл подаётся на вход djvudumpm.exe для оценки его внутренней структуры. Затем он декодируется в 1-битный BMP при помощи fi_ddjvu.exe (с опцией black, декодирующей только маску DjVu) - с использованием данных от djvudumpm.exe. Далее BMP-файлы распознаются консольным cuneiform.exe, в результате чего для каждого BMP генерируется один файл в формате hOCR. Потом hOCR-файлы преобразутся в файлы формата DjVu-XML (эту работу выполняет написанная мною на С++ STL консольная утилита hocr2djvuxml.exe, которая использует кодировку UTF-8), и, наконец, DjVu-XML-файлы внедряются в копию исходного DjVu в качестве распознанного текстового слоя (это делает djvuxmlparser.exe).
3. Все промежуточные файлы, создаваемые при работе программы (кроме BMP) сохраняются в папке tmp в папке программы (и стираются только при запуске нового распознавания). Это файлы форматов hOCR и DjVu-XML. Так сделано специально - чтобы все желающие могли рассмотреть, что из себя представляют в принципе эти файлы.
3. Полные исходные коды программы свободно доступны всем желающим для любых целей. Программа распространяется по лицензии GPL (все последующие модификации программы в случае публичного распространения обязаны распространяться с исходниками).
4. Программа имеет русскую локализацию - но можно сделать и какую-либо другую: создайте локализационный текстовый файл по образцу файла "russian.txt" и поместите его в папку "languages".
CuneiDjVu является уникальной программой (на момент написания статьи). Есть только её Linux-аналог - см. http://jwilk.net/software/ocrodjvu. Но то очень "навороченная" и неудобная программная конструкция - с использованием Python (хотя Python тут явно ни к чему).
CuneiDjVu рождалась длинным и многотрудным путём, и поэтому об истории её создания следует рассказать отдельно.
Всё началось с того, что российская компания Cognitive объявила об открытии исходных кодов своей коммерческой OCR-программы CuneiForm (и придании ей статуса "свободно-бесплатная программа").
Идея о применении CuneiForm для распознавания DjVu родилась сразу же после этого. Однако, после открытия исходных кодов CuneiForm стало очевидным, что сделать это не так то просто - у CuneiForm не было формата вывода OCR-слоя, аналогичного hOCR. hOCR - это описательный формат OCR-слоя, принятый в проекте OCRopus http://code.google.com/p/hocr-tools/.
Через некоторое время такой формат у CuneiForm появился. Назывался он "FED". Я даже оформил его спецификацию в HTML и сделал её перевод на английский:
Оригинальная документация к формату FED OpenOCR
Замысел был в том, чтобы найти добровольцев, кто сделал бы некий конвертер "FED -> DjVu" - для реализации возможности распознавания DjVu.
Однако эта идея провалилась. Никого формат FED не заинтересовал. К тому же на официальном форуме CuneiForm установилось длительное затишье...
К счастью, через некоторое время возникло и набрало силу неформальное движение по переносу CuneiForm на Linux https://launchpad.net/cuneiform-linux (изначально CuneiForm был чисто Windows-программой). Стало постепенно формироваться сообщество Linux-разработчиков CuneiForm. Под Linux CuneiForm приобрёл консольный вид (а под Windows это была программа только с визуальным интерфейсом).
Однажды я узнал, что к Linux-версии CuneiForm добавили вывод данных в формате hOCR.
Само по себе это мало что меняло - ведь Windows-версия CuneiForm не имела вывода hOCR, а Linux-версия CuneiForm была и нестабильной, и не собиралась под Windows.
Поворотной точкой стало появление CuneiForm-Linux версии 1.0. Это была первая стабильная версия CuneiForm-Linux. После некоторых усилий мне, наконец, ... удалось скомпилировать её под Windows! (компилятором MS VC++ 6.0). При этом было найдено и устранено 4 программные ошибки (последняя ошибка возникла уже при компиляции CuneiForm-Linux версии 1.1):
Bug #669844 in Cuneiform for Linux: “Start folder cuneiform.dll
not found - VC6 build” (https://bugs.launchpad.net/cuneiform-linux/+bug/669844) Bug #669908 in Cuneiform for Linux: “Bug found (Bool vs Bool 32)” (https://bugs.launchpad.net/cuneiform-linux/+bug/669908) Bug #669880 in Cuneiform for Linux: “_stdMallocCounter == _stdFreeCounter” (https://bugs.launchpad.net/cuneiform-linux/+bug/669880) Bug #781179 in Cuneiform for Linux “uintptr_t is not defined under MS VC++ 6” (https://bugs.launchpad.net/cuneiform-linux/+bug/781179) |
Дальнейшее было уже делом техники. Хотя, и тут было не всё просто и не всё гладко.
С самого начала я никак не мог определиться - как именно обрабатывать hOCR-файлы для вставки их в DjVu? Как оказалось, hOCR-файлы - это, в сущности, HTML-файлы. Конечно, HTML явно неудачен как средство хранения OCR-информации, и мне захотелось сначала сконвертировать hOCR в XML, а затем уже работать только с XML.
Этот замысел провалился. После длительных усилий и экспериментов я так и не смог подобрать готовый адекватный конвертер "HTML -> XML" (рассмотрев и испробовав несколько вариантов).
Поэтому я остановился в конечном итоге на простейшем варианте - я сделал простой и удобный конвертер hocr2djvuxml.exe, который преобразовывает hOCR сразу в DjVu-XML, напрямую понятный стандартному djvuxmlparser.exe.
С djvuxmlparser.exe тоже пришлось повозиться - пришлось отладить несколько глюков, и также внести туда поддержку побуквенной OCR-детализации (ранее была только пословная детализация). Все эти изменения были затем внесены в CVS DjVuLibre.
Работа по улучшению djvuxmlparser.exe осложнялась тем, что Леон Боту, главный разработчик DjVuLibre, принципиально не любит XML - предпочитая ему (эквивалентные по мощности) т.н. "s-выражения" - ЛИСП-подобный язык, на котором работает djvused.exe. Работой с XML в DjVuLibre заведует Билл Риемерз, а у него есть нехорошая привычка отвечать на электронные письма через раз и вообще делать хоть что-нибудь как можно меньше.
Можно было, конечно, сделать CuneiDjVu и на базе djvused.exe - а не на базе djvuxmlparser.exe. Однако, использовать djvuxmlparser.exe показалось мне более логичным, т.к. формат hOCR всё же ближе к XML, а не к s-выражениям. К тому же, мне захотелось заодно освоить использование XML-утилит DjVuLibre - которые ранее как-то почти никем и не использовались (а все и сейчас пользуются взамен исключительно djvused.exe).
Что бы там не говорил Леон Боту - а принижать значение XML, на мой взгляд, неправильно (пытаясь взамен протолкнуть экзотические и малоизвестные s-выражения - в лице djvused.exe).
Как бы там ни было, отныне (после долгих мытарств) программный продукт для распознавания DjVu средствами CuneiForm под Windows существует и реально работоспособен.
Программа CuneiDjVu - это во многом экспериментальный продукт. Качество распознавания CuneiDjVu - увы, достаточно посредственное. Возможно, в будущем качество распознавания CuneiForm будет прогрессировать - что сможет быть отражено в CuneiDjVu.
Основным достоинством CuneiDjVu является полная лицензионная чистота программы - во всех смыслах. Лицензионный статус программы - "свободно-бесплатная программа с открытыми исходными кодами".
Одна из задач создания CuneiDjVu - поддержать известность и развитие отечественной свободно-бесплатной OCR-программы CuneiForm.
Обсуждение программы CuneiDjVu ведётся в соответствующей ветке формума DjVu-Scan (для участия в обсуждении требуется регистрация).
Автор: monday2000.
10 мая 2011 г.
E-Mail (monday2000 [at] yandex.ru)