File size: 3,916 Bytes
3e1bd64
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
89b94f5
3e1bd64
 
 
 
 
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
import streamlit as st
import numpy as np
import pandas as pd
from tensorflow import keras
from firebase import firebase
import json  # لاستخدام json.dumps لتحويل البيانات إلى JSON

# إعداد Firebase (ضع بياناتك هنا)
config = {
    'apiKey': "AIzaSyDZCCMjd003FcPDRcik5jCHCEQL56pkeFY",
    'authDomain': "jsonfile-esp32-mohiot.firebaseapp.com",
    'databaseURL': "https://jsonfile-esp32-mohiot-default-rtdb.europe-west1.firebasedatabase.app",
    'projectId': "jsonfile-esp32-mohiot",
    'storageBucket': "jsonfile-esp32-mohiot.firebasestorage.app",
    'messagingSenderId': "710233105459",
    'appId': "1:710233105459:web:6a5dd9b611e6f558c36f46"
}
firebase = firebase.FirebaseApplication(config['databaseURL'], None)

# تحميل بيانات السكر
csv_data = pd.read_csv('sugar_level.csv')
sugar_levels = csv_data['Sugar level']
current_csv_index = 0

# تحميل النماذج
try:
    Seizure_Detection_model = keras.models.load_model("seizure_detection.h5", compile=False)
    Seizure_Detection_model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
    Fall_Detection_model = keras.models.load_model("Fall_Detection.h5", compile=False)
    Fall_Detection_model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
except Exception as e:
    st.error(f"Error loading models: {e}")  # عرض الخطأ في Streamlit
    st.stop()  # إيقاف التطبيق في حالة وجود خطأ

# دالة جلب مستوى السكر التالي
def get_next_sugar_level():
    global current_csv_index
    if current_csv_index >= len(sugar_levels):
        return sugar_levels.iloc[-1]
    value = sugar_levels.iloc[current_csv_index]
    current_csv_index += 1
    return value

# دالة التنبؤ
def process_sensor_data():
    try:
        data = firebase.get('/sensors', None)
        if not data:
            return {"message": "لم يتم استقبال بيانات من Firebase"}

        heart_rate = data.get('MAX30102', 88)
        spo2 = data.get('MAX30102', 98)
        Temperature = data.get('MAX30205', 37)
        Distance = data.get('VL53L0X', 100)
        sugar_level = get_next_sugar_level()
        GSR = data.get('GSR', 0)

        # التنبؤ بالنوبات
        X_test_seizure = np.array([[heart_rate, Temperature, spo2]])
        seizure_prediction = Seizure_Detection_model.predict(X_test_seizure)
        seizure_result = "يوجد نوبة" if seizure_prediction[0][0] > 0.5 else "لا يوجد نوبة"

        # التنبؤ بالسقوط
        X_test_fall = np.array([[Distance, heart_rate, sugar_level, spo2]])
        fall_prediction = Fall_Detection_model.predict(X_test_fall)
        fall_class = np.argmax(fall_prediction, axis=1)[0]
        fall_result = {0: "لا يوجد سقوط", 1: "احتمال سقوط", 2: "تم السقوط"}.get(fall_class, "غير معروف")

        results = {
            "معدل_ضربات_القلب": heart_rate,
            "نسبة_الأكسجين_في_الدم": spo2,
            "درجة_الحرارة": Temperature,
            "مستوى_السكر": sugar_level,
            "معدل_التعرق": GSR,
            "حالة_النوبات": seizure_result,
            "حالة_السقوط": fall_result
        }
        return json.dumps(results, ensure_ascii=False)  # تحويل النتائج إلى JSON باستخدام json.dumps

    except Exception as e:
        return {"error": str(e)}

# إنشاء Streamlit UI
st.title("نموذج الذكاء الاصطناعي للكشف عن النوبات والسقوط")
st.write("والقياسات الحيوية")

if st.button("تشغيل التنبؤ"):
    with st.spinner("جاري معالجة البيانات..."):
        result = process_sensor_data()
        st.write(result)  # عرض نتائج JSON في Streamlit