File size: 3,141 Bytes
1e20656
 
5c5b397
 
 
aae6493
c05f598
 
 
 
95fc2c4
c05f598
 
 
 
 
29e3408
 
1754b09
 
 
4b57052
 
125eddb
7ab52fe
1754b09
 
4b57052
 
282963e
873b4ad
9ba729e
c05f598
 
 
 
8f428af
32d2e2e
e2fec6b
12b6b1a
9dee9a0
e2fec6b
873b4ad
1754b09
4920d02
a52d12d
4920d02
12cd932
16b729b
7d9a734
39af728
c7a8f72
 
12cd932
8181851
12cd932
 
c7a8f72
36ce2c2
8d6f1ac
36ce2c2
8d6f1ac
c189ba5
42345af
5e90216
136a867
 
 
15ff7d0
136a867
15ff7d0
50e0361
5e90216
 
a61a907
1754b09
a61a907
0707d46
36ce2c2
 
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
#Bismillahir Rahmaanir Raheem
#Almadadh Ya Gause RadiAllahu Ta'alah Anh - Ameen


import gradio as gr
import pandas as pd
from pycaret.classification import load_model, predict_model


# load the trained model for predictions
model = load_model('tuned_blend_specific_model_19112021')


# define the function to call 
def predict(model, input_df):
	predictions_df = predict_model(estimator=model, data=input_df)
	predict_label = predictions_df["Label"][0] # either 1 (amputation yes) or 0 (amputation no)
	predict_score = predictions_df["Score"][0] # the prediction (accuracy)
	amputation_risk = ""
	if predict_label == 1:
		amputation_risk = "YES"
		amputation_risk_output = "Amputation Risk: " + amputation_risk
		score_output = "Score: "+str(predict_score)
		
		html = "<div style='background-color:rgb(153, 0, 0);color:white;font-size:20px;'>" + amputation_risk_output + "<br>" + score_output + "<br>" + "</div>"
	else:
		amputation_risk = "NO"
		amputation_risk_output = "Amputation Risk: " + amputation_risk
		score_output = "Score: "+str(predict_score)
		html = "<div style='background-color:rgba(16, 185, 129, var(--tw-bg-opacity));color:white;font-size:20px;'>" + amputation_risk_output + "<br>" + score_output + "<br>" + "</div>"
	
	return html#"AMPUTATION RISK: " + amputation_risk + " SCORE: "+str(predict_score)  


# the parameters in this function, actually gets the inputs for the prediction 
def predict_amputation(age, gender, race, diabetes_type):
	diabetes_class = "Type "+str(diabetes_type)+" diabetes"
	gender = gender[0]
	input_dict = {"AGE": age, "GENDER": gender, "RACE": race, "DIABETES_CLASS":diabetes_class, "AMPUTATION":''}
	
	input_df = pd.DataFrame([input_dict])
	
	# output 
	return str(predict(model=model, input_df=input_df)) # calls the predict function when 'submit' is clicked


title = "DIabetes-related Amputation Risk Calculator (DIARC)"

description = "A diabetes-related amputation machine learning model trained on the diabetes dataset from the Inkosi Albert Luthuli Central Hospital (IALCH) in Durban, KwaZulu-Natal, South Africa."

article = "<p style='text-align: center'><span style='font-size: 15pt;'>Copyright &copy; DIARC. 2021. All Rights Reserved. Contact Us: <a href='mailto:smtshali@wol.co.za'>Dr Sifiso Mtshali</a> or <a href='mailto:mahomedo@ukzn.ac.za'>Dr Ozayr Mahomed</a></span></p>"


iface = gr.Interface(
		fn=predict_amputation, 
		title=title, 
		description=description, 
		article=article,
		inputs=[gr.inputs.Slider(minimum=0,maximum=100, step=1, default=0, label="Age"), 
		        gr.inputs.Dropdown(["Female", "Male"], default="Female", label="Gender"), 
				gr.inputs.Dropdown(["Asian", "Black", "Coloured", "White", "Other"], default="Asian", label="Race"), 
				gr.inputs.Dropdown(["1", "2"], default="1", label="Diabetes Type")], 
		outputs="html",
		theme="grass",
		examples=[
			[77, "Female", "Asian", 2],
			[28, "Male", "Black", 1],
			[75, "Male", "White", 2],
			[59, "Male", "Coloured", 1],
			[73, "Female", "Other", 1],
			[4, "Female", "Black", 2],
			[65, "Male", "Coloured", 2],
		],
)


iface.test_launch()		
if __name__ == "__main__":
	iface.launch()