Skip to content

Técnicas de Processamento Digital de Imagens para Reconhecimento de Caracteres (OCR)

License

Notifications You must be signed in to change notification settings

andressagomes26/character-recognition-pdi

Repository files navigation

Desafio Técnico PDI

Descrição

Para este projeto serão utilizados algoritmos de processamento de imagens com objetivo de destacar a região de interesse de um encarte de supermercado (nome e preço do produto), que serão posteriormente extraídos pelo time de NLP.

Skills

  • Python;
  • OpenCV;
  • Numpy;
  • Matplotlib;
  • Pytesseract;
  • TensorFlow;
  • Keras;
  • Processamento Digital de Imagens (PDI);
  • Visão Computacional;
  • Deep Learning;
  • Reconhecimento ótico de caracteres (OCR).

Arquivos

Os arquivos desenvolvidos durante a resolução do projeto são listados a seguir:

Técnicas utilizadas

Visando encontrar o melhor resultado, realizou-se diversos experimentos e aplicações de diversas técnicas. Por fim, manteve-se as técnicas que apresentaram os melhores resultados na etapa de extração de caracteres.

Ademais, as imagens utilizadas para extração de caracteres com Pytesseract e CNN foram submetidas a técnicas diferentes, uma vez que, cada técnica se adequou melhor a um tipo de imagem.

  • Destaque da região de interesse: Gerou-se as regiões de interesse (ROIs) da imagem (como nome e preço do produto) para realizar o pré-processamento e eliminar as informações não importantes.
  • Tons de cinza: Conversão da imagem RGB para tons de cinza.
  • Filtro Bilateral: Utilizado para realizar a suavização da imagem e remover possíveis ruídos, preservando os detalhes de bordas e contornos.
  • Binarização de Nobuyuki Otsu: Realizada com objetivo de separar o objeto de interesse do fundo.
  • Detecção de Bordas de Canny: Algoritmo utilizado para detectar as bordas presentes nas imagens.
  • Operação Morfológica Dilatação: Utilizada para dilatar a área do objeto de interesse, ou seja, o objeto do primeiro plano ficará maior do que era inicialmente.
  • Operação Morfológica Erosão: Utilizada para realizar a corrosão das arestas do objeto de interesse, resultando em uma imagem "encolhida" do objeto.
  • Rede Neural Convolucional: Rede Neural treinada para reconhecer os dígitos da imagem.
  • Pytesseract: Ferramenta de reconhecimento óptico de caracteres (OCR) para Python, que reconhece e retorna o texto embutido nas imagens.

Resultados

Para a extração de caracteres utilizando Pytesseract destacou-se as regiões de interesse da imagem, converteu a imagem para tons de cinza, suavizou a imagem e por fim realizou-se a binarização de Otsu.

O Pytesseract conseguiu reconhecer bem os nomes dos produtos, entretanto, para os numerais, a técnica não apresentou resultados interessantes. Ademais, para melhorar o resultado, destacou-se apenas o texto desejado. O resultado do Pytesseract para o texto em destaque:

WhatsApp Image 2023-05-26 at 09 09 13

Em seguida, para realizar a extração dos dígitos dos preços dos produtos texto realizou-se o treinamento de um modelo CNN. Foi necessário adaptar as imagens enviadas para rede neural, pois, a rede será foi treinada com a base de dados MNIST. Logo, é interessante que a imagem de teste possua um formato semelhante, ou seja, a área de interesse (numeral) branca e o fundo preto. Assim, a imagem foi transformada para escala de cinza, suavizada, detectou-se as bordas com o filtro de Canny e por fim, aplicou-se as operações morfológicas de dilatação e erosão, resultando na seguinte imagem:

Por fim, a rede CNN exibiu os seguintes resultados para reconhecimento dos dígitos:

WhatsApp Image 2023-05-26 at 09 11 28

Autores

About

Técnicas de Processamento Digital de Imagens para Reconhecimento de Caracteres (OCR)

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published