|
|
import gradio as gr |
|
|
import numpy as np |
|
|
import pandas as pd |
|
|
from tensorflow import keras |
|
|
from firebase import 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"} |
|
|
|
|
|
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)} |
|
|
|
|
|
|
|
|
iface = gr.Interface( |
|
|
fn=process_sensor_data, |
|
|
inputs=[], |
|
|
outputs="json", |
|
|
title="نموذج الذكاء الاصطناعي للكشف عن النوبات والسقوط", |
|
|
description="يتم جلب البيانات من Firebase وإجراء التنبؤات باستخدام نماذج الذكاء الاصطناعي." |
|
|
) |
|
|
|
|
|
|
|
|
iface.launch(server_name="0.0.0.0", server_port=7860, share=True) |