Reconhecimento de placas de veículos com OpenALPR

Atualmente desempregado, estou precarizado tentando arrumar uns bicos. E recentemente arranjei um bico para fazer um sistema de automação de estacionamentos baseado em software livre e empregando dispositivos de baixo custo, que no caso será o Raspberry Pi 4.

[ Hits: 9.248 ]

Por: Carlos Affonso Henriques. em 15/04/2020


Open ALPR



Embora já haja desenvolvido soluções de hardware e software voltadas para automação de tráfego, sinalização semafória e detecção de incidentes, nunca precisei fazer nada para registrar placas de veículos.

Inicialmente pensei em fazer um OCR com o OpenCV e Tesseract, mas não obtive muito bons resultados, a leitura das placas as vezes era imprecisa e eu estava sem tempo para estudar o Tesseract mais a fundo e pesquisando sobre o assunto deparei-me com o OpenALPR ( Automatic Licence Plate Recognition ), um serviço em nuvem muito bom com uma taxa de acerto muito próxima de 100%, sendo inclusive atualmente empregado para sistemas de multagem não só no Brasil como também Canadá, EUA, Europa e Oceania.

Embora ele também seja baseado no Tesseract e OpenCV, há muitos refinamentos para garantir a precisão do serviço. Ele tem um aprendizado de máquina que identifica inclusive marca/modelo e cor do veículo, incluindo motocicletas, se bem que no caso das motos a identificação de marca/modelo não funciona muito bem, apenas com motocicletas grandes como Honda Goldwing, Ducati Monster, Triumph Rino, Yamaha Vmax e Harley Glide.

O site do serviço é http://www.openalpr.com/ e dispõe de diversos planos que vão desde o gratuito até o enterprise, que é indicado para DETRANS e prefeituras de cidades grandes como Rio ou São Paulo. Não vou adentrar nos recursos dessa API pois no site há farta documentação, assim como há serviços adicionais, tais como rastreio visual de veículos que em cidades com forte aparato de vigilância pode inibir o roubo de cargas, contornando o problema dos jammers empregados pelos ladrões.

Fiz um pequeno programa em Python 3.6 a caráter de demonstração, que inclusive o usarei como parte da solução de estacionamento e compartilho com vocês, podem usar a vontade e como quiserem! Como eu costumo dizer a licença não é GPL é LPG (Liberado Para Geral) Rssss.

Código

import requests
import base64
import json
import time
import sys


IMAGE_PATH=str(sys.argv[1])
SECRET_KEY = 'sk_DEMODEMODEMODEMODEMODEMO'


with open(IMAGE_PATH, 'rb') as image_file:
    img_base64 = base64.b64encode(image_file.read())
    url = 'https://api.openalpr.com/v2/recognize_bytes?recognize_vehicle=1&country=br&secret_key=%s' % (SECRET_KEY)
    r = requests.post(url, data = img_base64)
    obj=r.json()

Placa=obj ["results"][0]["plate"]
TimeStamp=obj["epoch_time"]/1000
Cor=obj["results"][0]["vehicle"]["color"][0]["name"]
Modelo=obj["results"][0]["vehicle"]["make_model"][0]["name"]
DateTime=(time.gmtime(TimeStamp))

print (time.strftime('%Y-%m-%d_%H:%M:%S', DateTime), Placa, Modelo, Cor)

A Kombi velha

Para ilustração vamos usar a foto dessa Kombi velha. A escolhi para a PDC ( gostam de chamar de POC mas prefiro PROVA DE CONCEITO ) pelo fato da placa não estar muito legível e ainda estar em perspectiva. Isso demostra muito bem a qualidade deste serviço formidável. Agora experimente!

Rode o programinha!

python3.6 openalpr.py kombi.jpg

Para os fãs de shell script que não quiserem usar Python:

#!/bin/bash

curl -s -X POST -F image=@$1 'https://api.openalpr.com/v2/recognize?recognize_vehicle=1&country=br&secret_key=sk_DEMODEMODEMODEMODEMODEMO' \
| sed -e 's/[{}]/''/g' -e 's/"results": &#92;[//g' | awk -v k="text" '{n=split($0,a,","); for (i=1; i<=n; i++) print a[i]}' &#92;
| grep -w '"plate"&#92;|"epoch_time"' | head -n 2

Após salvar o seu shell script...

openalpr.sh kombi.jpg

Espero que tenham gostado e se gostaram muito me contratem, pois estou precisando.

   

Páginas do artigo
   1. Open ALPR
Outros artigos deste autor

Filtro de conteúdo autenticado com níveis de privilégio

O que é ForceCommand

Access Point com cartão Atheros em Slackware 12.0

Quando próximo, finja estar longe; quando longe, finja estar próximo

TrueCrypt Forever

Leitura recomendada

Integração do ChatGPT em uma API Python

Gerar senhas seguras com Python

Gerar Códigos QRCode com Python

Python - Enviando Backup para Servidor Secundário

Arduino com Bluetooth e pySerial

  
Comentários
[1] Comentário enviado por fabio em 15/04/2020 - 23:48h

Top demais! Obrigado por compartilhar.

[2] Comentário enviado por CapitainKurn em 16/04/2020 - 12:15h


[1] Comentário enviado por fabio em 15/04/2020 - 23:48h

Top demais! Obrigado por compartilhar.

Por nada Fábio. Contribúo com o VOL desde 2003 fiquei meio parado por algum tempo mas vou aumentar a frequencia de minhas contribuições.

[3] Comentário enviado por Evangel em 15/03/2021 - 17:09h

Check out Plate Recognizer ALPR for a free trial for your project on https://platerecognizer.com/


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts