ROC en français et autres langues... merci Sorbus ;)
samedi 19 janvier 2008, par zarer
Nécessité fait loi...
Il y a peu, je me suis mis à la recherche d’un bon programme d’OCR (ou ROC en français) : un logiciel de Reconnaissance Optique de Caractères afin de ne pas avoir à recopier plusieurs dizaines de pages pour le boulot. Du texte et rien que du texte, et en français, s’il vous plaît ! avec accents et signes de ponctuation.
Tournant à 100 % sous Linux, il s’agissait donc de trouver une solution native et libre ! 100 % Linux et 100 % libre !
Après avoir scanné mes belles petites feuilles, ni une ni deux, j’ai lancé kooka. Résulat : une vraie calamité ! Des signes cabalistiques en guise de texte !
Les accents sont-ils des agents perturbateurs, du fait que nombre de logiciels d’OCR sont programmés par des anglophones ? Certainement...
Toujours est-il que la solution OCR (ou ROC) pour du texte en français, traité sous Linux, semble être ailleurs. Les résultats obtenus par Tesseract 2.01 sont exemplaires !
Seulement, Tesseract en lignes de commandes n’est certainement pas la solution la plus attrayante !
La bonne surprise vient de gscan2pdf qui offre à Tesseract 2.01 sa belle interface ! Bon, tout n’est pas rose dans cette affaire mais le couple fait des merveilles !
Sous Debian Lenny (testing), Tesseract et gscan2pdf s’installent et cohabitent sans problème, nous le verrons.
Sous Ubuntu 7.10 et Debian Etch, les paquets disponibles dans les dépôts sont obsolètes. Pour obtenir ce que l’on cherche, il est nécessaire de passer aux versions supérieures. L’installation de notre couple Tesseract/gscan2pdf se complique alors quelque peu.
Grâce à la mobilisation des membres de mailing-list de Linux On The Root (b52, Dom, Dzef, Leonux... Merci à tous !), autour de ce qu’il est convenu d’appeler L’affaire OCR, une solution, à grands renforts de paquets .deb et de scripts, a été trouvée. En voici la procédure...
Historiquement, Tesseract a été créé en 1985 par Hewlett Packard et abandonné 10 ans plus tard. Tesseract était pourtant l’un des meilleurs logiciels de Reconnaissance Optique de Caractères.
Resté longtemps sans évolution, Tesseract a été rendu public l’année dernière (licence Apache 2.0), après quelques débuggages de la part de Google qui s’occupe dorénavant de son développement.
Pour beaucoup, Tesseract représente une avancée majeure pour le libre dans le domaine de la Reconnaissance Optique de Caractères.
Certains tests ont montré une reconnaissance à 97,74% ! Tesseract-OCR devient donc de fait le meilleur moteur de reconnaissance de caractères libre.
Tesseract est un moteur de reconnaissance simple : il ne fournit pas d’interface graphique utilisateur (GUI), n’effectue pas d’analyse de la mise en page et ne formate pas les résultats qu’il produit.
Tesseract est un projet très prometteur. L’un de ses développements les plus en vue est le projet OCRopus : système d’analyse de document comprenant l’analyse de la mise en page modulaire et la reconnaissance optique de caractères modulaire, le tout en tenant compte de la langue.
Actuellement, le projet OCRopus se base sur le moteur Tesseract, sur RAST pour l’analyse de mise-en-page et sur aspell (ainsi que des outils de tests). Le format de sortie est en HTML. Son installation et son utilisation sont encore un peu "rudes" pour être présentées dans le cours de cet article mais les résultats sont très encourageants.
Sous peu, OCRopus sera en mesure d’apprendre à la volée, depuis une interface web comme celle que connaît déjà Tesseract, et la reconnaissance pourra se faire depuis le format PDF.
La Reconnaissance Optique de Caractères sous Linux semble devenir un domaine majeur de recherche. Les avancées pourraient bien projeter le Libre sur le devant de la scène.
Les sources
Il est possible d’installer de la version actuelle de Tesseract en récupérant les sources sur la page du projet tesseract-ocr.
La Mailing-List de Linux On The Root a beaucoup échangé au sujet de Tesseract et b52, développeur de XCFA, nous a été d’un très grand secours. Sur une idée de Leonux, b52 nous a fait un joli p’tit paquet qui facilite grandement son installation.
La paquet a été fait à partir des trois archives nécessaires à la version 2.01 disponible sur la page de téléchargement du projet :
a) la version tesseract-2.01.tar.gz ;
b) l’archive des fichiers de langue française : tesseract-2.00.fra.tar.gz ;
c) l’archive des fichiers de langue anglaise : tesseract-2.00.eng.tar.gz.
Installation du paquet .deb de tesseract_2.01
1. Installation par GDebi. Après récupération sur le bureau du paquet tesseract_2.02-1_i386.deb (version b52 pour linonroot-dev), il est naturellement possible de l’installer avec GDebi par un simple clic droit.
2. Installation via le Terminal.
a) Pour cette installation, ouvrez un Terminal (Applications —> Accessoires —> Terminal).
b) Récupération et installation du paquet tesseract_2.02-1_i386.deb (version b52). Dans le Terminal, tapez les commandes suivantes :
Si tout s’est déroulé correctement, tesseract-2.01 est installé sur votre machine avec la reconnaissance des langues de Molière et de Shakespear !
Test de Tesseract 2.01
Bien qu’il soit parfaitement possible de faire une reconnaissance de caractères sur une image aux formats .png, .jpg, .pnm, .gif, .tif et .tiff graphiquement avec gscan2pdf ― en installant une dépendance omise par le développeur et en copiant par ailleurs certains fichiers, nous y reviendrons ―, en lignes de commandes, Tesseract n’accepte que les formats .tiff et .mdi.
Attention ! Dans la commande ci-dessous, il n’y a pas deux lignes mais une seule : les "arguments" sont juste séparés d’un espace.
Conversion et optimisation d’une image
Pour la conversion et l’optimisation des images à traiter en ROC par Tesseract, The Gimp (qu’on ne présente plus !) et ImageMagick font très bien l’affaire !
Reportez-vous à cet excellent howto "ocr with tesseract" (en anglais), aux parties 4 "Prepare Images" & 5 "Convert To Tiff".
Pour comprendre la syntaxe des commandes d’ImageMagick, reportez-vous au manuel (en anglais...très clair !).
gscan2pdf, dans sa version actuelle (0.9.19), offre une belle interface à Tesseract 2.0.1 (version multilingue), bien plus conviviale que la ligne de commandes et extrêmement efficace. Voyez plutôt :

Jeffrey Ratcliffe, le développeur de gscan2pdf a prévu un paquet .deb pour les version 0.9.19.
L’installation du paquet gscan2pdf_0.9.19_all.deb, sur Ubuntu 7.10 et Debian Etch peut se faire avec l’une ou l’autre des méthodes utilisées pour Tesseract ci-dessus.
Leonux, par paresse dit-il (je le crois plutôt plongé à corps perdu dans le bash), a proposé ce petit script d’installation de gscan2pdf 0.9.19 et Tesseract 2.01 pour Ubuntu 7.10 :
Il suffit de copier ce script dans un fichier texte (clic droit sur le bureau : Créer un document —> Fichier vierge) et de le rendre exécutable par un clic droit sur le nouveau fichier (Permissions —> Autoriser l’exécution du fichier comme un programme).
Bugs rencontrés
Après installation des deux programmes, Tesseract et gscan2pdf, faites des tests de ROC avec des images dans différents formats en lançant gscan2pdf depuis le Terminal, en tapant tout simplement : gscan2pdf.
Vous obtiendrez de cette manière de précieuses informations pour la résolution des erreurs.
Images .png, .jpg, ... non traitées en ROC : format invalide
1. Passez un traitement "unpaper" sur l’image et relancez la ROC. unpaper doit certainement repasser l’image au format .tif... Merci Dzef pour cette astuce !
2. Installez toute la série de libtiff depuis Synaptic (Système —> Administration —> Gestionnaire de paquets Synaptic).
Jeffrey Ratcliffe (nous ne lui en tenons aucunement rigueur) a oublié de mettre, parmi les dépendances, libtiff :
I forgot to add the libtiff dependency. That means that if you do not have libtiff installed, you will get garbage. I will fix this soon.
Image non traitée ou seulement en anglais :
En effet, Sorbus et moi-même avons fait des tests (voir les tests en commentaire) qui ont abouti aux mêmes résultats : en l’état, l’installation ne reconnaît pas réellement le français.
Sorbus a su lire correctement la réponse que Jeffrey Ratcliffe m’avait adressée et a trouvé la parade qui permet de rendre le couple Tesseract/gscan2pdf pleinement efficace en français.
Merci grandement Sorbus !
If tesseract 2.01 is compiled from source, it puts the language files by default in /usr/share/tessdata. When I did the Debian/Ubuntu packaging, I put them in /usr/share/tesseract-ocr/tessdata, and that is where gscan2pdf v0.9.19 looks to see which languages are installed. In the upcoming release, gscan2pdf will look in both paths.
Voici la traduction de Sorbus :
Si tesseract 2.01 est compilé de la source, il met les fichiers de langue par défaut dans
/usr/share/tessdata. Quand j’ai fait l’emballage Debian/Ubuntu, je les ai mis dans/usr/share/tesseract-ocr/tessdataet c’est où gscan2pdf v0.9.19 regarde pour voir quelles langues sont installées. Dans la sortie prochaine, gscan2pdf regardera dans les deux chemins.
Autrement dit, si vous obtenez le message d’erreur suivant :
ou le message d’erreur suivant :
A. Vous n’avez pas installé Tesseract avec le paquet de b52 (proposé ici)
Alors, dans ce cas, il suffit de télécharger les fichiers de langue et de les placer dans /usr/share/tessdata comme suit :
Merci Dom !
B. Vous avez installé Tesseract avec le paquet de b52 (proposé ici)
Si vous avez installé Tesseract avec le paquet de b52, il suffit de créer deux liens symboliques [solution très élégante suggérée par gldx] pour résoudre le problème de la reconnaissance de la langue française :
1. le premier avec les fichiers du répertoire /usr/local/share/tessdata vers /usr/share ou inversement selon le message d’erreur que vous obtenez ;
2. le deuxième vers le répertoire /usr/share/tesseract-ocr (qu’il faut créer) dans lequel gscan2pdf cherche les fichiers de langue :
Normalement, la création de ces deux liens symboliques avec le répertoire /tessdata contenant les fichiers de langue devrait régler les problèmes de ROC.
Et voilà le résultat :

Merci Sorbus !
Bug d’affichage : langue anglaise séléctionnée
Contrairement à ce que nous pensions, sur Ubuntu 7.10 et Debian Etch, la reconnaissance de la langue française n’est pas active s’il ne vous est pas possible de la sélectionner.
Autrement dit, si la seule langue disponible est l’anglais, comme sur la capture ci-dessous, cela signifie tout bonnement que la ROC en français ou dans d’autres langues que l’anglais n’est pas active !

Ben... il n’y a rien à faire ! Pour l’installation, utilisez vos outils habituels, apt-get, Synaptic, ... Et admirez le résultat :

Certains tests (en anglais) ont montré qu’une image de 400 dpi donnait des résultats plus que décents !
Frédéric Bezies a adapté l’article ci-dessus pour installer le duo de choc gscan2pdf+Tesseract sous ArchLinux. Reportez-vous à son billet pour plus de précisions.
Pour la reconnaissance du français (et autres langues) sous ArchLinux, voir le commentaire de FredBezies ci-dessous ou son billet sur la gestion des langues.
Merci Fred pour les tests et les infos !
C’est à Leonux que l’on doit cette installation et les tests.
Installez les paquets suivants
tesseract 2.01-1.fc8tesseract-langpack-fr.noarch 2.00-2.fc8gscan2pdf.noarch 0.9.19-1.fc8
Gestion des langues
Il faut créer le répertoire /usr/share/tesseract-ocr puis le lien symbolique :
L’installation et les tests effectués par Ulhume sont tout aussi concluants.
L’installation est assez simple :
Pour les détails de l’installation et des tests reportez-vous à l’excellent billet d’Ulhume.
Merci Ulhume pour ce retour et pour ces tests rondement menés.
Comme l’indique le premier message d’erreur, les fichiers du répertoire /tessdata devraient se trouver dans /usr/local/share.
Basiquement, si l’on reprend ce que dit Jeffrey Ratcliffe, les fichiers du répertoire /tessdata sont bien là où ils devraient être (lol) :
If tesseract 2.01 is compiled from source, it puts the language files by default in /usr/share/tessdata.
Pourtant, ils sont réclamés en /usr/local/share... Et c’est de là que vient tout le problème.
Le développeur de gscan2pdf les a placés quant à lui dans /usr/share/tesseract-ocr...
En résumé, trois localisations différentes de /tessdata :
1. par défaut : /usr/share.
2. celle que l’on trouve sur Ubuntu (voir les commentaires de Sorbus, entre autres) : /usr/local/share.
3. celle de gscan2pdf développée par Jeffrey Ratcliffe : /usr/share/tesseract-ocr.
Pour simplifier l’installation, c’est cela qu’il faudrait changer, unifier.
Merci à tous pour vos commentaires, vos tests, vos suggestions...
Edit : Un sujet est ouvert à propos de l’OCR sous Linux sur le forum Ubuntu-Fr.
De nombreuses solutions ont été testées et les résultats obtenus vont dans le même sens : Tesseract !
Sorbus a rencontré quelques difficultés avec son scanner. L’installation de certaines dépendances (djvulibre-bin, unpaper, ...) semble les avoir toutes réglées.
Comme le dit très justement Sorbus : "il reste à trouver quelles sont les meilleurs options pour une reconnaissance optimale. Puis à travailler sur l’amélioration/l’apprentissage..."