|
FOROS PROFESIONALES WINDEV, WEBDEV y WINDEV Mobile |
| | | | | |
Inicio → 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 |
Iniciado por Boller, 04,feb. 2025 11:21 - No hay respuesta |
| |
| | | |
|
| |
Miembro registrado 4.521 mensajes |
|
Publicado el 04,febrero 2025 - 11:21 |
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/ |
| |
| |
| | | |
|
| | | | |
| | |
| | |
| |
|
|
|