|
import pickle |
|
import gradio as gr |
|
|
|
|
|
with open("model.pkl", "rb") as f: |
|
model = pickle.load(f) |
|
|
|
|
|
diagnoses = { |
|
0: "Negative", |
|
1: "Hypothyroid", |
|
2: "Hyperthyroid" |
|
} |
|
|
|
|
|
def preprocess_inputs(age, sex, on_thyroxine, query_on_thyroxine, on_antithyroid_meds, sick, pregnant, |
|
thyroid_surgery, I131_treatment, query_hypothyroid, query_hyperthyroid, lithium, |
|
goitre, tumor, hypopituitary, psych, TSH, T3, TT4, T4U, FTI): |
|
|
|
binary_map = {'Yes': 1, 'No': 0, '': None} |
|
|
|
on_thyroxine = binary_map[on_thyroxine] |
|
query_on_thyroxine = binary_map[query_on_thyroxine] |
|
on_antithyroid_meds = binary_map[on_antithyroid_meds] |
|
sick = binary_map[sick] |
|
pregnant = binary_map[pregnant] |
|
thyroid_surgery = binary_map[thyroid_surgery] |
|
I131_treatment = binary_map[I131_treatment] |
|
query_hypothyroid = binary_map[query_hypothyroid] |
|
query_hyperthyroid = binary_map[query_hyperthyroid] |
|
lithium = binary_map[lithium] |
|
goitre = binary_map[goitre] |
|
tumor = binary_map[tumor] |
|
hypopituitary = binary_map[hypopituitary] |
|
psych = binary_map[psych] |
|
|
|
sex = 1 if sex == 'F' else 0 if sex == 'M' else None |
|
|
|
return [age, sex, on_thyroxine, query_on_thyroxine, on_antithyroid_meds, sick, pregnant, |
|
thyroid_surgery, I131_treatment, query_hypothyroid, query_hyperthyroid, lithium, |
|
goitre, tumor, hypopituitary, psych, TSH, T3, TT4, T4U, FTI] |
|
|
|
|
|
def predict_diagnosis(age, sex, on_thyroxine, query_on_thyroxine, on_antithyroid_meds, sick, pregnant, |
|
thyroid_surgery, I131_treatment, query_hypothyroid, query_hyperthyroid, lithium, |
|
goitre, tumor, hypopituitary, psych, TSH, T3, TT4, T4U, FTI): |
|
|
|
inputs = preprocess_inputs(age, sex, on_thyroxine, query_on_thyroxine, on_antithyroid_meds, sick, |
|
pregnant, thyroid_surgery, I131_treatment, query_hypothyroid, |
|
query_hyperthyroid, lithium, goitre, tumor, hypopituitary, psych, |
|
TSH, T3, TT4, T4U, FTI) |
|
|
|
output = model.predict([inputs])[0] |
|
return diagnoses.get(output, "Unknown") |
|
|
|
|
|
demo = gr.Interface( |
|
fn=predict_diagnosis, |
|
inputs=[ |
|
gr.Number(label="Age"), |
|
gr.Radio(["M", "F"], label="Sex"), |
|
gr.Radio(["Yes", "No"], label="On Thyroxine"), |
|
gr.Radio(["Yes", "No"], label="Query on Thyroxine"), |
|
gr.Radio(["Yes", "No"], label="On Antithyroid Meds"), |
|
gr.Radio(["Yes", "No"], label="Sick"), |
|
gr.Radio(["Yes", "No"], label="Pregnant"), |
|
gr.Radio(["Yes", "No"], label="Thyroid Surgery"), |
|
gr.Radio(["Yes", "No"], label="I131 Treatment"), |
|
gr.Radio(["Yes", "No"], label="Query Hypothyroid"), |
|
gr.Radio(["Yes", "No"], label="Query Hyperthyroid"), |
|
gr.Radio(["Yes", "No"], label="Lithium"), |
|
gr.Radio(["Yes", "No"], label="Goitre"), |
|
gr.Radio(["Yes", "No"], label="Tumor"), |
|
gr.Radio(["Yes", "No"], label="Hypopituitary"), |
|
gr.Radio(["Yes", "No"], label="Psych"), |
|
gr.Number(label="TSH"), |
|
gr.Number(label="T3"), |
|
gr.Number(label="TT4"), |
|
gr.Number(label="T4U"), |
|
gr.Number(label="FTI"), |
|
], |
|
outputs="text", |
|
title="Thyroid Diagnosis Predictor", |
|
description="Predict whether a patient has Hypothyroid, Hyperthyroid or is Negative using medical features." |
|
) |
|
|
|
|
|
|
|
if __name__ == "__main__": |
|
demo.launch() |