Il n'est un secret pour personne que la reconnaissance optique de texte sous Linux n'est guère avancée. De temps à autre, j'ai essayé des logiciels tels que Kooka, OCRAD ou Gnu OCR, mais, sans vouloir blâmer leurs développeurs, tous m'ont semblé inutilisables en l'état (les logiciels, pas les développeurs). J'ai trouvé parfois des témoignages d'utilisateurs qui s'en satisfaisaient, je ne le conteste pas - je m'en étonne quand même - mais le temps que j'aurais dû passer pour apprendre à en tirer quelque chose m'a découragé. En tout cas, il m'aurait demandé plus de temps que de retaper le texte...
Tesseract est venu changer la donne.
Encore que la situation n'est pas encore idyllique... Côté positif:
Côté négatif:
On ne peut reprocher à Tesseract de ne pas être autre chose que ce qu'il prétend être. C'est un moteur d'OCR, mais il devra être intégré à des interfaces utilisateur conviviales pour être utilisable. Même si la situation actuelle n'est pas pleinement satisfaisante, je suis d'avis qu'on peut se féliciter de voir se perpétuer une tradition du développement par petites briques, qui permettra que des interfaces différentes disposent d'un ou plusieurs moteurs de reconnaissance2.
Mais bon, comme il ne dispose pas des fonctionnalités permettant de reconnaître des colonnes dans l'image d'un texte, la perspective de devoir passer par un logiciel d'édition d'images, de sauvegarder les blocs de textes en fichiers séparés... semblait assez fastidieuse.
En pratique...
Au bout de quelques essais, j'en suis venu à la manière de procéder suivante:
1. Scanner le texte
...en ligne de commande:
gv@fantasio:~$ scanimage > texte.pnm
Par défaut, l'image obtenue est en mode valeurs de gris et en 300dpi, ce qui convient.
2. Afficher l'image à l'écran
...en utilisant un visualisateur léger permettant de zoomer et positionner les portions d'images souhaitées de façon rapide. J'utilise gqview ou qiv.
3. Transmettre la sélection souhaitée à Tesseract
...ce qui est obtenu avec import, un utilitaire faisant partie de la suite ImageMagick.
J'ai combiné ça dans un script rudimentaire qui passe par l'écriture dans des fichiers (tesseract travaillant également avec les entrées/sorties standards, mais sa syntaxe bizarre complique les choses):
#!/bin/bash
TMPIMG=`mktemp --tmpdir=/tmp XXXXXXXXXX.tif` TMPTXT=`mktemp --tmpdir=/tmp XXXXXXXXXX` import -depth 8 $TMPIMG tesseract $TMPIMG $TMPTXT -l eng 2> /dev/null TMPTXT="${TMPTXT}.txt" (cat $TMPTXT | xsel -i -b) && rm -f $TMPTXT $TMPIMG
Ce script img2txt est appelé via un raccourci-clavier; dès cet instant, le curseur se transforme en une petite croix qui permet de tracer un rectangle de sélection sur l'écran. On entend un double bip, et le texte est transmis au presse papier.
Il ne reste plus qu'à coller le texte dans mon éditeur favori ou toute autre application avec Ctrl-v.
Cette manière de procéder par petits extraits de texte n'est finalement pas une mauvaise chose; il me semble plus efficace de vérifier la qualité du texte, et d'apporter les corrections, en travaillant par petits extraits, que de vérifier a posteriori l'intégralité d'un texte.
L'image en haut de page (à l'origine plus grande de 30%), volontairement scannée sans précautions, donne ce qui suit. On remarque que les seules erreurs figurent dans les lettres en italique, et dans un «C'» à vrai dire assez pervers.
CHAPITRE PREMIER La vitre dépolie de la porte arbore en lettres noires une inscription tout écaillée : Philip Marloweu. Recher- cher. Cest, dans cette sorte d’immeubles que l’on construisit à 1’époque où la salle de bains carrelée devint la base de la civilisation, une porte assez minable au bout d’un couloir minable également. La porte est fermée à clé, mais sa voisine, qui ne l'est pas, porte exactement la même inscription. — Entrez donc, je suis tout seul, avec une grosse mouche bleue. Mais attention, pas si vous êtes de Manhat- tan, (Kansas).
Le résultat est quand même honorable.
Quelques réflexions en vrac pour terminer:
gv@fantasio:~$ tesseract texte.tiff texte -l fra Tesseract Open Source OCR Engine name_to_image_type:Error:Unrecognized image type:texte.tiff IMAGE::read_header:Error:Can't read this image type:texte.tiff tesseract:Error:Read of file failed:texte.tiff Signal_exit 31 ABORT. LocCode: 3 AbortCode: 3
avant de comprendre que le problème venait de l'extension .tiff avec deux f... Pensez donc à utiliser .tif