|
import numpy as np |
|
import tensorflow as tf |
|
import gradio as gr |
|
from huggingface_hub import from_pretrained_keras |
|
|
|
|
|
model = from_pretrained_keras("buio/structured-data-classification") |
|
|
|
def convert_and_predict(age, sex, cp, trestbps, chol, fbs, restecg, thalach, exang, oldpeak, slope, ca, thal): |
|
|
|
|
|
sample_converted = { |
|
"age": age, |
|
"sex": sex, |
|
"cp": cp+1, |
|
"trestbps": trestbps, |
|
"chol": chol, |
|
"fbs": 0 if fbs<=120 else 1, |
|
"restecg": restecg, |
|
"thalach": thalach, |
|
"exang": exang, |
|
"oldpeak": oldpeak, |
|
"slope": slope+1, |
|
"ca": ca, |
|
"thal": thal, |
|
} |
|
|
|
input_dict = {name: tf.convert_to_tensor([value]) for name, value in sample_converted.items()} |
|
predictions = model.predict(input_dict) |
|
|
|
return f'{predictions[0][0]:.2%}' |
|
|
|
|
|
inputs = [ |
|
gr.Slider(minimum=1, maximum=120, step=1, label='age', value=60), |
|
gr.Radio(choices=['female','male'], label='sex', type='index',value='male'), |
|
gr.Radio(choices=['typical angina', |
|
'atypical angina', |
|
'non-anginal pain', |
|
'asymptomatic'], |
|
type='index', label=f'chest pain type', value='typical angina'), |
|
gr.Number(label='blood pressure in mmHg', value=145), |
|
gr.Number(label='serum cholestoral in mg/dl', value=233), |
|
gr.Number(label='fasting blood sugar in mg/dl', value=150), |
|
gr.Radio(choices=['normal','T-T wave abnormality','probable or definite left ventricular hypertrophy'], |
|
label='resting ecg', type='index',value='probable or definite left ventricular hypertrophy'), |
|
gr.Number(label='maximum heart rate achieved', value=150), |
|
gr.Radio(choices=['no','yes',], type='index', label='exercise induced angina',value='no'), |
|
gr.Number(label='ST depression induced by exercise relative to rest', value=2.3), |
|
gr.Radio(choices=['psloping','flat','downsloping'], label='slope of the peak exercise ST segment', type='index', value='downsloping'), |
|
gr.Number(minimum=0, maximum=3, label ='number of major vessels (0-3) colored by flourosopy',value=0), |
|
gr.Radio(['normal','fixed','reversable'],label ='thal', value='fixed') |
|
] |
|
|
|
|
|
|
|
output = gr.Textbox(label='Probability of having a heart disease, as evaluated by our model:') |
|
|
|
examples = [] |
|
title = "Heart Disease Classification" |
|
description = "Play with the clinical values or select examples below" |
|
examples = [[63, 1, 1, 145, 233, 1, 2, 150, 0, 2.3, 3, 0, 'fixed'], |
|
[67, 1, 4, 160, 286, 0, 2, 108, 1, 1.5, 2, 3, 'normal'], |
|
[67, 1, 4, 120, 229, 0, 2, 129, 1, 2.6, 2, 2, 'reversible']] |
|
|
|
gr.Interface(convert_and_predict, inputs, output, examples= examples, allow_flagging=False, analytics_enabled=False, |
|
title=title, description=description).launch() |