Reconhecimento de placas com o Google Vision

A Google Cloud Platform é uma plataforma de computação em nuvem criada pela empresa Google, com intuito de facilitar a execução de serviços baseados em nuvem. Junto a esta plataforma encontra-se uma ferramenta poderosa chamada Google Vision. A ferramenta conta com aprendizado de máquina e inteligência artificial. O recurso encapsula modelos avançados de machine learning em uma API REST fácil de usar. Com o Google Vision é possível extrair conteúdo de imagens, reconhecer padrões, detectar objetos, reconhecer formas geométricas e rostos, classificar objetos ou até mesmo transcrever palavras impressas contidas em imagens.

 

Objetivo

 

Neste post usarei o OCR (Reconhecimento Óptico de caracteres) para detectar e extrair os caracteres das placas dos veículos e por seguinte consultar os dados do veículo através de uma api do SINESP (Sistema Nacional de Informações de Segurança Pública).

 

Bibliotecas

 

Abra o terminal de comandos da Raspberry e execute os seguintes comandos.

 

 

Antes de mais nada é necessário fazer a instalação de algumas libs para que o algoritmo funcione. Todo o algoritmo foi desenvolvido na linguagem Python. Os comandos apresentados neste post se referem ao ambiente linux, porém são facilmente encontrados para outros sistemas operacionais. Primeiramente é necessária a instalação do python para executar a aplicação, é possível encontrar o tutorial de instalação aqui. O próximo passo é a instalação da lib referente ao Sinesp. Em seguida faça a instalação da lib Pillow para manipular imagens clicando aqui.

 

Agora partiremos para a instalação da biblioteca Google Vision e configuração da mesma, clique aqui para criar sua conta e acessar o console. Após concluir esta etapa é necessário cumprir este passo a passo.

 

Reconhecimento de placas com o Google Vision

 

Ao concluir o passo a passo será feito o download de um arquivo json contendo as chaves necessárias para o funcionamento adequado do algoritmo. Por fim execute este comando de ativação no terminal de comandos onde [PATH] é o caminho do json que foi feito o download na etapa anterior, seguido do próprio arquivo json. Exemplo:

 

export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/service-account-file.json"

export GOOGLE_APPLICATION_CREDENTIALS="[PATH]"

 

Ótimo! Agora que está tudo configurado podemos utilizar a ferramenta de computação em nuvem para analisar as imagens e extrair as informações desejadas.

 

Algoritmo

 

Após toda configuração da plataforma, é necessário criar um arquivo de extensão .py para executar a aplicação. Para isso criei o exec.py, clique aqui para acessar o algoritmo. O mesmo funciona de maneira simples, a ideia é tratar a imagem antes de processá-la a fim de diminuir o tempo que a API leva para extrair os dados da imagem. Após a extração é feita a consulta no SINESP, onde é devolvido um json contendo informações como ano, modelo, cor, status da documentação, número do chassis, etc. A fim de um melhor entendimento, a explicação do algoritmo será discorrida em três partes.

 

 

Esta função tem o intuito de redimensionar a imagem para diminuir o tamanho em KB, pois quanto menor a imagem, menor é o tempo de processamento para extração das informações. As dimensões escolhidas foram 500x300 pixels, uma vez que em testes, imagens mais largas têm um melhor rendimento para detecção de palavras. Após o redimensionamento o parâmetro Image.BILINEAR contribui com um filtro de interpolação linear em um ambiente 2x2. A nova imagem é salva e a função responsável pelo processamento dos dados recebe a nova imagem como parâmetro.

 

 

A função detect_text() é a responsável por consumir a API de visão computacional. Após receber o retorno da API é necessário fazer algumas alterações com intuito de preparar o dado para consultá-lo no SINESP. Para que a consulta ocorra com sucesso é necessário que o número da placa seja enviado sem quebra de linha, espaço ou hífen. Para isso é feito uma manipulação da string recebida e após o tratamento, a variável é passada como parâmetro para a função sinesp().

 

 

Após consumir a API, é retornado um json contendo todas as informações do veículo solicitado, por fim algumas informações são selecionadas e impressas no terminal. Para finalizar é criado um loop infinito onde são recebidos os nomes das imagens para verificação das informações referente ao veículo.

 

 

Testes

 

Para testar o funcionamento do algoritmo utilizei algumas imagens baixadas da internet, é possível fazer o download das mesmas aqui. Salve as imagens na mesma pasta que contém o algoritmo. Após executar o arquivo exec.py obteve-se as seguintes respostas.

 

 

Conclusão

 

Depois de realizar todos os procedimentos citados, o sistema funcionará de maneira adequada. Façam testes com outras imagens, com ângulos diferentes para notarem o quanto a ferramenta Google Vision é poderosa. A título de curiosidade as primeiras mil fotos mensais não são cobradas, após isso são cobrados valores baixíssimos podendo chegar a custar $0,0006 por foto. Postem nos comentários sobre as aplicações feitas com a ferramenta e eventuais dúvidas.

NEWSLETTER

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Obrigado! Sua inscrição foi um sucesso.

Ops, algo deu errado. Por favor tente novamente.

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Allef Anderson Silva
Engenheiro Mecatrônico pela Universidade de Franca, ex-engenheiro coordenador de projetos em empresa de Drones, atualmente trabalha na Supervisão de Tecnologias de Apoio a Aprendizagem como Gestor de FabLabs na empresa SESI. Ministra cursos, treinamentos e palestras sobre IoT, Sistemas Embarcados e Indústria 4.0. Participação em congressos nacionais e internacionais tais como: SCE 2017 e CONIC, com papers publicado pela Procedia Computer Science e Elsevier disponíveis na Science Direct. Tem como hobby desenvolver projetos que facilitem o cotidiano e publicar artigos como colaborador do portal Embarcados.

14
Deixe um comentário

avatar
 
7 Comment threads
7 Thread replies
1 Followers
 
Most reacted comment
Hottest comment thread
9 Comment authors
WagnerBiJeanjoao guilhermeB Recent comment authors
  Notificações  
recentes antigos mais votados
Notificar
Jean
Visitante
Jean

No caso eu queria extrair apenas a imagem da placa recortada da foto do carro, é possível? Como eu faço pra que ele me dê essa informação?

joao guilherme
Visitante
joao guilherme

fala mano! belo projeto! aqui esta dando um erro no modulo , sera q estou fazendo algo errado

Bi
Visitante
Bi

Aqui tbm. Ele disse que teve uma atualização na lib e q vai corrigir o código pra voltar a dar certo

B
Visitante
B

Aqui na hora de executar aparece "No module named google.cloud". Como resolver?

Allef Anderson Silva
Visitante
Allef

Teve uma atualização da lib. Vou editar o arquivo do github para voltar a dar certo.

B
Visitante
B

Ahhhh, show!

Wagner Loch
Visitante
Wagner Loch

Poxa, que achado. Comecei a estudar o assunto no início do ano pois estou fazendo um TCC relacionado com isso, não estou conseguindo usar a API do Sinesp, ele me retorna uma mensagem dizendo que preciso atualizar o aplicativo, consegue me ajuda com relação a isso? Obrigado! 😀

Allef Anderson Silva
Visitante
Allef

consigo sim. Me mande um email [email protected]

luan
Visitante
luan

tive que mudar de from google.cloud import vision para from google.cloud import vision
from google.cloud.vision import types porem sempre ta dando placa não encontrada

Carlos Eduardo Affonso Henriques
Membro

Que coincidência. A uns 3 dias enviei um artigo como esse só que com o OpenALPR.

Allef Anderson Silva
Visitante
Allef

Que bacana. Tenho conhecimento da ferramenta também, ja trabalhei com ela. Bom dimais!

Wagner
Visitante
Wagner

Posso ver seu artigo?

Cinesio Moreira Mendes
Visitante
Cinesio M. Mendes

Excelente artigo, principalmente de como utilizar as informações do Sinesp. Um projeto interessante seria ( utilizando como base esse artigo ), um sistema de monitoramento residencial continuo ( e não de uma foto especifica ), para verificar possíveis carros roubados circulando próximo de sua rua.

Allef Anderson Silva
Visitante
Allef

É a idéia caro Cinésio, fiz o artigo pensando em deixar o contexto em aberto, de modo que qualquer um consegue atribui-lo a uma aplicação