Aide:Créer un fichier DjVu/Linux

La bibliothèque libre.
Aller à la navigation Aller à la recherche

Vous êtes ici : accueil >Aide >Créer un fichier DjVu >Linux

Aide : Manuel de Wikisource

Préparation des images[modifier]

On donne dans cette section les commandes dont on peut avoir besoin pour préparer des images avant de les convertir au format DjVu, par exemple en partant d’un fichier obtenu sur Gallica (voir aussi Google Livres).

Extraction des images d’un pdf[modifier]

Pour extraire toutes les images d’un pdf :

pdfimages nomdufichier.pdf xxx

ou « xxx » est le nom de base des images extraites. pdfimages est fourni par Poppler-utils qui est installé par défaut sur la plupart des distributions GNU/Linux.

Les images sont extraites au format ppm ou pbm. Pour les images obtenues à partir des fichiers Gallica et Google Livres, il est nécessaire de faire un tri, en supprimant les logos, les pages d’avertissement ou les pages blanches qui ne font pas partie des livres.

Il est conseillé de faire cette extraction dans un dossier dédié.

Enlever les marges[modifier]

Pour enlever les marges blanches d’une image en conservant une bordure :

mogrify -trim -bordercolor white -border 10x10 image.jpg (ou ppm, etc.)

La largeur de la bordure peut être augmentée : 20x20, 40x40 etc.

Pour un dossier d’images, au format pbm :

mogrify -trim -bordercolor white -border 10x10 *.pbm

Il est conseillé de faire une sauvegarde de vos images, car cette manipulation les remplace par des images retaillées.

Conversion en divers formats[modifier]

Les images extraites et retaillées peuvent être converties directement au format DjVu, à l’aide des utilitaires décrits dans la section suivante. S’il est nécessaire de faire des conversions dans divers formats, on peut utiliser mogrify.

Par exemple, pour convertir toutes les images d’un dossier au format jpg :

mogrify -format jpg *.pbm

On peut aussi réunir ces images en un seul fichier pdf :

mogrify -format pdf *.jpg
pdftk *.pdf cat output fichier.pdf

pour convertir ensuite ce dernier avec pdf2djvu.

Conversion au format DjVu en ligne de commande[modifier]

Il existe plusieurs utilitaires de conversion en ligne de commande disponibles dans les dépôts de la plupart des distributions GNU/Linux. Ils sont ici présentés d’après les types de conversion dont on peut avoir besoin.

Voir DjVuLibre pour la documentation détaillée : cjb2, c44, cpaldjvu, csepdjvu etc.

Remarque  : Pour la couche texte (OCR ou ROC), seul pdf2djvu la conserve à partir d’un pdf. Pour les autres cas, consultez la section sur la ROC plus bas dans cette page.

Conversion directe d’un pdf avec pdf2djvu[modifier]

Dans le cas où votre pdf est déjà de qualité suffisante (complet, détouré, etc.), et que vous n’avez pas de couche texte à ajouter, vous pouvez utiliser directement le paquet pdf2djvu avec la commande :

pdf2djvu -d 300 -o nouveau-fichier.djvu fichier-d-origine.PDF


où « d » (dpi) est la résolution du document d’origine, 300 en général pour un pdf de Gallica. Si la résolution finale est trop faible augmentez ce paramètre à 600 ppp :

pdf2djvu -d 600 -o nouveau-fichier.djvu fichier-d-origine.pdf

Par défaut, pdf2djvu insère dans le fichier DjVu le texte (OCR) du fichier d’origine.

Images bitonales avec cjb2 et minidjvu[modifier]

Avec cjb2 :

cjb2 -clean fichier.pbm fichier.djvu

Minidjvu permet de créer des fichiers djvu à partir d’images bitonales (noir et blanc) de format pbm ou tiff, comme le fait cjb2. Par exemple :

minidjvu *.pbm fichier.djvu

convertit toutes les images pbm d’un dossier en un seul fichier DjVu.

Lorsque l’on utilise l’option --lossy ou une partie des options auxquelles celle-ci est équivalente (--match --erosion --clean --smooth), il donne des fichiers plus petits que cjb2 utilisé avec les options équivalentes.

L’utilisation de --lossy ne provoque le plus souvent pas de perte visible de qualité, dans le cas contraire (lorsque des traits très fins ou des fonds gris disparaissent), son remplacement par --match --erosion donne généralement un résultat satisfaisant.

Images en couleurs avec didjvu[modifier]

Didjvu permet de créer des fichiers djvu à partir d’images en couleurs. Il sépare l’avant-plan et l’arrière-plan, ce qui permet d’utiliser au maximum les capacités du format DjVu et d’obtenir des fichiers beaucoup plus petits que ceux encodés avec c44.

Exemples d’utilisation :

didjvu encode --lossy -o mon-fichier.djvu mon-fichier.pnm

Pour convertir un dossier d’images en un seul DjVu :

didjvu bundle *.pbm -o mon-fichier.djvu

Si la qualité du résultat n’est pas suffisante on peut essayer une ou plusieurs des suggestions suivantes :

  • Essayer les différents algorithmes de séparation d’avant-plan et d’arrière-plan en utilisant l’option -m <nom de l’algorithme>. Didjvu en propose 9 (djvu, utilisé par défaut, abutaleb, bernsen, niblack, otsu, sauvola, shading-subtraction, tsai, white-rohrer), et suivant le type d’image ce ne sont pas toujours les mêmes qui donnent le meilleur résultat.
  • Retirer --lossy, ou le remplacer par --clean.
  • Ajuster les options concernant la qualité de l’avant-plan et de l’arrière-plan, en particulier essayer d’augmenter --fg-slices (100 par défaut) ou de diminuer --fg-subsample (6 par défaut). Ces options influencent considérablement la taille du document obtenu.
  • Si on ne tient pas à la préservation des couleurs exactes de l’image, augmenter le contraste avec convert (ou mogrify) d’ImageMagick : convert -contrast image-in.pnm image-out.pnm, on peut répéter plusieurs fois l’option -contrast sur la ligne de commande. C’est utile lorsque les scans contiennent du texte écrit sur un fond de couleur et que didjvu ne parvient pas à séparer correctement le texte de l’arrière-plan.

DjVuPhoto avec c44[modifier]

Voir le détail des paramètres : djvuzone.org

didjvu produit de petits fichiers, mais dégrade plus ou moins fortement la qualité des images selon l’algorithme utilisé, ce qui peut donner de médiocres résultats pour des illustrations par exemple. c44 donne de meilleurs résultats, grâce à un encodage appelé DjVuPhoto, mais les fichiers sont bien plus volumineux.

Par défaut, c44 produira des images DjVu très proches des fac-similés originaux, pour un volume deux fois moindre que le format jpg. Comme la qualité peut être inutilement élevée pour des fac-similés de livres, on peut la diminuer pour obtenir de plus petits fichiers.

Par exemple, on veut convertir toutes les images jpg d’un dossier de 260 Mo :

for i in *.jpg; do c44 "$i"; done;

On les assemble ensuite en un seul fichier DjVu :

djvm -c monfichier.djvu *.djvu

et on obtient un fichier de 135 Mo dont la qualité des images a été très peu dégradée par la conversion.

En diminuant la qualité :

for i in *.jpg; do c44 -slice 74+13+10 "$i"; done;

on obtient un fichier de 109 Mo. La différence de qualité est encore à peine perceptible ; aussi peut-on faire des essais avec le paramètre « slice », si l’on souhaite obtenir un fichier DjVu conservant autant que possible la qualité des fac-similés originaux.

Comparaisons/résumé[modifier]

Les paramètres de la conversion DjVu sont très techniques et difficiles à maîtriser. Nous essaierons dans cette section de donner des exemples de configuration pour la conversion d’images de différentes qualités et résolutions, mais ces exemples sont empiriques, et des explications plus éclairées restent à fournir.

Pour des fichiers en noir et blanc (Gallica, Google Livres), on peut se contenter de pdf2djvu qui donne de bons résultats (mais pas toujours) ou de cjb2 et minidjvu pour la conversion des images extraites de ces fichiers.

Pour des fac-similés en couleurs, didjvu et c44 sont adaptés selon les cas.

didjvu : 70 Kio. Fond plus lisse et lettres un peu floues.
c44 : 213 Kio. Aucune dégradation visible.

Voici une illustration de conversions par défaut d’une image de Gallica de 874 ko dans une résolution de 2000x3800 (cliquez sur les vignettes pour agrandir). Dans le cas de cette image, didjvu permet d’obtenir un meilleur rapport qualité/volume, puisque la compression est très forte, et la perte de qualité, si elle est sensible lorsque l’on zoome, est peu perceptible dans l’espace « Page » (comparez didvu et c44).

On peut dès lors, selon les cas, augmenter un peu la qualité de la conversion de didjvu, mais on aura semble-t-il toujours avec cet utilitaire un effet de collage du texte sur le fond, puisque son principe est de séparer l’arrière-plan et le texte.

On peut également essayer d’améliorer la conversion en combinant fg-slices, fg-subsample et divers algorythmes. Par exemple, avec :

didjvu encode --fg-slices 120 --fg-subsample 5 -m abutaleb fichier.jpg -o fichier.djvu

les lettres sont plus nettes, le fond moins abîmé et l’illustration moins effacée, pour une image de 86 Ko.

didjvu : 16 Kio. Lissage accentué, des détails commencent à disparaître.
c44 : 83 Kio. Lettres un peu floues.

Une conversion de la même image, dans une résolution de 815 × 1 566 pour un volume de 142 ko, montre que les défauts de didjvu sont accentués : les lettres sont abîmées, le fond est fortement lissé et des détails sont susceptibles de disparaître. Même en augmentant la qualité de la conversion, ces défauts persistent. De plus, cette augmentation de la qualité produit un fichier d’un volume comparable à c44, et tout de même moins bon.

Dans l’espace « Page », ces différences sont très visibles (comparez didvu et c44). Dans ce genre de cas, on aura donc intérêt à utiliser plutôt c44.

Scripts de conversion[modifier]

Ces scripts automatisent certaines des opérations décrites dans les sections précédentes. Ils dépendent d’ImageMagick, de DjVuLibre et de poppler-utils.

Pour les débutants, vous pouvez voir cette Introduction aux scripts shell et, pour plus bas, une Brève introduction et vue d’ensemble de Perl.

Lot d’images[modifier]

Les commandes expliquées au début de cette page peuvent être plus ou moins automatisées. Par exemple, après avoir extrait des images bitonales d’un pdf avec pdfimages, on peut utiliser le script suivant en l’adaptant afin de les retailler et de les convertir :

#!/bin/bash
convert -negate Plaute-000.png Plaute-000.pbm
cjb2 -clean Plaute-000.pbm Plaute.djvu
 
for n in `seq -w 1 421`
do
        i="Plaute-$n"
        mogrify -trim -bordercolor white -border 10x10 $i.pbm
        cjb2 -clean $i.pbm $i.djvu
        djvm -i Plaute.djvu $i.djvu
        echo $i
done

Pdf avec suppression des marges[modifier]

Ce script fonctionne comme le précédent, mais il est plus complet car il part du fichier pdf. Il en extrait les images, les retaille et les convertit en un seul fichier DjVu. La résolution par défaut est 300 dpi. Le script ne conserve pas l’OCR.

Copiez ce script dans un fichier pdf2djvu.sh, rendez-le exécutable, puis utilisez-le ainsi : sh pdf2djvu.sh nomdupdfàconvertir.pdf

Fichiers pdf Google Livres[modifier]

Reconnaissance optique de caractères (OCR)[modifier]

Le programme d’OCR libre le plus performant est Tesseract. Il peut être utilisé en ligne de commande ou avec certains utilitaires de numérisation, comme gscan2pdf. FineReader est un programme d’OCR propriétaire très puissant qui peut être utilisé, dans sa version 8, par l’intermédiaire de l’Internet Archive pour récupérer une couche texte. Les pdf de Google Livres possèdent une couche texte souvent de très bonne qualité, et une partie des pdf de Gallica contiennent également une couche texte, de qualité variable.

Extraire et ajouter une couche texte[modifier]

Ces manipulations sont utiles si vous avez besoin de programmes différents pour l’OCR, la manipulation et la conversion des images.

Les pages dans les fichiers DjVu doivent conserver le même nom d’un fichier à l’autre pour pouvoir réinsérer le texte. Par exemple, si vous récupérez une couche texte d’un fichier DjVu de l’Internet Archive, les pages du fichier DjVu dans lequel vous voulez réinsérer le texte devront être nommées d’après le fichier source : titre_0000, titre_0001, titre_0002, etc. Cette information peut être obtenue en ouvrant le fichier dans DjView, Voir > Informations…

Pour extraire la couche texte d’un fichier DjVu :

djvused fichiersource.djvu -e output-all > file.dsed

Pour ajouter une couche texte :

djvused fichiercible.djvu -f file.dsed -s

Ajouter une OCR à un fichier DjVu[modifier]

ocrodjvu ajoute une couche texte à un fichier DjVu en utilisant Cuneiform, Gocr, Ocrad, OCRopus ou Tesseract. Actuellement, la version 0.7.9 ne fonctionne pas avec Tesseract 3.

Vous pouvez également utiliser le script suivant pour ajouter une couche texte à un DjVu : djvu-ocr.

Conversion avec une couche texte[modifier]

Le script Perl qui suit permet de faire la même chose que le script Bash pdf2djvu.sh, mais permet également d’ajouter la couche texte au fichier DjVu.

Comme pour le script Bash, placez ce script dans votre répertoire de travail (contenant le PDF), par exemple sous le nom pdf2djvu, et rendez le exécutable:

chmod +x pdf2djvu

La transformation se fait en deux étapes : extraction de la couche OCR de la source, puis conversion. La couche OCR peut provenir de Gallica (lors de l’enregistrement, choisissez txt comme format et enregistrez la page résultante dans le répertoire contenant le script et le fichier PDF. L’extraction de la couche texte se fait à l’aide de cette commande :

./pdf2djvu gallica2txt LeLivre.html LeLivre.txt

Vous pouvez alternativement réutiliser la couche texte du PDF. Sur Gallica, la couche texte du PDF a parfois certains problèmes de retour à la ligne, préférez donc la version texte téléchargeable si vous le pouvez.

./pdf2djvu pdf2txt LeLivre.pdf LeLivre.txt

La transformation du PDF en DejaVu se fait à l’aide de la commande suivante :

./pdf2djvu mkdjvu LeLivre.pdf LeLivre.djvu LeLivre.txt [dpi]

dpi est optionnel, il permet de jouer sur la taille de l’image. Plus dpi est grand, plus l’image l’est, mais plus le DjVu résultant est volumineux. La valeur par défaut est 300. Le DejaVu résultant ne devrait jamais être plus volumineux que le PDF d’entrée – si c’est le cas, réduisez ce paramètre.

Si le script vous répond « WARNING: Created file seems invalid » à la fin, ne l’envoyez pas sur Commons, et demandez de l’aide à son auteur ou sur le scriptorium.

Manipulations en ligne de commande (DjVuLibre)[modifier]

Pour la manipulation de fichiers DjVu, cette section complète ce qui a déjà été expliqué ci-dessus, en particulier pour :

  • djvm : Djvm est un utilitaire en ligne de commande pour manipuler des fichiers djvu (assembler, insérer, supprimer des pages). Il fait partie des utilitaires de DjVuLibre.
  • djvused : Djvused est un utilitaire en ligne de commande qui permet de manipuler le contenu d’un fichier, d’obtenir certaines informations sur les fichiers DjVu et de les modifier.

Voir DjVuLibre pour la documentation détaillée.

Assembler des fichiers DjVu[modifier]

Pour un ensemble de fichiers DjVu dans un dossier :

djvm -c monfichier.djvu *.djvu

Supprimer des pages[modifier]

Pour supprimer des pages, comme par exemple les premières pages d’un fichier DjVu :

  1. Ouvrez une console dans le répertoire de votre fichier djvu.
  2. Tapez dans la console :
djvm -d fichier.djvu 1

ou plus généralement :

djvm -d fichier.djvu <n° de page>

en remplaçant fichier.djvu par le nom de votre fichier, et <n° de page> par le numéro de la page. Appuyez sur la touche Entrée.

C’est tout : la page ou les pages indiquées ont disparu.

Insérer des pages[modifier]

djvm -i <doc.djvu> <page.djvu> [<page_num>]

« doc.djvu » est le fichier dans lequel on souhaite insérer une page. « page.djvu » est la page (ou le fichier) à insérer. « page_num » est l’endroit où insérer la page.

Par exemple, soit un fichier DjVu doc.djvu contenant 5 pages. Ces pages sont ordonnées ainsi :

1 2 3 4 5

On veut insérer une page entre la page 4 et la page 5. « page_num » aura donc la valeur 5 :

djvm -i doc.djvu mapage.djvu 5

L’insertion décale donc la page 5 qui devient la page 6.

Numérotation des pages[modifier]

Le format DjVu permet de spécifier un titre pour chaque page, qui est alors affiché à la place du numéro de page par DjView (cette fonctionnalité n’est pas encore supportée par les autres lecteurs de fichiers DjVu). Cela permet d’afficher des numéros correspondant à la position de la page dans le livre plutôt qu’à sa position dans le fichier DjVu.

Exemple : Supposons que nous ayons un fichier fichier.djvu contenant 132 pages, les deux premières et les deux dernières correspondant à la couverture, la page 1 du livre étant la page 3 du fichier. Les cinq commandes suivantes mettent les titres C1, C2, C3 et C4 pour les pages de couverture puis numérotent les autres pages de 1 à 128 :

djvused -s -e "select 1; set-page-title C1" fichier.djvu
djvused -s -e "select 2; set-page-title C2" fichier.djvu
djvused -s -e "select 131; set-page-title C3" fichier.djvu
djvused -s -e "select 132; set-page-title C4" fichier.djvu
for i in `seq 3 130`; do djvused -s -e "select $i; set-page-title $(($i - 2))" fichier.djvu; done

Il est possible d’utiliser des espaces dans les titres de pages, pour cela il faut échapper le titre dans la commande passée à djvused. Par exemple, si la page 42 du fichier est une planche non numérotée que l’on veut appeler « Planche 1 », on exécutera la commande :

djvused -s -e "select 42; set-page-title \"Planche 1\"" fichier.djvu

Utilisation d’un fichier de commandes[modifier]

La méthode précédente a l’inconvénient d’ouvrir le fichier et de le sauvegarder pour chaque numéro de page à ajouter, c’est peu efficace et si le fichier est volumineux c’est même très lent. Pour éviter cet inconvénient, on peut créer un script contenant toutes les commandes que djvused devra exécuter puis les lui faire exécuter en une seule fois. Avec l’exemple précédent, les commandes seraient par exemple :

echo "select 1; set-page-title C1;" > script_pagination
echo "select 2; set-page-title C2;" >> script_pagination
echo "select 131; set-page-title C3;" >> script_pagination
echo "select 132; set-page-title C4;" >> script_pagination
for i in `seq 3 130`; do echo "select $i; set-page-title $(($i - 2));" >> script_pagination; done
djvused -s -f script_pagination fichier.djvu
rm script_pagination

On peut bien sûr créer le fichier avec un éditeur de texte au lieu d’utiliser des commandes echo pour les pages de couverture, et n’utiliser la ligne de commande que pour la boucle for.

Avec une interface graphique[modifier]

Dans l’ensemble, ces programmes n’offrent pas toutes les fonctionnalités indispensables aux contributeurs de Wikisource et certains sont plus complets que d’autres.

gscan2pdf[modifier]

gscan2pdf permet de créer des pdf et des djvu ; c’est le programme le plus complet pour les manipulations et les conversions qui concernent Wikisource. On peut importer des images de différents formats (jpg, png, tiff), des fichiers pdf et djvu en partie ou en totalité. Unpaper nettoie les images (réalignement horizontal, filtres), et une OCR est possible avec Tesseract. Le résultat peut ensuite être enregistré au format DjVu.

Si gscan2pdf est très complet pour faire des fichiers utilisables sur Wikisource, ce programme semble assez lourd et pas très performant. -> il n'y a pas de masque pour le supprimer les bords crop qui soit réutilisable d'image en image.

OCRFeeder[modifier]

Importation d’images (jpg, png) et de pdf ; nettoyage et redressement des images ; OCR avec Tesseract et exportation au format pdf.

Scan Tailor[modifier]

Scan Tailor permet de scinder des pages, de les aligner horizontalement, de rogner les marges et de nettoyer les bruits parasites. Un fichier de Gallica de médiocre qualité peut ainsi être amélioré de manière sensible, mais il faut au préalable le convertir en images importables par le programme (jpg, png ou tiff) et il n’y a qu’un seul format de sortie (tiff). La fonction de nettoyage doit être utilisée avec précaution, car elle peut supprimer des notes en marge.

Djvusmooth[modifier]

Djvusmooth est un logiciel en mode graphique qui permet de modifier les métadonnées et les marque-pages du fichier et de corriger la couche texte si elle est présente. L’interface est cependant assez rudimentaire, et l’édition du texte n’est pas des plus pratiques.

Divers[modifier]

  • PDFmod et PDFshuffler sont des utilitaires simples et efficaces pour manipuler les images d’un pdf. Pratiques pour supprimer, ajouter, déplacer des pages.
  • Xnview et Xnconvert : gratuits, mais non libres, ces utilitaires convertissent vers de nombreux formats et permettent de rogner automatiquement les marges. À noter que Xnconvert peut rogner directement les pages d’un pdf, mais la qualité de l’image semble dégradée dans le processus et la modification des paramètres pour obtenir de meilleures images produit des fichiers très volumineux.

Exemples complets[modifier]

Les différents outils et commandes présentés dans cette page peuvent être combinés selon vos besoins. Voici quelques exemples (pour chaque étape, on se reportera aux explications ci-dessus dans cette page).

Images en couleurs de Gallica[modifier]

Pour obtenir un fichier DjVu de la meilleure qualité possible avec les livres numérisés en couleurs par Gallica, on peut procéder selon les étapes suivantes :

  1. Récupérez les images dans leur meilleure résolution avec OCaml.
  2. Convertissez les images en un seul fichier pdf, que vous importerez ensuite dans l’Internet Archive selon la procédure décrite dans Aide:Créer un fichier DjVu (section Conversion en ligne).
  3. Convertissez les images avec c44 pour obtenir la meilleure qualité possible et assemblez-les dans un seul fichier DjVu.
  4. Récupérez le fichier DjVu produit par l’Internet Archive, extrayez l’OCR et importez-le dans votre fichier DjVu.

De cette manière, vous obtenez un meilleur fichier DjVu que celui de l’Internet Archive, mais plus volumineux, et vous y ajoutez une OCR qui sera souvent de très bonne qualité.

pdf de Gallica[modifier]

Les pdf de Gallica peuvent être convertis directement avec pdf2djvu avec une certaine efficacité, mais, pour enlever les marges, on pourra suivre la procédure suivante :

  1. Téléchargez le fichier et extrayez les images et la couche texte.
  2. Faire le tri dans les images et retaillez-les en ajustant la marge à laisser.
  3. Convertissez les images avec cjb2 en un seul fichier DjVu.
  4. Insérez la couche texte.

Ressources[modifier]