DjVu: Краткое техническое введение

Иван Зенков mailto:zenkov@linux-online.ru

Методика сжатия и программная платформа для публикации сканированных и цифровых документов, а также высококачественного изображения в сети Интернет.

Примечание:

Всё, что идёт ниже написано как раз самими авторами и взято мной с официального сайта DjVuLibre. Давайте вы всё это почитаете, а потом мы уже более подробно всё рассмотрим. В принципе то, что написали Yann, Leon и Patrick уже правда, но она требует некоторых пояснений.

Несмотря на растущую важность Интернета, большая часть знаний в виде культурного и образовательного материала уже существующего сегодня, всё ещё доступна лишь в бумажной форме. Внедрение данного информационного богатства в цифровую область, в схожем с оригиналом виде, с лёгким доступом и поиском, является основным шагом к созданию Всемирной Интернет Библиотеки.

DjVu (произносится как "дэжа вю") это технология сжатия, файловый формат и универсальная платформа специально спроектированная для создания цифровых библиотек на основе печатного, сканированного или цифрового материала. Так например для сканированного документа, размер DjVu файла обычно в 3-10 раз меньше чем чёрно-белый TIFF или PDF и в 5-10 чем цветной JPEG.

Обычная страница из книги, журнала или древней рукописи отсканированная в цвете и 300dpi содержит порядка 8 миллионов пикселей и занимает 24MB в несжатом виде. Традиционные технологии сжатия такие как JPEG обладают следующими минусами:

DjVu избавляет от этих проблем обрабатывая двутональные документы, низкоцветовые (индексированные) изображения, изображения с непрерывным спектром тонов (фотографии и т.д), сканированные цветные и чёрно-белые документы, цифровые документы (например в Postscript или формате PDF).

Двутональные документы закодированы методом JB2 который формирует сжатую библиотеку из повторяемых форм в документе (например символов) и кодирует их место появление на каждой странице. Низкоцветовые изображения сжаты аналогичным путём, с добавлением цветовой палитры и цветового индекса для каждой формы. Изображения с непрерывным спектром тонов сжаты прогрессивным "wavelet-based" методом IW44, равным JPEG-2000 в отношении шумового коэффициента, но чей декодер/рендер более эффективен, занимает меньше памяти и оптимизирован для более быстрой работы (в 3 раза быстрей чем быстрый режим JPEG-2000). Внутренние кодеры обширно используют новый бинарный адаптивный арифметический кодер, названный "Z-coder".

Цветной отсканированный документ разбивается на передний и фоновый план. Передний план содержит текст, линии и кривые сжатые как двутональное или низкоцветовое изображение с максимальным разрешением (используется JB2), сохраняя резкость и удобочитаемость текста. Фоновый план содержит изображения и бумажные текстуры сжатые в уменьшенном разрешении с IW44. Фоновый план, находясь под приоритетными компонентами, сглаживается для уменьшения размера. Сегментатор переднего и фонового плана сначала обнаруживает объекты резко противопоставленные их окружению и затем классифицирует их в передний или фоновый план используя несколько критериев, типа их цветовой однородности, геометрии и веса.

Цифровые PDF и PostScript документы превращаются в список команд рисования нижнего уровня, используя популярный инструментарий GhostScript. Далее этот список транслируется в список форм которые впоследствии классифицируются в передний или фоновый слой используя эвристический анализ. Затем слои сжимаются как сканированные документы.

Двутональные DjVu документы обычно занимают 5-30KB на страницу в 300dpi, что в 3-8 раз меньше чем Group 4 (используемый в Fax машинах, в TIFF файлах и в PDF). Низкоцветовые изображения, например иконки, обычно в 2 раза меньше чем GIF, но могут быть и в 10 раз меньше если содержат много текста. Фотографии в 2 раза меньше чем JPEG и схожи по размеру с JPEG-2000 в быстром режиме для SNR. Интересный аспект "wavelet" кодер-декодера IW44 - то, что он позволяет оперативную декомпрессию/рендеринг области видимой в окне на экрана дисплея (и не больше), если например пользователь увеличивает какие-то фрагменты и балуется с панорамированием. Это позволяет сохранять изображения в сжатой форме в оперативной памяти клиентской машины и отображать больше изображения без требования чрезмерных объёмов памяти. Сканированные цветные и чёрно-белые документы в DjVu обычно занимают 30-100KB на страницу в 300dpi, что в 5-10 раз меньше чем JPEG и около 2-3 раз меньше чем MRC/T.44 или TIFF/FX. Цифровые документы с большим объёмом текста обычно в 1-3 меньше чем PDF или сжатый gzip'ом PostScript в 300dpi, но могут быть и значительно меньше если документ содержит изображения.

DjVu документы могут быть отображены через вэб браузер с помощью очень маленького plug-in'а (доступного для всех основных платформ). Всё в дизайне DjVu было оптимизировано чтобы уменьшить задержку между решением пользователя рассмотреть страницу и её отображением на экране. Многопоточная программная архитектура с умным кэшированием позволяет индивидуальным компонентам документа быть загруженными и преддекодированными по требованию. Страницы загруженные по требованию, дают произвольный доступ без предшествующей загрузки полного документа. Компоненты страницы (передний план, фоновые куски) загружаются последовательно и рендрятся отдельным потоком как только загрузка считается завершённой. Всё это даёт прогрессивный рендеринг и улучшает качество изображения. Страница, которая следует за страницей, в настоящее время отображаемой, предзагружена, преддекодирована и кэширована, посредством чего автоматически уменьшается задержка между перелистыванием страниц. Просмотрщик DjVu файлов обладает своим "независимым" графическим интерфейсом пользователя который позволяет быстро изменять масштаб изображения, панорамирование и зеркальное отражение страницы одним кликом мыши или нажатием клавиши на клавиатуре.

Передний слой может быть подвергнут OCR, а результат внедрён назад в файл DjVu как доступный для поиска уровень "скрытого текста". Существует и соответствующий инструментарий для извлечения такого текста и перевода его в ряд форматов, которые включают каждое слово с координатами его ограничивающего прямоугольника на странице. Форматы также включают структуру документа (страницы, столбцы, параграфы, строки, слова). Гиперссылки, аннотации, эскизы страниц и другие метаданные тоже могут быть внедрены в документы DjVu.

Полнотекстовый поиск на стороне сервера можно легко обеспечить, используя свободные инструментальные средства индексации и несколько скриптов на Perl. Существуют большие DjVu-библиотеки с полнотекстовым поиском доступные через Интернет, такие как "NIPS Proceedings" (http://nips.djvuzone.org/, 13 томов, 14,000 страниц в 400dpi, 191MB), "Century Dictionnary" (http://www.century-dictionary.com/, 12 томов, свыше 10,000 страниц, 500,000 определений, 22 миллиона поисковых слов, 850MB) наряду с несколькими национальными библиотечными коллекциями и собраниями от коммерческих провайдеров во всём мире. На данный момент в Интернете DjVu используют тысячи пользователей для публикации и обмена отсканированными документами. Список выборочных сайтов использующих DjVu, доступен здесь.

DjVu может рассматриваться как основная открытая платформа для обмена документами так как библиотека DjVu, включая многопоточный декодер/рендер, кодер IW44, кодер палеттизированного изображения, а также кодеры простых двутональных и цветных документов теперь являются свободным программным обеспечением доступным под GNU GPL и могут быть использованы как платформа для разработки новых кодеков, схем сегментации, механизмов передачи данных, интерфейсов просмотрщика и систем контент-анализа.

Примечание:

Ну, а теперь как я и обещал пойдёт моя отсебятина.

Для начала наверное было бы неплохо рассказать как я собственно познакомился с этим форматом. Ведь не часто случается, чтобы человек целенаправленно искал какой-то там новый формат. Если он конечно не чокнутый программист помешенный на идеи превратить какой-нибудь обычный GQview в чудо природы мира viewer'ов. Ну разумеется я не чокнутый и судьба GQview меня почти не волнует, я больше как-то читать люблю. Короче я искал книгу, причём точно по какому-то C и о чудо нашёл. Google рулит несказанно, но поиска по DjVu в нём нет, за-то есть поиск по PDF, таким образом я и наткнулся на нечто. Это была огромная библиотека (около 2.4GB) с новыми (2002-2003 гг.) и классическими книгами по физике, математике, программированию и что любопытно большая часть была в каком-то компактном формате, под названием DjVu. То есть уже видел, в смысле переводится как "уже видел", но к тому моменту я о нём ещё не знал. Сделав лёгкое движение рукой в направлении всё того же Google я нашёл проект DjVuLibre и о счастье он оказался свободен, в смысле не отвергнут дамой, а под GPL. Тут то всё и завертелось.

В Gentoo (это у меня дистрибутив такой), в Portage оказалось таки это чудо (в смысле DjVuLibre) и уже через полчаса я его старательно изучал. После этого самого изучения и некоторых экспериментов с кодированием, декодированием (а DjVuLibre это как раз таки и есть набор различного свободного софта по работе с форматом DjVu) я отложил до лучших времён, то есть сегодняшнего дня, несколько воспоминаний и сделал пару долгоживущих выводов. Для начала самое важное и возможно то, что вы уже поняли. DjVu как формат состоит как бы из целых четырёх технологий сжатия:

Теперь немного подробней попытаюсь технологию рассмотреть или хотя бы наглядно показать. Вот пример того самого замечательного DjVuPhoto, точней даже не пример, а так пузомерка на глаз. Возьмём красивую девочку, чтоб вы знали она весит около 176KB, что вполне нормально для JPEG файла, но слишком много для DjVu. Эта же самая картинка в DjVu уместилась всего в 80KB и это был не придел, просто мне надоело играться с опциями и я решил оставить всё как есть (хотя легко получал экземпляры и в 40KB). Ну и разумеется нет никаких отличий в качестве.

Рука девушки в JPEG Рука девушки в DjVu

Первая фотка выше сделана GIMP'ом с GQview, но не думаю, что это играет какую-то роль. Вторая фотка, ручка всё той же леди, только на этот раз в DjVu и снята соответственно с DjVu Viewer всё тем же GIMP'ом. Разумеется, чтобы избежать несоответствия здесь вы видите чистой воды PNG изображения, без какой бы то ни было индексации.

Как говорится найдите десять отличий, но я надеюсь, что вы мне верите на слово, а иначе зачем я всё это пишу? Ну дак вот на слово, а слово моё гласит, что DjVu действительно меньше JPEG и точка. Причём чем больше и качественней изображение тем больше будет различие размеров, тем меньше будет DjVu и больше JPEG. Ешё один очень любопытный факт, DjVu действительно очень быстро грузиться, даже если изображение огромное. Намного быстрей всё того же JPEG и прочих известных мне форматов, часто даже HTML файл грузится дольше чем DjVu.

Ну да ладно с IW44 кажется разобрались или хотя бы поняли для чего он нужен и в какой области его следует использовать. На очереди у нас теперь JB2, то есть чёрное и белое. На самом деле с DjVuBitonal у DjVuLibre не всё так гладко. Инструментария явно маловато, а тот, что уже создан позволяет лишь то малое, что вообще можно провернуть. Остаётся надеяться на коммерческий софт и бесплатные сервисы, речь о которых ещё пойдёт ниже. Вообще JB2 следует использовать действительно по большей части для книг и здесь он мне кажется вообще незаменимым. Этакий удар между ног PDF, куда приятнее чем какие-то там IW44 и JPEG.

Фрагмент книги Фредерика Брукса 'Мифический Человеко-месяц' в DjVuBitonal

Вот например DjVu документ в 300dpi (а на самом деле книга Фредерика Брукса "Мифический Человеко-месяц") созданный мной из PDF файла. При этом как видно на скриншоте качество не испортилось и даже ссылки не потеряли функциональность (жаль курсор не видно, я его как раз на ссылку навёл). Ведь помните, чего только в этот DjVu нельзя запихать в том числе и гиперссылки, о чём уже говорилось многим выше.

Ещё очень любопытное чудо в виде DjVuDocument которое бы мне вам хотелось показать наглядно на примере карты Ирака.

Цветная карта Ирака в DjVuDocument

Именно так выглядит обычный Багдад на обычной карте Ирака, в необычном DjVuDocument файле. Что собственно необычного? Ну мы же с вами проходили, помните? Передний план, фоновый план, а вот как это выглядит на деле.

Передний план карты Ирака Задний план карты Ирака

Несложно догадаться где передний, а где фоновый. Передний (первое изображение) сжат JB2 и содержит всё основное, фоновый (второе изображение) сжат IW44 и ничего важного не содержит. Более того, если вы обратили внимание он очень сильно сглажен/сжат, в общем то сделано это специально, для уменьшения размера. На обычном изображении где передний план накладывается на фоновый, данное сглаживание/сжатие не очень то и бросается в глаза, а вот если бы его не было, размер файла вырос бы в два, а то и три раза. Более того обратите внимание как DjVu самостоятельно определил где у изображения важные детали, а где второстепенные. Все эти его хваленные анализы действительно работают, чёрт побери, да ещё как работают. Ни одного названия, или даже символа не уехало на фоновый план. Это просто праздник какой-то.

Остался только BZZ, но о нём особенно нечего сказать, за тем лишь исключением, что в роли "скрытого текста" может выступать и зачастую выступает XML в UTF. Вы же понимаете, что это даёт в перспективе.

Вот в общем то и всё. Чем это самое "всё" смотреть вы наверное уже поняли. В поставку DjVuLibre включён не только plug-in для всех популярных браузеров, всех основных платформ, но и замечательный viewer, а точней программа a la Acrobat Reader и действительно, функциональность практически идентична, а то и на порядок выше благодаря QT. Смотрится шикарно, управление простое, интерфейс приятный, ну может разве иконки немного кривые, ну дак я надеюсь избавятся от них в новых версиях, что-нибудь красивое нарисуют.

Ну, а теперь вас наверное волнует вопрос где бы достать много интересных книг и красивых картинок в этом самом DjVu? Ответ, да нигде вы их не достанете. Нет какие-то коллекции конечно есть, но что-то интересное вы вряд ли найдёте. Вроде бы где-то Гамлета видел отсканированного с книги 19-го века, но не думаю, что вас это особо заинтересует. Что же делать? Выход есть и заключён он в тех самых бесплатных сервисах о которых я ещё обещал рассказать. Причём действительно полезен один из них, это http://any2djvu.djvuzone.org/. Он создан для перевода ряда форматов (практически все графические, PDF, PS и т.д.) в DjVu. На этом можно было бы и остановиться если не одно, но. Там есть очень любопытная опция позволяющая не загружать файл на сервер, а скачать файл туда же. То есть например имеем мы увесистый PDF файл (как правило они меньше 3MB не весят), а точней URL на него. Заходим на any2djvu, указываем URL, сервер его скачивает, конвертирует и в нужном нам качестве создаёт DjVu (как правило раза в 3 меньше чем PDF), после чего мы этот маленький DjVu файлик уже самостоятельно скачиваем с any2djvu. Хотите пример из жизни? Вот здесь находятся два огромных PDF файла, они так огромны поскольку состоят из отсканированных страниц. Боюсь соврать, но их вес что-то около 20MB, дак вот any2djvu их быстренько себе скачает (у них там я так понимаю нет проблем ни с трафиком не с оптоволокном) и выдаст нам DjVu файлики по 2-3MB каждый. После этого, согласитесь наша задача значительно облегчена, мы сэкономили свой трафик и своё время (в случае если трафик не имеет значения). Тоже самое можно делать и с изображением. Так например на http://www.deviantart.com/ очень много больших и увесистых картинок, а с any2djvu мы не только уменьшим размер, но ещё и значительно увеличим скорость загрузки. Помните я говорил, что DjVu грузиться гораздо быстрей и надёжней чем JPEG, дак вот у вас будет возможность убедиться в этом лично. Хотите какую-то ещё реальную область применения DjVu? Ну например если у вас большая коллекция порнографии, мы можете уменьшить её объём процентов этак на шестьдесят, используя только программу c44 (входящую в комплект DjVuLibre). А вы думали бесполезная это штука, а она вон сколько пользны принести может.

Ну и напоследок проблема 2000 точней DjVu vs. JPEG-2000. Я уже не знаю насколько это справедливо, я пока ещё не знаком с JPEG-2000, но мне кажется, что это несколько разные вещи. DjVu это скорей конкурент различным извращениям от Adobe, универсальный формат для различной документации, как рукописной так и печатной. Но именно сейчас мне ясно лишь одно, это невероятная вещь заслуживающая должного внимания как со стороны новых разработчиков (GPL NOW!), так и со стороны пользователей. Используя и разрабатывая современные форматы сегодня, мы открываем дверь в завтрашний день и пусть он будет для нас счастливым. Чёрт аж скупая слеза покатилась...

Rus-Linux Остальные мои статьи можно найти на моей страничке.

Источник: http://rus-linux.net/zen/djvu_abstract/djvu_abstract.html

Hosted by uCoz