Um projeto extra-oficial (parte 4)

Detectando campos do tipo “checkbox”

Uma boa nova é que o projeto não é mais “extra-oficial”. O superintendente do meu departamento fez uma apresentação para o chefe de gabinete do diretor executivo da Fundação e a recepção foi bastante positiva. A analista que é responsável pelo banco de dados de estatísticas vitais agora está envolvida no projeto, o que é ótimo.

No primeiro artigo da série, expliquei o que são os formulários Declaração de Nascido Vivo e Declaração de Óbito. Até agora, usando a técnica descrita no segundo artigo da série, conseguimos associar mais de 70 mil imagens de formulários DNV com os registros correspondentes no banco de dados. No terceiro artigo da série falei sobre a técnica que estamos utilizando para localizar os campos no formulário e prometi escrever sobre a utilização de um algoritmo de ML para reconhecimento de dígitos manuscritos no campo de data de nascimento.

Aprendizado de Máquina e OCR

Na semana passada testamos dois algoritmos, Knn e SVM. O resultado foi uma taxa de erro perto de 40%, e o principal problema é que a técnica que usamos para localizar os dígitos no formulário assume que o mesmo foi preenchido dentro da grade, o que nem sempre acontece. Em formulários preenchidos como na imagem abaixo, a captura dos dígitos é excelente.

Infelizmente é bastante comum os formulários em que alguns dos dígitos avançam para fora da grade, o que faz com que sejam truncados:

Acontece também de um dos dígitos estar na casa errada como o número 4 abaixo, ou de ruído na imagem ser considerado parte de um dígito como no caso do 2:

Separar os dígitos da grade é um problema difícil para as imagens que foram digitalizadas em modo Preto & Branco (1 bit). Talvez seja possível melhorar o algoritmo de localização dos dígitos para os documentos P&B, mas desconfio que seria produtivo digitalizar os documentos em modo de “tons de cinza”.

A colega que cuida oficialmente do banco de dados de estatísticas vitais disse que seria interessante verificar a performance do reconhecimento para os campos do tipo “caixa de seleção” (checkbox). Segundo ela, muitos dos documentos na base foram digitados apenas parcialmente, e boa parte dos campos que faltam para completar o trabalho são do tipo caixa de seleção.

Por hora interrompemos a investigação do reconhecimento dos dígitos do campo “data” usando aprendizado de máquina e nos concentramos em como detectar as marcas no campo “sexo”.

Mais de um modelo de DNV

O campo “sexo” fica no mesmo grupo do campo “data de nascimento”, entretanto encontramos dois tipos de DNV. Um deles tem 3 campos na linha do campo “sexo”:

DNV com 3 campos na segunda linha

O segundo tipo tem apenas 2 campos nessa linha:

DNV com 2 campos na segunda linha

Usando a técnica descrita no segundo artigo da série, localizamos facilmente o retângulo preto à esquerda do grupo, e usamos suas dimensões para estimar a localização aproximada do campo sexo. Através da posição dos traços verticais que delimitam o campo é possível determinar com bastante confiabilidade a localização dos quadradinhos para “Masculino”, “Feminino” e “Ignorado”. Usamos uma caixa ligeiramente mais larga para contemplar os casos onde a marca é feita fora do quadrado.

Finalmente, somamos os valores de todos os pontos dos pedaços da imagem correspondentes aos quadrados de “Masculino”, “Feminino” e “Ignorado”. Cada ponto da imagem é um número entre zero (preto) a 255 (branco), portanto para a imagem que tem mais pontos escuros a somatória é menor — provavelmente esta é a imagem marcada:

A taxa de acerto é muito boa, praticamente 100%. Este algoritmo “naive” parece funcionar mesmo quando a marcação está desbotada ou fora da caixa:

marcação desbotada
marcação fora da caixa
marcação desbotada
qualidade sofrível da digitalização
usuário circulou em vez de marcar um X

Conclusão

Algumas lições aprendidas nesse projeto:

  • Na área de visão computacional, a parte mais trabalhosa é o pre-processamento e normalização das imagens e não necessariamente as etapas de aprendizado de máquina
  • Algoritmos avançados (inclusive inteligência artificial) podem render resultados decepcionantes, enquanto alguns algoritmos simples podem trazer resultados surpreendentes
  • É perfeitamente possível desenvolver aplicações avançadas usando visão computacional e aprendizado de máquina mesmo tendo uma equipe reduzida e orçamento limitado usando ferramentas de software livre e conhecimentos disponíveis na Internet.

Código Fonte

Esta função devolve o valor do campo “sexo” (M, F ou I), a imagem do campo e o retângulo em volta da caixa marcada.
Esta função devolve o pedaço da imagem contento o campo “sexo”