File size: 4,874 Bytes
ae2d99d
 
a309717
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ae2d99d
a309717
 
 
 
 
 
 
ae2d99d
a309717
4200f54
a309717
 
 
 
 
 
 
4200f54
a309717
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ae2d99d
a309717
ae2d99d
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
import gradio as gr

def health_monitoring(bp_sys, bp_dia, temp, heart_rate, spo2):
    messages = []
    
    if bp_sys > 140 or bp_dia > 90:
        messages.append("⚠️ Umuvuduko w’amaraso uri hejuru cyane.")
    elif bp_sys < 90 or bp_dia < 60:
        messages.append("⚠️ Umuvuduko w’amaraso uri hasi cyane.")
    else:
        messages.append("✅ Umuvuduko w’amaraso uri mu rugero rwiza.")
    
    if temp > 38:
        messages.append("⚠️ Ubushyuhe bw’umubiri buri hejuru, hashobora kuba indwara.")
    elif temp < 36:
        messages.append("⚠️ Ubushyuhe bw’umubiri buri hasi cyane.")
    else:
        messages.append("✅ Ubushyuhe bw’umubiri buri mu rugero.")
    
    if heart_rate > 100:
        messages.append("⚠️ Umuvuduko w’imitima uri hejuru.")
    elif heart_rate < 60:
        messages.append("⚠️ Umuvuduko w’imitima uri hasi.")
    else:
        messages.append("✅ Umuvuduko w’imitima uri mu rugero rwiza.")
    
    if spo2 < 95:
        messages.append("⚠️ Oxygen saturation iri hasi, bishobora kuba ikibazo.")
    else:
        messages.append("✅ Oxygen saturation iri mu rugero rwiza.")
    
    alerts = [m for m in messages if m.startswith("⚠️")]
    if alerts:
        messages.append("\n⚠️ Inama: Gana muganga vuba.")
    else:
        messages.append("\n✅ Uruhare rwawe ni rwiza, komereza aho.")
    
    return "\n".join(messages)

def adjust_value(value, delta, min_val, max_val):
    new_val = value + delta
    if new_val < min_val:
        new_val = min_val
    if new_val > max_val:
        new_val = max_val
    return new_val

with gr.Blocks() as demo:
    gr.Markdown("## Healthcare Monitoring System ")
    
    bp_sys = gr.Slider(50, 200, step=1, label="Umuvuduko w'amaraso (Systolic)", value=120)
    bp_dia = gr.Slider(30, 130, step=1, label="Umuvuduko w'amaraso (Diastolic)", value=80)
    temp = gr.Slider(30.0, 42.0, step=0.1, label="Ubushyuhe bw'umubiri (°C)", value=36.5)
    heart_rate = gr.Slider(30, 150, step=1, label="Umuvuduko w'imitima (bpm)", value=75)
    spo2 = gr.Slider(70, 100, step=1, label="Oxygen Saturation (%)", value=98)
    
    output = gr.Textbox(label="Ibisubizo bya  viateur AI", lines=12)
    
    # Function to update all values and output after adjustments
    def update_all(bp_sys_val, bp_dia_val, temp_val, heart_rate_val, spo2_val):
        return health_monitoring(bp_sys_val, bp_dia_val, temp_val, heart_rate_val, spo2_val)
    
    # Buttons for bp_sys
    bp_sys_inc = gr.Button("+")
    bp_sys_dec = gr.Button("-")
    # Buttons for bp_dia
    bp_dia_inc = gr.Button("+")
    bp_dia_dec = gr.Button("-")
    # Buttons for temp
    temp_inc = gr.Button("+")
    temp_dec = gr.Button("-")
    # Buttons for heart_rate
    heart_rate_inc = gr.Button("+")
    heart_rate_dec = gr.Button("-")
    # Buttons for spo2
    spo2_inc = gr.Button("+")
    spo2_dec = gr.Button("-")
    
    # Layout
    with gr.Row():
        gr.Column([bp_sys, bp_sys_dec, bp_sys_inc])
        gr.Column([bp_dia, bp_dia_dec, bp_dia_inc])
    with gr.Row():
        gr.Column([temp, temp_dec, temp_inc])
        gr.Column([heart_rate, heart_rate_dec, heart_rate_inc])
        gr.Column([spo2, spo2_dec, spo2_inc])
    
    # Connect buttons to update sliders and output
    bp_sys_inc.click(
        lambda val: adjust_value(val, 1, 50, 200), bp_sys, bp_sys)
    bp_sys_dec.click(
        lambda val: adjust_value(val, -1, 50, 200), bp_sys, bp_sys)
    
    bp_dia_inc.click(
        lambda val: adjust_value(val, 1, 30, 130), bp_dia, bp_dia)
    bp_dia_dec.click(
        lambda val: adjust_value(val, -1, 30, 130), bp_dia, bp_dia)
    
    temp_inc.click(
        lambda val: adjust_value(val, 0.1, 30.0, 42.0), temp, temp)
    temp_dec.click(
        lambda val: adjust_value(val, -0.1, 30.0, 42.0), temp, temp)
    
    heart_rate_inc.click(
        lambda val: adjust_value(val, 1, 30, 150), heart_rate, heart_rate)
    heart_rate_dec.click(
        lambda val: adjust_value(val, -1, 30, 150), heart_rate, heart_rate)
    
    spo2_inc.click(
        lambda val: adjust_value(val, 1, 70, 100), spo2, spo2)
    spo2_dec.click(
        lambda val: adjust_value(val, -1, 70, 100), spo2, spo2)
    
    # When any slider changes, update output
    for slider in [bp_sys, bp_dia, temp, heart_rate, spo2]:
        slider.change(
            fn=update_all,
            inputs=[bp_sys, bp_dia, temp, heart_rate, spo2],
            outputs=output
        )
    
    # Also update output when buttons clicked by triggering slider change
    for slider in [bp_sys, bp_dia, temp, heart_rate, spo2]:
        slider.change(
            fn=update_all,
            inputs=[bp_sys, bp_dia, temp, heart_rate, spo2],
            outputs=output
        )
    
    # Show initial values result
    output.value = health_monitoring(120, 80, 36.5, 75, 98)

demo.launch()