import gradio as gr import joblib import pandas as pd from pathlib import Path # Carga tu modelo (ruta robusta relativa al archivo) model = joblib.load("rfc_search_20251204.joblib") def predict(IL1, WL1, IL2, WL2, QCL2, IL3, WL3, AmbientTemp, AL1, AL2, RLL2, AL3, RLL3): # Construye un DataFrame con los nombres EXACTOS de tus features X = pd.DataFrame([{ "A+ L1": AL1, "I L1": IL1, "W+ L1": WL1, "A+ L2": AL2, "W+ L3": WL3, "W+ L2": WL2, "I L2": IL2, "Ambient Temp": AmbientTemp, "I L3": IL3, "R+L L2": RLL2, "Q_C L2": QCL2, "R+L L3": RLL3, "A+ L3": AL3 }]) # Predicción (clasificación) pred = model.predict(X)[0] # Si tu modelo tiene predict_proba proba_txt = "" if hasattr(model, "predict_proba"): proba = model.predict_proba(X)[0] # Obtener las clases de forma segura (pipeline -> rf) rf = model.named_steps["rf"] if hasattr(model, "named_steps") else model classes = getattr(model, "classes_", None) if classes is None: classes = getattr(rf, "classes_", None) if classes is not None: pairs = [f"{c}: {p:.4f}" for c, p in zip(classes, proba)] proba_txt = " " + ", ".join(pairs) else: proba_txt = " " + ", ".join([f"{p:.4f}" for p in proba]) return pred, proba_txt title_html = ( "
" "Logo UOC" "
" "UOC - TFM - Salvador Bordón Ruano
" "Detección de averías en Centros de Transformación de media a baja tensión
" "

Validador de modelo (RandomForestClassifier)

" ) demo = gr.Interface( fn=predict, inputs=[ gr.Number(label="I L1: Phase current L1-N" ), # IL1 gr.Number(label="W+ L1: Active power L1-N"), # WL1 gr.Number(label="I L2: Phase Current L2-N"), # IL2 gr.Number(label="W+ L2: Active power L2-N"), # WL2 gr.Number(label="Q_C L2: Capacitive Reactive power L2-N"), # QCL2 gr.Number(label="I L3: Phase Current L3-N"), # IL3 gr.Number(label="W+ L3: Active power L3-N"), # WL3 gr.Number(label="Ambient Temp: Ambient Temperature"), # AmbientTemp gr.Number(label="A+ L1: Import active energy L1-N"), # AL1 gr.Number(label="A+ L2: Import active energy L2-N"), # AL2 gr.Number(label="R+L L2: Reactive Inductive Energy L2-N"), # RLL2 gr.Number(label="A+ L3: Import active energy L3-N"), # AL3 gr.Number(label="R+L L3: Reactive Inductive Energy L3-N") # RLL3 ], outputs=[gr.Textbox(label="Resultado"), gr.Textbox(label="Probabilidades")], title=title_html, description="Introducir los valores de las características para obtener la predicción. Los campos a informar son las características seleccionadas para entrenar el modelo." ) if __name__ == "__main__": demo.launch() # local