IOT_ess / app.py
EngTig's picture
Update app.py
f7c72f1 verified
import gradio as gr
import numpy as np
import pandas as pd
from tensorflow import keras
from firebase import firebase
# إعداد 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:
print(f"Error loading models: {e}") # طباعة الخطأ لتصحيحه
exit() # إيقاف البرنامج إذا لم يتم تحميل النماذج
# دالة جلب مستوى السكر التالي
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"} # رسالة خطأ بتنسيق JSON
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, "غير معروف")
return {
"معدل_ضربات_القلب": heart_rate,
"نسبة_الأكسجين_في_الدم": spo2,
"درجة_الحرارة": Temperature,
"مستوى_السكر": sugar_level,
"معدل_التعرق": GSR,
"حالة_النوبات": seizure_result,
"حالة_السقوط": fall_result
}
except Exception as e:
return {"error": str(e)} # إرجاع خطأ بتنسيق JSON
# إنشاء Gradio UI
iface = gr.Interface(
fn=process_sensor_data,
inputs=[],
outputs="json", # هام: تحديد نوع الخرج ك JSON
title="نموذج الذكاء الاصطناعي للكشف عن النوبات والسقوط",
description="يتم جلب البيانات من Firebase وإجراء التنبؤات باستخدام نماذج الذكاء الاصطناعي."
)
# تشغيل التطبيق
iface.launch(server_name="0.0.0.0", server_port=7860, share=True)