Reconhecimento de placas com o Google Vision

Conheça o Google Vision, ferramenta que conta com aprendizado de máquina e inteligência artificial para extrair conteúdo de imagens e reconhecer padrões.

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.

image1 2

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.

Notificações
Notificar
guest
22 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Paulo Borges
Paulo Borges
02/09/2021 06:37

Caro Allef, muito interessante seu projeto, tenho um Pi4 e gostaria de ver isso funcionando.
Sabe informar se este serviço de informação de veiculos do Detran volta a funcionar ou foi extinto definitivamente?
Encontrei na pesquisa alguns serviços do genero que são pagos. Que modificações seu código precisaria para operar com estes serviços pagos caso o do detran tenha realmente sido extinto?
Obrigado.
Paulo

Blady
Blady
20/08/2021 20:04

Eu preciso de ajuda perdi meu cachorro já olhei pela câmeras de segurança mais não dá pra ver a placa do carro que levou Meu cachorro sai muito fosco

Raimaiane Rocha
Raimaiane Rocha
17/08/2021 17:14

Olá, tudo bem? será que voce pode olhar uma placa de carro pra mim? é muito importante

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 allef.anderson@hotmail.com

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

WEBINAR

Visão Computacional para a redução de erros em processos manuais

DATA: 23/09 ÀS 17:00 H