OCR

Cette contribution ou ce plugin est en phase de test. Des bugs peuvent subsister. N’hésitez pas à les signaler dans le forum ci-dessous.

Le plugin ocr a pour but d’analyser un fichier image (typiquement un document scanné) pour extraire le texte contenu. L’objectif n’est pas d’afficher le texte extrait sur le site, car le résultat sera trop approximatif, mais de permettre la recherche sur le contenu. Il peut être utilisé avec les plugins fulltext et doc2img.

Présentation

Les images, et plus particulièrement les documents scannés, peuvent contenir du texte dans lequel on aimerait pouvoir chercher depuis le moteur de recherche de SPIP.

Le plugin ocr permet d’extraire un texte depuis une image et de le stocker dans un champ du document (nouveau champ ocr de la table spip_documents). Les documents sont traités automatiquement par la liste des travaux, et aucun action manuelle n’est nécessaire.

Le moteur de recherche de SPIP prend en compte les textes extraits par le plugin ocr, ce qui permet donc de rechercher dans le contenu des images. Le plugin fulltext permet également de le faire, à condition de prendre en compte le champ ocr dans les index fulltext (voir la documentation du plugin).

Prérequis

Le plugin est basé sur la commande tesseract, qu’il faut donc installer au préalable sur le serveur.

Le plugin ocr est fait conçu pour fonctionner avec le plugin doc2img, de manière à pouvoir chercher dans les documents PDF.

Installation

Les tests n’ont été fait que sur Ubuntu et Debian. Sur ces plateformes, l’installation du programme tesseract se fait par

sudo apt-get install tesseract-ocr

Pour obtenir des résultats corrects, il est important de spécifier la langue des documents à tesseract (voir la section de Configuration). Pour ce faire, il est nécessaire d’installer le modèle de langue. Par exemple, pour le français :

sudo apt-get install tesseract-ocr-fra

Configuration

Le plugin propose la page de configuration suivante :

Les paramètres de configuration sont les suivants :

  • _OCR_INTERVALLE_CRON : intervalle de temps entre deux analyses OCR par SPIP (en secondes) - valeur par défaut : 600
  • _OCR_NB_DOCS : nombre de documents à traiter à chaque analyse OCR - valeur par défaut : 5
  • _OCR_TAILLE_TEXTE_MAX : limite de caractères dans le texte extrait - valeur par défaut : 50000
  • _OCR_BIN : chemin du binaire de tesseract - valeur par défaut : /usr/bin/tesseract
  • _OCR_OPT : options de tesseract - valeur par défaut : -l fra - voir la documentation de tesseract.

Les valeurs par défaut de ces options peuvent être définies dans mes_options.php :

define('_OCR_INTERVALLE_CRON', 300);
define('_OCR_NB_DOCS', 10);
define('_OCR_TAILLE_TEXTE_MAX', '100000');
define('_OCR_BIN', '/opt/tesseract');
define('_OCR_OPT', '-l spa');

Le paramètre le plus important est celui des options de tesseract (_OCR_OPT). En effet, il faut absolument utiliser la langue du document pour obtenir une reconnaissance correcte. Pour des textes en anglais, il faudrait mettre la valeur -l eng par exemple (voir la documentation de tesseract).

La page de configuration contient également un formulaire de test, qui permet de lancer le bon fonctionnement de l’analyse OCR. Il suffit de sélectionner un document du site, et de lancer l’analyse, pour voir le texte extrait et pouvoir éventuellement corriger les paramètres (surtout le paramètre de langue). A noter que ce test ne modifie pas la base de données.

Utilisation

Une fois installé, le plugin effectue automatiquement l’analyse des documents présents sur le site, selon les paramètres décrits au dessus, c’est-à-dire à intervalles réguliers. Un document récemment uploadé peut donc rester quelques temps sans être analysé (une évolution possible du plugin est l’analyse du document au moment de l’upload).

La page de configuration contient une section de statistiques qui permet de connaître le nombre de documents analysés et éventuellement de relancer l’analyse sur tous les documents.

Une fois les documents analysés, les recherches effectuées sur le site prendront en compte le texte extrait, permettant de retrouver les documents contenant la chaîne recherchée.

PDF et doc2img

Il faut noter que les documents PDF ne peuvent pas être directement analysés par ocr, qui n’opère que sur les images. Néanmoins, si le plugin doc2img est installé, alors le plugin ocr permettra de chercher dans les documents PDF.

En effet, le plugin doc2img convertit chaque page du PDF en une image PNG et la relie au document PDF original. Puis, le plugin ocr analyse chaque image, et stocke le texte extrait directement avec le document PDF original, et non pas avec l’image. De cette manière, lors d’une recherche sur le site, c’est le document PDF qui est renvoyé en cas d’occurrence de la chaîne recherchée, et non pas l’image PNG de la page, qui reste cachée à l’utilisateur.

L’analyse OCR ne fonctionne bien que si les lettres sont suffisamment détaillées dans l’image. Pour cela, il peut être nécessaire de régler le paramètre « Résolution » du plugin doc2img et de tester plusieurs résolutions jusqu’à obtenir le meilleur compromis entre qualité de l’analyse et poids des fichiers (150 dpi peut être une bonne valeur de compromis).

Développement

Voir le carnet dédié au développement du plugin : http://contrib.spip.net/ocr_todo. Les idées d’évolution peuvent être décrites directement là-bas.

Le détail du fonctionnement est le suivant. Deux champs sont ajoutés à la table spip_documents :

  • ocr : contient le texte analysé
  • ocr_analyse : contient l’état d’analyse du document :
    • non : pas encore effectuée,
    • oui : effectuée avec succès
    • err : effectuée avec erreur. A noter que seuls les fichiers image peuvent être analysés, les autres prennent donc la valeur err.

Dans le cas d’un document image, le champ ocr contient directement le texte extrait. En revanche, dans le cas d’un document PDF, et si le plugin doc2img est installé, alors le champ ocr contient un document JSON avec la structure suivante :

{
    "1" : "texte de la page 1",
    "2" : "texte de la page 2",
    "3" : "texte de la page 3"
}

Discussion

Aucune discussion

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom