Вернуться к разделу "Создание книг в электронном виде из бумажных книг".
Программа для создания DJVU-книг с вложенным текстовым слоем и поиском на основе извлечения информации из рабочих файлов FineReader 7.
Рабочее название программы: DjvuOCR.exe.
Версия: 2.0 final (предыдущая: 2.0 pre).
Подобная программа: FRFGrab 1.01, console application.
Автор: gencho.
Платформа: Windows 9x/ME/NT/2000/XP, Dialog-based API.
Примечание: работает также под Linux/Wine.
Обратная связь: gencho@yourwap.com
Версия FineReader для тестирования: FineReader 7.0 PE Build 7.0.0.543 part# 3648.
ВНИМАНИЕ: Продукт не содержит самого FineReader-a. Пользователь должен установить собственный FineReader, хотя бы версию try&buy.
См. в конце текста: Как работать с FineReader в пакетном режиме.
Основные режимы работы:
- "DjVu Decoder" - "Manual mode OCR manager" - "Batch mode OCR manager" - "Burn existing OCR file in DjVu book" |
Режим запускается после выбора радио-кнопки и нажатия кнопки "Next".
Все опции программы, выбранные пользователем во время работы, запоминаются автоматически в файл FRFGrab.ini. Я поставил их как мне удобно, для большинства случаев жизни.
==============
"DjVu Decoder"
==============
DjVu Decoder дает возможность декодирования DJVU-книги в стандартные графические форматы, такие, как как TIF, BMP и др.
DJVU-книги, которые надо декодировать, следует добавить в "DjVu File list" с помощью кнопки "Add". Книги должны быть все в одной директории (папке)! Потом задаются опции для конвертирования ("Options for each file").
Есть два способа задания опций:
1) для всех книг. Нужные опции выбираются, и потом нажимается "Apply to all files";
2) для конкретной книги. Обычно после 1), книга выбирается мышью, и тогда меняются ее опции. Все выбранные опции используются для новых добавляемых через "Add" файлов.
"Save as default" запоминает параметры как подразумевающиеся по умолчанию.
"Name output convention" задает метод наименования выходных файлов.
Например, тифы для книги #1 нумерируются как aa_0001.tif, aa_0002.tif..., для книги #2 как ab_0001.tif, ab_0002.tif и т.д.
"Output directory" указывает выходную папку, где будут создаваться файлы. Папка должна существовать до начала обработки!
Если все в порядке, можно нажимать "Process". Книги одна за другой начинают декодироваться, процесс не очень быстрый, так как для каждой страницы запускается Djvused.exe.
ВОЗМОЖНАЯ ПРОБЛЕМА при работе DjvuDecode:
Под WinXP наблюдается иногда (очень редко) прекращение работы, программа стоит и ничего не делает, количество обработанных страниц не меняется. Похоже, что это баг в DjvuDecode.exe. Опыт показывает, что DjvuDecode на самом деле создаёт соответствующую страницу (как файл TIF), но почему-то не заканчивает свою работу.
(примечание: есть очень похожая проблема с программой ddjvu под Linux! Причём эта проблема обостряется, если компьютер сильно загружен.)
С этим можно бороться так: запоминаем имя последнего графического файла, созданного в "Output directory". Потом запускаем Task Manager, и убиваем процесс DjvuDecoder (не DjvuOCR!!!). Программа тогда продолжает работать. Потом, в конце, надо подправить получающийся ПРОЕКТ-файл. Об этом ниже, в разделе "структура ПРОЕКТ-файла".
Если в книге есть пустые страницы, или повреждённые страницы, программа DjvuOCR их пропускает, но заносит в список, который можно посмотреть в конце процесса декодировки.
После завершения процесса появляется сообщение "Save project file?" и возможность записать всю информацию о декодированных книгах в файл. Этот файл и есть ПРОЕКТ-файл, который очень удобен для последующего внедрения ОCR-текста через меню "Batch mode OCR manager", потому что этот файл содержит всю необходимую информацию о нумерации страниц, пропущенных страницах, о TIF-файлах, соответствующих каждому DJVU-файлу, и т.д. ПРОЕКТ-файл можно сохранить и нажатием кнопки "Save as OCR project".
Этим декодировка завершена.
Если надо загрузить результат (тифы) в FineReader, я поступаю так:
СОВЕТ: один проект для FineReader не должен превышать 3800-4000 файлов, так как в противном случае распознавание замедляется.
Структура ПРОЕКТ-файла:
Это текстовый файл с расширением ".dprj". Он начинается с "DECODER_PROJECT".
Потом для каждого файла следует группа команд, например:
misspages=12,18,24,62,102,104,186,292,360,362,533,535,557 prefix=aa_ processed=550 |
- lastpage: номер последней страницы в djvu-файле.
- misspages: список пустых (или повреждённых) страниц. Соответствующих TIFF-файлов нет, но их надо учитывать для правильности нумерации страниц. Если нет таких страниц, то эта команда пропускается;
- prefix: префикс для именования файлов, например префикс aa_ соответствует файлам aa_0001.tif ...
- processed: сколько страниц будет обработано. Это число равно (lastpage - misspages).
Наконец, если надо исправить проблему, которая описана выше (под WinXP - незавершение выполнения DjvuDecoder), то надо сделать так:
СОВЕТ: Если декодирование проводится только с целью распознавания текста, то очень часто хорошие результаты получаются декодированием книги в режиме черно-белая графика (объём файлов намного меньше);
СОВЕТ: если книги сканированы в color или gray, их можно декодировать для OCR как чёрно-белые не только с помощью опции "To bitonal", но также и выбором "Layer"=mask одновременно с "To bitonal". Это помогает (иногда) уменьшить ненужный цветной фон.
=======================
"Batch mode OCR manager"
=======================
Здесь проводится обработка FR-проекта и внедрение OCR-текста в книги.
1) Книги можно указывать двумя способами:
- через загрузку ПРОЕКТ-файла, созданного в "DjVu Decoder";
- через добавление книг с "Add". Тогда надо вручную выбирать файлы мышью, и (возможно) заполнять поле "Missing page list" со списком страниц, для которых нет графического файла в проекте FineReader. Страницы в списке разделяются запятой ','.
"Original DPI": для каждой книги, это поле используется, только если тифы декодированны в другом разрешении, например из книги в 150dpi сделаны тифы в 600dpi. Последнее необходимо, когда книга сканирована в плохом качестве, и надо повысить качество распознавания. Тогда в поле "Original DPI" надо указать истинное разрешение книги (в нашем примере, 150).
Правда, не всегда очевидно, какое правильное разрешение, так что здесь работает метод проб и ошибок - после окончания работы книга просматривается, делается поиск на какое-нибудь слово, и сравнивается положение маркированного текста и сам текст, и процесс декодирования и распознавания повторяется до полной победы.
2) В графе "FineReader Project Directory" надо указать, где находится папка с проектом для FineReader. Эта папка должна содержать некоторое количество рабочих файлов FR (эти файлы имеют расширение FRF). Сразу надо проверить, распознает ли программа DjvuOCR формат Finereader-a, через кнопку "Test project". Если есть проблемы, вы получаете список проблематичных страниц, их надо редактировать в FineReader. См. ниже раздел "Работа с FR в пакетном режиме/Известные проблемы", там описаны некоторые часто встречающиеся проблемы и их решения.
3) Надо указать, где будут создаватся выходные файлы в "Output OCR text Directory";
4) Надо подобрать параметры ("Options"):
- "Normal hyphenation": включает "нормальный" перенос, например:
"эта функция интегри-"
"руема на отрезке..."
при этом в книге при поиске слово "интегрируема" не находится, но находится кусок "руема".
Если не включать эту опцию, то такой перенос обрабатывается так:
"эта функция интегри-"
"интегрируема на отрезке..."
То есть, в OCR-текст добавляется полное слово "интегрируема", а не кусок слова "руема".
- "Ignore error checking": используйте, если в страницах есть ошибки при выполнениии "Test project", но вы хотите их игнорировать, а не вернуться в FR и исправить эти страницы. Тогда из этих страниц будет взято все, что можно найти в этих страницах как текст.
- "Direct UTF8 translation": Включается прямая перекодировка из FineReader UNICODE в UTF8.
Эта опция позволяет обрабатывать языки распознавания, отличные от указанных в Regional Settings компьютера. Лучше всегда ставить галочку в эту опцию.
- "Create HTML file": если нам надо перекодировать распознанный текст в HTML (UTF8).
"Burn DJVU books": если это выбрано, то результат обработки (OCR-Layer) внедряется в соответствующую DJVU-книгу. А если не выбрано, то только создается OCR-файл с распознанным текстом, готовым к внедрению.
"Start page# in FineReader project": начальная страница FR-проекта, с которой надо начинать обработку.
Кнопка "Process": начинает обработку. Для каждой книги должно появится окно, которое показывает ход обработки.
СОВЕТ: После обработки надо каждую книгу загрузить и посмотреть, все ли в начале и в конце правильно, т.е. соответствует ли маркирование текста положению самого текста. То есть, надо сделать поиск на какое-нибудь слово и убедиться, что это слово действительно можно найти на правильном месте. Загрузка большого числа файлов в FR чревата сбоем, и может происходит ошибка, которая рассинхронизирует FR проект и последовательность страниц в книге.
========================
"Manual mode OCR manager"
========================
Этот режим создавался для более гибкой обработки. Здесь можно обработать часть FineReader-проекта. Правда, этот режим мало использовался, слабо тестирован, и здесь могут быть серьезные баги. Рекомендую пользоваться только "Batch mode OCR manager".
"FineReaded Project directory": папка, где находится FR-проект.
"Output OCR text file": папка, где создается OCR-layer файл.
"Page interval in FR project": здесь можно указать, какая часть FR-проекта будет обработана.
"Start page# in DJVU book": указывает начальную страницу в DJVU-файл, где OCR должен размещатся.
"Burn DJVU book": если выбрать, то OCR-текст внедряется прямо в DJVU-файл.
"Djvu File": DJVU-файл, в которой надо внедрить OCR, если указано "Burn..."
Все опции те же, как и у "Batch mode OCR Manager".
Исключение: опция "Direct UTF8 translation" всегда выбрана.
==============================
"Burn existing OCR file in DjVu book"
==============================
Здесь всё просто. Надо указать путь к DJVU книге, путь к существующему OCR-текст файлу, и нажать на "Process".
ЗАМЕЧАНИЕ: если OCR файл получен прямо из Djvused.exe, а не из DjvuOCR, то возможно получится ошибка, так как Djvused именует страницы, и потом не находит страниц с таким же именем в другом файле.
(В пакете all2djvu имеется python-script под названием djvuOCR-extract.py, который решает эту проблему.)
Работа с FineReader в пакетном режиме:
1) Запускаем FineReader;
2) В меню "File/New batch" делаем новый проект. Задаем языки распознавания;
3) В меню "File/Open" добавляем страницы к проекту. Можно добавить за один раз несколько страниц или же все страницы (не более 1167 за один раз!). Нужно следить, чтобы изображения следовали в порядке возрастания номеров страниц;
4) В меню "File/Save batch" (FineReader 7.0) задаём имя проекта (name of the batch). После распознавания, в соответствующей директории появятся все рабочие файлы FineReader'a (*.FRF);
5) Отмечаем все страницы и нажимаем "Read", начинается распознавание;
6) Ждём :)). Для Pentum IV/1600, 250 страниц обрабатываются за ~20-40 min., на Athlon/1000 - ~35-50 min. Математические страницы распознаются примерно в два раза медленнее, чем чисто текстовые. Встречаются, однако, сканы, в которых 200 стр. разпознаются за 10 мин.
7) Обязательно нажимаем пункт меню "File/Close batch", иначе не все файлы правильно записываются на диск. А именно, если некоторая страница помечена в окне thumbnails, то она не будет записана на диск. Тогда можно пометить другую страницу и тогда первая будет записана.
8) Запускаем FRFgrab.
ВНИМАНИЕ! | Вполне достаточно использовать try&buy или demo версию FineReadera, даже если у неё прошел срок бесплатной работы. Ведь нам не нужно сохранять распознанный текст в каких-либо форматах. А для распознавания try&buy и demo всегда работают и создают нормальные FRF-файлы. |
Известные проблемы:
Так как формат FRF недокументирован (нужно иметь FineReader SDK, который мне не по карману), формат был угадан.
1) Вроде бы внутри FRF файлов есть информация об их версии. Программа работает с версией формата 2.10 (FineReader 7.x). Остальные версии не поддерживаются. Версия DjvuOCR.exe, поддерживающая FineReader 8.x, ещё не готова.
2) Если после автоматического распознавания FineReader-ом вы что-то редактируете в тексте вручную, то для отредактированного текста теряется информация о координатах на странице (x coordinate = 0). Это, конечно, приводит к неправильным прямоугольникам на экране при поиске в DJVU файле. Не рекомендую что-либо исправлять после распознавания! Проблема не решена.
3) Не обрабатываются (и не будут!) страницы, содержащие таблицы, клетки которых содержат рисунки (pictures). Их надо удалить вручную (изменить параметры соответствующего фрейма, чтобы таких таблиц не было, а чтоб был один текст) и распознать снова данную страницу.
4) если страница отсканирована под углом, FineReader пытается ее немного повернуть, и потом на экране координаты маркированного текста не совпадают с изображением. Это не лечится. Надо страницы выпрямлять до распознавания.
5) FineReader иногда не распознает страницу совсем, а маркирует ее как "ошибку" (с красной иконкой). Для таких страниц, надо делать так: мышью маркируем часть текста (исключаем формулы и графики), и нажимаем Read (распознавание только на этой странице). Если все ОК, маркируем следующий блок, и повторяем. Если нет, то смотрим строку, где FR остановился, и либо исключаем её из маркированного блока, либо исключаем какие-либо особые символы, которые там есть.
6) FineReader не распознает страницы, на которых есть изображение в виде сетки, или большая графика в логарифмическом масштабе. Он воспринимает её как таблицу с многими клетками, и часто вылетает с General Protection Failure. Такие страницы надо распознавать, предварительно мышью выделив только текст.
7) Если встречаются страницы, которые нормально распознаны, но не проходят тест (-t), это обычно происходит из-за таких проблем:
- большое количество блоков на странице. Тогда надо мышью маркировать их с "Text Frame" все как один большой блок, и распознавать снова;
- или встретился очень длинный абзац. Например, список на всю страницу. Тогда надо вручную сделать два блока, порезав страницу посередине.
История проекта:
07.04.2006 | - версия 2.0 final Добавлена UNICODE-поддержка языков FineReader-a. Следующая версия будет поддерживать FineReader 8.x. |
28.06.2004 | - версия 2.0 pre Окончено оформление диалогов, автоматизация запуска процессов. Есть нереализованные идеи и отсутствует документация, поэтому - pre-версия. |
20.06.2004 | - версия 1 Практически полная функциональность, перенесена с FRFGrab 1.09. |
04.06.2004 | - версия 0: начало. |
22.02.2004 | - версия 1.09 на FRFGrab - консольная версия. |
07.03.2006, Bulgaria, Sofia.
<gencho>
<geri>
<gerisoft>