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.
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.
Rode o programinha!
python3.6 openalpr.py kombi.jpg
Para os fãs de shell script que não quiserem usar Python:
Após salvar o seu shell script...
openalpr.sh kombi.jpg
Espero que tenham gostado e se gostaram muito me contratem, pois estou precisando.
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": \[//g' | awk -v k="text" '{n=split($0,a,","); for (i=1; i<=n; i++) print a[i]}' \
| grep -w '"plate"\|"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.