Segue parte do código para eventuais duvidas de como está rodando.
Grato por qualquer orientação.
import cv2
import numpy as np
# Função para configurar a URL RTSP da câmera
def configurar_camera_rtsp(username, password, ip_address, port, stream_path):
return f"rtsp://{username}:{password}@{ip_address}:{port}/{stream_path}"
# Função para detectar e desenhar contornos com restrição de ângulo
def detectar_contornos(frame):
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
imagem_suavizada = cv2.GaussianBlur(gray, (5, 5), 0)
bordas = cv2.Canny(imagem_suavizada, 100, 200)
contornos, _ = cv2.findContours(bordas, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
for contorno in contornos:
# Aproximar o contorno para um retângulo rotacionado
retangulo = cv2.minAreaRect(contorno)
(x, y), (w, h), angulo = retangulo
# Ajustar o ângulo se necessário
if angulo < -45:
angulo = 90 + angulo
# Filtrar para contornos com ângulo entre -30 e 30 graus
if (0 <= angulo <= 30) or (-30 <= angulo <= 0):
# Filtrar também por aspecto e tamanho para corresponder à proporção de uma placa
aspect_ratio = w / float(h) if h != 0 else 0
if 2 <= aspect_ratio <= 5 and w > 100:
# Obter e desenhar o retângulo
box = cv2.boxPoints(retangulo)
box = np.int32(box)
cv2.drawContours(frame, [box], 0, (0, 255, 0), 2)
return frame
# Configurações da câmera IP
username = "admin"
password = "admin"
ip_address = "192.168.0.100" # IP da sua câmera
port = "554"
stream_path = "caminho_do_stream"
# URL RTSP
rtsp_url = configurar_camera_rtsp(username, password, ip_address, port, stream_path)
# Captura de vídeo com RTSP
cap = cv2.VideoCapture(rtsp_url)
if not cap.isOpened():
print("Erro ao abrir o stream da câmera RTSP")
exit()
# Definir resolução máxima, caso seja suportada
resolucao_largura = 2304
resolucao_altura = 1296
cap.set(cv2.CAP_PROP_FRAME_WIDTH, resolucao_largura)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, resolucao_altura)
# Nome da janela para ajuste de resolução
window_name = "Detecção de Contornos de Placa"
# Criar janela ajustável
cv2.namedWindow(window_name, cv2.WINDOW_NORMAL)
cv2.resizeWindow(window_name, resolucao_largura, resolucao_altura)
# Loop para capturar e processar frames do vídeo
while True:
ret, frame = cap.read()
if not ret:
print("Erro na captura do frame ou final do vídeo")
break
# Detectar contornos no frame
frame_com_contornos = detectar_contornos(frame)
# Exibir o frame com contornos detectados
cv2.imshow(window_name, frame_com_contornos)
# Pressione 'q' para sair
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# Liberar a câmera e fechar as janelas
cap.release()
cv2.destroyAllWindows()