File size: 5,526 Bytes
3f70783
c4b9c36
3f70783
c4b9c36
3f70783
 
 
 
 
 
 
 
 
 
 
 
 
2b9bd8f
 
 
 
 
 
 
 
 
 
3f70783
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4873e3d
 
3f70783
 
 
 
 
 
 
 
 
dd96861
 
3f70783
 
 
 
 
 
 
 
5f463bc
3f70783
 
 
 
5f463bc
3f70783
 
 
 
 
 
 
 
 
 
 
 
 
7d6b4cd
3f70783
 
 
 
 
 
2b9bd8f
 
3f70783
 
 
 
 
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
90
91
92
93
94
95
96
97
import gradio as gr
from model import SmokerModel

MODEL = SmokerModel("ensemble_softvoting_model.joblib","min_max_scaler.joblib")

def clear_form(**args):
    '''
    Clear the form by resetting all input values

    INPUT
    -----
    args: An array of gradio widgets ex; [widget1, widget2]
    '''
    for widget in args:
        widget.reset()
    return

def predict(
        age, height, weight, 
        waist, eye_L, eye_R, 
        hear_L, hear_R, systolic, 
        relaxation, fasting_blood_sugar, cholesterol, 
        triglyceride, HDL, LDL, 
        hemoglobin, urine_protein, 
        serum_creatinine, AST, ALT, 
        Gtp, dental_caries
    ):
    '''
    Predict the label for the data inputed
    '''
    return

def load_interface(): 
    '''
    Configure Gradio interface
    '''
    #set blocks
    iface_form = gr.Blocks()

    with iface_form: 
        # set title and description
        gr.Markdown( #TODO: add somewhere in the app about warning that this is not professional medical advice
        """
        # Predicting Smoking Status from Bio Data
        Enter sample bio data to predict smoking status.
        """)

        #set inputs
        age = gr.Number(label="Age", precision=0, minimum=0)
        height = gr.Number(label="Height(cm)", precision=0, minimum=0)
        weight = gr.Number(label="Weight(kg)", precision=0, minimum=0)
        waist = gr.Number(label="Waist(cm)", minimum=0, info="Waist circumference length")
        eye_L = gr.Number(label="Visual acuity of the left eye, measured in diopters (D)", minimum=0)
        eye_R = gr.Number(label="Visual acuity of the right eye, measured in diopters (D)", minimum=0)
        hear_L = gr.Radio(label="Is there any hearing ability in the left ear?",choices=[("Yes",1),("No",2)])
        hear_R = gr.Radio(label="Is there any hearing ability in the right ear?",choices=[("Yes",1),("No",2)])
        systolic = gr.Number(label="Systolic(mmHg)", precision=0, minimum=0, info="Blood Pressure")
        relaxation = gr.Number(label="Relaxation(mmHg)", precision=0, minimum=0, info="Blood Pressure")
        fasting_blood_sugar = gr.Number(label="Fasting Blood Sugar(mg/dL)", precision=0, minimum=0, info="the concentration of glucose (sugar) in the bloodstream after an extended period of fasting")
        cholesterol = gr.Number(label="Total Cholesterol(mg/dL)", precision=0, minimum=0, info="Total amount of cholesterol present in the blood")
        triglyceride = gr.Number(label="Triglyceride(mg/dL)", precision=0, minimum=0, info="A type of fat (lipid) found in blood")
        HDL = gr.Number(label="High-Density Lipoprotein(mg/dL) ", precision=0, minimum=0, info="It is commonly referred to as 'good cholesterol'")
        LDL = gr.Number(label="Low-Density Lipoprotein(mg/dL) ", precision=0, minimum=0, info="It is commonly referred to as 'bad cholesterol'")
        hemoglobin = gr.Number(label="Hemoglobin(g/dL)", minimum=0, info="a protein found in red blood cells that is responsible for carrying oxygen from the lungs to the tissues and organs of the body")
        urine_protein = gr.Radio(label="Does urine contain excessive traces of protein?",choices=[("Yes",2),("No",1)], info="when excessive protein is detected in the urine, it may indicate a problem with kidney function or other underlying health conditions.")
        serum_creatinine = gr.Number(label="Serum creatinine(mg/dL)", minimum=0, info="Serum creatinine levels are commonly measured through a blood test and are used to assess kidney function")
        AST = gr.Number(label="Aspartate Aminotransferase(IU/L)", precision=0, minimum=0, info="glutamic oxaloacetic transaminase type; AST is released into the bloodstream when cells are damaged or destroyed, such as during injury or disease affecting organs rich in AST.")
        ALT = gr.Number(label="Alanine Aminotransferase(IU/L)", precision=0, minimum=0, info="glutamic oxaloacetic transaminase type; ALT is primarily found in the liver cells, and increased levels of ALT in the blood can indicate liver damage or disease")
        Gtp = gr.Number(label="Gamma-glutamyl Transferase(IU/L)", precision=0, minimum=0, info="Elevated levels of GGT in the blood can indicate liver disease or bile duct obstruction. GGT levels are often measured alongside other liver function tests to assess liver health and function.")
        dental_caries = gr.Radio(label="Are there any signs of dental cavities?",choices=[("Yes",1),("No",0)])

        #set button row
        with gr.Row():
            pred_btn = gr.Button("Predict")
            clear_btn = gr.Button("Clear")

        #set label txt box
        #TODO: change to gr.Label()?
        smoker_label = gr.Textbox(label="Predicted Label", max_lines=1)

        #set event listeners
        inputs = [age, height, weight, waist, eye_L, eye_R, hear_L, hear_R, systolic, relaxation, fasting_blood_sugar, cholesterol, triglyceride, HDL, LDL, hemoglobin, urine_protein, serum_creatinine, AST, ALT, Gtp, dental_caries]
        pred_btn.click(fn=predict, inputs=inputs, outputs=smoker_label)
        clear_btn.click(lambda: [None]*22, outputs=inputs)


    iface = gr.TabbedInterface( #TODO: add somewhere in the app (another tab?) information about our project: github, description, model metrics, etc.
        [iface_form],
        ["Predict Smoker"]
    )

    #TODO: include examples like here: https://www.gradio.app/docs/number
    
    iface_form.launch(server_name="0.0.0.0", server_port=7860)

if __name__ == "__main__":
    load_interface()