Acquisition de données

Du document à l'image puis au texte

Quelques ressources logicielles libres

pdftotext pour extraire le texte de documents pdf.

OpenCV bibliothèque de traitement d'image opensource avec des liens avec des langages comme Python.

Leptonica : bibliothèque de traitement et d'analyse d'image et outil en ligne de commande. Est utilisée par Tesseract OCR pour binariser les images.

unpaper: bibliothèque de postprocessing visant à éliminer tous les problèmes relatifs au support papier des documents scannés.

ImageMagick : bibliothèque de traitement d'image générale.

Gimp un éditeur d'image puissant qui peut être utilisé pour améliorer manuellement la qualité des images.

pdfsandwich fait le preprocessing et intègre tesseract. Il transforme des pdf images et leur applique un processus de ROC pour générer des fichiers pdf “sandwich”, i.e. desfichiers pdf auxquels le texte est ajouté “derrière” les images de manière invisible. Il s'agit d'un outil en ligne de commande élaboré pour traiter des livres ou des journaux qui ont été scannés. Il peut reconnaître le *layout* même avec plusieurs colonnes. Il s'agit d'un *wrapper script* qui appelle d'autres outils (*unpaper*, *convert*, *gs*, *hocr2pdf* et *tesseract*). Il fonctionne sur les systèmes Unix en particulier Linux et MacOs X.

Qualité de l'image

Meilleure sera la qualité de l'image source, meilleure sera le résultat de la reconnaissance de caractères (ROC). Pour que le moteur de reconnaissance de caractères distingue au mieux les caractères du fond de l'image il faut donc que :

les bords des caractères soient nets,

le constrate soit élevé,

les caratères soient aussi bien alignés que possible,

le “bruit” soit le plus faible possible.

D'abord éviter que l'original soit déchiré, froissé, imprimé avec une encre à faible contraste…

L'image doit être au moins de 300 dpi (dots per inch). En dessous de 200 dpi la photo ne sera pas interprétable. Au dessus de 600 dpi le fichier de la photo sera excessivement et inutilement lourde.

Preprocessing

Cette étape vise à améliorer l'image qi fera l'objet d'une ROC.

Il faut accroître le contraste et la densité avant l'ocrisation soit à partir du logiciel de numérisation soit à l'aide d'un logiciel de traitement d'image (image preprocessing software).

Il faut aussi “binariser” (binarize) l'image, i.e. convertir une image couleur (RGB) en une image noire et blanche. Il existe plusieurs algorithmes permettant d'effectuer cette transformation d'un simple thresholding à des analyses zonales plus sophistiquées. La plupart des moteurs d'OCR effectuent cette conversion comme une des premières étapes du processus de reconnaissance de caractères. Un autre avantage de la binarisation est la réduction de la taille des fichiers images.

Enlever le bruit et les artefacts de numérisation qui peuvent provenir d'une numérisation ou d'une image de mauvaise qulaité. Ils peuvent se situer soit dans l'arrière plan, soit en premier plan (cf par exemple les bordures ou la partie centrale, entre deux pages, noires).

Redresser les images en effectuant une rotation à droite ou à gauche. Il faut que les lignes du texte soient horizontales.

Analyse des zones intéressantes (Layout ou Zone Analysis) Afin que les mots soient détectés correctement il est important, en premier lieu, de repérer les zones ou le layout (c'est-à-dire les zone d'intérêt). Cette étape détecte es paragraphes, les tableaux, les colonnes, les images… La plupart des solutions de ROC disposent d'un module de *layout analysis*. Il est possible d'appliquer ees techniques de ROC zonale afin de définir précisément les parties de l'image comportant le texte à extraire.

Remarques finales. Il n'existe pas de règle générale pour optimiser une ROC. Avant tout il faut étudier attentivement les documents à traiter afin d'en repérer les défauts récurrents.

Récupération de documents sur Gallica

Il est possible de télécharger des documents numérisés disponibles sur Gallica à partir de la fonction de téléchargement.

Par exemple :

Pariset E., La Chambre de commerce de Lyon : étude faite sur les registres de ses délibérations. II. Dix-neuvième siècle, Lyon, 1889.

La fonction de téléchargement est accessible à partir de la barre d'outils située sur la gauche de la fenêtre de consultation des documents. Cependant, s'il est possible de récupérer le document entier au format .pdf ou .txt seule la page courante est récupérable au format .jpeg. Ceci est problématique si on désire refaire une reconnaissance de caractères (OCR) lorsque le texte brut disponible n'est pas de très bonne qualité.

De même, lorsqu'on veut récupérer le fichier d'une carte numérique le fichier JPEG disponible a une définition limitée.

Utiliser l'API Document de Gallica

A côté de l'utilisation de la fonction de téléchargement, il est possible d'utiliser l'API Document de Gallica pour récupérer un certain nombre de données ou d'information concernant un document. Pour ce faire il faut dipsoser de l'identifiant ark du document.

Il est ainsi possible de récupérer le texte brut de l'ouvrage évoqué précédemment en utilisant l'url suivant :

https://gallica.bnf.fr/ark:/12148/bpt6k97813640.texteBrut

La qualité du texte est inégale selon les document.

Il est aussi possible de récupérer la table des matières - celle que l'on peut afficher à partir des outils situés à droite de la fenêtre de consultation des documents - ce qui peut être intéressant si on veut avoir la correspondance entre le numéro de la vue et celui de la page de l'ouvrage.

https://gallica.bnf.fr/services/Toc?ark=ark:/12148/bpt6k97813640

Pour faire le lien entre le texte de l'entrée de la table des matières, contenu dans la balise _seg_, et la page du document numérique, il faut exploiter les attributs de la balise _xref_ et notamment l'attribut _from_.

Récupérer une image HD

Une première méthode consiste à utiliser l'url, par exemple celle le *Plan de Lyon, de ses environs et des forts* dressé par L. Dignoscyo en 1835 a l'url suivant :

https://gallica.bnf.fr/ark:/12148/btv1b53035185s

Pour obtenir une image haute définition il faut modifier l'url de la façon suivante :

insérer iiif entre _gallica.bnf.fr_ et _ark:_

ajouter après l'identifiant ark du document (_12148/btv1b53035185s_) /f1/full/full/O/native.jpg

Ce qui donne : https://gallica.bnf.fr/iiif/ark:/12148/btv1b53035185s/f1/full/full/0/native.jpg

Cette image pourra être ensuite géoréférencée.

Plus simplement, il existe une extension de Chrome (ou Chromium) ou Firefox nommée [IIF-Download](http://www.geobib.fr/tool/iiif/) qui permet en un clic de récupérer l'image HD d'un document.

Récupérer des images en masse

Pour récupérer un lot d'images (par exemple celles d'un livre) il existe un ensemble de scripts Python nommé Pyllica - information [ici](https://github.com/Dorialexander/Pyllica) et [là](https://prelia.hypotheses.org/441) - utilisant [Beautifullsoup](https://www.crummy.com/software/BeautifulSoup/) une bibliothèque Python qui permet de récupérer des données à partir de fichiers HTML ou XML

Par exemple pour récupérer les images de [Pariset E., La Chambre de commerce de Lyon : étude faite sur les registres de ses délibérations. II. Dix-neuvième siècle, Lyon, 1889](https://gallica.bnf.fr/ark:/12148/bpt6k97813640) évoqué plus haut nous utiliserons les scripts _pyllicalabsjpg.py_ et _actionpyllicalabsjpg.py_ que nous modifierons comme ci-dessous :

Il faut copier le premier script python dans le dossier dans lequel on veut télécharger les images. Il faut ensuite définir ce dossier comme sont répertoire de travail courant. Ici la définition d'image demandée est 3000. On peut la modifier. Par exemple pour avoir une résolutiond e 5000 il suffit de remplacer 3000 par 5000 dans l'expression full/3000/0/native.png. Pour obtenir la qualité maximale disponible, il faut remplacer 3000 par _full_ (full/full/0/native.png.). Attention : on a bien deux fois “full”. On peut aussi télécharger les images dans un autre format (png ou tif) en remplaçant “jpg” par “png” ou “tif” à la fin de l’adresse et du format de fichier créé comme ceci :

for page in listpage:
jpgfile = title + "_" + str(page) + ".png"
url = 'http://gallicalabs.bnf.fr/iiif/ark:' + identifier + '/f' + str(page) + '/ful/3000/0/native.png'
urllib.request.urlretrieve(url, jpgfile)

Ensuite il faut utiliser le script suivant où :

identifier nous indiquons l'identifiant ark du document

title nous indiquons un titre qui sera celui des fichiers images récupérés

firstpage le numéro de la première vue que l'on veut charger. Par exemple ici nous commencerons à 9 car les précédentes sont des vues de la couverture et de pages blanches. Le numéro de la vue appraît dans l'url de la page lorsqu'on consulte un document.

lastpage le numéro de la dernière vue à charger. Ici 273.

La durée du téléchargement peu pendre du temps, en fonction de la taille de l'ouvrage et de la qualité de la connexion.