import gradio as gr import pandas as pd import plotly.graph_objects as go import plotly.express as px from datetime import datetime, timedelta import json import os from chicken_ai import AdvancedChickenAI # إنشاء مثيل من نموذج الذكاء الاصطناعي ai = AdvancedChickenAI() # متغيرات عامة لتخزين البيانات production_data = [] health_records = [] feed_consumption = [] def format_diagnosis_results(results): """تنسيق نتائج التشخيص""" if not results: return "لم يتم العثور على تشخيص مطابق للأعراض المدخلة." output = "## 🔍 نتائج التشخيص\n\n" for i, result in enumerate(results, 1): confidence_percentage = result.probability * 100 confidence_emoji = "🔴" if confidence_percentage >= 80 else "🟡" if confidence_percentage >= 60 else "🟢" output += f"### {confidence_emoji} التشخيص {i}: {result.disease}\n" output += f"**نسبة الثقة:** {confidence_percentage:.1f}%\n" output += f"**الأعراض المطابقة:** {', '.join(result.symptoms_matched)}\n\n" output += f"**💊 العلاج:**\n{result.treatment}\n\n" output += f"**🛡️ الوقاية:**\n{result.prevention}\n\n" output += f"**🧼 النظافة:**\n{result.hygiene}\n\n" output += "---\n\n" return output def format_nutrition_plan(plan): """تنسيق خطة التغذية""" output = f"## 🍽️ خطة التغذية المخصصة\n\n" output += f"**العمر:** {plan.age_weeks} أسبوع\n" output += f"**نوع الدجاج:** {plan.chicken_type}\n" output += f"**الحالة:** {plan.condition}\n\n" output += f"### 📊 المتطلبات الغذائية:\n" output += f"- **البروتين:** {plan.protein_percentage}%\n" output += f"- **الطاقة:** {plan.energy_kcal} كيلو كالوري/كجم\n" output += f"- **الكمية اليومية:** {plan.daily_amount} جرام\n" output += f"- **عدد الوجبات:** {plan.feeding_frequency} وجبات يومياً\n\n" output += f"### 💊 المكملات الغذائية:\n" for supplement in plan.supplements: output += f"- {supplement}\n" output += f"\n### 🌱 العلائق البديلة المقترحة:\n" for feed in plan.alternative_feeds: output += f"- {feed}\n" return output def diagnose_disease_interface(symptoms): """واجهة تشخيص الأمراض""" if not symptoms.strip(): return "يرجى إدخال الأعراض أولاً." results = ai.diagnose_disease(symptoms) return format_diagnosis_results(results) def generate_nutrition_plan_interface(age, chicken_type, condition): """واجهة توليد خطة التغذية""" try: age_weeks = int(age) plan = ai.generate_nutrition_plan(age_weeks, chicken_type, condition) return format_nutrition_plan(plan) except ValueError: return "يرجى إدخال عمر صحيح بالأسابيع." def answer_question_interface(question): """واجهة الأسئلة والأجوبة""" if not question.strip(): return "يرجى كتابة سؤالك أولاً." answer = ai.answer_general_question(question) return f"## 💬 الإجابة:\n\n{answer}" def get_daily_tips_interface(): """واجهة النصائح اليومية""" tips = ai.get_daily_tips() output = "## 📝 نصائح يومية لتربية الدجاج\n\n" for i, tip in enumerate(tips, 1): output += f"{i}. {tip}\n\n" return output def get_breed_info_interface(breed_name): """واجهة معلومات السلالات""" if not breed_name.strip(): return "يرجى اختيار سلالة من القائمة." breed_info = ai.get_breed_info(breed_name) if not breed_info: return f"لم يتم العثور على معلومات عن سلالة {breed_name}." output = f"## 🐔 معلومات سلالة {breed_name}\n\n" output += f"**النوع:** {breed_info['type']}\n" if 'egg_production' in breed_info: output += f"**إنتاج البيض:** {breed_info['egg_production']}\n" output += f"**لون البيض:** {breed_info['egg_color']}\n" if 'growth_rate' in breed_info: output += f"**معدل النمو:** {breed_info['growth_rate']}\n" output += f"**الخصائص:** {breed_info['characteristics']}\n" output += f"**المناعة:** {breed_info['immunity']}\n" return output def add_production_record(date, eggs_count, feed_consumed, notes): """إضافة سجل إنتاج""" global production_data try: record = { "date": date, "eggs": int(eggs_count) if eggs_count else 0, "feed": float(feed_consumed) if feed_consumed else 0.0, "notes": notes or "" } production_data.append(record) # حفظ البيانات في ملف with open('/home/ubuntu/chicken_assistant/production_data.json', 'w', encoding='utf-8') as f: json.dump(production_data, f, ensure_ascii=False, indent=2) return f"✅ تم إضافة السجل بنجاح!\nالتاريخ: {date}\nعدد البيض: {record['eggs']}\nالعلف المستهلك: {record['feed']} كجم" except ValueError: return "❌ خطأ في البيانات المدخلة. يرجى التأكد من صحة الأرقام." def generate_production_chart(): """إنشاء مخطط الإنتاج""" if not production_data: return None df = pd.DataFrame(production_data) df['date'] = pd.to_datetime(df['date']) df = df.sort_values('date') # مخطط إنتاج البيض fig = go.Figure() fig.add_trace(go.Scatter( x=df['date'], y=df['eggs'], mode='lines+markers', name='إنتاج البيض', line=dict(color='#FF6B6B', width=3), marker=dict(size=8) )) fig.update_layout( title='📈 تطور إنتاج البيض', xaxis_title='التاريخ', yaxis_title='عدد البيض', font=dict(family="Arial", size=12), plot_bgcolor='white', paper_bgcolor='white', showlegend=True ) return fig def generate_feed_consumption_chart(): """إنشاء مخطط استهلاك العلف""" if not production_data: return None df = pd.DataFrame(production_data) df['date'] = pd.to_datetime(df['date']) df = df.sort_values('date') fig = go.Figure() fig.add_trace(go.Bar( x=df['date'], y=df['feed'], name='استهلاك العلف', marker_color='#4ECDC4' )) fig.update_layout( title='📊 استهلاك العلف اليومي', xaxis_title='التاريخ', yaxis_title='الكمية (كجم)', font=dict(family="Arial", size=12), plot_bgcolor='white', paper_bgcolor='white' ) return fig def load_existing_data(): """تحميل البيانات الموجودة""" global production_data try: if os.path.exists('/home/ubuntu/chicken_assistant/production_data.json'): with open('/home/ubuntu/chicken_assistant/production_data.json', 'r', encoding='utf-8') as f: production_data = json.load(f) except: production_data = [] # تحميل البيانات عند بدء التطبيق load_existing_data() # إنشاء الواجهة الرئيسية with gr.Blocks( title="🐔 مساعد تربية الدجاج الذكي", theme=gr.themes.Soft( primary_hue="emerald", secondary_hue="blue", neutral_hue="slate", font=[gr.themes.GoogleFont("Cairo"), "Arial", "sans-serif"] ), css=""" .gradio-container { max-width: 1200px !important; margin: auto !important; } .main-header { text-align: center; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; padding: 2rem; border-radius: 15px; margin-bottom: 2rem; box-shadow: 0 10px 30px rgba(0,0,0,0.1); } .feature-card { background: white; border-radius: 12px; padding: 1.5rem; box-shadow: 0 4px 15px rgba(0,0,0,0.1); border: 1px solid #e2e8f0; transition: transform 0.3s ease; } .feature-card:hover { transform: translateY(-5px); box-shadow: 0 8px 25px rgba(0,0,0,0.15); } .tab-nav { background: #f8fafc; border-radius: 10px; padding: 0.5rem; } .metric-card { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; padding: 1rem; border-radius: 10px; text-align: center; margin: 0.5rem; } """ ) as app: # العنوان الرئيسي gr.HTML("""

🐔 مساعد تربية الدجاج الذكي

نظام متطور لإدارة ومراقبة تربية الدجاج مع ذكاء اصطناعي متقدم

""") # التبويبات الرئيسية with gr.Tabs(elem_classes="tab-nav") as tabs: # تبويب التشخيص with gr.Tab("🔍 تشخيص الأمراض", elem_id="diagnosis-tab"): gr.HTML("
") gr.Markdown("### 🩺 نظام التشخيص الذكي") gr.Markdown("أدخل الأعراض التي تلاحظها على الدجاج وسيقوم النظام بتحليلها وتقديم التشخيص المحتمل مع العلاج المناسب.") with gr.Row(): with gr.Column(scale=2): symptoms_input = gr.Textbox( label="الأعراض الملاحظة", placeholder="مثال: خمول، فقدان شهية، إسهال أخضر، صعوبة في التنفس", lines=3, info="اكتب الأعراض مفصولة بفواصل" ) diagnose_btn = gr.Button("🔍 تشخيص المرض", variant="primary", size="lg") with gr.Column(scale=3): diagnosis_output = gr.Markdown(label="نتائج التشخيص") gr.HTML("
") # تبويب التغذية with gr.Tab("🍽️ خطط التغذية", elem_id="nutrition-tab"): gr.HTML("
") gr.Markdown("### 🌾 مولد خطط التغذية المتقدم") gr.Markdown("احصل على خطة تغذية مخصصة تتضمن العلائق البديلة والمكملات الغذائية المناسبة.") with gr.Row(): with gr.Column(): age_input = gr.Number( label="العمر بالأسابيع", value=10, minimum=1, maximum=100 ) chicken_type = gr.Dropdown( label="نوع الدجاج", choices=["بياض", "لاحم", "مختلط"], value="بياض" ) condition = gr.Dropdown( label="الحالة الصحية", choices=["صحي", "مريض", "نقاهة"], value="صحي" ) nutrition_btn = gr.Button("🍽️ إنشاء خطة التغذية", variant="primary", size="lg") with gr.Column(scale=2): nutrition_output = gr.Markdown(label="خطة التغذية") gr.HTML("
") # تبويب الاستشارات with gr.Tab("💬 استشارات عامة", elem_id="consultation-tab"): gr.HTML("
") gr.Markdown("### 🤖 مساعد الاستشارات الذكي") gr.Markdown("اطرح أي سؤال حول تربية الدجاج واحصل على إجابة مفصلة من خبير الذكاء الاصطناعي.") with gr.Row(): with gr.Column(scale=2): question_input = gr.Textbox( label="سؤالك", placeholder="مثال: كيف أزيد من إنتاج البيض؟ أو ما هي أفضل طريقة لتنظيف الحظيرة؟", lines=3 ) ask_btn = gr.Button("💬 اسأل الخبير", variant="primary", size="lg") with gr.Column(scale=3): answer_output = gr.Markdown(label="الإجابة") gr.HTML("
") # تبويب السلالات with gr.Tab("🐔 معلومات السلالات", elem_id="breeds-tab"): gr.HTML("
") gr.Markdown("### 📚 دليل سلالات الدجاج") gr.Markdown("تعرف على خصائص وإنتاجية السلالات المختلفة لاختيار الأنسب لمشروعك.") with gr.Row(): with gr.Column(): breed_selector = gr.Dropdown( label="اختر السلالة", choices=list(ai.breeds_db.keys()), value="ليجهورن" ) breed_info_btn = gr.Button("📖 عرض المعلومات", variant="primary", size="lg") with gr.Column(scale=2): breed_info_output = gr.Markdown(label="معلومات السلالة") gr.HTML("
") # تبويب النصائح with gr.Tab("📝 نصائح يومية", elem_id="tips-tab"): gr.HTML("
") gr.Markdown("### 💡 نصائح الخبراء") gr.Markdown("احصل على نصائح يومية مفيدة لتحسين إدارة مزرعتك وزيادة الإنتاجية.") with gr.Row(): with gr.Column(): tips_btn = gr.Button("📝 احصل على نصائح جديدة", variant="primary", size="lg") with gr.Column(scale=2): tips_output = gr.Markdown(label="النصائح اليومية") gr.HTML("
") # تبويب لوحة التحكم with gr.Tab("📊 لوحة التحكم", elem_id="dashboard-tab"): gr.HTML("
") gr.Markdown("### 📈 إدارة الإنتاج والمراقبة") gr.Markdown("سجل بيانات الإنتاج اليومية وراقب الأداء من خلال المخططات التفاعلية.") # قسم إدخال البيانات with gr.Row(): with gr.Column(): gr.Markdown("#### ➕ إضافة سجل جديد") record_date = gr.Textbox(label="التاريخ", value=datetime.now().strftime("%Y-%m-%d"), placeholder="YYYY-MM-DD") eggs_count = gr.Number(label="عدد البيض", value=0, minimum=0) feed_consumed = gr.Number(label="العلف المستهلك (كجم)", value=0.0, minimum=0, step=0.1) notes = gr.Textbox(label="ملاحظات", placeholder="أي ملاحظات إضافية...") add_record_btn = gr.Button("➕ إضافة السجل", variant="primary") record_status = gr.Markdown() with gr.Column(): gr.Markdown("#### 📊 إحصائيات سريعة") if production_data: total_eggs = sum(record.get('eggs', 0) for record in production_data) total_feed = sum(record.get('feed', 0) for record in production_data) avg_eggs = total_eggs / len(production_data) if production_data else 0 gr.HTML(f"""

🥚 إجمالي البيض

{total_eggs}

🌾 إجمالي العلف

{total_feed:.1f} كجم

📈 متوسط البيض

{avg_eggs:.1f}/يوم

📅 عدد السجلات

{len(production_data)}

""") # قسم المخططات with gr.Row(): with gr.Column(): production_chart = gr.Plot(label="📈 مخطط إنتاج البيض") with gr.Column(): feed_chart = gr.Plot(label="📊 مخطط استهلاك العلف") # تحديث المخططات عند بدء التطبيق app.load( fn=lambda: (generate_production_chart(), generate_feed_consumption_chart()), outputs=[production_chart, feed_chart] ) gr.HTML("
") # ربط الأحداث diagnose_btn.click( fn=diagnose_disease_interface, inputs=[symptoms_input], outputs=[diagnosis_output] ) nutrition_btn.click( fn=generate_nutrition_plan_interface, inputs=[age_input, chicken_type, condition], outputs=[nutrition_output] ) ask_btn.click( fn=answer_question_interface, inputs=[question_input], outputs=[answer_output] ) breed_info_btn.click( fn=get_breed_info_interface, inputs=[breed_selector], outputs=[breed_info_output] ) tips_btn.click( fn=get_daily_tips_interface, outputs=[tips_output] ) add_record_btn.click( fn=add_production_record, inputs=[record_date, eggs_count, feed_consumed, notes], outputs=[record_status] ).then( fn=lambda: (generate_production_chart(), generate_feed_consumption_chart()), outputs=[production_chart, feed_chart] ) # تحميل النصائح عند بدء التطبيق app.load(fn=get_daily_tips_interface, outputs=[tips_output]) # تشغيل التطبيق if __name__ == "__main__": app.launch( server_name="0.0.0.0", server_port=7860, share=False, show_error=True, quiet=False )