MaxJalo commited on
Commit
bcf5195
·
verified ·
1 Parent(s): d6f03f8

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +95 -0
app.py ADDED
@@ -0,0 +1,95 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from huggingface_hub import hf_hub_download
2
+ import gradio as gr
3
+ import pandas as pd
4
+ import tensorflow as tf
5
+ import numpy as np
6
+ from dateutil.utils import today
7
+ from datasets import load_dataset
8
+
9
+ model_path = hf_hub_download(repo_id="MaxJalo/CardioAI", filename="cardioai_model.keras")
10
+ model = tf.keras.models.load_model(model_path)
11
+
12
+ heart = load_dataset("MaxJalo/CardioAI", split = 'train')
13
+ data = pd.DataFrame(heart, columns=["age","gender","height","weight","ap_hi","ap_lo","cholesterol","gluc","smoke","alco","active",'cardio'])
14
+ X_for_train = data.drop(['cardio'], axis=1).values
15
+ X_min = np.min(X_for_train, axis=0)
16
+ X_max = np.max(X_for_train, axis=0)
17
+
18
+ def webai(user_input):
19
+ user_input_clear = user_input
20
+ input_data = [user_input_clear]
21
+ input_data_scaled = (input_data - X_min) / (X_max - X_min)
22
+
23
+ # Получаем предсказание от модели
24
+ predicted_result_scaled = model.predict(input_data_scaled)
25
+ otv = round(predicted_result_scaled[0][0] * 100, 2)
26
+ if otv < 0:
27
+ otv = 0
28
+ elif otv > 100:
29
+ otv = 100
30
+ chans = ''
31
+ if otv >=0 and otv < 30:
32
+ chans = "Низкий"
33
+ elif otv >=30 and otv <50:
34
+ chans = "Средний"
35
+ elif otv >=50 and otv <70:
36
+ chans = "Высокий, обратитесь к кардиологу"
37
+ else:
38
+ chans = "Крайне высокий, обязательно обратитесь к кардиологу"
39
+
40
+ return f'Вероятность заболевания: {otv}. Шанс вашего заболевания: ' + chans
41
+
42
+
43
+ def pomoch(age, gender, height, weight, ap_hi, ap_lo, cholesterol, gluc, smoke, alco, active):
44
+ try:
45
+ X = [int(age), gender, int(height), int(weight), int(ap_hi), int(ap_lo), float(cholesterol), float(gluc), smoke,
46
+ alco, active]
47
+ X[0] = today().year - X[0]
48
+ if X[1] == "Мужской":
49
+ X[1] = 0
50
+ else:
51
+ X[1] = 1
52
+ for i in range(8, 11):
53
+ if X[i] == "Да":
54
+ X[i] = 1
55
+ else:
56
+ X[i] = 0
57
+ if X[6] <= 5:
58
+ X[6] = 1
59
+ else:
60
+ if X[6] >= 7.8:
61
+ X[6] = 3
62
+ else:
63
+ X[6] = 2
64
+
65
+ if X[7] <= 5.5 and X[7] >= 3.3:
66
+ X[7] = 1
67
+ else:
68
+ if (X[7] > 5.5 and X[7] < 11) or X[7] < 3.3:
69
+ X[7] = 2
70
+ else:
71
+ X[7] = 3
72
+ return webai(X)
73
+ except ValueError:
74
+ return "Пожалуйста, убедитесь, что все значения числовые."
75
+
76
+
77
+
78
+ demo = gr.Interface(
79
+ pomoch,
80
+ [
81
+ gr.Slider(1900, 2010, value=1990, step=1, label="Год рождения"),
82
+ gr.Radio(["Мужской", "Женский"], label="Пол", ),
83
+ gr.Textbox(label="Рост(см)"),
84
+ gr.Textbox(label="Вес(кг)"),
85
+ gr.Textbox(label="Верхнее Давление"),
86
+ gr.Textbox(label="Нижнее Давление"),
87
+ gr.Textbox(label="Холестерин(ммоль/л)"),
88
+ gr.Textbox(label="Глюкоза(ммоль/л)", ),
89
+ gr.Radio(["Да", "Нет"], label="Курение", ),
90
+ gr.Radio(["Да", "Нет"], label="Алкоголь", ),
91
+ gr.Radio(["Да", "Нет"], label="Активность", ),
92
+ ],
93
+ 'text')
94
+
95
+ demo.launch()