Comment choisir entre Tesseract et OpenCV? [fermé]

94

Je suis récemment tombé sur Tesseract et OpenCV . Il semble que Tesseract est un moteur OCR à part entière et OpenCV peut être utilisé comme cadre pour créer une application / service OCR.

J'ai essayé d'utiliser Tesseract sur certaines de mes images et sa précision semble correcte. Plus tard, je suis tombé sur un tutoriel très simple sur l'utilisation d'OpenCV pour effectuer l'OCR en utilisant Python et j'ai été impressionné. En quelques minutes, j'ai terminé la formation du système et sa précision était bonne. Mais bien sûr, en adoptant cette approche, je dois entraîner mon système de manière approfondie à l'aide d'un grand ensemble de formation.

Mes questions spécifiques sont les suivantes:

  • Comment choisir entre Tesseract et utiliser OpenCV pour créer une application OCR personnalisée?
  • Il existe des ensembles de données de formation disponibles pour Tesseract pour différentes langues. OpenCV a-t-il quelque chose de similaire pour que je n'ai pas à recommencer pour réaliser l'OCR?
  • Lequel est le meilleur pour une application commerciale qui veut être?

Aucune suggestion?

Légende
la source
8
Les réponses ci-dessous sont vraiment excellentes, mais en tant que personne ayant travaillé avec OCR, je peux vous dire que la qualité de la reconnaissance dans Tesseract est inférieure aux attentes d'un utilisateur d'application commerciale. Tesseract est génial, mais l'OCR est difficile - des choses comme la formation en ligne ou les améliorations à la volée sont hmmm ... encore de la recherche. Google, le grand sponsor derrière TS ces derniers temps, a décidé de construire son propre moteur - OCROpus. Et bien qu'il ait promis de l'ouvrir, le moteur de reconnaissance de base n'est pas encore disponible - ils n'ont publié qu'un cadre - c'est une API pour tesseract.
Sam
3
@vasile: C'est très instructif. Je n'étais pas au courant d'OCROpus. Je vous remercie. Auriez-vous des suggestions d'alternatives si mon objectif final est de dire écrire une carte de visite OCR (ou disons, celle qui lit les reçus des stations-service comme celle que j'ai liée: upload.wikimedia.org/wikipedia/en/3/34 / ... )? Je demande parce que je suis simplement curieux de savoir ce que les nombreuses applications mobiles utilisent pour y parvenir. Cela ne me dérange pas de faire l'OCR côté serveur. J'ai été tenté d'utiliser OpenCV après avoir vu cette démo sympa: youtube.com/watch?v=OkcOfS1lTxs
Legend
6
Il existe un certain nombre de moteurs OCR commerciaux, il suffit de google OCR accuracy testset vous trouverez des graphiques. Et en parlant d'applications mobiles, la plupart utilisent tesseract. Mais si vous prenez la peine de télécharger certains d'entre eux, vous verrez que les résultats sont un peu différents des promesses. Ils font généralement une démo vidéo dans un environnement soigneusement contrôlé et la publient sur youtube, mais dans la nature, si vous scannez une page / recette / carte / quoi que ce soit, vous obtiendrez des résultats amusants.
Sam
1
@vasile: Merci. Quelque chose pour me tenir occupé ce soir. J'apprécie vraiment votre temps.
Legend

Réponses:

77
  • Tesseract est un moteur OCR. Il est utilisé, travaillé et financé par Google spécifiquement pour lire du texte à partir d'images, effectuer une segmentation de base de documents et fonctionner sur des entrées d'image spécifiques (un seul mot, une ligne, un paragraphe, une page, des dictionnaires limités, etc.).

  • OpenCV, en revanche, est une bibliothèque de vision par ordinateur qui comprend des fonctionnalités qui vous permettent d'effectuer une extraction de fonctionnalités et une classification de données. Vous pouvez créer un segmenteur de lettres et un classificateur simples qui exécutent l'OCR de base, mais ce n'est pas un très bon moteur OCR (j'en ai déjà créé un en Python à partir de zéro. Il est vraiment inexact pour les entrées qui s'écartent de vos données d'entraînement).

Si vous voulez avoir une compréhension de base de la dureté de l'OCR, essayez OpenCV. Tesseract est pour la vraie OCR.

Mixeur
la source
3
Cela dépend de vos images d'entrée. Tesseract fonctionne mieux lorsque les lettres sont nettes, sur une ligne horizontale, espacées, non connectées et parfaitement en noir et blanc. J'ai bricolé dans la communauté de numérisation / conservation de livres de bricolage pendant environ un an et j'ai travaillé sur des logiciels pendant mon temps libre pour faciliter le processus. Le meilleur logiciel (commercial ou non) pour le post-traitement des images avec du texte est Scan Tailor . Il a quelques options CLI, mais si vous prenez le temps de voir comment cela fonctionne, c'est assez incroyable.
Blender
2
J'ai travaillé un peu sur le code source de Scan Tailor et il n'utilise pas OpenCV en interne, mais de nombreux algorithmes créés peuvent être réécrits très facilement avec les fonctions d'OpenCV. Si vos images ne sont pas déformées et ne sont pas dégradées, il vous suffit simplement d'implémenter une binarisation adaptative et un simple dépoussiérage avant d'alimenter votre image dans Tesseract.
Blender
1
En ce qui concerne votre question, je testais juste des images d'entrée aléatoires hier. J'ai essayé un reçu d'une station-service: upload.wikimedia.org/wikipedia/en/3/34/ ... Il a reconnu le 0comme un 8(au total de 20,00 $). J'admets que le chiffre était difficile même pour moi à déchiffrer mais je n'étais pas sûr de ce qui pouvait être fait d'autre pour adapter Tesseract à ces situations ou peut-être introduire un composant d'apprentissage si je disposais d'une base d'utilisateurs active.
Legend
5
Tesseract est formé pour lire des jeux de polices spécifiques. Ces lettres en blocs n'en font pas partie. Vous devrez présenter à Google un sacrifice animal et essayer d'entraîner Tesseract vous-même: code.google.com/p/tesseract-ocr/wiki/TrainingTesseract3
Blender
1
De plus, avant de vous lancer dans l'écriture d'un moteur OCR personnalisé pour lire ces lettres, ne vous attendez pas à ce qu'il soit précis. J'en ai écrit un pour automatiser la Wheel of Fortune et les exemples d'images (captures d'écran d'un jeu en ligne) étaient des JPEG. Les artefacts de la compression JPEG étaient suffisants pour bousiller le classificateur d'image à moins que je ne fournisse environ 10 à 20 exemples d'images de chaque caractère.
Blender
65

Je suis l'auteur de ce didacticiel sur la reconnaissance des chiffres que vous avez mentionné, et je dirais que ce n'est pas un substitut à tesseract.

Tesseract est un très bon moteur OCR, peut-être le meilleur moteur OCR OpenSource.

Le didacticiel que vous avez mentionné est juste un essai pour comprendre le fonctionnement le plus simple de l'OCR.

Donc, si vous recherchez une application OCR, je vous recommande d'utiliser OpenCV pour prétraiter l'image, puis d'appliquer le moteur tesseract.

Abid Rahman K
la source
1
+1 Merci. Tout d'abord, merci pour le tutoriel :) C'était une lecture vraiment intéressante. Connaissez-vous des références / tutoriels sur la façon d'utiliser OpenCV avec Tesseract? Vous ne parlez pas d'interfaçage mais du type de transformations d'image ou de prétraitement à faire pour améliorer la précision de Tesseract?
Legend
2
Je voudrais juste dire que bien que Tesseract soit un bon moteur OCR par rapport aux autres, il est encore assez inexact, j'ai eu un taux de réussite d'environ 40% pour faire reconnaître le texte correct. Espérons que ce sera mieux dans quelques années.
GangstaGraham
4
@GangstaGraham Vous avez juste besoin de former tesseract et vous pouvez obtenir de meilleurs résultats en quelques heures ou en quelques jours, pas en années. opensource.newmediaist.com/tesseract-training.html
valentt
1
J'utilise PyTesseract pour l'extraction de texte en temps réel. Cela fonctionne bien sur le PC Linux mais c'est très lent sur l'environnement Raspberry Pi ... Un moyen d'installer une version allégée? Par exemple, ne traiter que les chiffres et les majuscules de l'alphabet anglais?
Yuriy Chernyshov
9

Les deux peuvent être complémentaires. Si vous lisez l'article sur OpenCV: https://github.com/tesseract-ocr/docs/blob/master/tesseracticdar2007.pdf

Il souligne que "étant donné que HP avait développé de manière indépendante une technologie d'analyse de mise en page qui était utilisée dans les produits, (et donc non disponible pour l'open-source), Tesseract n'a jamais eu besoin de sa propre analyse de mise en page. Tesseract suppose donc que son entrée est une image binaire avec régions de texte polygonales facultatives définies. "

Ce type de tâche peut être effectué par OpenCV et l'image résultante transmise à Tesseract. Vous pouvez trouver un exemple de ce type de code dans le référentiel Git: https://github.com/Itseez/opencv_contrib/tree/master/modules/text/samples Les exemples utilisent les API Tesseract pour effectuer la conversion d'image en texte.

user2957542
la source
3

OpenCV est une bibliothèque de CV , utilisée pour analyser et traiter des images en général. Tesseract est une bibliothèque pour OCR , qui est un sous-ensemble spécialisé de CV dédié à l'extraction de texte à partir d'images.

Depuis OpenCV.org

..... utilisé pour détecter et reconnaître des visages, identifier des objets, classer les actions humaines dans des vidéos, suivre les mouvements de caméra, suivre des objets en mouvement, extraire des modèles 3D d'objets, produire des nuages ​​de points 3D à partir de caméras stéréo, assembler des images pour produire un high résolution d'image d'une scène entière, trouver des images similaires à partir d'une base de données d'images, supprimer les yeux rouges des images prises à l'aide du flash, suivre les mouvements des yeux, reconnaître les paysages et établir des marqueurs pour les superposer avec la réalité augmentée, etc.

Depuis Tesseract Github :

..... peut être utilisé directement, ou (pour les programmeurs) en utilisant une API pour extraire du texte tapé, manuscrit ou imprimé à partir d'images. Il prend en charge une grande variété de langues.

Aniruddha Varma
la source