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: 1.542 ]

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 [email protected]$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

L7-filter (funcionando) no Slackware 10.2

Impedindo o compartilhamento de conexão

Obtendo TimeStamps da Blockchain com OpenTimestamps

Balanceamento de carga e alta disponibilidade com Bonding Driver e Iproute2

Recuperando senha de administrador Windows NT/2000/XP/ com o Slax e Captive

Leitura recomendada

Esteganografia e Esteganálise: transmissão e detecção de informações ocultas em imagens digitais

Como criar um keylogger em Python

Como criar um bot para curtir e comentar perfis do Instagram

Construindo um portscanner TCP com Python

Interagindo com servidores HTTP com Python

  
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.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts