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 500×300 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 2×2. 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.

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

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

Software » Reconhecimento de placas com o Google Vision
Comentários:
Notificações
Notificar
guest
19 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Luis Gomes
Luis Gomes
11/10/2020 20:33

SINESP não está funcionando… Ocorreu algo?

Allef Anderson Silva
Allef
Reply to  Luis Gomes
13/10/2020 10:39

Essa biblioteca do Sinesp infelizmente foi desativada. Creio que agora existam outras

Romulo Gome
Romulo Gome
08/07/2020 10:35

Olá, tudo certo, não estou conseguindo importar o Vision e o SinespClient, fiz todos os passos e mesmo assim ainda persiste o erro.

Jean
Jean
22/10/2019 12:11

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?

Allef Anderson Silva
Allef
Reply to  Jean
05/06/2020 15:35

É possível sim. Vc consegue fazer isso somente com o opencv ou um dos parâmetros que a função passa é as coordenadas da plana na imagem

joao guilherme
joao guilherme
18/10/2019 22:54

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

Bi
Bi
Reply to  joao guilherme
23/10/2019 20:05

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

Allef Anderson Silva
Allef
Reply to  joao guilherme
05/06/2020 15:33

Fala! Tudo bem. Teve uma atualização da lib, poderia me enviar um email que lhe mando o algorítimo atualizado

B
B
18/10/2019 02:36

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

Allef Anderson Silva
Allef
Reply to  B
18/10/2019 11:02

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

B
B
Reply to  Allef
18/10/2019 22:05

Ahhhh, show!

Wagner Loch
Wagner Loch
20/08/2019 21:03

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
Allef
Reply to  Wagner Loch
21/08/2019 17:38

consigo sim. Me mande um email [email protected]

luan
luan
31/07/2019 01:01

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
15/07/2019 12:32

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

Allef Anderson Silva
Allef
Reply to  Carlos Eduardo Affonso Henriques
15/07/2019 12:47

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

Wagner
Wagner
Reply to  Carlos Eduardo Affonso Henriques
23/10/2019 20:14

Posso ver seu artigo?

Cinesio Moreira Mendes
Cinesio M. Mendes
22/05/2019 11:09

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
Allef
Reply to  Cinesio M. Mendes
22/05/2019 13:13

É 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

Talvez você goste:

Séries

Menu

WEBINAR
 
Porque o RTOS não faz o que eu quero?

Data: 28/10 às 19:30h - Apoio: Mouser Electronics
 
INSCREVA-SE AGORA »



 
close-link