import gradio as gr from ultralytics import YOLO import cv2 import tempfile # Carregar o modelo YOLOv8 model = YOLO("yolov8n.pt") # Você pode usar 'yolov8s.pt', 'yolov8m.pt', etc., dependendo do seu requisito def detect_objects(video_path): # Abrir o vídeo de entrada cap = cv2.VideoCapture(video_path) if not cap.isOpened(): raise ValueError("Não foi possível abrir o vídeo.") # Criar um arquivo temporário para salvar o vídeo processado output_path = tempfile.NamedTemporaryFile(suffix=".mp4", delete=False).name fourcc = cv2.VideoWriter_fourcc(*'mp4v') out = cv2.VideoWriter(output_path, fourcc, 30.0, (int(cap.get(3)), int(cap.get(4)))) while cap.isOpened(): ret, frame = cap.read() if not ret: break # Realizar a detecção de objetos results = model(frame) annotated_frame = results[0].plot() # Obter o frame com as detecções # Escrever o frame processado no vídeo de saída out.write(annotated_frame) # Liberar os recursos cap.release() out.release() # Retornar o caminho do vídeo de entrada e do vídeo processado return video_path, output_path # Usar gr.Blocks para criar uma interface personalizada with gr.Blocks() as demo: gr.Markdown("# Detecção de Objetos com YOLOv8") gr.Markdown("Carregue um vídeo curto para detectar objetos usando YOLOv8. Os vídeos de entrada e saída serão exibidos lado a lado.") with gr.Row(): input_video = gr.Video(label="Vídeo de Entrada") output_video = gr.Video(label="Vídeo com Detecção de Objetos") detect_button = gr.Button("Detectar Objetos") def process_and_display(video_path): original_video, processed_video = detect_objects(video_path) return original_video, processed_video detect_button.click( fn=process_and_display, inputs=input_video, outputs=[input_video, output_video] ) # Iniciar a interface demo.launch()