Вернуться к разделу "Материалы по сканированию и оцифровке бумажных книг".


Использование CuneiDjVu


1. Введение

Программа 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. Значок программы.

Рис. 1. Значок программы.


2. Использование

CuneiDjVu довольно проста в использовании:

Рис. 2. Главное окно программы.

Рис. 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. (Необязательно). Можно дополнительно установить параметры распознавания:

Детализация текста:

Детализация текста - это уровень детальности геометрических координат распознанной информации (координат на плоскости скана).

Возможные значения:

Режим распознавания

Возможные значения:

Одна колонка - Отключает режим анализа структуры страницы и предполагает, что Ваша страница состоит только из одной колонки текста. Это значение по умолчанию.

Матричный принтер - Использует режим распознавания, оптимизированный для текста, напечатанного на матричном принтере.

Факс - Использует режим распознавания, оптимизированный для текста, присланного по факсу.

Можно установить сразу несколько значений.

5. Жмём кнопку Пуск и ждём, пока задание не выполнится. По умолчанию результат помещается на Рабочий Стол с именем CuneiDjVu Result. При этом исходный DjVu-файл остаётся неизменным, результатом работы программы является распознанная копия исходного DjVu-файла.


3. Общие опции

Окно опций программы можно вызвать путём нажатия кнопки Опции в главном окне программы (см. рис. 3).

Однако, при обычном повседневном использовании программы ни одну из этих опций менять не потребуется.

Рис. 3. Окно общих опций.

Рис. 3. Вкладка общих опций.

На рисунке 3 показано окно общих опций программы. Рассмотрим эти опции подробнее:

Имя готового OCR-DjVu файла - здесь можно задать имя DjVu-файла, который создаётся при распознавании исходного DjVu. Кнопка С справа - для очистки этого поля.

Выводить на Рабочий Стол - эта опция устанавливает в качестве папки вывода Рабочий Стол (в поле ввода Папка вывода:). Это удобно для малоквалифицированных пльзователей. По умолчанию включено.

Открыть DjVu-файл после обработки - эта опция открывает на просмотр созданный в результате распознавания DjVu-файл - в DjVu-просмотрщике, ассоцированном с файлами формата *.djvu (если такой есть). Это удобно для того, чтобы сразу же после распознавания визуально оценить его результат.

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


4. Технические подробности

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".


5. История создания

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 существует и реально работоспособен.


6. Заключение

Программа CuneiDjVu - это во многом экспериментальный продукт. Качество распознавания CuneiDjVu - увы, достаточно посредственное. Возможно, в будущем качество распознавания CuneiForm будет прогрессировать - что сможет быть отражено в CuneiDjVu.

Основным достоинством CuneiDjVu является полная лицензионная чистота программы - во всех смыслах. Лицензионный статус программы - "свободно-бесплатная программа с открытыми исходными кодами".

Одна из задач создания CuneiDjVu - поддержать известность и развитие отечественной свободно-бесплатной OCR-программы CuneiForm.

Обсуждение программы CuneiDjVu ведётся в соответствующей ветке формума DjVu-Scan (для участия в обсуждении требуется регистрация).


Автор: monday2000.

10 мая 2011 г.

E-Mail  (monday2000 [at] yandex.ru)

Hosted by uCoz