Spaces:
Running
on
Zero
Running
on
Zero
import cv2 | |
import gradio as gr | |
from transformers import pipeline | |
# Cargar el modelo de detecci贸n de objetos de Hugging Face (DETR) | |
detector = pipeline("object-detection", model="facebook/detr-resnet-50") | |
def process_video(video_path): | |
""" | |
Procesa un video y devuelve el m谩ximo n煤mero detectado de personas, bicicletas y motos en un fotograma. | |
""" | |
cap = cv2.VideoCapture(video_path) | |
if not cap.isOpened(): | |
return {"person": 0, "bicycle": 0, "motorcycle": 0} | |
max_counts = {"person": 0, "bicycle": 0, "motorcycle": 0} | |
while True: | |
ret, frame = cap.read() | |
if not ret: | |
break | |
# Convertir el frame de BGR a RGB (requerido por el modelo) | |
frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) | |
# Realizar la detecci贸n de objetos | |
results = detector(frame_rgb) | |
# Contar objetos detectados en el frame actual (usamos un umbral de confianza) | |
frame_counts = {"person": 0, "bicycle": 0, "motorcycle": 0} | |
for detection in results: | |
if detection["score"] < 0.7: | |
continue | |
label = detection["label"].lower() | |
if label in frame_counts: | |
frame_counts[label] += 1 | |
# Actualizar el conteo m谩ximo si en este frame se detecta m谩s | |
for key in frame_counts: | |
if frame_counts[key] > max_counts[key]: | |
max_counts[key] = frame_counts[key] | |
cap.release() | |
return max_counts | |
# Crear la interfaz de Gradio para el Space | |
iface = gr.Interface( | |
fn=process_video, | |
inputs=gr.Video(label="Sube tu video"), | |
outputs="json", | |
title="Detecci贸n de Objetos en Video", | |
description="Carga un video y detecta cu谩ntas personas, bicicletas y motos aparecen usando modelos de Hugging Face." | |
) | |
if __name__ == "__main__": | |
iface.launch() | |