Contenu | Rechercher | Menus

Tesseract

Tesseract est un moteur de reconnaissance optique de caractères (ROC, OCR) qui a été conçu par les ingénieurs de HP de 1984 à 1995, avant d'être abandonné. Après 10 ans de purgatoire, son code est ouvert en 2005, et le développement est repris sous la houlette de Google. Les premiers résultats sont prometteurs. Enfin un bon logiciel libre d'OCR sous linux ? L'avenir nous le dira… Il permet déjà d'obtenir une reconnaissance optique de qualité sur un certain nombre de documents (sans mise en page complexe).

Tesseract a pour vocation d'être utilisé :

  • soit directement, en ligne de commandes soit par l'intermédiaire d'une interface graphique comme gscan2pdf ou xsane (+xsane2tess), pour reconnaitre du texte avec mise en page basique ; cet usage est déjà fonctionnel.
  • soit avec des surcouches gérant les mises en page complexes, etc., comme ocropus (encore en version beta).

Tesseract est distribué sous licence Apache, c'est-à-dire en gros qu'il est Open Source mais pas copyleft.

Installation

Installez les paquetstesseract-ocr et tesseract-ocr-fra (dépôts Universe).

Il existe d'autres fichiers de langues, comme par exemple : tesseract-ocr-deu (allemand), tesseract-ocr-eng (anglais), tesseract-ocr-spa (espagnol), tesseract-ocr-nld (hollandais), tesseract-ocr-ita (italien), tesseract-ocr-por (portugais-brésilien), tesseract-ocr-deu-f (vieil-allemand).

Pensez toutefois à installer le paquet ImageMagick si vous voulez utiliser xsane2tess (utilitaire convert nécessaire).

Utilisation

En ligne de commande

Tesseract n'accepte pour le moment que des fichiers au format tif et mdi. Après avoir converti votre fichier grâce à un logiciel ad hoc, entrez la commande suivante :

tesseract ~/nomdelimage.tif nom_du_fichier_de_sortie_sans_l_extension

En cas d'installation de la version 2.01, pour la reconnaissance de texte en français :

tesseract ~/nomdelimage.tif nom_du_fichier_de_sortie_sans_l_extension -l fra

Par défaut, le fichier de sortie est placé dans /home/votre_identité (en fin de liste). Pour obtenir ce fichier de sortie sur votre bureau, il faut indiquer le chemin, comme suit :

tesseract  ~/nomdelimage.tif  /home/votre_identité/Desktop/nom_du_fichier_de_sortie_sans_l_extension -l fra

Les options de langues

Si vous avez installé les fichiers pour la reconnaissance de texte en d'autres langues, vous ajoutez, au lieu de

-l fra
-l eng (pour l'anglais)
-l deu (pour l'allemand)
-l spa (pour l'espagnol)
-l ita (pour l'italien)
-l nld (pour le néerlandais)
-l por (pour le portugais)
-l vie (pour le vietnamien)
-l deu-f (pour le vieil-allemand)

En mode graphique avec « gscan2pdf »

Les explications sont données sur la page gscan2pdf de la documentation Ubuntu francophone.

En mode graphique avec XSane

Il est possible d'utiliser tesseract avec XSane grâce à l'adaptateur xsane2tess.

Pour réaliser de la ROC sur un document déjà numérisé, on utilise gscan2pdf. Pour réaliser de la ROC sur un document à numériser, on utilise plutôt XSane, dont la fonction de prévisualisation permet de sélectionner des zones de texte.

Pour une reconnaissance optique directe dans Open Office Writer de fichiers PNG ou JPG

pour lancer l'OCR sur un document PNG (ou JPG) présent sur le bureau

pour les documents PNG

FIXME vérifier que l code est toujours d'actualité

Code:

  #!/bin/bash
  cd ~/Bureau
  # ou cd ~/Desktop
  convert *.png sortie.tif ;
  # il est plus prudent de corriger le bpp maximum pour le fichier tiff de sortie (max 8 pour tesseract -> depth = 4)
  # soit convert -depth 4 *.png sortie.tif ;
  tesseract sortie.tif sortie -lwt fra > sortie.txt ;
  # ou tesseract sortie.tif sortie -l fra > sortie.txt ;
  oowriter sortie.txt
  • recopiez ce code dans un fichier texte que vous nommez par exemple "Tesseract-png2openofficewriter"
  • rendez exécutable ce fichier texte (clic droit sur le fichier > propriétés > cochez "Autoriser l'exécution du fichier comme un programme")… Vous avez créé un script exécutable.
  • placez-le dans /home/.gnome2/nautilus-scripts (ou dans tout autre dossier personnel de scripts, à votre convenance)
  • créez un lanceur ou une entrée dans le menu comme indiqué ci-dessous.
pour les documents JPG

Pour faire de même avec les fichiers images JPG (comportant du texte à reconnaître bien sûr), vous pouvez remplacer "png" par "jpg" dans le script pour créer un autre script nommé "Tesseract-jpg2openofficewriter".

Créer un lanceur ou une entrée dans le menu

pour créer un lanceur sur le bureau
  • clic droit sur le bureau "créer un lanceur"
  • donnez-lui un nom… par exemple : "Tesseract-png2openofficewriter", ou plus court "Tesseract-PNG2OOoW"
  • pointez vers le script en question, c'est à dire le fichier texte "Tesseract-png2openofficewriter" rendu exéctuable (commande : allez chercher votre script par le bouton "parcourir")
  • vous pouvez utiliser cette icône tesseract-ocr-png.jpg pour le script "Tesseract-PNG2OOoW" et celle-ci tesseract-ocr-jpg.jpg pour le script "Tesseract-JPG2OOoW".
  • vous pouvez ajouter un commentaire, mais ce n'est pas indispensable.
pour créer une entrée dans le menu
  • clic droit sur "Applications" > Editer les menus
  • dans "Bureautique", cliquez sur "nouvel élément".
  • donner-lui un nom… par exemple : Tesseract-png2openofficewriter, ou plus court "Tesseract-PNG2OOoW"
  • pointez vers le script en question (commande : allez chercher votre script par le bouton "parcourir")
  • vous pouvez utiliser les mêmes icônes que celles indiquées ci-dessus.
  • vous pouvez ajouter un commentaire, mais ce n'est pas indispensable.

Utilisation

  • enlevez du bureau les fichiers PNG sur lesquels vous ne voulez pas faire de ROC/OCR.
  • placez sur le bureau un scan de texte imprimé au format PNG (le mieux est un PNG en valeurs de gris et 300 dpi avec Xsane, mais vous pouvez essayer avec d'autres PNG déjà numérisés),
  • vous pouvez placer sur le bureau plusieurs fichiers PNG sur lesquels vous voulez procéder à la reconnaissance optique; mais ne dépassez pas 3-4 fichiers si vous voulez une opération relativement rapide. Les contenus des différents fichiers seront placés les uns à la suite des autres dans un même document Open Office.
  • cliquez sur le lanceur ou l'entrée du menu… patientez un peu… Open Office s'ouvrira avec affichage du texte tel qu'il a été reconnu.
  • il vous reste a effectuer les corrections orthographiques et à mettre en page.

Même méthode pour les fichiers au format JPG, en utilisant l'outil "Tesseract-jpg2openofficewriter".

N.B. : au passage, un document sortie.tif et un document sortie.txt sont placés sur le bureau; ce sont des documents transitoires créés par le script. On peut l'es effacer, ou ajouter à la fin du script les lignes :

rm sortie.tif
rm sortie.txt

Amélioration de la reconnaissance

La suite est adaptée des explications du site "tesseract-ocr" (google) en anglais. Il est conseillé d'aller aussi sur cette page si on peut.

Description des fichiers de langue

Les 4 fichiers inttemp, normproto, pfftable et unicharset sont indispensables à la création d'une langue, les autres sont facultatifs. Tous les fichiers devront être préfixés par l'identifiant de leur langue.tiré du pdf google dispo dans le répertoire google code

inttemp

stocke les formes géométriques prototypales des différents caractères; se génère par l'exécutable mftraininf, cf plus bas la section apprentissage.

pffttable

"number of expected features for each character" ? FIXME ; se génère par l'exécutable mftraininf, cf plus bas la section apprentissage.

normproto

"the character normalization sensitivity prototypes" FIXME ; se génère par l'exécutable cftraininf, cf plus bas la section apprentissage.

unicharset

Ce fichier recense tous les caractères du prototype (1 ligne par caractère),ainsi que 4 propriétés: nombre, majuscule, minuscule, lettre, représenté par 1 hexadécimal:

; 0
b 3
W 5
7 8

par exemple, W est noté 5 (hexa), ce qui correspond à 0101 (binaire), ce qui veut dire: ce n'est pas un nombre, c'est une majuscule, ce n'est pas une minuscule, c'est une lettre. Au lieu d'être écrit à la main, il peut être généré par: unicharset_extractor (cf plus bas la section apprentissage).

DangAmbigs

Ce fichier texte sert à signaler les risques de confusion entre caractères: il est créé ou augmenté manuellement.

1       m       2       r n
3       i i i   1       m

Ici on signale que le m (1 caractère) peut être confondu avec rn (2 caractères), et que iii (3 caractères) peut être confondu avec m (1 caractère). Quelle conclusion en tire tesseract? FIXME

frequent_words_list

Liste les mots de la langue les plus fréquents (en codage DAWG). On peut rentrer les mots dans un fichier texte UTF8 (1 par ligne), puis les mettre au bon format par:

wordlist2dawg frequent_words_list freq-dawg

words_list

Liste les mots moins fréquents. Même principe que ci-dessus:

wordlist2dawg words_list word-dawg

User-words

Ce fichier est usuellement vide.

Apprentissage

À noter qu'il existe pour le français des couples tif/box prêts à l'emploi, à télécharger au même endroit que les sources. Ils ont probablement été utilisés pour créer les fichiers pour la langue française, mais peuvent donner une idée du contenu de fichiers d'entrainement (utile pour le point 1 ci-dessous).

On peut faire progresser tesseract en créant des fichiers de langue adaptés aux "fichiers images" sur lesquels on doit réaliser la ROC le plus souvent. Pour cela, procédez comme suit :

  1. Créez un fichier box : faire reconnaître par Tesseract une image-type avec l'option box :
    tesseract fontfile.tif fontfile batch.nochop makebox

    Cette image fontfile.tif (qu'il vous faut créer auparavant) doit contenir tous les signes de la langue sur laquelle vous voulez réaliser la ROC, les plus fréquents au moins 20 fois, les plus rares au moins 5 fois, les autres en moyenne 10 fois, dans le plus grand désordre (c'est à dire en mélangeant les symboles, les lettres, les chiffres et les signes de ponctuation). Renommer fontfile.txt en fontfile.box

  2. Corrigez les erreurs de reconnaissance dans le fichier box : C'est la partie la plus difficile, mais l'interface graphique tesseractTrainer-fra.py (voir quelques lignes plus loin) peut grandement aider; lorsqu'on procède "à la main", il faut ouvrir le fichier fontfile.box qui ressemble à :
    r 814 492 837 516 
    o 839 483 862 516 
    s 865 491 878 520 
    i 101 452 122 483 
    a 126 453 146 486

    Chaque ligne correspond à un caractère Unicode : sa représentation puis les coordonnées de ses extrémités (gauche, bas, droite, haut). On peut modifier les erreurs par remplacement d'une lettre par une autre ou, plus compliqué, quand plusieurs lettres on été prises pour une seule (ou vice versa), fusionner en modifiant les coordonnées, par exemple :

    , 197 496 205 507
    , 206 496 214 508

    devient :

    „ 197 496 214 508

    Il existe une interface graphique "tesseractTrainer-fra.py" permettant de réaliser ceci plus facilement. Il s'agit d'un programme en python. On peut le télécharger ici (sa version anglaise "tesseractTrainer" est ici). Le décompresser et le placer dans le dossier de votre choix… puis via un terminal, se placer dans ce dossier et lancer la commande :

    python tesseractTrainer-fra.py

    Ne pas laisser une cellule vide (sinon vous ne pourrez plus ouvrir le fichier fontfile.box). Pour rapprocher deux lettres qui appartiennent au même mot, mais qui sont apparemment séparées dans l'interface graphique, modifier leurs coordonnées (droite ou gauche) : la modification ne sera pas immédiatement visualisée, mais si vous sauvegardez le fichier box (= sauvegarder l'info box), vous constaterez la modification en chargeant de nouveau le fichier. Veillez à ce que les coordonnées des signes ne se chevauchent pas (surtout droite, gauche, le risque étant plus grand). N.B. : les raccourcis clavier aident beaucoup dès qu'on a bien repéré leur usage !

  3. Réalisez l'apprentissage : une fois corrigé le fichier box (une fois celui-ci enregistré si vous utilisez l'interface graphique "tesseractTrainer-fra"), passons à l'apprentissage proprement dit :
    tesseract fontfile.tif junk nobatch box.train

    qui propose en sortie un fichier fontfile.tr, qui décrit géométriquement les différents caractères du tif. Important : vérifiez les erreurs dans le terminal. S'il y a des erreurs "FATALITY", alors il est inutile de poursuivre le processus d'apprentissage tant que le fichier fontfile.box n'est pas corrigé. Une erreur "FATALITY" indique généralement que cette étape a échoué à trouver tous les échantillons pour l'apprentissange de l'un des caractères répertoriés dans votre fichier fontfile.box. Soit les coordonnées sont erronées, soit il y a quelque chose d'incorrect dans votre fichier image d'origine.

  4. Créez votre prototype : pour cela (pour créer les fichiers de langues destinés au dossier "tessdata"), rassemblez vos différents apprentissages tif/box (on peut le faire à partir d'un seul fichier, mais la ROC sera de meilleure qualité si on a créé des fichiers pour différentes polices… ce qui suppose d'avoir répété les opérations 1 à 3 ci-dessus autant de fois que l'on a créé de fichiers "fontfile.tif" pour les différentes polices) :
    mftraining fontfile_1.tr fontfile_2.tr

    … ce qui donne en sortie 2 fichiers, inttemp et pffmtable.

    cntraining fontfile_1.tr fontfile_2.tr

    … crée lui normproto. Enfin

    unicharset_extractor fontfile_1.box fontfile_2.box

    … crée le fichier unicharset.

  5. Attribuez un code à votre prototype : renommez les fichiers inttemp, pfftable, normproto et unicharset en les faisant précéder du code de la langue voulue (pour une langue, on conseille d'utiliser les normes ISO)… où, s'il s'agit pour vous du français, mais particulièrement adapté aux types de fichiers sur lesquels vous avez habituellement à travailler, vous pouvez utiliser un code comme "mfra" (mon français !). Vous aurez donc renommé les 4 fichiers obtenus comme suit : mfra.inttemp, mfra.pfftable, mfra.normproto, mfra.unicharset.
  6. Placez vos fichiers dans tessdata : copiez ces 4 fichiers mfra.inttemp, mfra.pfftable, mfra.normproto, mfra.unicharset dans le dossier tessdata (en l'ouvrant si besoin via gksudo nautilus). Selon votre installation de Tesseract, le dossier tessdata se trouve dans /usr/share ou bien dans /usr/share/tesseract-ocr.
  7. Complétez avec les autres fichiers nécessaires : pour compléter, dupliquez dans ce même dossier les fichiers fra.DangAmbigs, fra.freq-dawg, fra.user-words et fra.word-dawg puis renommer les copies : mfra.DangAmbigs, mfra.freq-dawg, mfra.user-words et mfra.word-dawg (vous pouvez aussi recréer ces derniers fichiers vous-même, mais c'est un autre travail…). Vous disposerez ainsi dans le dossier tessdata des huit fichiers nécessaires au fonctionnement de votre langue (ou de l'adaptation de votre langue à votre usage le plus habituel).
  8. Réalisez la ROC en utilisant vos nouveaux fichiers de langue : pour lancer Tesseract en utilisant vos nouveaux fichiers de langue, vous utilisez la commande :
    tesseract fichier.tif fichier -l mfra

    au lieu de :

    tesseract fichier.tif fichier -l fra

Liens


tesseract-ocr.txt · Dernière modification: Le 08/04/2014, 14:43 par 92.135.123.219
Le contenu de ce wiki est sous licence : CC BY-SA v3.0