Quantos programadores e palavras você precisa para reconhecer um passaporte escrito à mão?

Você acha que os passaportes manuscritos são frequentemente encontrados em nosso país? Quando começamos a projetar um sistema de reconhecimento de passaporte na Smart Engines , parecia que era o suficiente ensinar o sistema a reconhecer documentos datilografados de uma maneira de qualidade. Naquele momento, a presença de passaportes manuscritos que não podiam ser reconhecidos automaticamente não parecia ser um problema importante: havia problemas não resolvidos suficientes sem ele. Há um ano, analisando a qualidade do trabalho do Smart IDReader, percebemos que chegamos ao ponto em que os passaportes manuscritos constituem uma classe significativa de erros. De acordo com a abordagem científica, eles estudaram o problema e tomaram a decisão. Hoje haverá uma história sobre como fizemos o reconhecimento de um passaporte manuscrito da Federação Russa, resolvendo com êxito o último problema no caminho para automatizar completamente a entrada de dados do passaporte.


A tarefa de reconhecer texto manuscrito de maneira geral parece fundamental, em larga escala e insolúvel. Portanto, primeiro é importante limitar corretamente a formalização da tarefa. Portanto, reconheceremos o texto manuscrito da principal inversão de marcha do passaporte civil russo. Esses passaportes são preenchidos com caligrafia elegante (pelo menos de acordo com o passaporte). Por um lado, isso facilita a tarefa: não precisamos reconhecer "rabiscos médicos" e outros textos com pouca leitura. Mas, por outro lado, temos que enfrentar toda a variabilidade de estilos caligráficos das letras cirílicas. Bem, bem, este é mais um desafio sério, não um problema intransponível.

A tarefa de reconhecimento de manuscrito no passaporte foi dividida em três subtarefas:

  1. Detecção da presença do manuscrito no passaporte.
  2. Segmentação de uma linha manuscrita em caracteres.
  3. Reconhecimento de caracteres e pós-processamento.

Mais adiante neste artigo, falaremos mais sobre a solução para cada subtarefa. Mas primeiro, discutiremos um problema muito importante que sempre surge primeiro no reconhecimento - conjuntos de dados. Sem conjuntos de dados, o reconhecimento normal não pode ser feito: mesmo que você possa treinar redes neurais em dados sintetizados, ainda precisará de dados que medam a precisão do sistema treinado. Como se viu, não existem conjuntos de dados de manuscritos adequados na rede. Portanto, nossa lista de subtarefas foi complementada com um ponto zero - "Preparando o conjunto de dados". Abordamos esse processo de maneira criativa: distribuímos os cadernos "em uma régua" e pedimos a todos os nossos programadores que "se acostumassem ao papel" dos mestres de caligrafia - para reescrever alguns textos pré-preparados com uma bela caligrafia. Estes foram versículos de A.S. Pushkin.

Aqui estávamos esperando a primeira decepção. Não importa o quão difícil possa parecer, nossos programadores se esqueceram completamente de como escrever. E você não pode dizer que eles não tentaram. Não, eles simplesmente se esqueceram de como escrever letras à mão. Aqui está um exemplo do que aconteceu:



concordo, não é exatamente o que é necessário. As letras estão dançando, os tamanhos não são respeitados ... Eu tive que procurar cadernos na Internet e, como na primeira aula, colocar todos por escrito no sentido literal da palavra! Ainda nos lembramos dessa vez com um sorriso: toda a equipe (sem exceção, de estudantes do terceiro ano a doutores em ciências) senta-se em uma mesa e exibe cuidadosamente cartas.



Em dois dias, depois de preencher nossa mão, estávamos prontos para repetir uma tentativa de coletar dados "brutos" para o conjunto de dados manuscrito. As letras ficaram mais suaves, as palavras mais legíveis. E alguns até conseguiram introduzir alguns elementos de caligrafia. Agora, observe você mesmo as novas amostras:









como resultado de espaços em branco com diferentes textos e manuscritos, coletamos cerca de 1000 peças, as digitalizamos cuidadosamente e as colocamos em linhas e símbolos. Parabéns, o conjunto de dados do manuscrito está pronto. Voltar para os algoritmos.

Detecção de manuscrito de passaporte


A detecção de manuscritos é um elemento importante de um sistema de reconhecimento de documentos industriais. Essa funcionalidade pertence à categoria de "entendimento do documento" e é muito procurada por parte do cliente comercial. Nós treinamos uma rede neural convolucional binária, que analisou as imagens de entrada de linhas de texto individuais do passaporte. Cada um dos campos do passaporte é analisado em busca de manuscrito usando essa rede e, ponderando as estimativas recebidas, é tomada uma decisão geral sobre o “manuscrito” do passaporte como um todo.

Segmentação de linhas manuscritas em caracteres


A segmentação de manuscrito é fundamentalmente diferente da segmentação de texto datilografado. Para entender o primeiro nível do problema, tente escrever à mão a palavra “chinchila” e observe essas “linhas finas de ganchos”. Para a segmentação de testes manuscritos, usamos novamente redes neurais. Nós treinamos uma rede neural especial, que como resposta retorna uma estimativa da presença de um "corte" entre as letras em cada ponto da imagem de entrada do texto. Além disso, aplicando os princípios da programação dinâmica, seções de cartas são construídas.




O problema de colocar lacunas entre as letras está longe de ser uma dor de segmentação. Você deve limitar corretamente cada caractere verticalmente. E aqui a pesquisa de linhas de “linha de base”, que é frequentemente usada no reconhecimento de texto impresso, não é de todo aplicável - a altura das letras manuscritas salta dentro de limites ilimitados.

Reconhecimento de caracteres e pós-processamento


O problema de reconhecer caracteres manuscritos é principalmente o mesmo estilo de caracteres diferentes. Veja o exemplo acima: qual sobrenome está escrito - "Petrov" ou "Netrov"? Quando uma pessoa lê um texto manuscrito, nunca o lê caractere por caractere, mas sempre dentro do contexto especificado. O sistema de reconhecimento neste caso deve se comportar da mesma maneira. Portanto, uma rede neural que reconheça caracteres manuscritos deve ser "tolerante" a letras diferentes do mesmo tipo (do ponto de vista matemático, deve retornar os mesmos valores de confiança para esses caracteres) e algoritmos subsequentes para analisar e processar resultados de reconhecimento (portanto chamados "pós-processadores") devem levar em consideração os recursos do campo reconhecido.

O que alcançamos no final?


Assim, em um ano, aprendemos a reconhecer passaportes manuscritos, deixando para trás esse problema fundamental que parecia insolúvel há vários anos! Qual é o próximo? Então, como sempre, trabalhe com qualidade e novas fronteiras.

PS Eu quase esqueci a resposta para a pergunta indicada no título. Portanto, temos 62 programadores na empresa. Compramos 150 cadernos e imprimimos 2.000 folhas de prescrições.


All Articles