Comment faire l’OCR à partir de la ligne de commande Linux à l’aide de Tesseract



L’extraction de texte à partir d’images est réalisable via la ligne de commande Linux grâce au moteur Tesseract OCR. Ce dernier se distingue par sa rapidité, sa précision et sa capacité à gérer une centaine de langues. Découvrons ensemble comment l’exploiter.

Reconnaissance Optique de Caractères

La reconnaissance optique de caractères (OCR) permet d’identifier et d’extraire le texte présent dans une image, le transformant en données modifiables. Cette opération, naturelle pour l’humain, représente un défi majeur pour les ordinateurs. Les premières tentatives étaient peu concluantes, car les logiciels OCR étaient souvent déroutés par les variations de polices ou de tailles.

Malgré ces difficultés, les pionniers de l’OCR étaient respectés pour leur travail. En cas de perte d’une version numérique d’un document, la version imprimée pouvait être récupérée grâce à l’OCR. Même si les résultats n’étaient pas parfaits, cela permettait un gain de temps considérable.

Avec quelques ajustements manuels, il était possible de reconstituer le document. Les imperfections étaient acceptées, compte tenu de la complexité de la tâche pour un logiciel OCR. De plus, c’était préférable à la réécriture complète du document.

Depuis, des progrès importants ont été réalisés. Tesseract OCR, développé initialement par Hewlett Packard dans les années 1980 en tant qu’outil commercial, est devenu open source en 2005. Il est désormais soutenu par Google. Il offre une prise en charge multilingue, est reconnu pour sa précision et est disponible gratuitement.

Installation de Tesseract OCR

Pour installer Tesseract OCR sur Ubuntu, utilisez la commande suivante :

sudo apt-get install tesseract-ocr

Sur Fedora, la commande appropriée est :

sudo dnf install tesseract

Sur Manjaro, la commande à saisir est :

sudo pacman -Syu tesseract

Utilisation de Tesseract OCR

Nous allons soumettre Tesseract OCR à une série de défis. Notre première image contient un extrait du considérant 63 du Règlement général sur la protection des données. Voyons si l’OCR peut le déchiffrer (et rester concentré).

Cette image est délicate car chaque phrase débute par un numéro en exposant, une caractéristique fréquente des documents juridiques.

Il est nécessaire de fournir à la commande tesseract certaines informations :

  • Le nom du fichier image à traiter.
  • Le nom du fichier texte qui contiendra le texte extrait. L’extension (qui sera toujours .txt) n’est pas nécessaire. Un fichier existant portant le même nom sera écrasé.
  • L’option –dpi pour indiquer la résolution de l’image en points par pouce (dpi). Si aucune valeur dpi n’est fournie, tesseract tentera de la déterminer.

Dans notre exemple, le fichier image est « recital-63.png », sa résolution est de 150 dpi, et nous souhaitons créer un fichier texte nommé « recital.txt ».

La commande est la suivante :

tesseract recital-63.png recital --dpi 150

Les résultats sont satisfaisants. Seuls les exposants ont posé problème, car leur taille était trop réduite pour être interprétée correctement. La qualité de l’image est primordiale pour obtenir de bons résultats.

tesseract a interprété les nombres en exposant comme des guillemets («) et des symboles de degré (°), mais le reste du texte a été correctement extrait (la partie droite de l’image a été coupée pour tenir ici).

Le dernier caractère est un octet avec la valeur hexadécimale 0x0C, correspondant à un retour chariot.

Voici une autre image contenant du texte de différentes tailles, en gras et en italique.

Le nom de ce fichier est « bold-italic.png ». Pour générer un fichier texte nommé « bold.txt », nous utiliserons la commande suivante :

tesseract bold-italic.png bold --dpi 150

Cette fois, l’extraction du texte s’est déroulée sans encombre.

Prise en charge de différentes langues

Tesseract OCR gère environ 100 langues. Pour utiliser une langue, il est nécessaire de l’installer. L’abréviation de la langue désirée doit être notée. Par exemple, nous allons installer la prise en charge du gallois, dont l’abréviation est « cym » (Cymru, qui signifie gallois).

Le nom du paquet d’installation est « tesseract-ocr- » suivi de l’abréviation de la langue. Pour installer le fichier de langue galloise sous Ubuntu, nous utiliserons la commande :

sudo apt-get install tesseract-ocr-cym

L’image ci-dessous contient le premier couplet de l’hymne national gallois.

Voyons si Tesseract OCR est à la hauteur. Nous utiliserons l’option -l (langue) pour indiquer à tesseract la langue à utiliser :

tesseract hen-wlad-fy-nhadau.png anthem -l cym --dpi 150

Tesseract s’en sort parfaitement, comme le montre le texte extrait ci-dessous. Da iawn, Tesseract OCR.

Si votre document contient plusieurs langues (par exemple, un dictionnaire gallois-anglais), vous pouvez utiliser le signe plus (+) pour indiquer à tesseract d’ajouter une autre langue, comme ceci :

tesseract image.png textfile -l eng+cym+fra

Utilisation de Tesseract OCR avec des fichiers PDF

La commande tesseract est conçue pour fonctionner avec des fichiers image, mais elle ne peut pas traiter directement les fichiers PDF. Cependant, pour extraire le texte d’un PDF, vous pouvez utiliser un autre outil pour générer des images. Chaque image représentera une page du PDF.

L’utilitaire pdftoppm, dont vous avez besoin, est généralement déjà installé sur votre ordinateur Linux. Le PDF utilisé pour notre exemple est une copie de l’article fondateur d’Alan Turing sur l’intelligence artificielle, « Computing Machinery and Intelligence ».

L’option -png spécifie que nous souhaitons créer des fichiers PNG. Le nom de fichier de notre PDF est « turing.pdf ». Nous nommerons nos fichiers image « turing-01.png », « turing-02.png », etc. :

pdftoppm -png turing.pdf turing

Pour exécuter tesseract sur chaque fichier image avec une seule commande, nous devons utiliser une boucle for. Pour chacun de nos fichiers « turing-nn.png », nous exécutons tesseract et créons un fichier texte nommé « text- » suivi du nom du fichier image :

for i in turing-??.png; do tesseract "$i" "text-$i" -l eng; done;

Pour combiner tous les fichiers texte en un seul, nous pouvons utiliser la commande cat :

cat text-turing* > complete.txt

Cependant, le résultat est proche de l’original. Le formatage est perdu, évidemment, mais le texte est correct.

Le filigrane vertical a été transcrit sous la forme d’une ligne de charabia en bas de page. Le texte était trop petit pour que tesseract puisse le lire avec précision, mais il serait facile de le localiser et de le supprimer. Le pire résultat aurait été des caractères erronés à la fin de chaque ligne.

Curieusement, les lettres uniques au début de la liste de questions et réponses de la deuxième page ont été ignorées. Voici un extrait de la section du PDF :

Comme le montre le résultat ci-dessous, les questions sont conservées, mais les « Q » et « A » au début de chaque ligne sont perdus.

Les diagrammes ne seront pas non plus transcrits correctement. Examinons ce qui se passe lorsque nous essayons d’extraire le diagramme ci-dessous du PDF de Turing.

Comme on peut le voir dans le résultat ci-dessous, les caractères ont été lus, mais le format du diagramme est perdu.

Ici encore, tesseract a eu des difficultés avec la petite taille des indices, qui ont été rendus de manière incorrecte.

Cependant, dans l’ensemble, le résultat était satisfaisant. Bien que nous n’ayons pas été en mesure d’extraire un texte parfait, cet exemple a été choisi intentionnellement car il présentait un défi.

Une solution efficace quand vous en avez besoin

L’OCR n’est pas une fonctionnalité que vous utiliserez au quotidien. Toutefois, lorsqu’un besoin se présente, il est rassurant de savoir que l’un des meilleurs moteurs OCR est à votre disposition.