Utilisation de Tesseract en ligne de commande

Tesseract est un moteur OCR (Optical Character Recognition : reconnaissance de caractères/texte dans une image) open source créé par HP et repris par Google (en gros, cela permet de reconnaître du texte à partir de l’image d’un document). Cet article est un petit guide sur son utilisation par ligne de commande sous Linux et Windows.

Voici le manuel utilisateur officiel https://tesseract-ocr.googlecode.com/svn/trunk/doc/tesseract.1.html .

Installation

Dans la plupart des nouvelles distributions linux, le paquet ‘tesseract’ ou ‘tesseract-ocr’ existe déjà donc pour l’installer sur Ubuntu/Debian, c’est :

sudo apt-get install tesseract-ocr

Pour l’installer sur Windows ou Mac ou une autre distribution linux, vous pouvez vous référer au Wiki https://github.com/tesseract-ocr/tesseract/wiki

Première utilisation

Après cela, c’est très simple. Il faut ouvrir la ligne de commmandes (en tant qu’admin sous Windows) et taper :


tesseract mon_image.jpg output_file

Tesseract sortira le résultat de la prédiction dans output_file.txt

Comment specifier explicitement le langage du texte a predire ?

Pour la langue française, par exemple :
tesseract mon_image.jpg output_file -l fra

Comment faire dans le cas où l’image contient plusieurs langages différents ?

Il suffit d’indiquer les langages séparés avec des « + ».
Par exemple, pour du texte en français et en allemand :
tesseract texte_francais_allemand.jpg output_file -l fra+deug

Si Tesseract vous donne une erreur quant à l’existence de données de prédiction pour un des langages, il se peut fortement qu’il vous faille télécharger les données d’entraînement disponibles ici https://github.com/tesseract-ocr/tessdata et les copier dans le dossier /usr/share/tesseract/tessdata/ 

Que représentent les méthodes de segmentation (psm) de Tesseract ?

Avant de reconnaître les caractères présents dans l’image, Tesseract performe du pré-traitement comme la segmentation de l’image.
La segmentation consiste à séparer l’image en blocs de texte. Il y a plusieurs modes de segmentation :  en colonnes, en lignes, en ilôts, etc.

Si vous êtes au courant du format du texte dans l’image, vous pouvez par exemple spécifier si l’image représente une ligne de texte, si l’image contient du texte parfaitement aligné ou du texte qui a besoin d’être aligné, si celle-ci contient plusieurs ou bien seulement une colonne etc.

Le mode par défaut est le mode 3 : segmentation automatique de la page sans détection d’orientation.

Voici l’explication de certains modes de segmentation disponibles :
Mode 0 : Détection de l’orientation du texte (OSD) seulement : cela détecte l’angle d’alignement du texte afin de le corriger ensuite

tesseract mon_image.jpg output_file -psm 0

Mode 1 : Segmentation automatique avec détection de l’orientation et du script :

tesseract texte_desaligne.jpeg output_file -psm 1

Mode 2 – Segmentation automatique de la page sans détection de l’orientation, ni détection de caractères : Cela servira seulemenet à détecter la segmentation

tesseract mon_texte_en_colonnes.jpeg output_file -psm 2

Mode 3 – Segmentation de pages sans détection de l’orientation du texte (mode par défaut)

tesseract mon_texte_en_colonnes_parfaitement_aligne.jpeg output_file -psm 3

Mode 4 – Assumer une colonne de texte avec des variations de tailles du texte

tesseract mon_texte_variant.jpeg output_file -psm 4

Mode 5 – Assumer un bloc de texte aligné verticalement : Je n’ai pas encore testé ce mode-là. Je ne pourrai pas en parler pour le moment
Mode 6 – Assumer un seul bloc de texte : Je n’ai pas encore testé ce dernier non plus.
Mode 7 – Traiter l’image comme une ligne de texte

tesseract ligne_de_texte.jpeg output_file -psm 7

Mode 8 – Traiter l’image comme un mot

tesseract mot.jpeg output_file -psm 8

Mode 9 – Traiter l’image comme étant un mot dans un cercle

tesseract mot_dans_cercle.jpeg output_file -psm 9

Mode 10 – Traiter l’image comme représentant un seul caractère

tesseract A.jpeg output_file -psm 1

Git : synchroniser un répertoire du dépôt seulement (comme svn)

A la façon de svn où on peut checkout un répertoire spécifique dans le repository svn, on peut faire la même chose avec git v1.7+ En langage Git, c’est un sparse checkout – Créer un dossier vide qui va accueillir le sous-dossier du dépôt git – Activer sparse checkout – Définir les dossiers/fichiers du dépôt […]

Nginx : comment créer un Virtual Host (pour un site web)

J’ai déjà parlé des avantages d’avoir un serveur web nginx dans un autre article et je vous montre comment l’utiliser ici. Sous linux, si vous n’avez pas nginx vous devez l’installer avec apt : 1. Créer le répertoire racine du site Vous devez créer le répertoire racine qui contiendra les fichiers de votre site (la […]

HTML : images dont le lien n’existe plus, alternative à l’icône de broken link

Si une balise image pointe vers un lien mort, on verra apparaître l’icône de lien mort qui n’est pas très esthétique. Résultat : La plupart des fois, il vaut mieux afficher une image de fallback (une image par défaut) ou bien carrément désactiver l’affichage de l’image Trois méthodes pour ne plus voir cette icône OU afficher une icône par défaut Javascript, […]

Lire une requête POST envoyée par AngularJS dans un script PHP

En utilisant $http.post dans AngularJS, on ne peut pas lire les données en utilisant $_POST dans un script PHP distant car AngularJS envoie les données POST en format JSON. La méthode qui marche pour lire la requête POST envoyée par Angular est de lire les données contenus php://input qui sont en format JSON. Voici un exemple de formulaire simple pour plus […]

Désactiver le layout et/ou la vue dans un controlleur dans Zend Framework

Pour désactiver le layout et/ou le script de vue, il faut rajouter ce code-là dans la méthode de l’action OU bien dans le méthode preDispatch (héritée de Zend_Controller) C’est utile si vous voulez utiliser vos actions dans des requêtes ajax ou bien pour retourner des données en format JSON (api mode).

Zend Framework : spécifier explicitement une vue à un controlleur

Si vous voulez spécifier une vue autre que la vue par défaut pour un controlleur, il y a plusieurs façons de le faire : $this->render(‘autre’) (si le script est dans le même dossier de vues du controlleur). $this->renderScript(‘mon-controlleur/autre.phtml’) $this->_helper->viewRenderer->setRender(‘autre’); $this->_helper->viewRenderer(‘existing’); (équivalent à setRender) Cependant, il faut noter que les deux méthodes render affichent le résultat directement […]

Javascript : problème de variable dans une fonction récursive

En codant en javascript, je rencontrais un problème avec la variable « i » de mes boucles for qui changeait de valeur, ne s’incrémentait pas donc la boucle for s’arrêtait avant son arrêt prévu ou bien tournait indéfiniment. Exemple : La mauvaise façon de déclarer une variable i dans une boucle for dans une fonction récursive C’est un exemple bidon de fonction récursive mais là […]

Vim : commandes de suppression utiles

Commandes pour supprimer un caractère, un mot ou une ligne Pour chacune des commandes listées en haut, on peut ajouter un nombre au début de la commande pour préciser combien de fois supprimer. Exemple : La commande 5dd supprime les 5 prochaines lignes. La commande 3dw supprime les 3 prochains mots Commandes pour supprimer jusqu’à la fin de la […]

Les Knockout Templates

Récemment, j’ai découvert un nouvelle « fonctionnalité » de knockout qui sont les templates. Cela sert à créer une structure html qu’on peut répliquer et qui est attachée à une variable (qui peut être un objet ou n’importe quoi) dans le viewModel. Par exemple, si dans votre site vous demandez que l’utilisateur entre son pays plusieurs fois […]