2009-11-20 Comment je pratique l'OCR sous Linux

Fais pas ta rosière

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 (il semble inévitable de passer par l'écriture dans des fichiers, tesseract ne travaillant pas avec les entrées/sorties standards):

  #!/bin/bash
  
  cd ~
  import -depth 8 ~/tmp.tif
  tesseract tmp.tif tmp -l fra 2> /dev/null && rm -f ~/tmp.tif
  (cat ~/tmp.txt | xsel -i -b) && rm -f ~/tmp.txt

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:

Footnotes:

1. J'ai passé une soirée entière (!) à ne pas comprendre pourquoi il refusait d'analyser un fichier tif, à faire des recherches dans leur mailing-list, à essayer diverses options d'enregistrement du fichier,
 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

2. de la même manière que divers logiciels d'extraction de cd musicaux permettent de choisir entre plusieurs encodeurs mp3 ou ogg