Создание электронной копии книги в формате DjVu в Linux

Материал из Викиучебника — открытых книг для открытого мира

Этот учебник посвящён описанию создания электронной копии книги в формате DjVu (дежавю) в операционной системе GNU/Linux.

Программное обеспечение[править]

  1. Linux Mint 17.1 Xfce — дистрибутив GNU/Linux.
  2. Драйвер вашего сканера.
  3. XSane — получение сканов, изображений страниц книги со сканера.
  4. Geeqie — просмотр сканов.
  5. Viewnior — просмотр и кадрирование изображений.
  6. Scan Tailor 0.9.11.1 — обработка сканов. Вариант Scantailor-Advanced (портативная версия, PPA-репозиторий для Ubuntu) обладает двумя важными особенностями: 1) возможностью полуавтоматической корректировки границ полезной области при помощи двойного клика рядом с полезным содержимым; 2) автоматическое прямоугольное выделение иллюстраций в режиме «смешанный».
  7. GIMP — редактирование скана обложки.
  8. DjVuLibre (пакет djvulibre-bin) — создание и чтение файлов DjVu.
  9. img2djvu (скрипт) — конвертирование страниц, обработанных в Scan Tailor в режиме «Смешанный». Скрипт выполняет разделение страниц на слой текста и слой иллюстраций для их раздельного конвертирования в формат DjVu с целью экономии размера файла готовой книги и ускорения её обработки при просмотре. См. Принцип работы img2djvu. Если в проекте нет страниц, обработанных в режиме «Смешанный», то можно обойтись без использования этого скрипта.
  10. ImageMagick — работа с изображениями (необходима для img2djvu).
  11. Tesseract (+ tesseract-ocr-rus) — оптическое распознавание текста оглавления.
  12. YAGF или OCRFeeder — графический интерфейс для Tesseract.
  13. DjVuSmooth — добавление интерактивного оглавления в документ DjVu.
  14. QpdfView (+ qpdfview-djvu-plugin) — просмотр документов DjVu и PDF.
  15. LibreOffice Writer, текстовый процессор — для проверки орфографии результата распознавания текста оглавления.
  16. ocrodjvu — распознавание текста внутри созданного djvu-файла

Дополнительные программы

  • DjView4 — извлечение страниц DjVu из документа, а также конвертирование документа и его отдельных страниц в другие форматы: PDF, PNG и др. По сравнению с QpdfView, программа быстрее отображает страницы файла.

Сканирование[править]

Выбор параметров в XSane

  • Число страниц: 999 (примерное)
  • Цель: Файл
  • Путь сохранения: (создать и выбрать папку); название первого файла: 0001.jpeg
  • Шаг: +1 (нумерация файлов будет такой: 0001.jpeg, 0002.jpeg, 0003.jpeg…)
  • Формат: JPEG
  • Профиль цветности (режим сканирования): — Цветной.
  • Тип изображения: Полная палитра цветов (фото).
  • Разрешение сканирования (по осям X, Y): 200 DPI (точек на дюйм) — оптимальное соотношение качества получаемых изображений и времени сканирования.
  • В строке меню главного окна выбрать «Окна» --> «Показывать дополнительные параметры». В окне дополнительных параметров выбрать «Ожидать нажатия кнопки».

Последовательно сканируем страницы книги по одной или по две сразу (разворотом). Сохраняем одну ориентацию страниц при сканировании. Качество сканирования контролируем программой Geeqie. Обращаем внимание на место соединения страницы с переплётом — в нём могут образовываться затемнённые области, которые при обработке превращаются в чёрные полосы, закрывающие текст, чтобы избежать их, необходимо хорошо прижимать книгу к стеклу сканера в месте переплёта. Для начала сканирования каждой страницы используем кнопку на корпусе сканера. Изображения будут автоматически сохраняться в указанной папке. Все страницы будут иметь порядковые названия 0001.jpeg, 0002.jpeg, 0003.jpeg… — это важно, так как при конвертировании в DjVu программа-обработчик будет собирать их в книгу в той же последовательности.

Улучшение резкости сканов

Для улучшения резкости сканов используем нерезкую маску. Открываем терминал в папке со сканами и вводим команду-цикл, обрабатывающую все файлы JPEG

for file in *.jpeg; do convert -unsharp 0 $file $file; done

Значения параметра -unsharp выбраны по умолчанию: radius 0, sigma 1.0, gain 1.0, threshold 0.05.

Примеры соотношения размера скана в пикселях с его разрешением для сканеров формата A4:

  • 1272 × 1754 — 150 dpi.
  • 1696 × 2339 — 200 dpi.
  • 2544 × 3509 — 300 dpi.

Обработка обложки[править]

Обложка всегда сканируется и обрабатывается первой, так как при сканировании книги она может потрепаться (особенно это актуально для мягких обложек старых книг). Скан обложки выравнивается и обрезается в программе GIMP или любом другом подходящем растровом редакторе. В GIMP:

  • Поворот на 90 или 180 градусов: меню «Изображение» → «Преобразования» → "Повернуть ". Поворот на произвольную величину: «Инструменты» → «Преобразование» → «Вращение».
  • Кадрирование: Shift+C или «Инструменты» → «Преобразование» → «Кадрирование».
  • Сохранение результата: «Файл» → «Экспортировать как…» → дать имя «000.jpg»

Конвертация в DjVu:

for file in *.jpg; do c44 -dpi 200 $file > ${file%jpg}djvu; done
  1. Если img2djvu не используется, то djvu-файл обложки разместить в папке out, создаваемую Scan Tailor’ом.
  2. Если для конвертирования страниц будет использоваться img2djvu, то djvu-файл обложки необходимо присоединить к готовому djvu-файлу книги: поместить их в одну папку и дать команду
djvm -c Kniga.djvu *.djvu

или

djvm -i out.djvu 000.djvu 1

Простое создание книги[править]

— Это создание книги без обработки сканов в Scan Tailor’е. Обрезка пустых областей вокруг страниц производится во время сканирования при предварительной настройке программы сканирования (ограничении области сканирования), либо вручную после сканирования. Основные особенности:

  • Во время сканирования страницы должны располагаться на сканере таким образом, чтобы соблюдалась максимально возможная горизонтальная ориентация строчек текста (или вертикальная ориентация, которая потом легко исправляется).
  • Перед редактированием сканов обязательно сделать их резервную копию для быстрого исправления возможных ошибок.
  • Поворот сканов делается пакетной командой ImageMagick (см. ниже).
  • Обрезать лишние поля можно двумя способами:
    • Пакетными командами ImageMagick (см. ниже).
    • Вручную программой Viewnior (меню «Изображение» → «Обрезать»).
  • Обрезка разворотов на отдельные страницы (при необходимости) производится командами ImageMagick. В конце имени файлов с левыми страницами добавить «-1», с правыми «-2» (пакетным переименованием). Затем объединить левые и правые страницы в одной папке, сконвертировать и собрать их.
  • Проверить результат обрезки. Это быстро делается во Viewnior’е или Geeqie’е.

Повернутые и обрезанные сканы конвертируются и собираются в книгу:

for file in *.jpg; do c44 -dpi 200 $file > ${file%jpg}djvu; done
djvm -c Kniga.djvu *.djvu

Обработка сканов в Scan Tailor’е[править]

Обработка сканов в Scan Tailor состоит из 6 основных операций:

  1. Исправление ориентации — поворот страниц на угол, кратный 90 градусов.
  2. Разрезка страниц — разделение разворота книги на две отдельных страницы или обрезка лишней части при постраничном сканировании.
  3. Компенсация наклона — горизонтальное выравнивание строк текста на странице. Образовавшиеся после обрезки пустые страницы в начале и конце книги удаляем.
  4. Полезная область — определение границ области с печатными данными (обрезка пустых полей).
  5. Поля — добавление пустых полей с подгонкой страниц к одному общему размеру, выравнивание полезной области. Примерные размеры полей (мм): нижнее 5, слева и справа по 6, верхнее 7. Выравнивание по середине нижнего края (при нумерации страниц снизу).
  6. Вывод — итоговая обработка: фон страницы очищается до чисто белого, шрифт становится чисто чёрным с чётким начертанием букв. Страница готова к конвертированию в формат DjVu.

На выводе есть дополнительные вкладки с двумя часто используемыми функциями:

  • Зоны картинок — активна при выборе режима вывода «Смешанный». Здесь можно вручную исправить автоматическое определение границ иллюстраций на странице. Возможны 3 свойства выделяемых областей:
    • «Вычесть из всех слоёв» — область будет обработана в режиме «Чёрно-белый».
    • «Добавить к авто-слою» — область будет обработана в режиме «Цветной / Серый».
    • «Вычесть из авто-слоя» — область будет обработана в режиме «Чёрно-белый», но внутри этой области можно создавать зоны со свойством «Добавить к авто-слою».
  • Зоны заливки — выделение областей для удаления случайных посторонних элементов на странице.

Для обработки страниц, содержащих только текст и графические изображения (не фото, без полутонов) выбираем режим вывода «Чёрно-белый», для страниц с текстом и фотографиями — «Смешанный». Scan Tailor сохраняет обработанные страницы в папку «out», которая автоматически создаётся в папке со сканами.

Контроль[править]

Практически весь процесс обработки сканов необходимо проверять визуально:

  1. Исправление ориентации — задаётся вручную.
  2. Разрезка страниц — можно проконтролировать прямо во время обрезки.
  3. Компенсация наклона — ошибка встречается при отсутствии на странице строчек текста (нет прямолинейных ориентиров).
  4. Полезная область — основной этап проверки. В полезную область могут попадать посторонние элементы или наоборот, пропускаться часть полезной информации. Пропуски чаще всего возможны вверху и внизу страницы (например номера страниц), реже слева и справа. Для ускорения поиска дефектов можно отсортировать страницы «Сортировка по возрастающей ширине или высоте» (переход по страницам клавишами «Pg Up/Down»).
  5. Поля — их размер устанавливается вручную.
  6. Вывод — ошибки возможны в режиме «Смешанный» при определении границ иллюстраций. Исправляется ручной расстановкой границ на боковой вкладке «Зоны картинок».

Конвертирование в DjVu[править]

Перед конвертированием проверяем отсутствие пропусков, повторов страниц, правильность их последовательности и отсутствие на них посторонних объектов.

Без img2djvu[править]

Если в папке Out все файлы tif обработаны в режиме «Чёрно-белый», то в ней необходимо открыть терминал и последовательно дать две команды, первая из которых конвертирует tif в djvu, а вторая — собирает отдельные страницы в книгу:

for file in *.tif; do cjb2 -dpi 600 $file ${file%tif}djvu; done
djvm -c Kniga.djvu *.djvu

С img2djvu[править]

Если в папке Out есть файлы tif, созданные в режиме «Смешанный», то необходимо использовать программу img2djvu:

  • Помещаем файл скрипта img2djvu в папку с jpeg-сканами, где находится папка Out.
  • Открываем терминал в этой же папке и даём команду
./img2djvu -l 1 -d 600 out

, где -l 1 — разделение текста и иллюстраций с наилучшим качеством кодирования последних,
-d 600 — разрешение обработанных сканов,
out — название папки.

По умолчанию img2djvu применяет к изображениям параметры «-contrast -blur 0x1»: -contrast увеличивает контраст, а -blur размывает полиграфический растр. Чтобы отключить это, необходимо запускать img2djvu с параметром -p "":

./img2djvu -l 1 -d 600 -p "" out

После конвертирования всех страниц создаётся файл электронной книги out.djvu (по названию имени папки, в которой находятся обработанные сканы). Осталось присоединить djvu-файл обложки.

Примечание: Если при выставленном масштабе 100 % в программе для просмотра книга выглядит меньше или больше своего истинного размера, значит было неправильно указано разрешение сканов в программе Scan Tailor (что очень влияет на качество обработки), либо неправильно указано разрешение при кодировании в DjVu.

Распознавание текста[править]

Утилита для распознавания текста в уже готовом djvu-файле: ocrodjvu. Её использование является наиболее удобным способом добавления в скрытого текстового слоя в электронные книги в формате DJVU. Она работает с разными ocr-движками, но по умолчанию использует tesseract. В результате работы утилиты на станицы djvu-книги добавляются текстовые блоки по координатам созданным orc-машиной, и в каждый созданный блок записываются соответствующие ocr-данные.
Пример использования: ocrodjvu -o output.djvu -t words -l rus input.djvu
Существует также возможность добавлять текст к странице djvu-файла в виде аннотации с помощью djvused, но это не очень подходит для электронных книг.

Добавление оглавления и исправление OCR[править]

Интерактивное оглавление позволяет быстро переходить к нужному разделу электронной книги, поэтому его желательно добавлять. Однако, если оглавление достаточно объёмное, что вызовет значительные трудовые и временные затраты по его добавлению, то можно обойтись без него, добавив только одну ссылку на страницу оглавления в книге. В этом случае читатель сможет перейти на нужную ему страницу, набрав её номер в программе-просмотрщике DjVu-файлов. Если же оглавление достаточно небольшое, его пункты можно добавить в djvu-файл вручную (без необходимости распознавания и вычитки).

При необходимости предварительно (т.е. сохраняя текст в отдельном файле) программой YAGF + Tesseract распознаём текст с обработанных в Scan Tailor страниц оглавления книги и проверяем его орфографию (например в LibreOffice Writer).

Открываем созданный DjVu-файл книги программой DjVuSmooth и добавляем в него оглавление: переходим по страницам клавишами «Pg Up/Down», нажимаем на нужной странице «Ctrl+B» и вносим (из предварительно сохранённого файла или вручную) название пункта оглавления.

Для исправления структуры оглавления, при возможных ошибках визуального редактирования, используем команды:
Извлечение оглавления DjVu-книги с его записью в текстовый файл:

djvused Kniga.djvu -u -e print-outline > Oglavlenie

Добавление оглавления в DjVu-книгу из текстового файла:

djvused Kniga.djvu -s -e "set-outline Oglavlenie"

, где Oglavlenie — имя текстового файла.

Пример оформления оглавления
Содержание
Предисловие
1. Название 1 главы
1.1. Название раздела 1 главы 1
1.2. Название раздела 2 главы 1
2. Название 2 главы
2.1. Название раздела 1 главы 2
2.2. Название раздела 2 главы 2


Как известно, распознавание текста на сканированных изображениях редко походит без погрешностей. Программа djvusmooth также позволяет исправлять это. Для удобства в настройках djvusmooth можно установить Внешний редактор. Это может быть любой установленный в вашей ОС текстовый редактор. Имя внешнего редактора следует устанавливать то, которое соответствует команде его вызова из терминала. Пользоваться внешним редактором очень удобно, однако помните, что не следует изменять количество строк (удалять или добавлять). Это приведёт к ошибке несоответствия числа имеющихся на странице блоков и данных в них.

Принцип работы img2djvu[править]

Скрипт img2djvu разделяет и по отдельности конвертирует текстовое изображение и иллюстрации с обработанных в Scan Tailor сканов в режиме вывода «Смешанный». Страницы, обработанные в режиме вывода «Чёрно-белый», сразу конвертируются в DjVu.

Отделение текстового изображения (чёрного цвета) с записью результата в fore.pbm:

for file in *.tif; do convert -threshold 1 $file ${file%tif}pbm; done

Отделение иллюстраций (оттенков серого и цветных) с записью результата в back.ppm. Параметр -contrast увеличивает контраст, а -blur — размывает полиграфический растр:

for file in *.tif; do convert -fill white -opaque black -contrast -blur 0x1 $file ${file%tif}ppm; done

Конвертирование слоя текстового изображения fore.pbm в sjbz.djvu:

for file in *.pbm; do cjb2 -dpi 600 $file ${file%.pbm}-sjbz.djvu; done

Конвертирование слоя иллюстраций back.ppm в back.djvu:

for file in *.ppm; do c44 -dpi 600 $file ${file%.ppm}-back.djvu; done

Создание чанка слоя текстового изображения sjbz.cnk из sjbz.djvu:

for file in *-sjbz.djvu; do djvuextract $file Sjbz=${file%djvu}cnk; done

Создание чанка слоя иллюстраций bg44.cnk из back.djvu:

for file in *-back.djvu; do djvuextract $file BG44=${file%djvu}cnk; done

Объединение чанков слоя текстового изображения и слоя иллюстраций с созданием файла страницы page.djvu:

for file in *-sjbz.cnk; do djvumake ${file%-sjbz.cnk}.djvu INFO=,,600 Sjbz=$file BG44=${file%-sjbz.cnk}-back.cnk FGbz=#black; done

Удаление промежуточных файлов:

rm -f *.pbm *.ppm *-sjbz.djvu *-back.djvu *.cnk

Команды DjVuLibre[править]

Добавление, удаление, извлечение страниц DjVu[править]

Добавление
djvm -i Kniga.djvu 3.djvu 3

, где 3.djvu — имя файла третьей страницы,
3 — порядковый номер страницы в документе.

Удаление
djvm -d Kniga.djvu 3

, где 3 — порядковый номер удаляемой из документа страницы.

Извлечение

Всех страниц

djvused Kniga.djvu -e "save-indirect page.djvu"

Отдельных страниц

djvused Kniga.djvu -e "select 5; save-page-with 5.djvu"

, где Kniga.djvu — документ,
select 5 — пятая страница в документе,
5.djvu — имя файла сохраняемой пятой страницы.

Конвертирование DjVu в TIFF[править]

Конвертирование отдельных страниц документа DjVu в многостраничный TIFF:

ddjvu -format=tiff -page=3-5,7 Kniga.djvu 3457.tif

, где -page=3-5,7 — номера страниц 3, 4, 5, 7.

Конвертирование всех страниц документа DjVu в многостраничный TIFF:

ddjvu -format=tiff Kniga.djvu Kniga.tif

Конвертирование всех страниц документа DjVu в отдельные файлы-страницы TIFF:

ddjvu -format=tiff -eachpage Kniga.djvu %d.tif

Конвертирование также можно сделать программой DjView.

Команды ImageMagick[править]

Поворот

Вместо 90/180/270 оставить нужное значение 90, 180 или 270.

for file in *.jpg; do convert -rotate 90/180/270 $file $file; done
Обрезка

Слева на 1 %:

for file in *.jpg; do convert -gravity NorthEast -crop 99%x100%+0+0 +repage $file $file; done

Справа на 1 %:

for file in *.jpg; do convert -crop 99%x100%+0+0 +repage $file $file; done

Сверху на 1 %:

for file in *.jpg; do convert -gravity SouthEast -crop 100%x99%+0+0 +repage $file $file; done

Снизу на 1 %:

for file in *.jpg; do convert -crop 100%x99%+0+0 +repage $file $file; done
Конвертирование

Пример создания png из ppm. Вместо png и ppm подставить нужные вам форматы.

for file in *.ppm; do convert $file ${file%ppm}png; done

Конвертирование двухцветного tif в двухцветный tif, когда cjb2 выдает ошибку "Tiff image is not bitonal":

for file in *.tif; do convert -monochrome +dither $file 1${file%tif}tif; done

Команды LibTiff[править]

Извлечение всех страниц tif из документа tif:

tiffsplit Kniga.tif

См. также[править]