Spaces:
Sleeping
Sleeping
| import gradio as gr, tempfile, shutil, os, sys | |
| from ultralytics import YOLO | |
| import os | |
| # Evita el error de OpenMP | |
| os.environ["OMP_NUM_THREADS"] = "1" | |
| # ──────────────────────────── | |
| # Modelo | |
| # ──────────────────────────── | |
| model = YOLO("best.pt") # se carga una vez al arrancar | |
| def infer(video): | |
| "Corre la detección sobre el vídeo subido y devuelve el vídeo con boxes" | |
| tmp = tempfile.mkdtemp() | |
| inp = os.path.join(tmp, "in.mp4") | |
| shutil.copy(video, inp) | |
| res = model.predict(source=inp, save=True, conf=0.25, iou=0.45) | |
| return os.path.join(res.save_dir, "in.mp4") | |
| def show_classes(): | |
| "Devuelve las clases aprendidas por el modelo" | |
| return ", ".join(model.names) | |
| # ──────────────────────────── | |
| # UI en Blocks | |
| # ──────────────────────────── | |
| with gr.Blocks(title="Kesherat · Inspección de palas eólicas") as demo: | |
| gr.Markdown("## Inspección de palas eólicas con YOLO") | |
| video_in = gr.Video(label="Sube tu video de inspección") | |
| video_out = gr.Video(label="Video con defectos detectados") | |
| btn_detect = gr.Button("Detectar defectos") | |
| btn_detect.click(fn=infer, inputs=video_in, outputs=video_out) | |
| btn_classes = gr.Button("Mostrar clases del modelo") | |
| txt_classes = gr.Textbox(label="Clases cargadas", interactive=False) | |
| btn_classes.click(fn=show_classes, outputs=txt_classes) | |
| if __name__ == "__main__": | |
| # lanza la app en el Space | |
| demo.launch() | |