Entre para a LISTA VIP da Black Friday

00

DIAS

00

HORAS

00

MIN

00

SEG

Clique para saber mais
Alura > Cursos de Data Science > Cursos de Machine Learning > Conteúdos de Machine Learning > Primeiras aulas do curso Visão computacional: detecção de texto em placas de carro

Visão computacional: detecção de texto em placas de carro

Entendendo o problema - Apresentação

Bem-vindo ao curso "Visão computacional: detecção de texto em placas de carro"! Meu nome é João Miranda e serei seu instrutor nesta jornada!

João Miranda é um homem branco de olhos e cabelos castanhos escuros. Usa barba e bigode curtos, e os cabelos são de comprimento médio, presos em um coque, com as laterais raspadas. Veste uma camiseta lisa na cor azul escuro. Ao fundo, há uma parede com iluminação esverdeada.

Neste curso, construiremos um projeto de visão computacional para detectar textos em placas de veículos. Aprenderemos a aplicar diversos pré-processamentos em imagens, além de utilizar a ferramenta Tesseract OCR para detectar os caracteres presentes nessas imagens.

Para acompanhar este curso, é necessário que você tenha noções da linguagem Python.

Vamos lá?

Entendendo o problema - Instalando o Tesseract

O intuito do nosso projeto é detectar textos em placas de carros de forma automatizada. Esse processo, em visão computacional, é conhecido como OCR, sigla para Optical Character Recognition, ou Reconhecimento Ótico de Caracteres, em português.

Para realizar essa tarefa utilizaremos a ferramenta Tesseract OCR, que precisa ser instalada diretamente no computador. Executaremos os códigos no Google Colab, que utiliza uma máquina Linux, portanto, nossos comandos corresponderão a este sistema operacional.

Em uma célula, coloque !, para acessar o terminal, seguida do comando sudo apt install tesseract-ocr, e execute. Este passo instala o Tesseract no computador do Colab.

!sudo apt install tesseract-ocr

Para ter acesso ao comando de instalação em outros sistemas operacionais, consulte a documentação do Tesseract.

Agora, vamos instalar a biblioteca PyTesseract, do Python, que deve se conectar com o software instalado. Utilizaremos o seguinte comando:

!pip install pytesseract

É possível que, ao executar a instalação do PyTesseract, surja uma mensagem de erro responsável por informar que existia uma versão anterior da biblioteca Pillow que precisou ser desinstalada para dar lugar a uma nova versão a fim de poder baixar o PyTesseract.

Neste caso, é preciso reiniciar o ambiente de execução para que a versão mais recente seja adotada no Google Colab. Para isso, temos duas opções: clicar no botão "RESTART RUNTIME", que aparece abaixo do aviso, ou em Ambiente de execução>Reiniciar ambiente de execução, na barra superior do Colab.

Após reinicar o ambiente, não será necessário refazer os passos anteriores.

Para utilizar a versão em português da ferramenta, precisamos acessar o GitHub do Tesseract e clicar na opção "tessdata", no readme, que contém o arquivo das línguas disponíveis. Procure "por.traineddata", que corresponde à Língua Portuguesa, e faça o download.

Após baixar o arquivo, você pode fazer seu upload para a sessão do Colab clicando na opção "Fazer upload para o armazenamento da sessão", presente no ícone "Arquivos", na barra lateral. No entanto, sempre que abrir o Colab em diferentes dias, seria necessário refazer este upload manualmente. Como estamos utilizando o Linux, usaremos comandos responsáveis por baixar e salvar esse arquivo de maneira automatizada.

Primeiro, criaremos uma pasta com o comando !mkdir e a nomearemos de tessdata.

!mkdir tessdata

Após executar o comando anterior, perceba que a pasta foi criada nos arquivos desta sessão.

Em seguida, usaremos um código que fará o download do arquivo diretamente do GitHub e o colocará na pasta que acabamos de criar. Para isso, em uma nova célula, coloque o comando !wget -O seguido do caminho da pasta onde o arquivo deve ser salvo ./tessdata/ e o nome que deve ser dado ao arquivo salvo por.traineddata. Em seguida, adicione a url do dowload que consta na opção "View raw", dentro do arquivo "por.traineddata", no GitHub https://github.com/tesseract-ocr/tessdata/blob/main/por.traineddata?raw=true. O comando ficará assim:

!wget -O ./tessdata/por.traineddata https://github.com/tesseract-ocr/tessdata/blob/main/por.traineddata?raw=true

Execute-o.

O ambiente está pronto para utilizarmos o Tesseract, em português, com a linguagem Python. A seguir, faremos o upload de uma imagem a fim de detectar os textos presentes nela!

Entendendo o problema - Detectando textos

Agora que instalamos a ferramenta Tesseract, veremos como utilizá-la para detectar textos em uma imagem!

Iniciaremos importando a biblioteca anteriormente instalada, PyTesseract, e a biblioteca OpenCV, utilizada para tratar e trabalhar com imagens.

Em uma célula, executaremos os comandos a seguir:

import cv2
import pytesseract

Agora, veremos as versões dessas bibliotecas que estão sendo utilizadas. Assim, se gerar algum erro, você identificará se está usando a mesma versão que consta na máquina do instrutor. Para isso, execute o comando a seguir que deve retornar a versão 4.6.0 do OpenCV.

cv2.__version__

Em seguida, verifique a versão do PyTesseract, que deve ser 0.3.9.

pytesseract.__version__

Agora faremos a leitura de uma imagem do trecho de um livro. Para isso, vá em "Arquivos", na barra lateral, e em "Fazer upload para o armazenamento da sessão". Em seguida, selecione a imagem chamada "trecho_livro.png" e aguarde o carregamento.

As imagens que serão utilizadas no curso foram disponibilizadas na etapa "Preparando o ambiente". Mas você também pode baixá-las clicando neste link.

Em uma nova célula, criaremos a variável imagem, onde vamos chamar a biblioteca OpenCV cv2 e sua função .imread() para realizar a leitura deste arquivo. Esta função recebe como parâmetro o caminho da imagem entre aspas. Para ter acesso ao caminho, vá em "Arquivos", na barra lateral esquerda, clique com o lado direito do mouse sobre "trecho_livro.png" e em "Copiar caminho".

imagem = cv2.imread('/content/trecho_livro.png')

Execute esta célula e, em uma nova, solicite a visualização de imagem com a função do OpenCV imshow().

cv2.imshow(imagem)

Se você está usando o Colab, provavelmente a execução de visualização gerou um erro. Este erro é muito comum e ocorre porque a função utilizada gera uma quebra nas sessões do Jupyter. Utilizaremos, então, a sugestão dada por esse erro: importar a função cv2_imshow, do Google Colab. Para isso, execute o código a seguir:

from google.colab.patches import cv2_imshow

Agora solicite novamente a visualização fazendo uso da função importada:

cv2_imshow(imagem)

Ao executar a célula, observe que nos é retornado a imagem do trecho do livro digitalizada.

"- Um mal é um mal, Stregobor - retrucou seriamente o bruxo, pondo-se de pé. - Menor, maior, médio, tanto faz... As proporções são convencionadas e as fronteiras, imprecisas. Não sou um santo eremita e não pratiquei apenas o bem ao longo de minha vida. Mas, se me couber escolher entre dois males, prefiro abster-me por completo da escolha. Está na hora de ir embora. Ver-nos-emos amanhã."

Veremos, agora, se o PyTesseract consegue realizar a leitura do texto presente na imagem.

Em uma nova célula, criaremos uma variável texto onde chamaremos a função pytesseract.image_to_string(), que receberá a variável imagem como parâmetro. Esta função será responsável por transformar a imagem em uma string (dado do tipo texto).

texto = pytesseract.image_to_string(imagem)

Ainda nesta célula, insira o comando de visualização print(texto) para que a variável texto seja impressa na tela.

texto = pytesseract.image_to_string(imagem)
print(texto)

Ao executar este comando, ele nos retornará o texto contido na imagem:

"- Um mal é um mal, Stregobor - retrucou seriamente 0 bryxo, pondo-se de pé. - Menor, maior, médio, tanto faz... As porgdes sao convencionadas e as fronteiras, imprecisas. um santo eremita e nao pratiquei apenas 0 bem ao longo de minha vida. Mas, se me couber escolher entre dois males, prefiro abster-me por completo da escolha. Esta na hora de ir embora. Ver-nos-emos amanha. S pro- 40 SOU"

Perceba que ele conseguiu identificar a maioria dos caracteres de forma correta, embora tenha trocado o artigo "o" pelo número 0, a letra "u" por "y" e não tenha colocado alguns sinais de acentuação. Observe, ainda, que as duas últimas linhas não correspondem ao texto, o que também sugere uma falha na leitura. Como podemos melhorá-la?

Para aprimorar essa decodificação, utilizaremos o arquivo da Língua Portuguesa baixado anteriormente, informando que queremos utilizar essa língua. Podemos, ainda, adotar uma segmentação de páginas que ajude a melhor identificar esse texto.

Sendo assim, em uma nova célula, execute o seguinte comando:

!tesseract --help-psm

Ele nos retorna as formas de segmentação de página disponíveis no Tesseract. A forma de número 6, "Assume a single uniform block of text", melhor atende às nossas expectativas, porque assume que a imagem se trata de um bloco uniforme de texto. Nós a utilizaremos no código seguinte.

Criaremos uma variável de configuração config_tesseract, que deve receber o nome do arquivo referente à Língua Portuguesa '--tessdata-dir e a pasta onde está localizado tessdata. Em seguida, colocaremos a configuração de segmentação de página --psm 6'.

config_tesseract = '--tessdata-dir tessdata --psm 6'

Execute esta célula para salvar essa configuração no Tesseract e, em uma nova, tentaremos ler novamente o texto. Para isso utilizaremos a mesma função texto = pytesseract.image_to_string(imagem), mas, além do parâmetro imagem, passaremos, também, os argumentos lang = 'por', referente à língua que deve ser detectada, e config = config_tesseract, que informa que devem ser usadas as configurações passadas na variável config_tesseract.

texto = pytesseract.image_to_string(imagem, lang = 'por', config = config_tesseract)

Adicione, ainda, o comando de visualização print(texto).

texto = pytesseract.image_to_string(imagem, lang = 'por', config = config_tesseract)
print(texto)

Ao executar esta célula, perceba que nos retornará o seguinte texto:

"- Um mal é um mal, Stregobor - retrucou seriamente o bryxo, pondo-se de pé. - Menor, maior, médio, tanto faz... As proporções são convencionadas e as fronteiras, imprecisas. Não sou um santo eremita e não pratiquei apenas o bem ao longo de minha vida. Mas, se me couber escolher entre dois males, prefiro abster-me por completo da escolha. Está na hora de ir embora. ; Ver-nos-emos amanhã."

Perceba que a letra "o", antes reconhecida como "0", agora foi corretamente identificada, assim como os sinais de acentuação gráfica. Note, também, que não há mais os caracteres " S pro- 40 SOU" contidos no fim do bloco e que nada correspondiam com o texto. Os únicos erros que permanecem são a troca do "u" pelo "y", na palavra "bruxo", e um ponto e vírgula (;), erroneamente colocado após a frase "Está na hora de ir embora. ;". Sendo assim, podemos considerar que o Tesseract conseguiu realizar uma boa leitura do texto contido na imagem!

A seguir, aplicaremos esse mesmo processo na imagem de uma placa de veículo. Vamos lá?

Sobre o curso Visão computacional: detecção de texto em placas de carro

O curso Visão computacional: detecção de texto em placas de carro possui 151 minutos de vídeos, em um total de 53 atividades. Gostou? Conheça nossos outros cursos de Machine Learning em Data Science, ou leia nossos artigos de Data Science.

Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:

Aprenda Machine Learning acessando integralmente esse e outros cursos, comece hoje!

Conheça os Planos para Empresas