MalekCode03's picture
Update app.py
73b109e verified
# -*- coding: utf-8 -*-
"""LastwebSiteforAlzahimer.ipynb
Automatically generated by Colab.
Original file is located at
https://colab.research.google.com/drive/14idWYo0QCi5Bokd4Fhb6Apz8XdBPIa4b
"""
import gradio as gr
import numpy as np
sections = {
"Mediterranean Diet Assessment (Yes/No)": [
"1. Use olive oil as main cooking fat?",
"2. Eat more than or equal 2 servings of vegetables daily?",
"3. Eat more than or equal 3 servings of fruit daily?",
"4. Eat fish/seafood more than or equal 3 times/week?",
"5. Eat legumes more than or equal 2 times/week?",
"6. Eat nuts more than or equal 3 times/week?",
"7. Limit red/processed meats?",
"8. Choose whole grains?",
"9. Avoid sugary snacks/drinks?",
"10. Drink 6-8 glasses water/day?"
],
"Sleep Quality Assessment": [
"1. Trouble falling asleep more 30 mins?",
"2. Wake up more 1 time/night?",
"3. Restless/disturbed sleep?",
"4. Poor sleep quality?",
"5. Daytime fatigue?"
],
"Health Metrics": [
"Weight (kg)",
"Height (cm)",
"Diabetes?",
"Smoker?"
]
}
def calculate_total_score(*answers):
try:
# التحقق من المدخلات
if any(a is None for a in answers[:10]):
return "❌ Please answer all Mediterranean Diet questions.", 0
if any(a is None for a in answers[10:15]):
return "❌ Please answer all Sleep Quality questions.", 0
# حساب النتائج
med_diet = sum([1 if a == "Yes" else 0 for a in answers[0:10]])
sleep_score = sum([2 if a == "Yes" else 0 for a in answers[10:15]])
# معالجة النشاط البدني
vigorous_days, vigorous_hrs, vigorous_mins, \
moderate_days, moderate_hrs, moderate_mins, \
walk_days, walk_hrs, walk_mins, \
sitting_hrs, sitting_mins = [a or 0 for a in answers[15:26]]
vigorous = vigorous_days * (vigorous_hrs*60 + vigorous_mins)
moderate = moderate_days * (moderate_hrs*60 + moderate_mins)
walking = walk_days * (walk_hrs*60 + walk_mins)
met = (vigorous*8.0) + (moderate*4.0) + (walking*3.3)
activity = 0
if met >= 6000: activity = 10
elif met >= 3000: activity = 9
elif met >= 1500: activity = 7
elif met >= 600: activity = 5
elif met >= 100: activity = 3
# حساب الBMI
weight, height = answers[25:27]
bmi_score = 10 if (weight / ((height / 100) ** 2)) >= 30 else 0
# عوامل الخطر
diabetes, smoker = answers[27:29]
risk = 5*(diabetes == "Yes") + 5*(smoker == "Yes")
total_score = med_diet + sleep_score + activity + bmi_score + risk
final_score = int(round((total_score/50)*10))
# إنشاء التقرير
if final_score >= 7:
status_color = "#2ecc71"
status_title = "Low Alzheimer's Risk - Excellent"
status_icon = "🛡️"
elif final_score >= 4:
status_color = "#f1c40f"
status_title = "Moderate Risk - Needs Improvement"
status_icon = "⚠️"
else:
status_color = "#e74c3c"
status_title = "High Alzheimer's Risk - Take Action"
status_icon = "🚨"
# تحليل الفئات
categories = {
"Diet": {
"score": med_diet,
"max": 10,
"advice": {
"good": ["Maintain your healthy eating habits!", "Increase fish and olive oil consumption"],
"bad": ["Reduce red meat intake", "Choose whole grains over refined carbs"]
}
},
"Sleep": {
"score": sleep_score,
"max": 10,
"advice": {
"good": ["Maintain consistent sleep schedule"],
"bad": ["Avoid caffeine before bedtime", "Limit screen time before sleep"]
}
},
"Activity": {
"score": activity,
"max": 10,
"advice": {
"good": ["Great activity level! Keep it up!"],
"bad": ["Aim for 150 mins exercise/week", "Take walking breaks regularly"]
}
},
"Health": {
"score": 20 - (bmi_score + risk),
"max": 20,
"advice": {
"good": ["Maintain healthy weight"],
"bad": ["Monitor blood sugar levels", "Consider smoking cessation programs"]
}
}
}
category_cards = ""
for name, data in categories.items():
percent = (data['score']/data['max'])*100
color = "#2ecc71" if percent >= 60 else "#f1c40f" if percent >= 40 else "#e74c3c"
category_cards += f"""
<div style='background:white; padding:15px; border-radius:8px; margin-bottom:15px; box-shadow:0 2px 5px rgba(0,0,0,0.1);'>
<h3 style='margin:0 0 10px 0; color:{color};'>{name}</h3>
<div style='background:#eee; height:8px; border-radius:4px;'>
<div style='width:{percent}%; background:{color}; height:100%; border-radius:4px;'></div>
</div>
<ul style='padding-left:20px; margin:10px 0 0 0;'>
{''.join([f'<li>{tip}</li>' for tip in (data["advice"]["good"] if percent >= 60 else data["advice"]["bad"][:2])])}
</ul>
</div>
"""
report = f"""
<div style='padding:20px; border-radius:10px; background:#f8f9fa;'>
<h2 style='text-align:center; color:{status_color}; margin-bottom:20px;'>
{status_icon} {status_title}
</h2>
<div style='columns:2; gap:20px; margin-bottom:20px;'>
{category_cards}
</div>
<div style='background:#e8f5e9; padding:15px; border-radius:8px;'>
<h3 style='margin-top:0;'>General Recommendations:</h3>
<ul>
<li>Maintain regular physical activity</li>
<li>Follow a balanced Mediterranean diet</li>
<li>Ensure 7-8 hours of quality sleep</li>
<li>Monitor weight and blood sugar levels</li>
</ul>
</div>
</div>
"""
return report, final_score
except Exception as e:
error_html = f"""
<div style='color:white; background:#e74c3c; padding:15px; border-radius:8px; text-align:center;'>
<h3>❌ Calculation Error</h3>
<p>{str(e)}</p>
<p>Please verify all input values</p>
</div>
"""
return error_html, 0
# بناء الواجهة
with gr.Blocks(theme=gr.themes.Soft(), css="""
.full-width-image img { width:100% !important; height:auto; }
.section { border:1px solid #ddd; padding:15px; margin:10px 0; border-radius:8px; }
""") as demo:
diet_score_state = gr.State(value=0)
with gr.Tabs():
with gr.Tab("Alzheimer's on Health Assessment"):
gr.Image(value="Images/diet.jpg",
height=300,
container=False,
elem_classes="full-width-image")
gr.Markdown("""
<h1 style='text-align: center; color: #2E8B57;'>🧠 Alzheimer's Risk Assessment</h1>
<p style='text-align: center;'>Answer all questions honestly</p>
""")
inputs = []
# Mediterranean Diet
with gr.Group(elem_classes="section"):
gr.Markdown("### Mediterranean Diet (Yes/No)")
for q in sections["Mediterranean Diet Assessment (Yes/No)"]:
inputs.append(gr.Radio(["Yes", "No"], label=q))
# Sleep Quality
with gr.Group(elem_classes="section"):
gr.Markdown("### Sleep Quality Evaluation")
for q in sections["Sleep Quality Assessment"]:
inputs.append(gr.Radio(["Yes", "No"], label=q))
# Physical Activity - IPAQ
with gr.Group(elem_classes="section"):
gr.Markdown("### International Physical Activity Questionnaire (IPAQ – Short Form)")
gr.Markdown("**1. Vigorous Physical Activity**")
gr.Markdown("During the last 7 days, on how many days did you do vigorous physical activities (e.g., heavy lifting, aerobics, fast bicycling)?")
inputs.append(gr.Number(label="Days per week", precision=0, minimum=0, maximum=7))
inputs.append(gr.Number(label="Hours per day", precision=0, minimum=0))
inputs.append(gr.Number(label="Minutes per hour", precision=0, minimum=0, maximum=59))
gr.Markdown("**2. Moderate Physical Activity**")
gr.Markdown("During the last 7 days, on how many days did you do moderate physical activities (e.g., carrying light loads, cycling at regular pace, doubles tennis)?")
inputs.append(gr.Number(label="Days per week", precision=0, minimum=0, maximum=7))
inputs.append(gr.Number(label="Hours per day", precision=0, minimum=0))
inputs.append(gr.Number(label="Minutes per hour", precision=0, minimum=0, maximum=59))
gr.Markdown("**3. Walking**")
gr.Markdown("During the last 7 days, on how many days did you walk for at least 10 minutes at a time (including work, home, travel, and leisure)?")
inputs.append(gr.Number(label="Days per week", precision=0, minimum=0, maximum=7))
inputs.append(gr.Number(label="Hours per day", precision=0, minimum=0))
inputs.append(gr.Number(label="Minutes per hour", precision=0, minimum=0, maximum=59))
gr.Markdown("**4. Sitting Time**")
gr.Markdown("During the last 7 days, how much time did you spend sitting on a weekday?")
inputs.append(gr.Number(label="Hours per day", precision=0, minimum=0))
inputs.append(gr.Number(label="Minutes per hour", precision=0, minimum=0, maximum=59))
# Health Metrics
with gr.Group(elem_classes="section"):
gr.Markdown("### Health Indicators")
for q in sections["Health Metrics"]:
if q in ["Diabetes?", "Smoker?"]:
inputs.append(gr.Dropdown(["Yes", "No"], label=q))
else:
inputs.append(gr.Number(label=q, precision=1))
submit_btn = gr.Button("Generate Risk Report", variant="primary")
output = gr.HTML(label="Risk Assessment Report")
submit_btn.click(fn=calculate_total_score, inputs=inputs, outputs=[output, diet_score_state])
demo.launch(share=True)