import gradio as gr import numpy as np import pickle # Cargar el modelo with open('model_rf.pkl', 'rb') as file: rf = pickle.load(file) # Cargar el scaler with open('my-standard-scaler.pkl', 'rb') as file: s_c = pickle.load(file) # Definir la función de predicción def predict_1(SOC: float): SOC = SOC/1.724 # SOC <- MO/1.724 prediction = 1.58 + np.exp(-0.07*SOC) return prediction.round(2) def predict_2(SOC: float, Cy: float): SOC = SOC/1.724 # SOC <- MO/1.724 prediction = np.array(2.03 - 0.008*Cy - 0.008*SOC) return prediction.round(2) def predict_3(SOC: float, Cy: float, eCa: float, eMg: float, eK: float, eNa: float, eAlH: float): SOC = SOC/1.724 # SOC <- MO/1.724 ECEC = eCa + eMg + eK + eNa + eAlH xK = eK/ECEC prediction = np.array(1.53 - 0.076*SOC + 0.004*Cy - 2.04*xK) return prediction.round(2) def predict_4(pH: float, EC: float, CCE: float, SOC: float, Sa: float, Si: float, Cy: float, CEC: float, eCa: float, eMg: float, eK: float, eNa: float, eAlH: float): SOC = SOC/1.724 # SOC <- MO/1.724 ECEC = eCa + eMg + eK + eNa + eAlH xCa = eCa/ECEC xMg = eMg/ECEC xK = eK/ECEC xNa = eNa/ECEC xAlH = eAlH/ECEC BS1 = (eCa + eMg + eK + eNa)/CEC BS2 = (eCa + eMg + eK + eNa)/ECEC input_features = np.array([[pH, EC, CCE, SOC, Sa, Si, Cy, CEC, ECEC, xCa, xMg, xK, xNa, xAlH, BS1, BS2]]) input_features_scale = s_c.transform(input_features) prediction = rf.predict(input_features_scale)[0].round(2) return prediction # # Crear la interfaz Gradio with gr.Blocks() as demo: #with gr.Row(): # with gr.Column(): # gr.Markdown("""""") # with gr.Column(): # gr.Markdown("""""") # with gr.Column(): # gr.Markdown("""""") #gr.Markdown("""""") gr.Markdown("""""") #gr.Markdown("""""") gr.Markdown("# Estimación de la densidad aparente del suelo") with gr.Row(): with gr.Column(scale=0, min_width=250): gr.Markdown("**M.O. (%)**") SOC = gr.Number(label="", value=2.9408, interactive=True, elem_classes="bold-label") gr.Markdown("**K+ (meq/100g)**") eK = gr.Number(label="", value=0.47, interactive=True) gr.Markdown("**pH (1:1) en H2O**") pH = gr.Number(label="", value=7.09, interactive=True) gr.Markdown("**C.E. (1:1 dS/m)**") EC = gr.Number(label="", value=0.31, interactive=True) with gr.Column(scale=0, min_width=250): gr.Markdown("**Arcilla (%)**") Cy = gr.Number(label="", value=31.0, interactive=True) gr.Markdown("**Na+ (meq/100g)**") eNa = gr.Number(label="", value=0.15, interactive=True) gr.Markdown("**CaCO2 (%)**") CCE = gr.Number(label="", value=0.20, interactive=True) with gr.Column(scale=0, min_width=250): gr.Markdown("**Ca2+ (meq/100g)**") eCa = gr.Number(label="", value=19.44, interactive=True) gr.Markdown("**Al3+ + H+ (meq/100g)**") eAlH = gr.Number(label="", value=0.0, interactive=True) gr.Markdown("**Limo (%)**") Si = gr.Number(label="", value=24.0, interactive=True) with gr.Column(scale=0, min_width=250): gr.Markdown("**Mg2+ (meq/100g)**") eMg = gr.Number(label="", value=3.47, interactive=True) gr.Markdown("**Arena (%)**") Sa = gr.Number(label="", value=45.0, interactive=True) gr.Markdown("**CIC (meq/100g)**") CEC = gr.Number(label="", value=23.52, interactive=True) gr.Markdown("Seleccione un modelo:") with gr.Row(): with gr.Column(scale=0, min_width=250): submit_1 = gr.Button(value='Abdelbaki') with gr.Column(scale=0, min_width=250): submit_2 = gr.Button(value='Benites') with gr.Column(scale=0, min_width=250): submit_3 = gr.Button(value='MLRegression') with gr.Column(scale=0, min_width=250): submit_4 = gr.Button(value='Random Forest') gr.Markdown("Densidad aparente del suelo (g/cm3):") output = gr.Textbox(label="", interactive=False) submit_1.click(predict_1, inputs=[SOC], outputs=[output]) submit_2.click(predict_2, inputs=[SOC, Cy], outputs=[output]) submit_3.click(predict_3, inputs=[SOC, Cy, eCa, eMg, eK, eNa, eAlH], outputs=[output]) submit_4.click(predict_4, inputs=[pH , EC, CCE, SOC, Sa, Si, Cy, CEC, eCa, eMg, eK, eNa, eAlH], outputs=[output]) demo.launch(share=False, debug=False)