PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV 25 → Example Windev with Python para reconhecimento de placas de carros em um vídeo
Example Windev with Python para reconhecimento de placas de carros em um vídeo
Started by Boller, Feb., 04 2025 11:21 AM - No answer
Registered member
3,774 messages
Posted on February, 04 2025 - 11:21 AM
Bonjour

Aqui está um exemplo completo do fluxo de veículos num vídeo capturando as suas placas, utilizando Python com as bibliotecas OpenCV, YOLOv8n e integração com a API do PlateRecognizer.

1. Pré-requisitos:

Certifique-se de ter as seguintes bibliotecas instaladas:

pip install ultralytics opencv-python requests

2. Código Completo:

import cv2
import requests
from ultralytics import YOLO
import time

# Configuração da API do PlateRecognizer
PLATE_RECOGNIZER_API_KEY = 'YOUR_API_KEY_HERE'
PLATE_RECOGNIZER_URL = 'https://api.platerecognizer.com/v1/plate-reader/'

# Função para reconhecer placa via API do PlateRecognizer
def recognize_plate(image_path):
with open(image_path, 'rb') as img_file:
response = requests.post(
PLATE_RECOGNIZER_URL,
files={'upload': img_file},
headers={'Authorization': f'Token {PLATE_RECOGNIZER_API_KEY}'}
)
return response.json()

# Inicializando o modelo YOLOv8n
model = YOLO('yolov8n.pt') # Use o modelo pré-treinado YOLOv8n

# Definindo o vídeo para análise
video_path = 'seu_video.mp4'
cap = cv2.VideoCapture(video_path)

# Armazenar veículos detectados para evitar duplicatas
detected_vehicles = set()
frame_count = 0

while cap.isOpened():
ret, frame = cap.read()
if not ret:
break

frame_count += 1

# Processar apenas 1 a cada 5 frames para eficiência
if frame_count % 5 == 0:
# Detecção de objetos no frame
results = model(frame)

for result in results:
boxes = result.boxes
for box in boxes:
cls_id = int(box.cls[0])
confidence = float(box.conf[0])

# Filtrar apenas veículos com confiança acima de 80%
if confidence > 0.80 and cls_id in [2, 3, 5, 7]: # IDs para carro, moto, caminhão
x1, y1, x2, y2 = map(int, box.xyxy[0])
cropped_vehicle = frame[y1:y2, x1:x2]

# Convertendo para string para verificar duplicatas
vehicle_id = f"{x1}_{y1}_{x2}_{y2}"

if vehicle_id not in detected_vehicles:
detected_vehicles.add(vehicle_id)

# Salvando a imagem do veículo detectado
timestamp = time.strftime("%Y%m%d-%H%M%S")
img_filename = f"vehicle_{timestamp}.jpg"
cv2.imwrite(img_filename, cropped_vehicle)

print(f"Veículo detectado e salvo como {img_filename}")

# Reconhecimento de placa via API
plate_data = recognize_plate(img_filename)
if plate_data.get('results'):
plate_number = plate_data['results'][0]['plate']
print(f"Placa detectada: {plate_number}")
else:
print("Nenhuma placa reconhecida.")

# Exibição opcional do vídeo com detecção
cv2.imshow('Detecção de Veículos', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break

cap.release()
cv2.destroyAllWindows()

3. Explicação do Código:
1. Leitura do Vídeo:
O OpenCV é usado para abrir e ler o vídeo frame a frame.
2. Detecção de Veículos com YOLOv8n:
O modelo YOLOv8n detecta veículos nos frames. Apenas objetos com confiança superior a 80% e que correspondem a carros, caminhões ou motos são processados.
3. Armazenamento Inteligente:
Para evitar múltiplas detecções do mesmo veículo, o código utiliza um conjunto detected_vehicles para armazenar as coordenadas dos veículos detectados.
4. Reconhecimento de Placas com PlateRecognizer:
As imagens dos veículos detectados são enviadas para a API do PlateRecognizer, que retorna o número da placa. O número da placa (se detectado) é impresso no console.

4. Considerações Finais:
• API Key: Substitua 'YOUR_API_KEY_HERE' pela sua chave de API do PlateRecognizer.
• Melhorias Possíveis:
• Salvar resultados em um banco de dados para posterior análise.
• Melhorar o gerenciamento de duplicatas usando rastreamento de objetos.
• Adicionar logging avançado e tratamento de erros.

Agora, é só rodar o script e acompanhar a mágica acontecer!

Para rodar pelo Windev

Importe o arquivo e use essas informações

https://help.windev.com/en-US/…

https://help.windev.com/en-US/…

https://help.windev.com/en-US/…

https://help.windev.com/en-US/…

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/