Reconnaissance de texte OCR

Tesseract est un moteur de reconnaissance optique de caractères (OCR) open source qui est la bibliothèque OCR la plus populaire et de haute qualité.


L'OCR utilise des réseaux de neurones pour rechercher et reconnaître le texte dans les images.


Tesseract recherche des motifs en pixels, lettres, mots et phrases et utilise une approche en deux étapes appelée reconnaissance adaptative. Il faut un passage à travers les données pour la reconnaissance des caractères, puis un deuxième passage pour remplir toutes les lettres dans lesquelles il n'était pas sûr des lettres qui correspondent probablement au mot ou au contexte donné de la phrase.


L'un des projets consistait à reconnaître les chèques des photographies.


L'outil de reconnaissance utilisé était Tesseract OCR . Les avantages de cette bibliothèque incluent des modèles de langage formés (> 192), différents types de reconnaissance (image en tant que mot, bloc de texte, texte vertical), une configuration facile. Étant donné que Tesseract OCR est écrit en C ++, un wrapper tiers avec github a été utilisé.


Les différences entre les versions sont des modèles formés différents (la version 4 a une plus grande précision, nous l'avons donc utilisée).


Nous avons besoin de fichiers de données pour la reconnaissance de texte, chaque langue a son propre fichier. Vous pouvez télécharger les données ici .


Meilleure est la qualité de l'image d'origine (taille, contraste, matière d'éclairage), meilleur est le résultat de la reconnaissance.


Une méthode de traitement d'image a également été trouvée pour sa reconnaissance en utilisant la bibliothèque OpenCV. Depuis OpenCV est écrit en C ++, et il n'y a pas de wrapper écrit pour notre solution, il a été décidé d'écrire notre propre wrapper pour cette bibliothèque avec les fonctions de traitement d'image nécessaires. La principale difficulté est la sélection des valeurs du filtre pour un traitement d'image correct. Il est également possible de retrouver les contours des chèques / textes, mais pas complètement compris. Le résultat était meilleur (5-10%).


Paramètres:


langue - la langue du texte de l'image, vous pouvez en sélectionner plusieurs en les répertoriant via "+";


pageSegmentationMode - type d'emplacement du texte dans l'image;


charBlacklist - caractères à ignorer en ignorant les caractères.


L'utilisation de Tesseract seulement a donné une précision de ~ 70% avec une image idéale, avec une mauvaise qualité d'éclairage / image, la précision était de ~ 30%.



Vision + Tesseract OCR


Le résultat n'étant pas satisfaisant, il a été décidé d'utiliser la bibliothèque d'Apple-Vision. Nous avons utilisé Vision pour trouver des blocs de texte, diviser davantage l'image en blocs séparés et les reconnaître. Le résultat était meilleur de ~ 5%, mais des erreurs sont apparues en raison de blocages répétés.


Les inconvénients de cette solution étaient:


  1. Vitesse de travail. La vitesse de fonctionnement a diminué> 4 fois (il y a peut-être une variante d'épandage)
  2. Certains blocs de texte ont été reconnus plus d'une fois
  3. Le texte est reconnu de droite à gauche, c'est pourquoi le texte du côté droit du chèque a été reconnu plus tôt que le texte de gauche.


MLKit


Une autre méthode de détection de texte est le MLKit de Google, déployé sur Firebase. Cette méthode a donné les meilleurs résultats (~ 90%), mais le principal inconvénient de cette méthode est la prise en charge des caractères latins uniquement et le traitement compliqué du texte divisé en une seule ligne (nom - gauche, prix - droite).



En fin de compte, nous pouvons dire que la reconnaissance du texte dans les images est une tâche réalisable, mais il y a quelques difficultés. Le problème principal est la qualité (taille, éclairage, contraste) de l'image, qui peut être résolue en filtrant l'image. Lors de la reconnaissance de texte à l'aide de Vision ou MLKit, il y avait des problèmes avec le mauvais ordre de reconnaissance de texte, le traitement du texte divisé.


Le texte reconnu peut être corrigé manuellement et peut être utilisé; dans la plupart des cas, lors de la reconnaissance du texte des chèques, le montant total est bien reconnu et ne nécessite aucun ajustement.

Source: https://habr.com/ru/post/fr471542/


All Articles