File size: 3,662 Bytes
c5c9dba
 
 
 
 
 
 
 
 
 
 
 
 
a3d8df2
2907ba4
a3d8df2
 
 
93b3457
2907ba4
70716fb
a3d8df2
 
35c2cfe
2907ba4
93b3457
 
70716fb
a3d8df2
 
 
c5c9dba
2907ba4
c5c9dba
 
 
 
 
 
 
 
93b3457
c5c9dba
 
 
 
 
 
bfa9489
4ec5db2
 
2907ba4
 
25d439e
2907ba4
 
4ec5db2
2907ba4
 
 
 
 
 
 
 
bfa9489
2907ba4
4ec5db2
2907ba4
 
bfa9489
2907ba4
a3d8df2
 
 
 
 
 
 
 
 
c5c9dba
a3d8df2
 
 
3054620
a3d8df2
c5c9dba
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
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:
    gr.Markdown("# Estimar la densidad aparente del suelo")
    with gr.Row():
        with gr.Column():
            SOC = gr.Number(label="MO (%)", value=2.9408, interactive=True)
            eK = gr.Number(label="K (meq/100g)", value=0.47, interactive=True)
            pH = gr.Number(label="pH (1:1)", value=7.09, interactive=True)
            EC = gr.Number(label="C.E. (dS/m)", value=0.31, interactive=True)
            
        with gr.Column():
            Cy = gr.Number(label="Arcilla (%)", value=31.0, interactive=True)
            eNa = gr.Number(label="Na (meq/100g)", value=0.15, interactive=True)
            CCE = gr.Number(label="CaCO3 (%)", value=0.20, interactive=True) 
            
            
        with gr.Column():
            eCa = gr.Number(label="Ca (meq/100g)", value=19.44, interactive=True)
            eAlH = gr.Number(label="Al + H (meq/100g)", value=0.0, interactive=True)
            Si = gr.Number(label="Limo (%)", value=24.0, interactive=True)
            
        with gr.Column():
            eMg = gr.Number(label="Mg (meq/100g)", value=3.47, interactive=True)
            Sa = gr.Number(label="Arena (%)", value=45.0, interactive=True)
            CEC = gr.Number(label="CIC (meq/100g)", value=23.52, interactive=True)
            
    with gr.Row():
        with gr.Column():
            submit_1 = gr.Button(value='Abdelbaki')
        with gr.Column():
            submit_2 = gr.Button(value='Benites')
        with gr.Column():
            submit_3 = gr.Button(value='MLRegression')
        with gr.Column():
            submit_4 = gr.Button(value='Random Forest')
    output = gr.Textbox(label=": soil bulk density", 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)