2009-08-26 7 views
3

J'utilise Tesseract OCR (via pytesser) et PIL (Python Image Library) pour le test automatique d'une application.Comment donner les meilleures chances de succès à un logiciel OCR?

Je vérifie que le texte affiché est correct en faisant une capture d'écran et en obtenant le texte grâce à tesseract.

J'ai eu quelques problèmes au début et cela semble fonctionner mieux puisque j'ai augmenté la taille de la capture d'écran grâce à l'interpolation bicubique de PIL.

Malheureusement, j'ai encore quelques erreurs comme la confusion entre '0' et 'O'. Je peux imaginer que j'aurai d'autres problèmes similaires à l'avenir.

Je voudrais savoir s'il existe des techniques pour préparer une image afin d'aider l'OCR. Toute idée est la bienvenue.

Merci à l'avance

+0

Si cette question est toujours d'actualité: Est-ce que cela a à être Tesseract? Il existe des moteurs OCR (tels que ABBYY) qui sont parfaits pour les images d'entrée de basse qualité et effectuent automatiquement le prétraitement des images pour vous. Il y a une API REST pour l'OCR qui utilise le moteur ABBYY sur http://www.wisetrend.com/wisetrend_ocr_cloud.shtml - il y a un essai gratuit pour que vous puissiez essayer quelques images par vous-même –

Répondre

1

Shameless plug et disclaimer: my company paquets Tesseract pour une utilisation dans .NET

Tesseract est un moteur OCR OK. Il peut beaucoup manquer et devient facilement confus par le non-texte. La meilleure chose que vous pouvez faire pour cela est de vous assurer qu'il ne contient que du texte. La meilleure chose à faire est de lui donner quelque chose de bien binarisé (seuil adaptatif ou dynamique pour y arriver) ou de niveaux de gris et de le laisser essayer de faire une binarisation.

+0

Je suis d'accord avec ça. Il a été confondu par un bord de boîte de dialogue et converti en 'I'. Quand il obtient des images de texte seulement, il fait du bon travail. la binarisation est aussi une bonne idée. Merci. – luc

0

Pour distinguer entre 0 et O, une solution simple est de choisir une police qui établit une distinction entre les deux (par exemple: 0 a un tiret ou point dans son milieu). Cela serait-il acceptable dans votre demande? Une autre solution consiste à appliquer une étape basée sur un dictionnaire après l'analyse caractère par caractère du texte - en alimentant le texte reconnu en une sorte de vérificateur d'orthographe ou de validateur pour différencier les caractères difficiles. Par exemple, un symbole rond suivi d'autres nombres est plus susceptible d'être un zéro, tandis que le même symbole suivi de lettres est le plus susceptible d'être un o majuscule. C'est un exemple trivial, mais il montre comment le contexte est nécessaire pour rendre un système OCR plus fiable.

+0

Malheureusement, je n'ai pas le contrôle de la police. Pouvez-vous expliquer un peu plus ce que vous voulez dire par l'étape basée sur le dictionnaire? – luc

0

Même dans les meilleures conditions, les variantes OCR se faufileront sur vous. Votre meilleure option sera de concevoir vos tests pour être au courant d'eux.

1
  1. train Tesseract de reconnaître votre police
  2. Faire l'image supplémentaire propre et avec assez d'espace libre autour des caractères
  3. Profit :)

Voici quelques exemples du monde réel.

  • Première image est l'image originale (numéros croped wattmètre)
  • seconde image est légèrement nettoyé image dans GIMP, environ 50% de précision de l'OCR Tesseract
  • troisième image est l'image complètement nettoyée - 100% OCR reconnu sans aucune formation!

enter image description here enter image description here enter image description here