Carnet Wiki

ocr

Version 14 — August 2013 severo

Analyser un fichier image (typiquement un document scanné) pour extraire le texte contenu. L’objectif n’est pas d’afficher le texte extrait, car le résultat sera trop approximatif, mais de permettre la recherche sur le contenu.

Cette contribution est un document de spécifications pour un nouveau plugin ocr.Il n’y a pas encore de code.

Présentation

Les documents scannés, en particulier, peuvent contenir du texte dans lequel on aimerait pouvoir chercher depuis le moteur de recherche de SPIP.

Ce plugin fera uniquement l’extraction d’un texte depuis une image et le stockage de ce texte dans un champ de l’image (nouveau champ ocr de la table spip_documents).

Pour pouvoir chercher dans ce nouveau champ, il faudra utiliser et configurer le plugin fulltext.

Spécifications

Le plugin sera basé sur la commande tesseract.

Le plugin proposera les configurations suivantes :

  • chemin du binaire (par défaut: /usr/bin/tesseract)
  • paramètres de la commande (par défaut: -fra pour analyse en français)

L’analyse sera gérée par la file d’attente (http://plugins.spip.net/facd.html).

Limitations

Seulement testé sur Ubuntu Raring.

Installation du binaire

sudo apt-get install tesseract-ocr tesseract-ocr-fra tesseract-ocr-eng tesseract-ocr-spa

Développement

Le code du plugin est sur la zone.

On développera dans trunk.

Tâches

Les tâches pour le développement du plugin :

  • créer le plugin avec la Fabrique
  • page de configuration avec test de l’existence du script d’OCR
  • création d’un nouveau champ “ocr” éditable dans la table spip_documents, vide par défaut
  • fonction d’analyse d’un document : appel du script et remplissage du champ “ocr”
  • test de l’analyse d’un document sur la page de configuration
  • lancement automatique de l’analyse dans la liste de travaux

A la fin de ces tâches, on passe en test.

Possibles améliorations

Langue :

  • appliquer tesseract dans la langue du site par défaut
  • ajouter un paramètre de configuration de la langue (par défaut avec la langue du site)
  • si le document a un champ lang, utiliser cette langue pour l’analyse. Voir langdoc.

Programme d’analyse :

  • utiliser php-tesseract directement, au lieu d’une commande native,
  • permettre de se brancher sur d’autres programmes d’analyse, comme OpenOcr.
  • proposer un document de test pour vérifier que l’analyse se fait bien
  • détecter la résolution du document et avertir de la faible fiabilité possible du résultat en cas de faible résolution du document
  • ajouter à la configuration une liste de mots personnalisable, permettant d’enrichir le modèle de langue (noms propres récurrents dans les documents du site, par exemple).

SPIP :

  • fichier de log dédié pour le suivi des analyses de documents : tmp/log/ocr.log
  • page ecrire/?exec=ocr pour indiquer le nombre de documents analysés, en attente d’analyse, en erreur (sur le mode de fulltext).
  • configuration : spécifier les formats sur lesquels lancer l’analyse: autant laisser le programme d’OCR essayer sur tous les documents
  • Pas nécessaire - filtres (sur le mode de doc2img):
    • #ID_DOCUMENT|ocr_analyser : analyse le document, retourne true si analyse réussie, deja analyse si le document a déjà été analysé, non analysable si le document ne peut pas être analysé.
    • #ID_DOCUMENT|ocr_analysable : retourne true si le document peut être analysé.
    • #ID_DOCUMENT|ocr_analyse : retourne true si le document a déjà été analysé.
  • traduire le plugin
  • permettre le versionnement de l’analyse des documents (date de la dernière analyse sur chaque document) Fait a minima, avec la colonne ocr_analyse, qui indique le statut d’analyse de chaque document (non, oui, err)

Indexation et recherche :

  • faire le lien avec fulltext pour indexer le contenu analysé
  • faire le lien avec fulltext et doc2img pour rechercher dans les PDF (PDF découpé en images par doc2img, images analysées par ocr, texte extrait indexé par fulltext, et finalement, si une recherche aboutit à un texte extrait d’une image créée par doc2img, montrer plutôt le PDF original comme résultat de recherche). A noter que pour avoir un OCR correct, il faut augmenter la résolution de doc2img à 300 dpi (par défaut 150 dpi)
  • éventuellement, générer un document hOCR donnant la position des lettres reconnues par OCR dans l’image, et générer un PDF “cherchable”, attaché au document original.

Page de documentation sur SPIP-Contrib.