Ситуація наступна:
$ du -h --max-depth=1 jpg/
253M jpg/
$ ls jpg|wc -l
506
jpegs вироблені якимось терплячим китайцем, у якого не було сканеру, а
була, якщо вірити exif, камера Canon EOS 5D Mark II. Середній розмір
jpg--525KB, кожний файл--окрема сторінка книжки.
Спочатку я хотів їх склеїти у pdf, але що то був би за страхітливий
pdf? Робити OCR? У мене ADD та я не бібліотекар! Хоча іноді здається
що було би непогано завести запасну дівчину з якоїсь бібліотеки, якій
раз на місяць можна було би скидати свої онглійські опуси для
вичитування та всілякий мотлох для OCR. В таком аспєктє, ггг
Коли я був студентом, у капиях (КПИ) було вельми популярне djvu. Мене
той хформат неймовірно дратував, бо останнє що мене хвилювало це
розмір хфайлів, а
а) геть усі капєїшні djvu, що я бачив, були відсканованими кортинками
без текстового шару (прошарку? рівня? як є правильно 'text layer'
українською?);
б) засоби перегляду djvu чудово працювали на кольорових зразках
"погляньте який наш djvu модний, милий та маленький!", але
постійно валилися у core dump на гаргантюажних та пантагрюельних
файлах які потрапляли до мене;
в) djvu utils завжди виглядали покинутими та бездоглядними, т.я.
компанія яка їх оригінально виробляла зробила pivot у geospatial
data площину.
Глузування гооглування сьогодні наводить мене на думку, що
змінилося мало що, окрім дивної завзятості у користуванні djvu в
університетах центральної Європи.
Що вийшло
$ du -h _out/book.m*
9.0M _out/book.meta.djvu
З 253MB до 9! Включаючи the text layer.
djvu то є чорна магія, для осягнення якої треба бути трішки алхіміком.
$ du -h jpg/0012.jpg _out/0012.djvu
597K jpg/0012.jpg
16K _out/0012.djvu
З

до

Користувачі djvu належать до дивовижної кліки, яка надає перевагу
натякам замість інструкції. Наприклад вони скажуть, що краще всього
трансформувати jpg у байтонал кортинку через байтонал tiff. Байтонал
кортинку? Так, тому що вейвлет-перетворення у компресії безперервного
тону, більш відомий як IW44, не підходить для кортинок відсканованого
тексту у градаціях сірого, для яких найкращий вібір є JB2--байтонал
компресія з виявленням півтонів.
У такий момент, кожен член таємного товариства djvu робить складне
обличчя та незграбно підправляє квадратні окуляри.
Щоб зробити правильній tiff знадобиться netpbm. Про хформат pbm я хіба
що читав у вікіпідіа та вважав що воно померло у 80x, але сьогодні
літо 2018:
$ jpegtopnm foo.jpg | pamthreshold | pamtotiff > foo.tiff
(зітхає)
Тоді, якщо tiff не подобається (занадто темний, або навпаки),
доведеться гратися з pamthreshold, напр:
pamthreshold -simple -threshold=0.62
Аж потім конвертувати той tiff ув djvu:
$ cjb2 -lossy foo.tiff foo.djvu
Але чим foo.djvu
переглянути? У федорі djview4 йде чомусь в окремому
rpm. Найпопулярніший переглядач взагалі, є російський (еге)
WinDjView:
Коментарі від розлючених європейців:
'Yet another trash bundle. Deleted it right after violent
installation. [...] it appears to be malicious software. After
restarting browser I got my homepage set to yandex.ru and all of my
settings/history/passwords/addons are gone.'
гагага
Моя рекомендація така: дотримуйтеся діфолтного djview4 або Суматри. Хоч
WinDjView є GPLv2 (аудиту, звичайно, ніхто не робив) та має корисні
удосконалення типу magnifying glass, воно стабільно падає при спробі
переглянути metadata документу.
Це все звичайно цікаво, але як то до такого djvu хфайлу додати a text
layer?
Найпопулярніша OCR у лайнуксах є Tesseract, але від однієї OCR глузду
є небагато: кожне розпізнане слово має бути приліплено до відповідних
координат на кортинці. Tesseract цього робити не вміє. На вікімідіа є
якийсь примітивний перловий скрипт, який намагається кожен розпізнаний
рядок тексту прибити до відповідного рядка ув кортинці, але він
(скрипт) не працює.
Poles are to the rescue!
Вкраїнські лінгвісти то є одні з наймерзотнійших паразитів. Вони 28й
рік поспіль старанно роблять ніхуя для української мови. Єдиний
український "проект" (який мені відомий), у якому задіяли "справжнього"
лінгвіста, це є сраний уйоб інтерхфейс до декількох словників
(https://r2u.org.ua/), який рекламувався на наглухо припиздженому ДОУ
з таким лютим пафосом, ніби вони написали новий OCR двигун.
Мінвайл у ЄС:
'Projekt badawczy Ministerstwa Nauki i Szkolnictwa Wyższego
Tytuł: Narzędzia dygitalizacji tekstów na potrzeby badań
filologicznych
Instytucja realizująca: Uniwersytet Warszawski, Wydział Neofilologii, Katedra Lingwistyki Formalnej'
Еге, кафедра формальної лінгвістики.
Той грант дозволив Якубу Вілку (який має невдале ім'я, тому що так
само звуть якогось польського хфутболіста), написати невеличку
пáйфонівську програмку ocrodjvu,
яка робить рівно те що мені потрібно: викликає Tesseract та анотує
кожне слово у лісп-схожій дата структурі для djvused, який додає такі
аннотації як a text layer у djvu файл!
Славимо Якуба Вілка!
Meta
Останне, що кортіло до книжки додати це є аутлайн. djvused це вміє,
все що йому треба це є (знову) лісп-лайк структура:
(bookmarks
("Preface" "#8")
("1 Introduction" "#13"
("1.1 A Brief History" "#15")
)
)
До речі, так мав виглядати html, якщо б у Церні було трохи поменше
фізиків, а трохи побільше compsci пацанів.
Зе мейкфайл
Директорія з вихідним кодом:
$ tree -L 1 --noreport --dirsfirst -F
.
├── jpg/
├── _out/
├── bookmarks.lisp
├── Makefile
└── meta.txt
_out/
-- куди все.
$ cat Makefile
.DELETE_ON_ERROR:
src := jpg
out := _out
$(out)/book.meta.djvu: $(out)/book.djvu bookmarks.lisp meta.txt
cp $< $@
djvused -e 'set-outline bookmarks.lisp' $@ -s
djvused -e 'set-meta meta.txt' $@ -s
$(out)/book.djvu: $(patsubst $(src)/%.jpg, $(out)/%.djvu, $(wildcard $(src)/*.jpg))
djvm -c $@ $(sort $^)
# bitonal
$(out)/%.tiff: $(src)/%.jpg
@mkdir -p $(dir $@)
jpegtopnm $< 2>/dev/null | pamthreshold -simple -threshold=0.62 | pamtotiff > $@
%.djvu: %.tiff
cjb2 -lossy $< $@
ocrodjvu --in-place $@