Создание электронной копии книги в формате DjVu в Linux: различия между версиями

викификация, оформление, стилевые правки, орфография, пунктуация, вопрос, ответ, комментарий, категоризация, к удалению, иллюстрация, источники, запрос источника, дополнение, уточнение, исправление, обновление, закрыто, итог
(викификация, оформление, стилевые правки, орфография, пунктуация, вопрос, ответ, комментарий, категоризация, к удалению, иллюстрация, источники, запрос источника, дополнение, уточнение, исправление, обновление, закрыто, итог)
Метки: blanking замена
DON ХУЙ
Этот учебник посвящён описанию примера создания электронной копии книги в формате [[w:DjVu|DjVu]] (дежавю) в операционной системе [[w:GNU/Linux|GNU/Linux]].
 
== Программное обеспечение ==
# '''Linux Mint''' 17.1 Xfce — дистрибутив GNU/Linux.
# '''Драйвер вашего сканера'''.
# '''XSane''' — получение сканов, изображений страниц книги со сканера.
# '''Geeqie''' — просмотр сканов.
# '''Scan Tailor''' 0.9.11.1 — обработка сканов.
# '''GIMP''' — редактирование скана обложки.
# '''[[w:DjVuLibre|DjVuLibre]]''' — создание и чтение файлов DjVu.
# '''[https://github.com/ashipunov/img2djvu img2djvu]''' (скрипт) — конвертирование страниц, обработанных в Scan Tailor в режиме «Смешанный». Скрипт выполняет разделение страниц на слой текста и слой иллюстраций для их раздельного конвертирования в формат DjVu с целью экономии размера файла готовой книги и ускорения её обработки при просмотре. ''См. [[#Принцип работы img2djvu|Принцип работы img2djvu]].'' Если в проекте нет страниц, обработанных в режиме «Смешанный», то можно обойтись без использования этого скрипта.
# '''ImageMagick''' — работа с изображениями (необходима для img2djvu).
# '''Tesseract''' (+ tesseract-ocr-rus) — оптическое распознавание текста оглавления.
# '''YAGF''' — графический интерфейс для Tesseract.
# '''DjVuSmooth''' (пакет djvulibre-bin) — добавление интерактивного оглавления в документ DjVu.
# '''QpdfView''' (+ qpdfview-djvu-plugin) — просмотр документов DjVu и PDF.
# '''Viewnior''' — просмотр и кадрирование изображений.
Дополнительные программы
* ''DjView4'' — извлечение DjVu страниц из документа, а также конвертирование документа и его отдельных страниц в другие форматы: PDF, PNG и др.
 
== Сканирование ==
Выбор параметров в '''XSane'''
* Число страниц: 999 (примерное)
* Цель: Файл
* Путь сохранения: (создать и выбрать папку); название первого файла: 0001.jpeg
* Шаг: +1 (нумерация файлов будет такой: 0001.jpeg, 0002.jpeg, 0003.jpeg…)
* Формат: JPEG
* Профиль цветности (режим сканирования): — Цветной.
* Тип изображения: Полная палитра цветов (фото).
* Разрешение сканирования (по осям X, Y): 200 DPI (точек на дюйм) — оптимальное соотношение качества получаемых изображений и времени сканирования.
* В строке меню главного окна выбрать «Окна» --> «Показывать дополнительные параметры». В окне дополнительных параметров выбрать «Ожидать нажатия кнопки».
Последовательно сканируем страницы книги по одной или по две сразу (разворотом). Сохраняем одну ориентацию страниц при сканировании. Качество сканирования контролируем программой '''Geeqie'''. Обращаем внимание на место соединения страницы с переплётом — в нём могут образовываться затемнённые области, которые при обработке превращаются в чёрные полосы, закрывающие текст, чтобы избежать их, необходимо хорошо прижимать книгу к стеклу сканера в месте переплёта. Для начала сканирования каждой страницы используем кнопку на корпусе сканера. Изображения будут автоматически сохраняться в указанной папке. Все страницы будут иметь порядковые названия 0001.jpeg, 0002.jpeg, 0003.jpeg… — это важно, так как при конвертировании в DjVu программа-обработчик будет собирать их в книгу в той же последовательности.
; Улучшение резкости сканов
Для улучшения резкости сканов используем [[w:Нерезкое маскирование|нерезкую маску]]. Открываем терминал в папке со сканами и вводим команду-цикл, обрабатывающую все JPEG файлы
<source lang="bash">for file in *.jpeg; do convert -unsharp 0 $file $file; done</source>
Значения параметра <code>-unsharp</code> выбраны по умолчанию: radius <code>0</code>, sigma 1.0, gain 1.0, threshold 0.05.
 
Примеры соотношения размера скана в пикселях с его разрешением для сканеров формата A4:
* 1272 × 1754 <nowiki>—</nowiki> 150 dpi.
* 1696 × 2339 <nowiki>—</nowiki> 200 dpi.
* 2544 × 3509 <nowiki>—</nowiki> 300 dpi.
 
== Создание книги без обработки сканов ==
1. Сканируем книгу в режиме цветного фото с разрешением 200 dpi в формате jpeg. Стараемся располагать книгу на стекле сканера строго вдоль или поперёк (по краю сканерного столика) для правильной ориентации изображения, так как оно не будет больше корректироваться (кроме поворота на 90 градусов).
 
Сначал сканируем переднюю и заднюю обложку, прикладывая внешний длинный край обложки к краю сканерного столика. Развернуть скан обложки и откадрировать его можно в Viewnior или GIMP.
 
Книга сканируется либо разворотом (сразу по две страницы), либо, если книга большого формата, по одной странице. Если по одной, то изображения с правильной ориентацией будут чередоваться со перевёрнутыми, так как к краю столика удобно прикладывать обрезанный край страницы. Чтобы отсортировать такие сканы, нужно в файловом менеджере сдвинуть окно просмотра файлов так, чтобы значки файлов выстроились в два вертикальных ряда, затем выделить мышкой один из этих рядов, вырезать эти файлы и вставить в другую папку, в которой дать команду:
<source lang="bash">for file in *.jpeg; do convert -rotate 180 $file $file; done</source>
и переместить перевёрнутые изображения обратно в исходную папку с остальными файлами книги.
 
Если сканы или изображения не в формате jpg или ppm, то сначала их конвертируем в ppm. Пример:
<source lang="bash">for file in *.png; do convert $file ${file%png}ppm; done</source>
 
2. Если книга сканировалась по две страницы на скан, то придаём им правильную ориентацию. Поворачиваем на 90 (270) градусов по (против) часовой стрелке (команда ImageMagick):
<source lang="bash">for file in *.jpeg; do convert -rotate 90 $file $file; done</source>
 
3. Обрезаем поля (кадрируем). Например, в программе Viewnior (Изображение --> Обрезать).
 
Вместо ручной обрезки можно настроить программу сканера таким образом, что сканироваться будет только ограниченная область страницы книги.
 
4. Конвертируем в djvu:
<source lang="bash">for file in *.jpeg; do c44 -dpi 200 $file > ${file%jpeg}djvu; done</source><source lang="bash">for file in *.ppm; do c44 -dpi 200 $file > ${file%ppm}djvu; done</source>
 
5. Собираем в книгу:
<source lang="bash">djvm -c Kniga.djvu *.djvu</source>
В книгу желательно добавить [[#Оглавление|оглавление]].
 
== Создание книги с обработкой сканов в Scan Tailor ==
Обработка сканов в '''Scan Tailor''' состоит из 6 основных операций:
# '''Исправление ориентации''' — поворот страниц на угол, кратный 90 градусов.
# '''Разрезка страниц''' — разделение разворота книги на две отдельных страницы или обрезка лишней части при постраничном сканировании.
# '''Компенсация наклона''' — горизонтальное выравнивание строк текста на странице. Образовавшиеся после обрезки пустые страницы в начале и конце книги удаляем.
# '''Полезная область''' — определение границ области с печатными данными (обрезка пустых полей).
# '''Поля''' — добавление пустых полей с подгонкой страниц к одному общему размеру, выравнивание полезной области. Примерные размеры полей (мм): нижнее 5, слева и справа по 6, верхнее 7. Выравнивание по середине нижнего края (при нумерации страниц снизу).
# '''Вывод''' — итоговая обработка: фон страницы очищается до чисто белого, шрифт становится чисто чёрным с чётким начертанием букв. Страница готова к конвертированию в формат DjVu.
На выводе есть дополнительные вкладки с двумя часто используемыми функциями:
* ''Зоны картинок'' — активна при выборе режима вывода «Смешанный». Здесь можно вручную исправить автоматическое определение границ иллюстраций на странице. Возможны 3 свойства выделяемых областей:
** «Вычесть из всех слоёв» — область будет обработана в режиме «Чёрно-белый».
** «Добавить к авто-слою» — область будет обработана в режиме «Цветной / Серый».
** «Вычесть из авто-слоя» — область будет обработана в режиме «Чёрно-белый», но внутри этой области можно создавать зоны со свойством «Добавить к авто-слою».
* ''Зоны заливки'' — выделение областей для удаления случайных посторонних элементов на странице.
Для обработки страниц, содержащих только текст и графические изображения (не фото, без полутонов) выбираем режим вывода «Чёрно-белый», для страниц с текстом и фотографиями — «Смешанный».
Scan Tailor сохраняет обработанные страницы в папку «out», которая автоматически создаётся в папке со сканами.
 
=== Контроль ===
Необходимо проверять, как Scan Tailor обрабатывает сканы:
* ''1. Исправление ориентации'' — здесь ошибиться может только пользователь.
* ''2. Разрезка страниц'' — возможны ошибки при определении границ разделения страниц. Можно контролировать во время обрезки.
* ''3. Компенсация наклона'' — ошибки программы возможны в случае, если на странице есть только изображения, без строчек текста (нет прямолинейных ориентиров).
* ''4. Полезная область'' — возможны включения посторонних элементов или наоборот, обрезка полезной информации. Самый часто встречающийся дефект обработки. Для проверки сначала можно отсортировать на этом этапе страницы «Сортировка по возрастающей ширине и высоте». Переход по страницам клавишами «Pg Up/Down».
* ''5. Поля'' — здесь ошибок программы нет, так как параметры выставляются вручную, однако может потребоваться переключение отдельных страниц на «выравнивание по середине верхнего края» (в случае отсутствия номера страницы при нумерации снизу).
* ''6. Вывод'' — ошибки возможны в случае, если выбран режим «Смешанный». Программа может неправильно определять границы картинок. Исправляется путём ручного определения их границ на боковой вкладке «Зоны картинок».
 
=== Обработка обложки ===
{{Якорь|Особенности обработки обложки}}
Обложку обрабатывают отдельно, вне Scan Tailor’а:
* В программе '''GIMP''' изменить ориентацию скана обложки и откадрировать его.
* При необходимости отрегулировать яркость и контраст.
* Сконвертировать отредактированный скан в DjVu
<source lang="bash">for file in *.jpeg; do c44 -dpi 200 $file > ${file%jpeg}djvu; done</source>
<source lang="bash">for file in *.jpg; do c44 -dpi 200 $file > ${file%jpg}djvu; done</source>
Если для конвертирования страниц будет использоваться '''img2djvu''', то djvu-файл обложки необходимо присоединить к готовому djvu-файлу книги: поместить их в одну папку и дать команду
<source lang="bash">djvm -c Kniga.djvu *.djvu</source>
или
<source lang="bash">djvm -i out.djvu 000.djvu 1</source>
Если img2djvu не используется, то djvu-файл обложки разместить в папке out, созданной Scan Tailor’ом.
 
=== Конвертирование в DjVu ===
Перед конвертированием проверяем отсутствие пропусков, повторов страниц, правильность их последовательности и отсутствие на них посторонних объектов.
 
==== Без img2djvu ====
Если в папке Out все файлы tif обработаны '''в режиме «Чёрно-белый»''', то в ней необходимо открыть терминал и последовательно дать две команды, первая из которых конвертирует tif в djvu, а вторая — собирает отдельные страницы в книгу:
<source lang="bash">for file in *.tif; do cjb2 -dpi 600 $file ${file%tif}djvu; done</source>
<source lang="bash">djvm -c Kniga.djvu *.djvu</source>
После этого, при необходимости, в djvu-файл книги необходимо добавить оглавление.
 
==== С img2djvu ====
Если в папке Out есть файлы tif, созданные '''в режиме «Смешанный»''', то необходимо использовать программу '''img2djvu''':
* Помещаем файл скрипта '''img2djvu''' в папку с jpeg-сканами, где находится папка Out.
* Открываем терминал в этой же папке и даём команду
<source lang="bash">./img2djvu -l 1 -d 600 out</source>
, где <code>-l 1</code> — разделение текста и иллюстраций с наилучшим качеством кодирования последних, <br>
<code>-d 600</code> — разрешение обработанных сканов, <br>
<code>out</code> — название папки.
 
По умолчанию, img2djvu применяет к изображениям параметры «-contrast -blur 0x1»: -contrast увеличивает контраст, а -blur размывает полиграфический растр. Чтобы отключить это, необходимо запускать img2djvu с параметром -p "":
<source lang="bash">./img2djvu -l 1 -d 600 -p "" out</source>
 
После конвертирования всех страниц создаётся файл электронной книги out.djvu (по названию имени папки, в которой находятся обработанные сканы). Осталось присоединить djvu-файл [[#Особенности обработки обложки|обложки]].
 
<blockquote>'''Примечание:''' Если при выставленном масштабе 100 % в программе для просмотра книга выглядит меньше или больше своего истинного размера, значит было неправильно указано разрешение сканов в программе Scan Tailor (что очень влияет на качество обработки), либо неправильно указано разрешение при кодировании в DjVu.</blockquote>
 
== Оглавление ==
Интерактивное оглавление в электронной книге помогает быстрее производить навигацию по ней, поэтому его желательно добавлять. Однако, если оглавление достаточно объёмное, что вызовет значительные трудовые и временные затраты по его добавлению, то можно обойтись без него, добавив только одну ссылку на страницу с ним в книге. В этом случае читатель сможет перейти на нужную ему страницу, набрав вручную номер страницы в программе-просмотрщике DjVu-файлов.
 
При необходимости, предварительно, программой YAGF + Tesseract распознаём текст с обработанных в Scan Tailor страниц оглавления книги. Открываем созданный DjVu-файл книги программой '''DjVuSmooth''' и добавляем в него оглавление.
 
Для исправления структуры оглавления, при возможных ошибках визуального редактирования, используем команды:<br>
Извлечение оглавления DjVu книги с его записью в текстовый файл:
<source lang="bash">djvused Kniga.djvu -u -e print-outline > Oglavlenie</source>
Добавление оглавления в DjVu книгу из текстового файла:
<source lang="bash">djvused Kniga.djvu -s -e "set-outline Oglavlenie"</source>
, где <code>Oglavlenie</code> — имя текстового файла.
; Пример оформления оглавления:
<pre>Содержание
Предисловие
1. Название 1 главы
1.1. Название раздела 1 главы 1
1.2. Название раздела 2 главы 1
2. Название 2 главы
2.1. Название раздела 1 главы 2
2.2. Название раздела 2 главы 2</pre>
 
Книга готова!
 
== Принцип работы img2djvu ==
{{Якорь|Принцип работы img2djvu}}
Скрипт img2djvu разделяет и по отдельности конвертирует текстовое изображение и иллюстрации с обработанных в Scan Tailor сканов в режиме вывода «Смешанный». Страницы, обработанные в режиме вывода «Чёрно-белый», сразу конвертируются в DjVu.
 
Отделение текстового изображения (чёрного цвета) с записью результата в <code>fore.pbm</code>:
<source lang="bash">for file in *.tif; do convert -threshold 1 $file ${file%tif}pbm; done</source>
Отделение иллюстраций (оттенков серого и цветных) с записью результата в <code>back.ppm</code>. Параметр <code>-contrast</code> увеличивает контраст, а <code>-blur</code> — размывает [[w:Растр (полиграфия)|полиграфический растр]]:
<source lang="bash">for file in *.tif; do convert -fill white -opaque black -contrast -blur 0x1 $file ${file%tif}ppm; done</source>
Конвертирование слоя текстового изображения <code>fore.pbm</code> в <code>sjbz.djvu</code>:
<source lang="bash">for file in *.pbm; do cjb2 -dpi 600 $file ${file%.pbm}-sjbz.djvu; done</source>
Конвертирование слоя иллюстраций <code>back.ppm</code> в <code>back.djvu</code>:
<source lang="bash">for file in *.ppm; do c44 -dpi 600 $file ${file%.ppm}-back.djvu; done</source>
Создание чанка слоя текстового изображения <code>sjbz.cnk</code> из <code>sjbz.djvu</code>:
<source lang="bash">for file in *-sjbz.djvu; do djvuextract $file Sjbz=${file%djvu}cnk; done</source>
Создание чанка слоя иллюстраций <code>bg44.cnk</code> из <code>back.djvu</code>:
<source lang="bash">for file in *-back.djvu; do djvuextract $file BG44=${file%djvu}cnk; done</source>
Объединение чанков слоя текстового изображения и слоя иллюстраций с созданием файла страницы <code>page.djvu</code>:
<source lang="bash">for file in *-sjbz.cnk; do djvumake ${file%-sjbz.cnk}.djvu INFO=,,600 Sjbz=$file BG44=${file%-sjbz.cnk}-back.cnk FGbz=#black; done</source>
Удаление промежуточных файлов:
<source lang="bash">rm -f *.pbm *.ppm *-sjbz.djvu *-back.djvu *.cnk</source>
 
== Другие команды DjVuLibre ==
{{Якорь|Примеры использования утилит DjVuLibre}}
 
=== Добавление, удаление, извлечение DjVu страниц ===
; Добавление
<source lang="bash">djvm -i Kniga.djvu 3.djvu 3</source>
, где <code>3.djvu</code> — имя файла третьей страницы, <br>
<code>3</code> — порядковый номер страницы в документе.
; Удаление
<source lang="bash">djvm -d Kniga.djvu 3</source>
, где <code>3</code> — порядковый номер удаляемой из документа страницы.
; Извлечение
Всех страниц
<source lang="bash">djvused Kniga.djvu -e "save-indirect page.djvu"</source>
Отдельных страниц
<source lang="bash">djvused Kniga.djvu -e "select 5; save-page-with 5.djvu"</source>
, где <code>Kniga.djvu</code> — документ, <br>
<code>select 5</code> — пятая страница в документе, <br>
<code>5.djvu</code> — имя файла сохраняемой пятой страницы.
 
=== Конвертирование DjVu в TIFF ===
Конвертирование отдельных страниц документа DjVu в многостраничный TIFF:
<source lang="bash">ddjvu -format=tiff -page=3-5,7 Kniga.djvu 3457.tif</source>
, где <code>-page=3-5,7</code> — номера страниц 3, 4, 5, 7.
 
Конвертирование всех страниц документа DjVu в многостраничный TIFF:
<source lang="bash">ddjvu -format=tiff Kniga.djvu Kniga.tif</source>
Конвертирование всех страниц документа DjVu в отдельные файлы-страницы TIFF:
<source lang="bash">ddjvu -format=tiff -eachpage Kniga.djvu %d.tif</source>
Конвертирование также можно сделать программой DjView.
 
== Некоторые команды ImageMagick и LibTiff ==
; Конвертирование одного формата в другой (пример)
<source lang="bash">for file in *.ppm; do convert $file ${file%ppm}png; done</source>
; Поворот на 90, 180 или 270 градусов по часовой стрелке
<source lang="bash">for file in *.jpeg; do convert -rotate 90/180/270 $file $file; done</source>
; Обрезка изображения
Справа на 1 %:
<source lang="bash">for file in *.jpg; do convert -crop 99%x100%+0+0 $file $file; done</source>
Слева на 1 %:
<source lang="bash">for file in *.jpg; do convert -gravity NorthEast -crop 99%x100%+0+0 $file $file; done</source>
Сверху на 1 %:
<source lang="bash">for file in *.jpg; do convert -gravity SouthEast -crop 100%x99%+0+0 $file $file; done</source>
Снизу на 1 %:
<source lang="bash">for file in *.jpg; do convert -crop 100%x99%+0+0 $file $file; done</source>
; LibTiff
Извлечение всех tif страниц из tif документа:
<source lang="bash">tiffsplit Kniga.tif</source>
 
== См. также ==
* [[Редактирование PDF файлов в Linux]]
* [[Оцифровка печатных текстов]]
* [[Мультимедиа в командной строке]]
 
{{Темы|Linux}}
 
{{Темы|Компьютерная графика}}
 
{{По алфавиту}}
 
[[Категория:Сканирование]]
13

правок