Ликбез по DjVu
Intro
Ныне в сети полно материала про этот уже не новый формат электронных
документов. И все же я не нашел статьи, в которой ясно, сжато и доступно
было бы все рассказано. Письма читателей только подтверждают то, что
обилие материала не способствует пониманию идеи. Я в меру своих
скромных сил
постараюсь это исправить.
Чуток истории
DjVu (произносится "дежавю") как формат хранения данных был разработан компанией
AT&T в середине 90х. Видимо, достойного применения всему этому не
нашлось тогда, потому как вскоре все права на использование были проданы
малоизвестной Lizardtech.
Она, в свою очередь, причесала набор программ для работы с этим
форматом и выставила все на продажу. Поскольку цена была просто
заоблачной, продажи, по всей видимости, просто знатно обломились. В конце
концов часть исходников была
открыта
вместе с описанием самого формата. В настоящее время Lizardtech
занимается географическими картами, форматом хранения и программами
для манипуляций с ними, но это уже немного другая тема.
Еще один велосипед?
"А нафига еще какой-то DjVu, есть же PDF, который везде и всегда можно
прочитать?" - вот вопрос, который задают чаще всего. Попробуем
разобраться.
Прежде всего я считаю в принципе некорректными такие попытки сравнения.
"Кто сильнее, кит или слон?", "Что лучше, обычный текстовый файл или HTML?" -
так примерно это звучит. PDF - отличная штука для документов,
изначально набранных на компьютере, которые нужно кому-то отправить
или опубликовать и при этом стоит задача сохранить вид такого
документа, иными словами, чтобы шрифты, картинки, сноски, разбивка на
страницы и все прочее выглядели точно так же вне зависимости от того,
где и под какой OС он открыт.
DjVu же, в свою очередь, был разработан специально для отсканированных
документов, а возможность запаковать сканы страниц в PDF
всего лишь фича, которая изначально не была
предусмотрена. То есть такой PDF, конечно, можно сделать, но это будет
скорее криворукая поделка, чем полноценный документ. Судите сами:
- Размер PDF файла получается в 3-10 раз больше при том же
разрешении
- Совсем не факт, что PDF легко и просто откроется на любом
компьютере, Adobe постоянно обновляет формат и вероятнее всего
придется постоянно обновлять Acrobat Reader для просмотра
- Горе умельцам приходится уменьшать сканы чтобы размер PDF файлов
не был большим. При этом о нормальной печати или OCR говорить просто не
приходится. Да и на экране все выглядит малочитабельно
- Отсутствие возможности нормального поиска в таких PDF
(существующие костыли не рассматриваю)
- Глупые ограничения на PDF файлы типа 'нельзя печатать' etc
DjVu свободен от всех перечисленных недостатков. Размер документов
получается небольшим, с прекрасным разрешением (большинство книг
отсканированы в 300 или даже 600dpi). Нужно распечатать -
пожалуйста. Хочется от'OCR'ить - легко. Поиск - работает, если при
создании добавлен текстовый слой (легко добавить и потом без перепаковки
всех страниц). Причем для хранения текстовой информации всегда и везде
используется utf8, никакой чехарды с кодировками устраивать не нужно.
Чем читать DjVu файлы?
Куча ссылок на софт находится на http://djvu.org/. Можно сразу заглянуть
сюда и
сюда.
Мои рекомендации:
- Unix. В DjVuLibre есть
plug-in для browser'а и самостоятельная программа для промотра DjVu
файлов - djview. Компилится и ставится как обычно. Работает
вполне себе нормально. В комплекте ставится набор утилит для
кодирования/декодирования DjVu файлов, печати и прочих вещей
- Windows. Для browser'а есть отличный plug-in от Lizardtech,
находится тут.
Из самостоятельных просмотрщиков можно попробовать
WinDjView
Но, повторюсь, выбрать есть из чего. Ставим что больше приглянулось и пользуемся.
Запаковка в DjVu
- Unix. Особого выбора для создания DjVu файлов нет, только DjVuLibre. Да,
в ее составе есть
кодеры и причем несколько разных, все в принципе работает без глюков,
но a) размер файлов получается больше чем мог бы быть, б) нет нормального
OCR софта, и, как следствие, невозможно добавить OCR слой в DjVu файл.
Для
быстрой перегонки PDF в DjVu в DjVuLibre есть отличная утилита djvudigital.
- Windows. Нормальные результаты получаются при использовании DjVu
Solo 3.1 или, если удастся найти, DjVu Pro 4.x. Если есть ABBYY
FineReader (вполне подойдет и evaluation версия, у которой закончилось время
демо-работы), можно легко добавить OCR слой, который позволит
использовать поиск и индексацию в DjVu документах. Я пользуюсь
DjVu Tools для этого.
Не разжевываю как пользоваться DjVuLibre или DjVu Solo 3.1, в сети
есть много информации на эту тему. Скажу только, что сканировать нужно
с разрешением 300 или (что лучше) 600dpi. Сканы обрезать любым
редактором. Есть смысл сконвертить все в GIF для уменьшения количества
цветов и облегчения последующей задачи кодеру.
Технические аспекты
Думаю что для большинства технические подробности будут неинтересны и
им впору будет нажать кнопочку 'Back'. Для оставшихся
расскажу чуть про внутренности формата.
Вся информация внутри DjVu представлена в виде чанков (chunks). Сам
файл является большим чанком, внутри которого находятся чанки меньшего
размера. Файл может быть одно- и многостраничным, в случае
многостраничного файла в начало добавляется каталог страниц.
Нужно отметить, что количество чанков внутри файла никак не соразмерно
с количеством страниц, потому что для рендеринга страницы может
использоваться несколько чанков.
Что же нового придумано в формате DjVu?
В отличие от GIF/JPEF/PDF и прочих страница документа может
разбиваться на несколько слоев. В самом общем случае это foreground,
backgroung, маска разделения этих двух слоев и дополнительная
текстовая информация. Процесс кодирования это своего рода искусство разделить
отсканированный документ на слои и определить что попадет в
foreground, что в background в результате сжатия. И самая
сложная часть алгоритмов - именно в этом. Поэтому, как я уже говорил,
коммерческие кодеры обычно работают лучше DjVuLibre, потому как
алгоритмы там более отточенные.
Что такое разделение на слои и зачем такие сложности? Дело в том, что
книги (и соответственно их сканы) содержат информацию, которую нужно
обрабатывать совершенно по-разному. Например, для текста важно
сохранить максимальное разрешение буковок, при минимальной информации
о цвете, для фотографий же такой подход неприемлем ввиду большого
объема в результате такого подхода и так далее. DjVu же разделяет
сканы на слои, к которым применяются принципиально разные методы
сжатия. При просмотре слои последовательно рендерятся и объединяются в
конечной картинке.
Z-coder.
Арифметический кодер/декодер который
является основой всех преобразований в DjVu. Принцип действия похож на
тот, что применяется в алгоритме BZIP2. Подробности можно почитать в
[4]. Этот кодек применяется как фильтр - выходной при создании чанков
и входной перед рендерингом слоев.
JB2 encoder.
Применяется для упаковки bitonal
данных, таких как текст, черно-белые рисунки и пр. Может хранить
маску, т.е. информацию о том, что попадает в background, а что в
foreground. Вся информация хранится в виде библиотеки (dictionary)
форм (shape)
плюс положение каждого объекта на плоскости страницы. Сами библиотеки
могут быть общими для нескольких страниц. Легче всего это представить
таким образом. К примеру есть отсканированный текст, кодировщик определяет похожие буковки,
скажем все 'а', 'б' etc и создает библиотеку, в которой находится
информация о каждой букве (форме), а потом просто информация, что 'a'
находится в таком-то и таком-то месте, 'б' в таком-то и так
далее. Поскольку, как я говорил, словарь может быть расшарен между страницами,
упаковка получается зверская. В дополнение к всему этому может быть сохранена
информация о цвете форм, то есть если есть, скажем, красная 'а' и синяя
'a' в скане, то в библиотеку попадет только одна 'а', будет записана
информация о местоположении двух форм 'а' и о их цвете. Цвет хранится в
индексированном виде, точно так же, как и в GIF файлах.
Сигнатура чанка для JB2 слоя - 'Sjbz', может ссылаться на внешнюю
библиотеку форм - 'Djbz' чанк. Информация о цветах форм находится в
чанках 'FGbz'.
Все такие чанки пожаты Z-coder'ом.
IW44 encoder.
Wavelet кодер. Применяется для упаковки фотографий,
backgroung. Foreground цвета тоже могут быть упакованы таким же
образом. Принцип упаковки такой же как, в формате JPEG
2000. Подробности в [3].
Может быть упакована как цветная, так и b/w информация. Информация о
background обычно сохраняется с меньшим (как правило в 3 раза)
разрешении, чем JB2. Если foreground упакован таким способом, то 'Sjbz' маска
определяет, что попадает в foreground, а что нет. Информация и цвете
кодируется не в RGB, а YCbCr (яркость плюс разностные каналы, как в
телевидении).
Сигнатура чанка для background слоя - 'BG44', foreground - 'FG44'.
Опять же, все такие чанки пожаты Z-coder'ом.
Прочая информация.
Текстовый слой - 'TXTz'. Распознанный текст совместно с его
расположением на странице. Информация о расположении может быть
детализована до слов или до строчек. Этот слой позволяет использовать
поиск с подсветкой найденного на странице и индексировать DjVu
документы.
Аннотации - 'ANTz'. Ссылки и информация о том, какие слои выводить
по умолчанию при открытии файла.
'TXTz' и 'ANTz' пропущены через Z-coder.
Кроме того может быть закодирована информация о кодере (чанк 'CIDa') и
прочее. Четкого стандарта нет, но эта информация в принципе
не нужна для нормального декодирования.
Ограничения формата.
- Максимальный размер страницы 65535x65535px
- Отсутствие контрольных сумм внутри формата и чанков (битый файл
все равно распакуется, но в непотребную кашу). На практике -
лучше заархивировать DjVu файлы, что гарантирует их целостность
- Отсутствие криптования и ограничений на использование
информации (поборники DRM тихо курят в сторонке). Ну это скорее не
ограничение, а плюс. Насколько мне известно, были попытки сделать
некий Secure DjVu на базе обычного, но ничего путного не получилось
Вот вкратце и все. Особо интересующихся отсылаю к исходникам DjVuLibre.
Буду рад, если представленная информация помогла ответить на вопросы и
разобраться в предмете.
Благодарности
Leon Bottou за ценную информацию о потрохах DjVu.
Литература
- 1. "Specification of DjVu Image Compression Format." AT&T 1999.
- 2. "Lizardtech DjVu Reference. DjVu v3." 2005.
- 3. С. Уэлстид. "Фракталы и вейвлеты для сжатия изображений в действии."
- 4. Ватолин Д., Ратушняк А., Смирнов М., Юкин В. "Методы сжатия
данных. Устройство архиваторов, сжатие изображений и видео."
Tags: djvu viewers
Назад в оглавление
|