De combien de programmeurs et de mots avez-vous besoin pour reconnaître un passeport manuscrit?

Pensez-vous que les passeports manuscrits se trouvent souvent dans notre pays? Lorsque nous avons commencé à concevoir un système de reconnaissance des passeports chez Smart Engines , il semblait qu'il suffisait d'apprendre au système à reconnaître les documents dactylographiés de manière qualitative. À cette époque, la présence de passeports manuscrits qui ne pouvaient pas être automatiquement reconnus ne semblait pas être un problème important: il y avait suffisamment de problèmes non résolus sans lui. Il y a un an, l'analyse de la qualité du travail de Smart IDReader, nous nous sommes rendu compte que nous sommes arrivés au point où les passeports manuscrits constituent une classe importante d'erreurs. Conformément à l'approche scientifique, ils ont étudié le problème et pris la décision. Aujourd'hui, il y aura une histoire sur la façon dont nous avons fait la reconnaissance d'un passeport manuscrit de la Fédération de Russie, en résolvant avec succès le dernier problème sur le chemin de l'automatisation complète de la saisie des données de passeport.


La tâche de reconnaître un texte manuscrit de manière générale semble fondamentale, à grande échelle et insoluble. Par conséquent, au début, il est important de limiter correctement la formalisation de la tâche. Ainsi, nous reconnaîtrons le texte manuscrit du demi-tour principal du passeport civil russe. Ces passeports sont remplis d'une écriture calligraphique soignée (du moins selon le passeportiste). D'une part, cela facilite la tâche: nous n'avons pas à reconnaître les «gribouillis médicaux» et autres textes mal lus. Mais d'un autre côté, nous devons faire face à toute la variabilité des styles calligraphiques des lettres cyrilliques. Eh bien, eh bien, c'est plus un défi sérieux, pas un problème insurmontable.

La tâche de reconnaissance de l'écriture manuscrite dans le passeport s'est divisée en trois sous-tâches:

  1. Détection de la présence du manuscrit dans le passeport.
  2. Segmentation d'une ligne manuscrite en caractères.
  3. Reconnaissance des caractères et post-traitement.

Plus loin dans l'article, nous vous en dirons plus sur la solution à chaque sous-tâche. Mais d'abord, nous allons discuter d'un problème très important qui se pose toujours en premier dans la reconnaissance - les ensembles de données. Sans ensembles de données, la reconnaissance normale ne peut pas être effectuée: même si vous pouvez entraîner des réseaux de neurones sur des données synthétisées, vous avez toujours besoin de données qui mesureront la précision du système entraîné. Il s’est avéré qu’il n’y avait pas de jeux de données manuscrits appropriés sur le réseau. Par conséquent, notre liste de sous-tâches a été complétée par un point zéro - «Préparation de l'ensemble de données». Nous avons abordé ce processus de manière créative: nous avons distribué des cahiers «dans une règle» et avons demandé à tous nos programmeurs de «s'habituer au rôle» des maîtres de la calligraphie - de réécrire certains textes pré-préparés avec une belle écriture. Ce sont des versets de A.S. Pouchkine.

Ici, nous attendions la première déception. Peu importe à quel point cela peut sembler difficile, il s'est avéré que nos programmeurs ont complètement oublié comment écrire. Et vous ne pouvez pas dire qu’ils n’ont pas essayé. Non, ils ont juste oublié comment épeler les lettres à la main. Voici un exemple de ce qui s'est passé: d'



accord, ce n'est pas du tout ce qui est nécessaire. Les lettres dansent, les tailles ne sont pas respectées ... J'ai dû chercher des cahiers sur Internet et, comme dans le premier cours, mettre tout le monde par écrit au sens littéral du terme! Nous nous souvenons encore de cette fois avec le sourire: toute l'équipe (sans exception, des étudiants de troisième année aux docteurs honorifiques en sciences) est assise à un bureau et affiche soigneusement les lettres.



En deux jours, après avoir rempli notre main, nous étions prêts à répéter une tentative de collecte de données «brutes» pour l'ensemble de données manuscrites. Les lettres devinrent plus lisses, les mots plus lisibles. Et certains ont même réussi à introduire quelques éléments de calligraphie. Maintenant, regardez les nouveaux échantillons vous-même: à









la suite de ces blancs avec différents textes et écritures, nous avons collecté environ 1000 pièces, les avons numérisées avec soin et les avons mises en lignes et en symboles. Tous, félicitations, le jeu de données manuscrit est prêt. Retour aux algorithmes.

Détection de manuscrits de passeport


La détection de manuscrits est un élément important d'un système de reconnaissance de documents industriels. Cette fonctionnalité appartient à la catégorie de la «compréhension du document» et est très demandée par le client professionnel. Nous avons formé un réseau neuronal convolutif binaire, qui a analysé les images d'entrée des lignes de texte individuelles du passeport. Chacun des champs du passeport est analysé pour le manuscrit à l'aide de ce réseau puis, en pesant les estimations reçues, une décision générale est prise sur le «manuscrit» du passeport dans son ensemble.

Segmentation de lignes manuscrites en caractères


La segmentation de l'écriture manuscrite est fondamentalement différente de la segmentation dactylographiée. Pour comprendre le premier niveau du problème, essayez simplement d'écrire le mot «chinchilla» et regardez ces «minces rangées de crochets». Pour la segmentation des tests manuscrits, nous avons de nouveau utilisé des réseaux de neurones. Nous avons formé un réseau neuronal spécial qui, en réponse, renvoie une estimation de la présence d'une «coupure» entre les lettres à chaque point de l'image d'entrée du texte. De plus, en appliquant les principes de la programmation dynamique, des sections de lettres sont construites.




Le problème de mettre des espaces entre les lettres est loin de toute la douleur de la segmentation. Vous devez limiter correctement chaque caractère verticalement. Et ici, la recherche de lignes "de base", qui est souvent utilisée pour reconnaître le texte imprimé, n'est pas du tout applicable - la hauteur des lettres manuscrites saute dans des limites illimitées.

Reconnaissance des caractères et post-traitement


Le problème de la reconnaissance des caractères manuscrits est principalement le même style de caractères différents. Regardez l'exemple ci-dessus: quel nom de famille est écrit - «Petrov» ou «Netrov»? Une personne, lorsqu'elle lit un texte manuscrit, ne le lit jamais caractère par caractère, mais toujours dans le contexte donné. Dans ce cas, le système de reconnaissance devrait se comporter de la même manière. Ainsi, un réseau de neurones qui reconnaît les caractères manuscrits devrait être «tolérant» aux différentes lettres qui ont le même type (d'un point de vue mathématique, il devrait renvoyer les mêmes valeurs de confiance pour ces caractères), et les algorithmes ultérieurs pour analyser et traiter les résultats de reconnaissance (donc appelés "postprocesseurs") devraient tenir compte des caractéristiques du champ reconnu.

Qu'avons-nous réalisé à la fin?


Ainsi, en un an, nous avons appris à reconnaître les passeports manuscrits, laissant de côté ce problème fondamental qui semblait insoluble il y a plusieurs années! Et après? Ensuite, comme d'habitude, travaillez sur la qualité et les nouvelles frontières.

PS J'ai presque oublié la réponse à la question posée dans le titre. Nous avons donc 62 programmeurs dans l'entreprise. Nous avons acheté 150 cahiers et imprimé 2 000 feuilles de prescriptions.


All Articles