Dominique Meeùs
Dernière modification le   
retour à la table des matières — à l’index — à ma page de départ

Tesseract en ligne de commande

Up: Reconnaissance de caractères, Optical Character Recognition (OCR) Next: À travers XSane

Pour reconnaître une page d’un livre en français, disons image.tiff, on commande

tesseract image.tiff textedelimage -l fra

(où bien sûr -l fra veut dire langue : français — je suppose qu’on a les fichiers de données de langue pour le français) et ça donne en trois secondes le fichier textedelimage.txt du texte d’image.tiff sans une seule faute. (Enfin, pour les textes de bonne qualité et si les lignes sont bien horizontales sur le scanner. Sinon voir Deskew à propos de xSane.) Qu’on se le dise, maintenant sous Linux il y a un vrai grand OCR gratuit mais de qualité professionnelle, à l’égal des plus chers !

Attention à la langue : une option -l avec une autre langue donne une moins bonne reconnaissance ; avec une langue inexistante, ça ne donne rien, sans message d’erreur, et on ne comprend pas ce qui ne va pas. Des codes de langue comme eng ou fra sont assez évidents. Il m’arrive aussi de faire de la reconnaissance en néerlandais et de m’arracher les cheveux parce que ça ne marche pas, mais c’est parce que j’ai écrit ndl au lieu de nld.

Tesseract 4 gère autrement le multithreading, pour des raisons sans doute excellentes dans certain environnements professionnels, qui dépassent ma compétence 1, mais chez un utilisateur ordinaire, ça provoque une lenteur absolument prohibitive. Il y a une solution de rechange : introduire une valeur d’une certaine variable sur la même ligne avant la commande tesseract et cetera, à savoir :

OMP_THREAD_LIMIT=1 tesseract et cetera

Ne me demandez pas ce que ça veut dire. Ce qui compte, c’est que lire une page, au lieu d’une ou plusieurs minutes, ne prend plus qu’une seconde (comme avec Tesseract 3) parce que dans mes scripts xsane2tess, j’ai modifié dans ce sens la ligne

print LOG `OMP_THREAD_LIMIT=1 tesseract "out.png" "${outputfile}" -l $lang 2>&1`;

Pour les Tesseract jusqu’à la version 2, les conditions étaient strictes. On devait scanner :

La sortie de Tesseract est par défaut un fichier texte. C’est toujours le programme qui ajoute l’extension de la sortie. Avec la commande

tesseract image.png article -l fra

on obtient obtient le texte (supposé en français) article.txt. Si on préfère une sortie hOCR, on doit commander

tesseract image.png article -l fra hocr

Le fichier de sortie est maintenant article.hocr, un fichier XHTML qui présente l’avantage de la suppression (plus ou moins réussie) des retours de chariot fixes du fichier article.txt. (Cependant, cela ne supprime pas les éventuels traits de césure présents dans l’image de texte image.png. Cette prouesse intéressante est réalisée aussi par OCRFeeder.) Les fichiers hOCR s’ouvrent dans les browsers si on veut lire le texte. Ils servent surtout à positionner le texte dans les DjVu et les PDF.

Si on veut directement un PDF, texte inclus, on doit commander

tesseract image.png article -l fra pdf

En entrée, Tesseract n’accepte que des images, pas du PDF. J’ai pu reconnaître cependant par Tesseract un PDF pure image en le convertissant en image avec GhostScript ou avec Imagemagick. Par Imagemagick (qui fournit la commande convert), j’ai fait : convert -density 300 mijnPDF.pdf" -depth 8 mijnPDF.png, ce qui a permis ensuite d’en tirer le texte : tesseract mijnPDF.png mijnPDF -l nld. Mais il y a maintenant divers programmes gérant Tesseract qui acceptent le PDF en entrée.

On peut combiner la reconnaissance de caractère et la saisie par le scanner en interfaçant xSane et xsane2tess.pl. Divers autres logiciels proposent aussi de combiner scan et OCR.

Notes
1.
« As of 2017 only runs efficiently in shared-memory multiprocessor platforms » (en.wikipedia.org/wiki/OpenMP#Pros_and_cons, consulté le 1er juin 2018). Mon ordinateur personnel ne semble pas mériter la qualification de plate-forme multiprocesseurs.
Up: Reconnaissance de caractères, Optical Character Recognition (OCR) Next: À travers XSane