L’OCR sous les distributions GNU/Linux ? Merci xsane2tess et tesseract :)

Si vous avez besoin de récupérer un texte dactylographié, il existe des logiciels dit d’OCR (Optical Character Recognition) ou Reconnaissance Optique de Caractère, il existe un excellent moteur libre qui s’appelle Tesseract.

Il m’arrive d’utiliser un script pour automatiser le lancement de tesseract, histoire d’éviter la ligne de commande. C’est XSane2tess dont j’ai jadis parlé en… octobre 2011 🙂

Je maintiens toujours le script sur AUR, trouvé via une page sur le wiki d’ubuntu-fr.org. Un simple script qu’il est très simple d’installer dans Xsane. Je vous renvoie à l’article d’octobre 2011 pour les détails techniques.

Continuer la lecture de « L’OCR sous les distributions GNU/Linux ? Merci xsane2tess et tesseract 🙂 »

XSane2Tess : ou comment marier Tesseract et XSane.

Il y a plus d’un an, je parlais du logiciel « gImageReader », bien pratique pour avoir une interface « sociale » pour l’outil d’OCR Tesseract.

Cependant, le logiciel est depuis quelques temps au point mort (la dernière modification datant d’août dernier).

Et comme je suis le mainteneur du paquet sur AUR, j’ai reçu récemment un message m’informant que le logiciel ne se lançait plus du tout.

Could not load GTK modules: /usr/lib/python2.7/site-packages/poppler.so: undefined symbol: poppler_page_render_to_pixbuf_for_printing

Après quelques recherches, le bug se trouvant lié à poppler, j’ai rapporté l’information au développeur de gImageReader pour qu’un correctif soit appliqué.

Cependant, ayant parfois besoin de récupérer des textes via l’OCR (et tesseract effectuant un travail extraordinaire dans ce domaine), j’ai décidé d’adopter le paquet xsane2tess tout en le mettant à jour.

XSane2tess, c’est un petit script qui est bien pratique, et dont un guide bien pratique se trouve sur la documentation d’ubuntu-fr.

Voici les réglages à appliquer pour utiliser xsane2tess. Les captures d’écran qui suivent sont basées sur XSane 0.998.

Première étape, après avoir installé le paquet et lancé Xsane, on va dans Préférences / Configuration / OCR.

Et dans la ligne « Commande OCR », on insère :


xsane2tess -l fra

xsane2tess 01

fra étant pour le français, eng pour l’anglais, deu pour l’allemand, etc… La liste des langues supportées se trouve dans /usr/share/tessdata/.

On ferme le panneau de configuration. Ensuite, pour lancer une OCR, on choisit les options suivante : pour le type, on choisit « TEXT », on prend une numérisation en « gris » et pour la résolution, on choisit 300.

xsane2tess 02

Ensuite, on acquiert l’aperçu, on sélectionne la partie à travailler, et on clique sur Numériser. Le résultat est disponible dans le nom du fichier indiqué à coté de l’icone en forme de disquette.

C’est moins « facile » qu’avec gImageReader, mais au moins, cela fonctionne encore 😉

gImageReader : une interface légère pour Tesseract.

Il est parfois utile d’avoir un outil d’OCR. Il existe le très bon et très puissant moteur tesseract.

Cependant, toute sa puissance est exploitable uniquement en ligne de commande :(. Il y a bien un outil comme gscan2pdf, mais il demande un nombre assez important de dépendances lié à Perl.

Même si à une époque lointaine, je l’avais encensé 🙂

En faisant quelques recherches, je suis tombé sur gImageReader, un outil en python, n’ayant que peu de dépendances, en dehors de python et de tesseract :

imagemagick pycairo pygtk python-gtkspell

En m’inspirant de PKGBUILDs déjà existants pour contourner un problème de compilation, j’ai créé un paquet disponible sur AUR : gimagereader.

Le seul hic, c’est qu’il faut définir le chemin pour accéder aux dictionnaires de tesseract. Sur mon archlinux, ces derniers sont à l’endroit suivant :

/usr/share/tessdata

Configuration de gImageReader 0.6

Bien que ce ne soit qu’une version 0.6, l’interaction avec le moteur de tesseract est simple et le résultat (pour peu qu’on ait une image numérisée de qualité – minimum 300 ppp) donne de très bons résultats.

gImageReader 0.6 en action

Un bug cosmétique, c’est que le logiciel ne semble pas apprécier un système en UTF-8 🙂

En tout cas, c’est un logiciel sympa, le genre d’outil dont on a besoin de temps à autres et dont on est content d’avoir sous la souris 😉

Petit message pour Devil505 : libre à toi de t’inspirer de mon PKGBUILD pour faire un Frugalbuild 😉

Comment avoir toutes les langues dans l’OCR Tesseract.

Dans un précédent article, j’avais parlé de l’excellentissime Tesseract et d’une interface qui est bien pratique, gscan2pdf.

Cependant, la reconnaissance ne se faisait que pour l’anglais.

Voici donc les commandes à appliquer (en root ou avec sudo) pour avoir le choix des langues dans gscan2pdf :

mkdir /usr/share/tesseract-ocr
ln -s /usr/share/tessdata/ /usr/share/tesseract-ocr/

Et maintenant, c’est magique 😉

Tesseract + gscan2pdf : l’ocr 5 étoiles.

Je me suis basé sur un article publié par « Linux on the root« , en l’adaptant pour mon archlinux.

L’installation des logiciels est assez simple :

yaourt -S tesseract gscan2pdf

Ensuite, en lançant gscan2pdf, on peut numériser – 300 dpi étant pratique pour avoir une bonne reconnaissance – ou récupérer une image numérisée.

Et j’avoue que le résultat est franchement… étonnant. Bref, mon précédent billet semble être un peu trop « éjaculation précoce » 😉

Mais que va-t-il rester aux logiciels propriétaires, mis à part les bonnes grosses daubes ludiques ? 😉

Ajout du 10 janvier, 20h08 :

Voici le résultat de tesseract :

1
IT WAS a bright cold day in April, and the clocks were
striking thirteen. Winston Smith, his chin nuzzled into his
breast in an effort to escape the vile wind, slipped quickly
through the glass doors of Victory Mansions, though not
quickly enough to prevent a swirl of gritty dust from
entering along with him.
The hallway smelt of boiled cabbage and old rag mats.
At one end of it a coloured poster, too large for indoor
display, had been tacked to the wall. It depicted simply an
enormous face, more than a metre wide: the face of a man
of about forty—five, with a heavy black moustache and
ruggcdly handsome features. Winston made for the stairs.
It was no use trying the lift. Even at the best of times it was
seldom working, and at present the electric current was cut
ull`during daylight hours. It was part ofthe economy drive
un preparation for Hate Week. The Hat was seven flights
up, mul Winston, who was thirty-nine and had a varicose
ulcer nhovc his right ankle, went slowly, resting several
Ilmes on thc way. On each landing, opposite the lift shaft,
the poster with the enormous face gazed from the wall. It
WAH an ie ufthose pictures which are so contrived that the eyes
hollow you about when you move. BIG BROTHER
li W /\’l`( II IING YOU, the caption beneath it ran.
Iusule the Flat a fruity voice was reading out a list of
flguteu which had something to do with the production of
pig in in. ‘l`l1e voice came from an oblong metal plaque like
S tlulleil mirror which formed part of the surface of the
Eiglitelmnal wall. Winston turned a switch and the voice
QQHL nmm·w|ml, though the words were still distinguish-

« Bien » numériser un document avec XSane et gocr

Même si tesseract est surement le meilleur des moteurs d’ocr libre, gocr se défend aussi, bien qu’étant moins puissant par moment. tesseract est aussi puissant qu’ennuyeux à mettre en oeuvre 🙁

J’utilise gocr 0.45 en liaison avec XSane pour récupérer les données.

Pour cet essai, j’ai pris mon exemplaire de « 1984 » en anglais. Pour installer Xsane et gocr, sous mon archlinux, il m’a suffit d’entrer un petit :

yaourt -S xsane gocr

Quand aux réglages utilisés, le plus simple est encore la capture d’écran ci-dessous :

reglage xsane pour l'OCR

Après avoir sélectionné la zone à numériser, j’ai lancé la récupération, puis le visionneur m’a donné l’image png à analyser.

Essai de xsane pour de l'ocr

Il m’a suffit de cliquer sur le bouton concernant l’OCR, et voici le résultat :

IT wAs a bright cold day Ap, and the clocks were
striking thirteen. Winston Smth, his chin nuzzle to his
breast an efort to escape the vile wind, slipped qckly
through the glass doors of Victo Msions, tho4gh not
qckly enough to prevent a swirl of gtty d4st from
Lnteng along with hîm.
The hlway smelt of boiled cabbage d old rag mats.
At one end of it a colo4red poster, too large for indoor
Iî’play, had been tacked to the wa. It depicted simply an
’11cro4s face, more th a metre wide: the face ofa man
n bo4t forty-five, with a heavy black mo4stache and
1’1d1y hdsome features. Winston made for the stairs.
l t w no 4se trying the lift. Even at the best ofmes it was
rIc{cn worke, and at present the electc c4rrent was c4t
l l’l Lre daylight ho4rs. It was part ofthe economy drive
1 rt;ration for Hate Week. The Aat was seven ghts-
11l ;1l Wston, who was thjrty-nine and had a varicose
ll’c’ lvc his right kle, went slowly, resig several
l c’ 1 m way. On each lding, opposite the lift shaft,
l33 ‘l’r with the enormo4s face gazed fiom the wall. It
I ‘ c l’s’ pires which are so contved at the eyes
Ilw yl ;34t when you move. BIG BhOTHE
l W n ‘ l'(; l l I NG YOU, the caption beneath it r.
ll’ LI t a fity voice was reang o4t a list of
glr3 wlic’I I,d sumetg to do with the production of
g a; l1. ‘ I 1 L vicc came from oblong metal plaq4e like
u t3lll’l li- -rr which formed part of the surface of the
_ ght-tu1l w;ll. Winston tumed a switch d the voice
tl3wll tlceh e words were s di gsh-

Le résultat est loin d’être parfait, mais au moins, il reste lisible 😉

Pour l’image PNG, cliquez ici. Pour le texte obtenu, cliquez ici. Il reste encore du chemin à faire, mais tant que l’on est pas obligé de tout retaper à la main, c’est le principal 😉