web-dev-qa-db-fra.com

Tesseract OCR Library - Apprendre les polices de caractères

Eh bien, j'utilise une version .NET de cet OCR conforme qui peut être trouvée @ http://www.pixel-technology.com/freeware/tessnet2/

Cela fonctionne, mais l'objectif est de traduire les plaques d'immatriculation. Malheureusement, le moteur ne traduit pas certaines lettres avec précision. Par exemple, voici une image que j'ai numérisée pour déterminer les problèmes de caractère.

enter image description here

Résultat:

12345B7B9U ABCDEFGHIJKLMNUPIJRSTUVHXYZ

Par conséquent, les caractères suivants ne sont pas traduits correctement:

1, O, Q, W

Cela ne semble pas trop grave, mais sur mes plaques d'immatriculation, le résultat n'est pas si bon:

enter image description here = H4 ODM

enter image description here = LDH IFW

Faux test

enter image description here = NR4 y2k

Comme vous le savez peut-être, j'ai essayé de réduire le bruit, d'augmenter le contraste et de supprimer les pixels qui ne sont pas du noir absolu, sans réelle amélioration.

Apparemment, vous pouvez «apprendre» les nouvelles polices du moteur, mais je pense que je devrais recompiler la bibliothèque pour .NET, mais il semble que cela soit effectué sur un système d'exploitation Linux que je n'ai pas encore.

http://www.scribd.com/doc/16747664/Tesseract-Trainingfor-Khmer-LanguageFor-Posting

Donc, je suis coincé comme quoi essayer ensuite, j'ai écrit une application de console rapide uniquement à des fins de test si quelqu'un veut l'essayer. Si quelqu'un a des idées, des manipulations graphiques ou des idées de bibliothèque, j'aimerais les entendre.

15
Ash

J'ai récemment utilisé Tesseract via Tessnet2 (Tessnet2 est un wrapper VS2008 en C++ autour de Tesseract 2.0 réalisé par Rémy Thomas, si je me souviens bien). Laissez-moi essayer de vous aider avec le peu de connaissances que j'ai sur cet outil:

  • Premièrement, comme je l'ai dit plus haut, cet emballage concerne uniquement Tesseract 2.0 et la la dernière version de Tesseract sur Google Code est de 3,00 (le code n'est plus hébergé sur Source Forge). Il y a des contributeurs réguliers: j'ai vu que la version 3.01 est prévue. Vous ne bénéficiez donc pas des dernières améliorations, y compris l'analyse de la mise en page, qui peut être utile lorsque vos plaques d'immatriculation ne sont pas à 100% horizontales.

  • J'ai demandé à Rémy un wrapper .NET Tessnet2 autour de la version 3, il n'en prévoit pas pour le moment. Alors comme moi, tu devras le faire toi-même!

  • Donc, si vous voulez obtenir la dernière version des sources, vous pouvez les télécharger depuis le référentiel Subversion (tout est décrit sur la page du site dédié ) et vous pourrez compiler. si vous avez Visual Studio 2008, car leurs sources contiennent une solution VS2008 dans le sous-dossier vs2008. Cette solution est composée de projets C++ VS2008. Pour obtenir des résultats en C #, vous devez utiliser .NET P/Invoke avec la variable tessDll construite par le projet. Encore une fois si vous en avez besoin, j'ai des exemples de code qui pourraient vous intéresser, mais vous voudrez peut-être rester en C++ et faire vos propres projets WinForm, par exemple!

  • Quand vous aurez fini de compiler (il ne devrait pas y avoir de problèmes majeurs pour cela, mais dites-moi si vous en rencontrez, je les aurai peut-être aussi rencontrés :-)), vous aurez en sortie plusieurs binaires qui vous permettront de faire une formation spécifique! Encore une fois, il y a une page spécialement dédiée à la formation Tesseract 3 } _. Grâce à cette formation, vous pouvez:

    • restreignez votre jeu de caractères, ce qui supprimera automatiquement la ponctuation ('/ - \' au lieu de 'A', par exemple)

    • indiquez les ambiguïtés que vous avez détectées ("D" au lieu de "O" comme vous avez pu le voir, "B" au lieu de "8" etc.) qui seront prises en compte lors de l'utilisation de votre formation.

  • J'ai également constaté que les résultats de Tesseract sont meilleurs si vous restreignez l'image à la zone où se trouvent les lettres (c.-à-d. Pas de visage, ni de paysage autour): dans mon cas, je devais reconnaître uniquement une zone spécifique de cartes avec des photos prises à partir d'une webcam , j’ai donc utilisé le traitement d’image pour restreindre la zone. C'était long, bien sûr, mais mes images provenaient de nombreuses sources différentes et je n'avais donc pas le choix. Si vous pouvez obtenir des images limitées au minimum, ce sera génial!

J'espère que cela vous a aidé, n'hésitez pas à me faire part de vos remarques et de vos questions!

28
Emmanuel

Salut, j'ai passé beaucoup de temps avec tesseract, et j'ai aussi eu quelques problèmes. Vous posez des questions sur les outils de traitement d'image, et je recommanderais "unpaper" (il existe également des ports Windows, voir google). C'est un joli de-skew, unototate, remove-border-and-noise and-so programme -on. Parfait pour courir avant de commencer.

Si vous avez une couleur d'arrière-plan (quelque peu) variable sur vos images, je vous recommande le script imagemagick "textcleaner" . Je pense que Edge détecte et blanchit tous les éléments non gênants.

Et si vous avez un texte complexe, alors "ocropus" pourrait être utile. La syntaxe est (sur linux): "ocroscript rec-tess"

Ma configuration est 1. nettoyeur de texte 2. unpaper 3. les groupes

Avec ces trois étapes, je peux lire presque n'importe quoi. Même des images très floues + bruitées prises avec un éclairage inégal, avec deux colonnes de texte compact, très lisibles. OK, peut-être que vos besoins ne contiennent pas beaucoup de texte, mais les étapes 1) et 2) pourraient vous être utiles.

11
Arno Teigseth

Je construis actuellement un moteur de reconnaissance de plaque d'immatriculation pour ispy - J'ai obtenu de bien meilleurs résultats avec tesseract lorsque je scindais la plaque d'immatriculation en caractères individuels et que je construisais une nouvelle image affichée verticalement avec un espace blanc comme:

W

4

O

O

M

Je pense que l’un des gros problèmes de tesseract est qu’il essaie de faire des mots avec les lettres et les chiffres horizontaux et que dans le cas de plaques minéralogiques mélangées de lettres et de chiffres, il décide qu’un chiffre est une lettre ou inversement. Entrer une image avec les caractères espacés verticalement fait qu’elle les traite comme des caractères individuels au lieu de texte.

3
Sean

Une bonne lecture! http://robotics.usc.edu/publications/downloads/pub/635/

À propos de votre problème de biais pour les plaques d'immatriculation:

Problème: lorsque la saisie OCR est effectuée à partir d'une caméra portable Ou d'un autre périphérique d'imagerie dont la perspective n'est pas fixe, comme , les lignes de texte peuvent être faussées par rapport à leur orientation d'origine [13] Sur la base de nos expériences, le chargement d’une image Pivotée dans notre moteur OCR donne des résultats extrêmement médiocres . Approche proposée: Un processus de détection de biais est nécessaire Avant d’appeler. le moteur de reconnaissance. Si un biais est détecté, Une procédure de rotation automatique est effectuée pour corriger le biais Avant de poursuivre le traitement du texte. Lors de l'identification de l'algorithme À utiliser pour la détection de biais, nous avons constaté que de nombreuses approches , Telles que celle mentionnée dans [13], sont basées sur Les hypothèses que les documents ont s et marges. Cependant, Cette hypothèse ne tient pas toujours dans notre application. De plus, les méthodes traditionnelles basées sur les opérations morphologiques Et les méthodes de projection sont extrêmement lentes et Ont tendance à échouer en présence d'images capturées par la caméra. Dans ce travail, nous avons choisi une approche plus robuste basée sur l'algorithme de recherche de ligne de texte lié de Branchand - (Algorithme RAST) [25] Pour la détection d'inclinaison et la rotation automatique. L’idée de base de cet algorithme Est d’identifier chaque ligne indépendamment et d’utiliser la pente De la meilleure ligne de notation comme angle de biais pour l’ensemble du segment de texte . Après avoir détecté l'angle d'inclinaison, la rotation est effectuée en conséquence. Sur la base de nos expériences, nous avons trouvé Cet algorithme extrêmement robuste et extrêmement efficace Et rapide. Cependant, il souffrait d'une limitation mineure à Le sentiment de ne pas détecter une rotation supérieure à 30. Nous avons également essayé une autre approche, qui pourrait détecter tout angle de jusqu’à 90. Cependant, cette approche reposait sur la présence d’une sorte de croix sur l’image. En raison du manque d'extensibilité, , Nous avons décidé de nous en tenir à l'algorithme RAST .

2
sschrass

Par défaut, Tesseract 3.0x pénalise les combinaisons qui ne sont ni des mots ni des mots courants. La FAQ décrit une méthode pour augmenter son aversion pour de telles absurdités. Il peut être utile de désactiver la pénalité pour les mots rares ou inexistants, comme décrit (inversement) ici: http://code.google.com/p/tesseract-ocr/wiki/FAQ# Comment_augmenter_le_trust_dans/la force_du_dictionnaire ?

1
Mongoose1021

ABCocr .NET utilise Tesseract3, ce qui pourrait être approprié si vous avez besoin du dernier code sous .NET.

0

Si quelqu'un de l'avenir rencontre cette question, il existe un outil appelé jTessBoxEditor qui facilite grandement l'enseignement de Tesseract. Tout ce que vous faites est de le pointer vers un dossier contenant des exemples d’images, puis de cliquer sur un bouton pour créer votre fichier * .learneddata à votre place.

0
Captain Kenpachi