Outils pour utilisateurs

Outils du site


manuel_digital_history:numerisation_ocrisation

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
manuel_digital_history:numerisation_ocrisation [2020/01/22 10:26]
Pierre Vernus créée
manuel_digital_history:numerisation_ocrisation [2020/03/28 17:57] (Version actuelle)
Pierre Vernus
Ligne 1: Ligne 1:
-=======Acquisition de données======+[[[[manuel_digital_history:​accueil|retour vers l'​accueil du manuel]] 
 + 
 +=======Numérisation et OCRisation======
  
 ===== Du document à l'​image puis au texte ===== ===== Du document à l'​image puis au texte =====
Ligne 20: Ligne 22:
  
 [[http://​www.tobias-elze.de/​pdfsandwich/​|pdfsandwich]] fait le preprocessing et intègre [[https://​github.com/​tesseract-ocr/​tesseract|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. [[http://​www.tobias-elze.de/​pdfsandwich/​|pdfsandwich]] fait le preprocessing et intègre [[https://​github.com/​tesseract-ocr/​tesseract|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 qui 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 : 
 +
 +[[https://​gallica.bnf.fr/​ark:/​12148/​bpt6k97813640|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 [[https://​github.com/​Dorialexander/​Pyllica|ici]] 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 son 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ésolution de 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 : 
 +
 +<​code>​
 +    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)
 +</​code>​
 +
 +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 apparaî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.
 +
 +==== Reconnaissance de caractères=====
 +
 +
 +Disposer des images de scan du document peut être utile afin de pouvoir retravailler ces images en vue d'​obtenir une ROC de meilleure qualité.
 +
 +Pour ce faire il est possible d'​utiliser ​
 +
 +  * l'​outil Sharedoc mis à disposition par la TGIR Huma-Num qu'il est possible de combiner avec un outil de ROC (ABBY).
 +  * Un autre outil de ROC libre comme [tesseract](https://​github.com/​tesseract-ocr/​tesseract). Intialement développépar Hewlet-Packard son code source a été rendu publique en 2005. Depuis 2006, il est maintenu par Google. Une introduction rapide est disponible [ici](https://​medium.com/​better-programming/​beginners-guide-to-tesseract-ocr-using-python-10ecbb426c3d). ​
 +
 +**A COMPLETER**
 +
 +
manuel_digital_history/numerisation_ocrisation.1579685173.txt.gz · Dernière modification: 2020/01/22 10:26 par Pierre Vernus