Upload 8 files
Browse files- DEPLOYMENT_GUIDE.md +224 -0
- README.md +202 -92
- admin_panel.py +499 -0
- app.py +414 -179
- chicken_ai.py +398 -242
- requirements.txt +4 -0
DEPLOYMENT_GUIDE.md
ADDED
|
@@ -0,0 +1,224 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# 🚀 دليل النشر على Hugging Face Spaces
|
| 2 |
+
|
| 3 |
+
## 📋 المتطلبات الأساسية
|
| 4 |
+
|
| 5 |
+
### 1. حساب Hugging Face
|
| 6 |
+
- إنشاء حساب على [huggingface.co](https://huggingface.co/)
|
| 7 |
+
- التحقق من البريد الإلكتروني
|
| 8 |
+
- إعداد الملف الشخصي
|
| 9 |
+
|
| 10 |
+
### 2. إعداد Git (اختياري)
|
| 11 |
+
```bash
|
| 12 |
+
git config --global user.name "اسمك"
|
| 13 |
+
git config --global user.email "بريدك@example.com"
|
| 14 |
+
```
|
| 15 |
+
|
| 16 |
+
## 🔧 خطوات النشر
|
| 17 |
+
|
| 18 |
+
### الطريقة الأولى: رفع الملفات مباشرة
|
| 19 |
+
|
| 20 |
+
1. **إنشاء Space جديد**
|
| 21 |
+
- اذهب إلى [huggingface.co/new-space](https://huggingface.co/new-space)
|
| 22 |
+
- اختر اسماً مناسباً: `chicken-assistant-arabic`
|
| 23 |
+
- اختر License: `MIT`
|
| 24 |
+
- اختر SDK: `Gradio`
|
| 25 |
+
- اختر Hardware: `CPU basic` (مجاني)
|
| 26 |
+
|
| 27 |
+
2. **رفع الملفات**
|
| 28 |
+
- اضغط على "Files" في الصفحة الرئيسية للـ Space
|
| 29 |
+
- اضغط "Add file" → "Upload files"
|
| 30 |
+
- ارفع جميع الملفات التالية:
|
| 31 |
+
```
|
| 32 |
+
app.py
|
| 33 |
+
chicken_ai.py
|
| 34 |
+
admin_panel.py (اختياري)
|
| 35 |
+
requirements.txt
|
| 36 |
+
README.md
|
| 37 |
+
LICENSE
|
| 38 |
+
data/
|
| 39 |
+
├── diseases.md
|
| 40 |
+
├── nutrition.md
|
| 41 |
+
├── daily_tips.md
|
| 42 |
+
├── chicken_breeds.md
|
| 43 |
+
└── prevention_treatment_general.md
|
| 44 |
+
```
|
| 45 |
+
|
| 46 |
+
3. **إعداد ملف التكوين**
|
| 47 |
+
- أنشئ ملف `app.py` في الجذر (موجود بالفعل)
|
| 48 |
+
- تأكد من أن الملف يحتوي على:
|
| 49 |
+
```python
|
| 50 |
+
if __name__ == "__main__":
|
| 51 |
+
app.launch()
|
| 52 |
+
```
|
| 53 |
+
|
| 54 |
+
### الطريقة الثانية: استخدام Git
|
| 55 |
+
|
| 56 |
+
1. **استنساخ المستودع**
|
| 57 |
+
```bash
|
| 58 |
+
git clone https://huggingface.co/spaces/YOUR_USERNAME/chicken-assistant-arabic
|
| 59 |
+
cd chicken-assistant-arabic
|
| 60 |
+
```
|
| 61 |
+
|
| 62 |
+
2. **نسخ الملفات**
|
| 63 |
+
```bash
|
| 64 |
+
cp -r /path/to/chicken_assistant/* .
|
| 65 |
+
```
|
| 66 |
+
|
| 67 |
+
3. **رفع التغييرات**
|
| 68 |
+
```bash
|
| 69 |
+
git add .
|
| 70 |
+
git commit -m "Initial commit: Arabic Chicken Assistant"
|
| 71 |
+
git push
|
| 72 |
+
```
|
| 73 |
+
|
| 74 |
+
## ⚙️ إعدادات متقدمة
|
| 75 |
+
|
| 76 |
+
### 1. متغيرات البيئة
|
| 77 |
+
إذا كنت تستخدم APIs خارجية، أضف متغيرات البيئة في إعدادات الـ Space:
|
| 78 |
+
```
|
| 79 |
+
OPENAI_API_KEY=your_key_here
|
| 80 |
+
CUSTOM_CONFIG=production
|
| 81 |
+
```
|
| 82 |
+
|
| 83 |
+
### 2. إعدادات الأجهزة
|
| 84 |
+
- **CPU Basic**: مجاني، مناسب للاستخدام العادي
|
| 85 |
+
- **CPU Upgrade**: مدفوع، أداء أفضل
|
| 86 |
+
- **GPU**: للمشاريع التي تتطلب معالجة مكثفة
|
| 87 |
+
|
| 88 |
+
### 3. إعدادات الخصوصية
|
| 89 |
+
- **Public**: متاح للجميع
|
| 90 |
+
- **Private**: متاح لك فقط (يتطلب اشتراك مدفوع)
|
| 91 |
+
|
| 92 |
+
## 📁 هيكل الملفات المطلوب
|
| 93 |
+
|
| 94 |
+
```
|
| 95 |
+
chicken-assistant-arabic/
|
| 96 |
+
├── app.py # الملف الرئيسي
|
| 97 |
+
├── chicken_ai.py # نموذج الذكاء الاصطناعي
|
| 98 |
+
├── admin_panel.py # لوحة الإدارة (اختياري)
|
| 99 |
+
├── requirements.txt # المتطلبات
|
| 100 |
+
├── README.md # التوثيق
|
| 101 |
+
├── LICENSE # الترخيص
|
| 102 |
+
├── .gitignore # ملفات Git المتجاهلة
|
| 103 |
+
└── data/ # قاعدة البيانات
|
| 104 |
+
├── diseases.md
|
| 105 |
+
├── nutrition.md
|
| 106 |
+
├── daily_tips.md
|
| 107 |
+
├── chicken_breeds.md
|
| 108 |
+
└── prevention_treatment_general.md
|
| 109 |
+
```
|
| 110 |
+
|
| 111 |
+
## 🔍 اختبار النشر
|
| 112 |
+
|
| 113 |
+
### 1. اختبار محلي
|
| 114 |
+
```bash
|
| 115 |
+
# تشغيل التطبيق محلياً
|
| 116 |
+
python app.py
|
| 117 |
+
|
| 118 |
+
# فتح المتصفح على
|
| 119 |
+
http://localhost:7860
|
| 120 |
+
```
|
| 121 |
+
|
| 122 |
+
### 2. اختبار على Hugging Face
|
| 123 |
+
- انتظر حتى يكتمل البناء (Build)
|
| 124 |
+
- اضغط على رابط التطبيق
|
| 125 |
+
- اختبر جميع الوظائف
|
| 126 |
+
|
| 127 |
+
## 🐛 حل المشاكل الشائعة
|
| 128 |
+
|
| 129 |
+
### 1. خطأ في المتطلبات
|
| 130 |
+
```bash
|
| 131 |
+
# تأكد من صحة requirements.txt
|
| 132 |
+
pip install -r requirements.txt
|
| 133 |
+
```
|
| 134 |
+
|
| 135 |
+
### 2. خطأ في الترميز
|
| 136 |
+
```python
|
| 137 |
+
# أضف في بداية الملفات Python
|
| 138 |
+
# -*- coding: utf-8 -*-
|
| 139 |
+
```
|
| 140 |
+
|
| 141 |
+
### 3. مشاكل الذاكرة
|
| 142 |
+
- قلل من حجم قاعدة البيانات
|
| 143 |
+
- استخدم lazy loading للبيانات الكبيرة
|
| 144 |
+
- فكر في ترقية الأجهزة
|
| 145 |
+
|
| 146 |
+
### 4. مشاكل الأداء
|
| 147 |
+
```python
|
| 148 |
+
# استخدم caching للبيانات المتكررة
|
| 149 |
+
import functools
|
| 150 |
+
|
| 151 |
+
@functools.lru_cache(maxsize=128)
|
| 152 |
+
def expensive_function():
|
| 153 |
+
pass
|
| 154 |
+
```
|
| 155 |
+
|
| 156 |
+
## 🔧 تحسينات الأداء
|
| 157 |
+
|
| 158 |
+
### 1. تحسين التحميل
|
| 159 |
+
```python
|
| 160 |
+
# تحميل البيانات مرة واحدة عند البدء
|
| 161 |
+
@gr.cache
|
| 162 |
+
def load_data():
|
| 163 |
+
return data
|
| 164 |
+
```
|
| 165 |
+
|
| 166 |
+
### 2. ضغط الملفات
|
| 167 |
+
```bash
|
| 168 |
+
# ضغط الصور والملفات الكبيرة
|
| 169 |
+
gzip large_file.json
|
| 170 |
+
```
|
| 171 |
+
|
| 172 |
+
### 3. تحسين الذاكرة
|
| 173 |
+
```python
|
| 174 |
+
# استخدام generators بدلاً من lists
|
| 175 |
+
def get_data():
|
| 176 |
+
for item in large_dataset:
|
| 177 |
+
yield item
|
| 178 |
+
```
|
| 179 |
+
|
| 180 |
+
## 📊 مراقبة الأداء
|
| 181 |
+
|
| 182 |
+
### 1. إحصائيات الاستخدام
|
| 183 |
+
- راقب عدد المستخدمين من لوحة تحكم Hugging Face
|
| 184 |
+
- تتبع الأخطاء والمشاكل
|
| 185 |
+
|
| 186 |
+
### 2. تحديث التطبيق
|
| 187 |
+
```bash
|
| 188 |
+
# تحديث الكود
|
| 189 |
+
git pull origin main
|
| 190 |
+
git add .
|
| 191 |
+
git commit -m "Update: new features"
|
| 192 |
+
git push
|
| 193 |
+
```
|
| 194 |
+
|
| 195 |
+
## 🔒 الأمان والخصوصية
|
| 196 |
+
|
| 197 |
+
### 1. حماية البيانات الحساسة
|
| 198 |
+
- لا تضع مفاتيح API في الكود
|
| 199 |
+
- استخدم متغيرات البيئة
|
| 200 |
+
- راجع الملفات قبل الرفع
|
| 201 |
+
|
| 202 |
+
### 2. إعدادات الخصوصية
|
| 203 |
+
```python
|
| 204 |
+
# تعطيل التحليلات إذا لزم الأمر
|
| 205 |
+
app.launch(analytics_enabled=False)
|
| 206 |
+
```
|
| 207 |
+
|
| 208 |
+
## 📞 الدعم والمساعدة
|
| 209 |
+
|
| 210 |
+
### موارد مفيدة
|
| 211 |
+
- [توثيق Hugging Face Spaces](https://huggingface.co/docs/hub/spaces)
|
| 212 |
+
- [توثيق Gradio](https://gradio.app/docs/)
|
| 213 |
+
- [مجتمع Hugging Face](https://discuss.huggingface.co/)
|
| 214 |
+
|
| 215 |
+
### في حالة المشاكل
|
| 216 |
+
1. راجع logs البناء في Hugging Face
|
| 217 |
+
2. اختبر التطبيق محلياً أولاً
|
| 218 |
+
3. اطلب المساعدة في المجتمع
|
| 219 |
+
4. راسل فريق الدعم إذا لزم الأمر
|
| 220 |
+
|
| 221 |
+
---
|
| 222 |
+
|
| 223 |
+
**ملاحظة**: هذا الدليل يفترض استخدام الحساب المجاني. للميزات المتقدمة، قد تحتاج لاشتراك مدفوع.
|
| 224 |
+
|
README.md
CHANGED
|
@@ -1,108 +1,218 @@
|
|
| 1 |
-
-
|
| 2 |
-
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
sdk: gradio
|
| 7 |
-
sdk_version: 5.38.0
|
| 8 |
-
app_file: app.py
|
| 9 |
-
pinned: false
|
| 10 |
-
license: mit
|
| 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 |
## 🤝 المساهمة
|
| 91 |
|
| 92 |
-
نرحب بمساهماتكم لت
|
| 93 |
-
|
| 94 |
-
|
| 95 |
-
|
| 96 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 97 |
|
| 98 |
## 📄 الترخيص
|
| 99 |
|
| 100 |
-
هذا المشروع مرخص تحت رخصة MIT -
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 101 |
|
| 102 |
-
##
|
| 103 |
|
| 104 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 105 |
|
| 106 |
---
|
| 107 |
|
| 108 |
-
**م
|
|
|
|
|
|
|
|
|
| 1 |
+
# 🐔 مساعد تربية الدجاج الذكي - الإصدار المتقدم
|
| 2 |
+
|
| 3 |
+
[](https://gradio.app/)
|
| 4 |
+
[](https://python.org/)
|
| 5 |
+
[](LICENSE)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 6 |
|
| 7 |
+
## 🌟 نظرة عامة
|
| 8 |
|
| 9 |
+
مساعد تربية الدجاج الذكي هو نظام متطور يستخدم الذكاء الاصطناعي لمساعدة مربي الدجاج الصغار والمتوسطين على تحسين إنتاجهم ورعاية دجاجهم بطريقة علمية ومدروسة. يوفر النظام تشخيصاً دقيقاً للأمراض، خطط تغذية مخصصة، استشارات فورية، ولوحة تحكم شاملة لإدارة المزرعة.
|
| 10 |
|
| 11 |
## ✨ الميزات الرئيسية
|
| 12 |
|
| 13 |
+
### 🔍 تشخيص الأمراض المتقدم
|
| 14 |
+
- **تشخيص ذكي**: تحليل الأعراض باستخدام خوارزميات متطورة
|
| 15 |
+
- **دقة عالية**: نسبة ثقة مئوية لكل تشخيص محتمل
|
| 16 |
+
- **علاج شامل**: توصيات علاجية مفصلة مع إجراءات الوقاية والنظافة
|
| 17 |
+
- **قاعدة بيانات موسعة**: تشمل أكثر من 15 مرضاً شائعاً
|
| 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 |
+
- **الواجهة الأمامية**: Gradio 4.0+ مع تصميم عربي احترافي
|
| 45 |
+
- **الذكاء الاصطناعي**: خوارزميات تعلم آلة مخصصة
|
| 46 |
+
- **تحليل البيانات**: Pandas, Plotly للمخططات التفاعلية
|
| 47 |
+
- **قاعدة البيانات**: JSON لسهولة النشر والصيانة
|
| 48 |
+
- **اللغة**: Python 3.11+ مع دعم كامل للعربية
|
| 49 |
+
|
| 50 |
+
## 📦 التثبيت والتشغيل
|
| 51 |
+
|
| 52 |
+
### المتطلبات
|
| 53 |
+
```bash
|
| 54 |
+
Python 3.11+
|
| 55 |
+
pip (مدير الحزم)
|
| 56 |
+
```
|
| 57 |
+
|
| 58 |
+
### خطوات التثبيت
|
| 59 |
+
```bash
|
| 60 |
+
# استنساخ المشروع
|
| 61 |
+
git clone https://github.com/your-username/chicken-assistant.git
|
| 62 |
+
cd chicken-assistant
|
| 63 |
+
|
| 64 |
+
# تثبيت المتطلبات
|
| 65 |
+
pip install -r requirements.txt
|
| 66 |
+
|
| 67 |
+
# تشغيل التطبيق الرئيسي
|
| 68 |
+
python app.py
|
| 69 |
+
|
| 70 |
+
# تشغيل لوحة الإدارة (اختياري)
|
| 71 |
+
python admin_panel.py
|
| 72 |
+
```
|
| 73 |
+
|
| 74 |
+
### الوصول للتطبيق
|
| 75 |
+
- **التطبيق الرئيسي**: http://localhost:7860
|
| 76 |
+
- **لوحة الإدارة**: http://localhost:7861
|
| 77 |
+
|
| 78 |
+
## 📚 دليل الاستخدام
|
| 79 |
+
|
| 80 |
+
### للمربين
|
| 81 |
+
1. **تشخيص الأمراض**: أدخل الأعراض الملاحظة واحصل على تشخيص فوري
|
| 82 |
+
2. **خطط التغذية**: حدد عمر ونوع الدجاج للحصول على خطة تغذية مخصصة
|
| 83 |
+
3. **الاستشارات**: اطرح أي سؤال واحصل على إجابة من الخبير الذكي
|
| 84 |
+
4. **تتبع الإنتاج**: سجل بيانات الإنتاج اليومية وراقب الأداء
|
| 85 |
+
|
| 86 |
+
### للمديرين
|
| 87 |
+
1. **إدارة المحتوى**: أضف أمراض وسلالات جديدة حسب المنطقة
|
| 88 |
+
2. **التقارير**: أنشئ تقارير شاملة عن أداء المزرعة
|
| 89 |
+
3. **التنبيهات**: أنشئ وإدارة التنبيهات للمشاكل المختلفة
|
| 90 |
+
4. **الإعدادات**: خصص النظام حسب احتياجات المزرعة
|
| 91 |
+
|
| 92 |
+
## 🔧 التخصيص والتطوير
|
| 93 |
+
|
| 94 |
+
### إضافة أمراض جديدة
|
| 95 |
+
```python
|
| 96 |
+
# في ملف chicken_ai.py
|
| 97 |
+
diseases_db["اسم المرض"] = {
|
| 98 |
+
"symptoms": ["عرض1", "عرض2"],
|
| 99 |
+
"probability_weights": {"عرض1": 0.8, "عرض2": 0.6},
|
| 100 |
+
"treatment": "وصف العلاج",
|
| 101 |
+
"prevention": "إجراءات الوقاية",
|
| 102 |
+
"hygiene": "متطلبات النظافة"
|
| 103 |
+
}
|
| 104 |
+
```
|
| 105 |
+
|
| 106 |
+
### إضافة سلالات جديدة
|
| 107 |
+
```python
|
| 108 |
+
# في ملف chicken_ai.py
|
| 109 |
+
breeds_db["اسم السلالة"] = {
|
| 110 |
+
"type": "بياض/لاحم",
|
| 111 |
+
"egg_production": "200-250 بيضة/سنة",
|
| 112 |
+
"characteristics": "وصف الخصائص",
|
| 113 |
+
"immunity": "مستوى المناعة"
|
| 114 |
+
}
|
| 115 |
+
```
|
| 116 |
+
|
| 117 |
+
## 📊 قاعدة البيانات
|
| 118 |
+
|
| 119 |
+
### الأمراض المدعومة
|
| 120 |
+
- الإسهال الأبيض (السالمونيلا)
|
| 121 |
+
- مرض نيوكاسل
|
| 122 |
+
- الكوكسيديا
|
| 123 |
+
- إنفلونزا الطيور
|
| 124 |
+
- التهاب الشعب الهوائية المعدي
|
| 125 |
+
- مرض الجمبورو
|
| 126 |
+
- الميكوبلازما
|
| 127 |
+
- التهاب الأمعاء النخري
|
| 128 |
+
- نقص الفيتامينات
|
| 129 |
+
- التسمم الغذائي
|
| 130 |
+
|
| 131 |
+
### السلالات المدعومة
|
| 132 |
+
- ليجهورن (بياض)
|
| 133 |
+
- رود آيلاند ريد (ثنائي الغرض)
|
| 134 |
+
- بلايموث روك (ثنائي الغرض)
|
| 135 |
+
- نيو هامبشاير (لاحم)
|
| 136 |
+
- كورنيش (لاحم)
|
| 137 |
+
- البراهما (زينة)
|
| 138 |
+
- الأندلسي الأزرق (بياض)
|
| 139 |
+
- الفيومي المصري (محلي)
|
| 140 |
+
|
| 141 |
+
## 🌍 العلائق البديلة المدعومة
|
| 142 |
+
|
| 143 |
+
### مص��در البروتين البديلة
|
| 144 |
+
- دودة الوجبة المجففة
|
| 145 |
+
- مسحوق السمك المحلي
|
| 146 |
+
- بقايا المسالخ المعالجة
|
| 147 |
+
- البقوليات المطحونة
|
| 148 |
+
- مخلفات الجبن والألبان
|
| 149 |
+
|
| 150 |
+
### مصادر الطاقة البديلة
|
| 151 |
+
- نخالة الأرز
|
| 152 |
+
- مخلفات المخابز
|
| 153 |
+
- البطاطا المسلوقة
|
| 154 |
+
- الذرة المكسرة
|
| 155 |
+
- بذور عباد الشمس
|
| 156 |
+
|
| 157 |
+
### المكملات الطبيعية
|
| 158 |
+
- قشر البيض المطحون (كالسيوم)
|
| 159 |
+
- الخضروات الورقية (فيتامينات)
|
| 160 |
+
- الثوم والبصل (مضادات حيوية طبيعية)
|
| 161 |
+
- خل التفاح (تحسين الهضم)
|
| 162 |
+
- الأعشاب الطبية المحلية
|
| 163 |
+
|
| 164 |
+
## 🔒 الأمان والخصوصية
|
| 165 |
+
|
| 166 |
+
- **حماية البيانات**: جميع البيانات محفوظة محلياً
|
| 167 |
+
- **لا توجد اتصالات خارجية**: النظام يعمل بشكل مستقل
|
| 168 |
+
- **تشفير الملفات**: إمكانية تشفير ملفات البيانات الحساسة
|
| 169 |
+
- **نسخ احتياطية**: نظام نسخ احتياطي تلقائي
|
| 170 |
|
| 171 |
## 🤝 المساهمة
|
| 172 |
|
| 173 |
+
نرحب بمساهماتكم لتطوير المشروع:
|
| 174 |
+
|
| 175 |
+
1. Fork المشروع
|
| 176 |
+
2. إنشاء فرع جديد (`git checkout -b feature/amazing-feature`)
|
| 177 |
+
3. Commit التغييرات (`git commit -m 'Add amazing feature'`)
|
| 178 |
+
4. Push للفرع (`git push origin feature/amazing-feature`)
|
| 179 |
+
5. فتح Pull Request
|
| 180 |
+
|
| 181 |
+
## 📞 الدعم والمساعدة
|
| 182 |
+
|
| 183 |
+
- **البريد الإلكتروني**: support@chicken-assistant.com
|
| 184 |
+
- **التوثيق**: [docs.chicken-assistant.com](https://docs.chicken-assistant.com)
|
| 185 |
+
- **المجتمع**: [community.chicken-assistant.com](https://community.chicken-assistant.com)
|
| 186 |
|
| 187 |
## 📄 الترخيص
|
| 188 |
|
| 189 |
+
هذا المشروع مرخص تحت رخصة MIT - راجع ملف [LICENSE](LICENSE) للتفاصيل.
|
| 190 |
+
|
| 191 |
+
## 🙏 شكر وتقدير
|
| 192 |
+
|
| 193 |
+
- **فريق Manus AI** لتطوير النظام
|
| 194 |
+
- **مجتمع مربي الدجاج العربي** للملاحظات والاقتراحات
|
| 195 |
+
- **الخبراء البيطريين** للمراجعة العلمية
|
| 196 |
+
- **المساهمين** في تطوير المشروع
|
| 197 |
|
| 198 |
+
## 🔄 سجل التحديثات
|
| 199 |
|
| 200 |
+
### الإصدار 2.0.0 (الحالي)
|
| 201 |
+
- ✅ واجهة مستخدم محدثة بالكامل
|
| 202 |
+
- ✅ لوحة تحكم إدارية متقدمة
|
| 203 |
+
- ✅ نظام تشخيص محسن
|
| 204 |
+
- ✅ علائق بديلة ومحلية
|
| 205 |
+
- ✅ مخططات تفاعلية
|
| 206 |
+
- ✅ نظام تنبيهات ذكي
|
| 207 |
+
|
| 208 |
+
### الإصدار 1.0.0
|
| 209 |
+
- ✅ النسخة الأساسية
|
| 210 |
+
- ✅ تشخيص الأمراض الأساسي
|
| 211 |
+
- ✅ خطط التغذية البسيطة
|
| 212 |
+
- ✅ واجهة Gradio أساسية
|
| 213 |
|
| 214 |
---
|
| 215 |
|
| 216 |
+
**تم تطوير هذا المساعد بواسطة:** [Manus AI](https://manus.ai)
|
| 217 |
+
**الهدف:** مساعدة مربي الدجاج العرب على تحسين إنتاجهم ورعاية دجاجهم بطريقة علمية ومدروسة
|
| 218 |
+
|
admin_panel.py
ADDED
|
@@ -0,0 +1,499 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import gradio as gr
|
| 2 |
+
import pandas as pd
|
| 3 |
+
import plotly.graph_objects as go
|
| 4 |
+
import plotly.express as px
|
| 5 |
+
from datetime import datetime, timedelta
|
| 6 |
+
import json
|
| 7 |
+
import os
|
| 8 |
+
from typing import Dict, List, Any
|
| 9 |
+
from chicken_ai import AdvancedChickenAI
|
| 10 |
+
|
| 11 |
+
class AdminPanel:
|
| 12 |
+
def __init__(self):
|
| 13 |
+
self.ai = AdvancedChickenAI()
|
| 14 |
+
self.data_dir = "/home/ubuntu/chicken_assistant/admin_data"
|
| 15 |
+
self.ensure_data_directory()
|
| 16 |
+
|
| 17 |
+
def ensure_data_directory(self):
|
| 18 |
+
"""التأكد من وجود مجلد البيانات"""
|
| 19 |
+
os.makedirs(self.data_dir, exist_ok=True)
|
| 20 |
+
|
| 21 |
+
# إنشاء ملفات البيانات الأساسية إذا لم تكن موجودة
|
| 22 |
+
default_files = {
|
| 23 |
+
"users.json": [],
|
| 24 |
+
"farm_settings.json": {
|
| 25 |
+
"farm_name": "مزرعة الدجاج الذكية",
|
| 26 |
+
"location": "",
|
| 27 |
+
"capacity": 1000,
|
| 28 |
+
"established_date": datetime.now().strftime("%Y-%m-%d")
|
| 29 |
+
},
|
| 30 |
+
"alerts.json": [],
|
| 31 |
+
"reports.json": []
|
| 32 |
+
}
|
| 33 |
+
|
| 34 |
+
for filename, default_content in default_files.items():
|
| 35 |
+
filepath = os.path.join(self.data_dir, filename)
|
| 36 |
+
if not os.path.exists(filepath):
|
| 37 |
+
with open(filepath, 'w', encoding='utf-8') as f:
|
| 38 |
+
json.dump(default_content, f, ensure_ascii=False, indent=2)
|
| 39 |
+
|
| 40 |
+
def load_data(self, filename: str) -> Any:
|
| 41 |
+
"""تحميل البيانات من ملف"""
|
| 42 |
+
filepath = os.path.join(self.data_dir, filename)
|
| 43 |
+
try:
|
| 44 |
+
with open(filepath, 'r', encoding='utf-8') as f:
|
| 45 |
+
return json.load(f)
|
| 46 |
+
except:
|
| 47 |
+
return []
|
| 48 |
+
|
| 49 |
+
def save_data(self, filename: str, data: Any) -> bool:
|
| 50 |
+
"""حفظ البيانات في ملف"""
|
| 51 |
+
filepath = os.path.join(self.data_dir, filename)
|
| 52 |
+
try:
|
| 53 |
+
with open(filepath, 'w', encoding='utf-8') as f:
|
| 54 |
+
json.dump(data, f, ensure_ascii=False, indent=2)
|
| 55 |
+
return True
|
| 56 |
+
except:
|
| 57 |
+
return False
|
| 58 |
+
|
| 59 |
+
def add_disease(self, name: str, symptoms: str, treatment: str, prevention: str, hygiene: str) -> str:
|
| 60 |
+
"""إضافة مرض جديد"""
|
| 61 |
+
if not all([name, symptoms, treatment, prevention, hygiene]):
|
| 62 |
+
return "❌ يرجى ملء جميع الحقول المطلوبة"
|
| 63 |
+
|
| 64 |
+
# تحديث قاعدة بيانات الأمراض
|
| 65 |
+
symptoms_list = [s.strip() for s in symptoms.split(',')]
|
| 66 |
+
weights = {symptom: 0.8 for symptom in symptoms_list} # وزن افتراضي
|
| 67 |
+
|
| 68 |
+
self.ai.diseases_db[name] = {
|
| 69 |
+
"symptoms": symptoms_list,
|
| 70 |
+
"probability_weights": weights,
|
| 71 |
+
"treatment": treatment,
|
| 72 |
+
"prevention": prevention,
|
| 73 |
+
"hygiene": hygiene
|
| 74 |
+
}
|
| 75 |
+
|
| 76 |
+
# حفظ في ملف منفصل للأمراض المخصصة
|
| 77 |
+
custom_diseases = self.load_data("custom_diseases.json")
|
| 78 |
+
custom_diseases[name] = self.ai.diseases_db[name]
|
| 79 |
+
self.save_data("custom_diseases.json", custom_diseases)
|
| 80 |
+
|
| 81 |
+
return f"✅ تم إضافة المرض '{name}' بنجاح!"
|
| 82 |
+
|
| 83 |
+
def add_breed(self, name: str, breed_type: str, egg_production: str, characteristics: str, immunity: str) -> str:
|
| 84 |
+
"""إضافة سلالة جديدة"""
|
| 85 |
+
if not all([name, breed_type, characteristics, immunity]):
|
| 86 |
+
return "❌ يرجى ملء جميع الحقول المطلوبة"
|
| 87 |
+
|
| 88 |
+
breed_info = {
|
| 89 |
+
"type": breed_type,
|
| 90 |
+
"characteristics": characteristics,
|
| 91 |
+
"immunity": immunity
|
| 92 |
+
}
|
| 93 |
+
|
| 94 |
+
if egg_production:
|
| 95 |
+
breed_info["egg_production"] = egg_production
|
| 96 |
+
breed_info["egg_color"] = "غير محدد"
|
| 97 |
+
|
| 98 |
+
self.ai.breeds_db[name] = breed_info
|
| 99 |
+
|
| 100 |
+
# حفظ في ملف منفصل للسلالات المخصصة
|
| 101 |
+
custom_breeds = self.load_data("custom_breeds.json")
|
| 102 |
+
custom_breeds[name] = breed_info
|
| 103 |
+
self.save_data("custom_breeds.json", custom_breeds)
|
| 104 |
+
|
| 105 |
+
return f"✅ تم إضافة السلالة '{name}' بنجاح!"
|
| 106 |
+
|
| 107 |
+
def generate_farm_report(self) -> str:
|
| 108 |
+
"""إنشاء تقرير شامل للمزرعة"""
|
| 109 |
+
# تحميل بيانات الإنتاج
|
| 110 |
+
production_file = "/home/ubuntu/chicken_assistant/production_data.json"
|
| 111 |
+
if os.path.exists(production_file):
|
| 112 |
+
with open(production_file, 'r', encoding='utf-8') as f:
|
| 113 |
+
production_data = json.load(f)
|
| 114 |
+
else:
|
| 115 |
+
production_data = []
|
| 116 |
+
|
| 117 |
+
if not production_data:
|
| 118 |
+
return "📊 لا توجد بيانات إنتاج متاحة لإنشاء التقرير"
|
| 119 |
+
|
| 120 |
+
# حساب الإحصائيات
|
| 121 |
+
total_eggs = sum(record.get('eggs', 0) for record in production_data)
|
| 122 |
+
total_feed = sum(record.get('feed', 0) for record in production_data)
|
| 123 |
+
days_count = len(production_data)
|
| 124 |
+
avg_eggs_per_day = total_eggs / days_count if days_count > 0 else 0
|
| 125 |
+
avg_feed_per_day = total_feed / days_count if days_count > 0 else 0
|
| 126 |
+
|
| 127 |
+
# حساب كفاءة التحويل
|
| 128 |
+
feed_conversion_ratio = total_feed / total_eggs if total_eggs > 0 else 0
|
| 129 |
+
|
| 130 |
+
# تحليل الاتجاهات
|
| 131 |
+
recent_data = production_data[-7:] if len(production_data) >= 7 else production_data
|
| 132 |
+
recent_avg_eggs = sum(record.get('eggs', 0) for record in recent_data) / len(recent_data)
|
| 133 |
+
|
| 134 |
+
trend = "📈 متزايد" if recent_avg_eggs > avg_eggs_per_day else "📉 متناقص" if recent_avg_eggs < avg_eggs_per_day else "➡️ مستقر"
|
| 135 |
+
|
| 136 |
+
report = f"""
|
| 137 |
+
# 📊 تقرير أداء المزرعة الشامل
|
| 138 |
+
|
| 139 |
+
## 📈 إحصائيات الإنتاج العامة
|
| 140 |
+
- **فترة التقرير:** {days_count} يوم
|
| 141 |
+
- **إجمالي إنتاج البيض:** {total_eggs:,} بيضة
|
| 142 |
+
- **متوسط الإنتاج اليومي:** {avg_eggs_per_day:.1f} بيضة/يوم
|
| 143 |
+
- **إجمالي استهلاك العلف:** {total_feed:.1f} كجم
|
| 144 |
+
- **متوسط استهلاك العلف:** {avg_feed_per_day:.1f} كجم/يوم
|
| 145 |
+
|
| 146 |
+
## 🔄 كفاءة التحويل
|
| 147 |
+
- **معدل تحويل العلف:** {feed_conversion_ratio:.2f} كجم علف/بيضة
|
| 148 |
+
- **الاتجاه الحالي:** {trend}
|
| 149 |
+
|
| 150 |
+
## 📊 تحليل الأداء
|
| 151 |
+
- **أعلى إنتاج يومي:** {max(record.get('eggs', 0) for record in production_data)} بيضة
|
| 152 |
+
- **أقل إنتاج يومي:** {min(record.get('eggs', 0) for record in production_data)} بيضة
|
| 153 |
+
- **متوسط الأسبوع الأخير:** {recent_avg_eggs:.1f} بيضة/يوم
|
| 154 |
+
|
| 155 |
+
## 💡 التوصيات
|
| 156 |
+
"""
|
| 157 |
+
|
| 158 |
+
# إضافة توصيات بناءً على الأداء
|
| 159 |
+
if feed_conversion_ratio > 0.15:
|
| 160 |
+
report += "- ⚠️ معدل تحويل العلف مرتفع، يُنصح بمراجعة جودة العلف ونوعه\n"
|
| 161 |
+
|
| 162 |
+
if recent_avg_eggs < avg_eggs_per_day * 0.9:
|
| 163 |
+
report += "- 📉 انخفاض في الإنتاج مؤخراً، يُنصح بفحص صحة القطيع\n"
|
| 164 |
+
|
| 165 |
+
if avg_eggs_per_day < 0.7: # أقل من 70% إنتاج
|
| 166 |
+
report += "- 🔍 إنتاجية منخفضة، يُنصح بمراجعة التغذية والإضاءة\n"
|
| 167 |
+
|
| 168 |
+
report += f"\n**تاريخ التقرير:** {datetime.now().strftime('%Y-%m-%d %H:%M')}"
|
| 169 |
+
|
| 170 |
+
# حفظ التقرير
|
| 171 |
+
reports = self.load_data("reports.json")
|
| 172 |
+
reports.append({
|
| 173 |
+
"date": datetime.now().isoformat(),
|
| 174 |
+
"type": "farm_performance",
|
| 175 |
+
"content": report
|
| 176 |
+
})
|
| 177 |
+
self.save_data("reports.json", reports)
|
| 178 |
+
|
| 179 |
+
return report
|
| 180 |
+
|
| 181 |
+
def create_alert(self, alert_type: str, message: str, priority: str) -> str:
|
| 182 |
+
"""إنشاء تنبيه جديد"""
|
| 183 |
+
if not all([alert_type, message, priority]):
|
| 184 |
+
return "❌ يرجى ملء جميع الحقول"
|
| 185 |
+
|
| 186 |
+
alerts = self.load_data("alerts.json")
|
| 187 |
+
|
| 188 |
+
new_alert = {
|
| 189 |
+
"id": len(alerts) + 1,
|
| 190 |
+
"type": alert_type,
|
| 191 |
+
"message": message,
|
| 192 |
+
"priority": priority,
|
| 193 |
+
"created_at": datetime.now().isoformat(),
|
| 194 |
+
"status": "active"
|
| 195 |
+
}
|
| 196 |
+
|
| 197 |
+
alerts.append(new_alert)
|
| 198 |
+
self.save_data("alerts.json", alerts)
|
| 199 |
+
|
| 200 |
+
priority_emoji = {"عالي": "🔴", "متوسط": "🟡", "منخفض": "🟢"}
|
| 201 |
+
return f"✅ تم إنشاء التنبيه بنجاح!\n{priority_emoji.get(priority, '⚪')} {alert_type}: {message}"
|
| 202 |
+
|
| 203 |
+
def get_active_alerts(self) -> str:
|
| 204 |
+
"""الحصول على التنبيهات النشطة"""
|
| 205 |
+
alerts = self.load_data("alerts.json")
|
| 206 |
+
active_alerts = [alert for alert in alerts if alert.get("status") == "active"]
|
| 207 |
+
|
| 208 |
+
if not active_alerts:
|
| 209 |
+
return "✅ لا توجد تنبيهات نشطة حالياً"
|
| 210 |
+
|
| 211 |
+
output = "## 🚨 التنبيهات النشطة\n\n"
|
| 212 |
+
priority_emoji = {"عالي": "🔴", "متوسط": "🟡", "منخفض": "🟢"}
|
| 213 |
+
|
| 214 |
+
for alert in sorted(active_alerts, key=lambda x: x.get("created_at", ""), reverse=True):
|
| 215 |
+
emoji = priority_emoji.get(alert.get("priority", ""), "⚪")
|
| 216 |
+
created_date = datetime.fromisoformat(alert.get("created_at", "")).strftime("%Y-%m-%d %H:%M")
|
| 217 |
+
|
| 218 |
+
output += f"### {emoji} {alert.get('type', 'غير محدد')}\n"
|
| 219 |
+
output += f"**الرسالة:** {alert.get('message', '')}\n"
|
| 220 |
+
output += f"**الأولوية:** {alert.get('priority', 'غير محدد')}\n"
|
| 221 |
+
output += f"**التاريخ:** {created_date}\n\n"
|
| 222 |
+
output += "---\n\n"
|
| 223 |
+
|
| 224 |
+
return output
|
| 225 |
+
|
| 226 |
+
def update_farm_settings(self, farm_name: str, location: str, capacity: int) -> str:
|
| 227 |
+
"""تحدي�� إعدادات المزرعة"""
|
| 228 |
+
if not farm_name:
|
| 229 |
+
return "❌ اسم المزرعة مطلوب"
|
| 230 |
+
|
| 231 |
+
settings = self.load_data("farm_settings.json")
|
| 232 |
+
settings.update({
|
| 233 |
+
"farm_name": farm_name,
|
| 234 |
+
"location": location,
|
| 235 |
+
"capacity": capacity,
|
| 236 |
+
"last_updated": datetime.now().isoformat()
|
| 237 |
+
})
|
| 238 |
+
|
| 239 |
+
if self.save_data("farm_settings.json", settings):
|
| 240 |
+
return f"✅ تم تحديث إعدادات المزرعة بنجاح!\nالاسم: {farm_name}\nالموقع: {location}\nالسعة: {capacity:,} طائر"
|
| 241 |
+
else:
|
| 242 |
+
return "❌ حدث خطأ في حفظ الإعدادات"
|
| 243 |
+
|
| 244 |
+
# إنشاء مثيل من لوحة الإدارة
|
| 245 |
+
admin = AdminPanel()
|
| 246 |
+
|
| 247 |
+
def create_admin_interface():
|
| 248 |
+
"""إنشاء واجهة لوحة الإدارة"""
|
| 249 |
+
|
| 250 |
+
with gr.Blocks(
|
| 251 |
+
title="🛠️ لوحة التحكم الإدارية - مساعد تربية الدجاج",
|
| 252 |
+
theme=gr.themes.Soft(
|
| 253 |
+
primary_hue="blue",
|
| 254 |
+
secondary_hue="emerald",
|
| 255 |
+
neutral_hue="slate",
|
| 256 |
+
font=[gr.themes.GoogleFont("Cairo"), "Arial", "sans-serif"]
|
| 257 |
+
),
|
| 258 |
+
css="""
|
| 259 |
+
.admin-header {
|
| 260 |
+
background: linear-gradient(135deg, #1e3a8a 0%, #3b82f6 100%);
|
| 261 |
+
color: white;
|
| 262 |
+
padding: 2rem;
|
| 263 |
+
border-radius: 15px;
|
| 264 |
+
margin-bottom: 2rem;
|
| 265 |
+
text-align: center;
|
| 266 |
+
}
|
| 267 |
+
.admin-card {
|
| 268 |
+
background: white;
|
| 269 |
+
border-radius: 12px;
|
| 270 |
+
padding: 1.5rem;
|
| 271 |
+
box-shadow: 0 4px 15px rgba(0,0,0,0.1);
|
| 272 |
+
border: 1px solid #e2e8f0;
|
| 273 |
+
margin-bottom: 1rem;
|
| 274 |
+
}
|
| 275 |
+
.metric-grid {
|
| 276 |
+
display: grid;
|
| 277 |
+
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
|
| 278 |
+
gap: 1rem;
|
| 279 |
+
margin: 1rem 0;
|
| 280 |
+
}
|
| 281 |
+
.metric-item {
|
| 282 |
+
background: linear-gradient(135deg, #3b82f6 0%, #1e40af 100%);
|
| 283 |
+
color: white;
|
| 284 |
+
padding: 1rem;
|
| 285 |
+
border-radius: 10px;
|
| 286 |
+
text-align: center;
|
| 287 |
+
}
|
| 288 |
+
"""
|
| 289 |
+
) as admin_app:
|
| 290 |
+
|
| 291 |
+
# العنوان الرئيسي
|
| 292 |
+
gr.HTML("""
|
| 293 |
+
<div class="admin-header">
|
| 294 |
+
<h1 style="font-size: 2.5rem; margin-bottom: 0.5rem;">🛠️ لوحة التحكم الإدارية</h1>
|
| 295 |
+
<p style="font-size: 1.2rem; opacity: 0.9;">إدارة شاملة لنظام مساعد تربية الدجاج الذكي</p>
|
| 296 |
+
</div>
|
| 297 |
+
""")
|
| 298 |
+
|
| 299 |
+
with gr.Tabs() as admin_tabs:
|
| 300 |
+
|
| 301 |
+
# تبويب إدارة المحتوى
|
| 302 |
+
with gr.Tab("📝 إدارة المحتوى"):
|
| 303 |
+
gr.HTML("<div class='admin-card'>")
|
| 304 |
+
gr.Markdown("### 🦠 إضافة مرض جديد")
|
| 305 |
+
|
| 306 |
+
with gr.Row():
|
| 307 |
+
with gr.Column():
|
| 308 |
+
disease_name = gr.Textbox(label="اسم المرض", placeholder="مثال: إنفلونزا الطيور")
|
| 309 |
+
disease_symptoms = gr.Textbox(
|
| 310 |
+
label="الأعراض (مفصولة بفواصل)",
|
| 311 |
+
placeholder="خمول، حمى، صعوبة تنفس",
|
| 312 |
+
lines=2
|
| 313 |
+
)
|
| 314 |
+
disease_treatment = gr.Textbox(
|
| 315 |
+
label="العلاج",
|
| 316 |
+
placeholder="وصف العلاج المناسب...",
|
| 317 |
+
lines=3
|
| 318 |
+
)
|
| 319 |
+
|
| 320 |
+
with gr.Column():
|
| 321 |
+
disease_prevention = gr.Textbox(
|
| 322 |
+
label="الوقاية",
|
| 323 |
+
placeholder="إجراءات الوقاية...",
|
| 324 |
+
lines=3
|
| 325 |
+
)
|
| 326 |
+
disease_hygiene = gr.Textbox(
|
| 327 |
+
label="النظافة",
|
| 328 |
+
placeholder="إجراءات النظافة المطلوبة...",
|
| 329 |
+
lines=3
|
| 330 |
+
)
|
| 331 |
+
|
| 332 |
+
add_disease_btn = gr.Button("➕ إضافة المرض", variant="primary", size="lg")
|
| 333 |
+
disease_status = gr.Markdown()
|
| 334 |
+
|
| 335 |
+
gr.HTML("</div>")
|
| 336 |
+
|
| 337 |
+
gr.HTML("<div class='admin-card'>")
|
| 338 |
+
gr.Markdown("### 🐔 إضافة سلالة جديدة")
|
| 339 |
+
|
| 340 |
+
with gr.Row():
|
| 341 |
+
with gr.Column():
|
| 342 |
+
breed_name = gr.Textbox(label="اسم السلالة", placeholder="مثال: براهما")
|
| 343 |
+
breed_type = gr.Dropdown(
|
| 344 |
+
label="نوع السلالة",
|
| 345 |
+
choices=["بياض", "لاحم", "ثنائي الغرض", "زينة"],
|
| 346 |
+
value="بياض"
|
| 347 |
+
)
|
| 348 |
+
breed_egg_production = gr.Textbox(
|
| 349 |
+
label="إنتاج البيض (اختياري)",
|
| 350 |
+
placeholder="200-250 بيضة/سنة"
|
| 351 |
+
)
|
| 352 |
+
|
| 353 |
+
with gr.Column():
|
| 354 |
+
breed_characteristics = gr.Textbox(
|
| 355 |
+
label="الخصائص",
|
| 356 |
+
placeholder="وصف خصائص السلالة...",
|
| 357 |
+
lines=3
|
| 358 |
+
)
|
| 359 |
+
breed_immunity = gr.Dropdown(
|
| 360 |
+
label="مستوى المناعة",
|
| 361 |
+
choices=["ممتازة", "جيدة", "متوسطة", "ضعيفة"],
|
| 362 |
+
value="جيدة"
|
| 363 |
+
)
|
| 364 |
+
|
| 365 |
+
add_breed_btn = gr.Button("➕ إضافة السلالة", variant="primary", size="lg")
|
| 366 |
+
breed_status = gr.Markdown()
|
| 367 |
+
|
| 368 |
+
gr.HTML("</div>")
|
| 369 |
+
|
| 370 |
+
# تبويب التقارير والإحصائيات
|
| 371 |
+
with gr.Tab("📊 التقارير والإحصائيات"):
|
| 372 |
+
gr.HTML("<div class='admin-card'>")
|
| 373 |
+
gr.Markdown("### 📈 تقارير الأداء")
|
| 374 |
+
|
| 375 |
+
generate_report_btn = gr.Button("📊 إنشاء تقرير شامل", variant="primary", size="lg")
|
| 376 |
+
farm_report_output = gr.Markdown()
|
| 377 |
+
|
| 378 |
+
gr.HTML("</div>")
|
| 379 |
+
|
| 380 |
+
# تبويب التنبيهات
|
| 381 |
+
with gr.Tab("🚨 إدارة التنبيهات"):
|
| 382 |
+
gr.HTML("<div class='admin-card'>")
|
| 383 |
+
gr.Markdown("### ➕ إنشاء تنبيه جديد")
|
| 384 |
+
|
| 385 |
+
with gr.Row():
|
| 386 |
+
with gr.Column():
|
| 387 |
+
alert_type = gr.Dropdown(
|
| 388 |
+
label="نوع التنبيه",
|
| 389 |
+
choices=["صحة القطيع", "نقص العلف", "انخفاض الإنتاج", "صيانة المعدات", "أخرى"],
|
| 390 |
+
value="صحة القطيع"
|
| 391 |
+
)
|
| 392 |
+
alert_priority = gr.Dropdown(
|
| 393 |
+
label="الأولوية",
|
| 394 |
+
choices=["عالي", "متوسط", "منخفض"],
|
| 395 |
+
value="متوسط"
|
| 396 |
+
)
|
| 397 |
+
|
| 398 |
+
with gr.Column():
|
| 399 |
+
alert_message = gr.Textbox(
|
| 400 |
+
label="رسالة التنبيه",
|
| 401 |
+
placeholder="وصف التنبيه...",
|
| 402 |
+
lines=3
|
| 403 |
+
)
|
| 404 |
+
|
| 405 |
+
create_alert_btn = gr.Button("🚨 إنشاء التنبيه", variant="primary", size="lg")
|
| 406 |
+
alert_status = gr.Markdown()
|
| 407 |
+
|
| 408 |
+
gr.HTML("</div>")
|
| 409 |
+
|
| 410 |
+
gr.HTML("<div class='admin-card'>")
|
| 411 |
+
gr.Markdown("### 📋 التنبيهات النشطة")
|
| 412 |
+
|
| 413 |
+
refresh_alerts_btn = gr.Button("🔄 تحديث التنبيهات", variant="secondary")
|
| 414 |
+
active_alerts_output = gr.Markdown()
|
| 415 |
+
|
| 416 |
+
gr.HTML("</div>")
|
| 417 |
+
|
| 418 |
+
# تبويب إعدادات المزرعة
|
| 419 |
+
with gr.Tab("⚙️ إعدادات المزرعة"):
|
| 420 |
+
gr.HTML("<div class='admin-card'>")
|
| 421 |
+
gr.Markdown("### 🏠 معلومات المزرعة")
|
| 422 |
+
|
| 423 |
+
# تحميل الإعدادات الحالية
|
| 424 |
+
current_settings = admin.load_data("farm_settings.json")
|
| 425 |
+
|
| 426 |
+
with gr.Row():
|
| 427 |
+
with gr.Column():
|
| 428 |
+
farm_name_input = gr.Textbox(
|
| 429 |
+
label="اسم المزرعة",
|
| 430 |
+
value=current_settings.get("farm_name", ""),
|
| 431 |
+
placeholder="اسم المزرعة"
|
| 432 |
+
)
|
| 433 |
+
farm_location_input = gr.Textbox(
|
| 434 |
+
label="الموقع",
|
| 435 |
+
value=current_settings.get("location", ""),
|
| 436 |
+
placeholder="المدينة، البلد"
|
| 437 |
+
)
|
| 438 |
+
|
| 439 |
+
with gr.Column():
|
| 440 |
+
farm_capacity_input = gr.Number(
|
| 441 |
+
label="السعة (عدد الطيور)",
|
| 442 |
+
value=current_settings.get("capacity", 1000),
|
| 443 |
+
minimum=1
|
| 444 |
+
)
|
| 445 |
+
|
| 446 |
+
update_settings_btn = gr.Button("💾 حفظ الإعدادات", variant="primary", size="lg")
|
| 447 |
+
settings_status = gr.Markdown()
|
| 448 |
+
|
| 449 |
+
gr.HTML("</div>")
|
| 450 |
+
|
| 451 |
+
# ربط الأحداث
|
| 452 |
+
add_disease_btn.click(
|
| 453 |
+
fn=admin.add_disease,
|
| 454 |
+
inputs=[disease_name, disease_symptoms, disease_treatment, disease_prevention, disease_hygiene],
|
| 455 |
+
outputs=[disease_status]
|
| 456 |
+
)
|
| 457 |
+
|
| 458 |
+
add_breed_btn.click(
|
| 459 |
+
fn=admin.add_breed,
|
| 460 |
+
inputs=[breed_name, breed_type, breed_egg_production, breed_characteristics, breed_immunity],
|
| 461 |
+
outputs=[breed_status]
|
| 462 |
+
)
|
| 463 |
+
|
| 464 |
+
generate_report_btn.click(
|
| 465 |
+
fn=admin.generate_farm_report,
|
| 466 |
+
outputs=[farm_report_output]
|
| 467 |
+
)
|
| 468 |
+
|
| 469 |
+
create_alert_btn.click(
|
| 470 |
+
fn=admin.create_alert,
|
| 471 |
+
inputs=[alert_type, alert_message, alert_priority],
|
| 472 |
+
outputs=[alert_status]
|
| 473 |
+
)
|
| 474 |
+
|
| 475 |
+
refresh_alerts_btn.click(
|
| 476 |
+
fn=admin.get_active_alerts,
|
| 477 |
+
outputs=[active_alerts_output]
|
| 478 |
+
)
|
| 479 |
+
|
| 480 |
+
update_settings_btn.click(
|
| 481 |
+
fn=admin.update_farm_settings,
|
| 482 |
+
inputs=[farm_name_input, farm_location_input, farm_capacity_input],
|
| 483 |
+
outputs=[settings_status]
|
| 484 |
+
)
|
| 485 |
+
|
| 486 |
+
# تحميل التنبيهات عند بدء التطبيق
|
| 487 |
+
admin_app.load(fn=admin.get_active_alerts, outputs=[active_alerts_output])
|
| 488 |
+
|
| 489 |
+
return admin_app
|
| 490 |
+
|
| 491 |
+
if __name__ == "__main__":
|
| 492 |
+
admin_interface = create_admin_interface()
|
| 493 |
+
admin_interface.launch(
|
| 494 |
+
server_name="0.0.0.0",
|
| 495 |
+
server_port=7861,
|
| 496 |
+
share=False,
|
| 497 |
+
show_error=True
|
| 498 |
+
)
|
| 499 |
+
|
app.py
CHANGED
|
@@ -1,260 +1,494 @@
|
|
| 1 |
import gradio as gr
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2 |
import json
|
| 3 |
-
|
|
|
|
| 4 |
|
| 5 |
-
# إنشاء مثيل من
|
| 6 |
-
|
| 7 |
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 12 |
|
| 13 |
-
# ت
|
| 14 |
-
symptoms = [s.strip() for s in symptoms_text.split(',') if s.strip()]
|
| 15 |
|
| 16 |
-
|
| 17 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 18 |
|
| 19 |
-
|
| 20 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 21 |
|
| 22 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 23 |
|
| 24 |
-
|
| 25 |
-
|
| 26 |
-
|
| 27 |
-
result += f"**العلاج المقترح:**\n{disease.treatment}\n\n"
|
| 28 |
-
result += f"**الوقاية:**\n{disease.prevention}\n\n"
|
| 29 |
-
result += f"**النظافة:**\n{disease.hygiene}\n\n"
|
| 30 |
-
result += "---\n\n"
|
| 31 |
|
| 32 |
-
|
|
|
|
|
|
|
| 33 |
|
| 34 |
-
return
|
| 35 |
|
| 36 |
-
def
|
| 37 |
-
"""
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 38 |
try:
|
| 39 |
-
|
| 40 |
-
|
|
|
|
|
|
|
| 41 |
return "يرجى إدخال عمر صحيح بالأسابيع."
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 42 |
|
| 43 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 44 |
|
| 45 |
-
|
| 46 |
-
|
| 47 |
|
| 48 |
-
|
| 49 |
-
|
| 50 |
-
|
| 51 |
-
result += f"**عدد الوجبات:** {plan.meals_per_day}\n\n"
|
| 52 |
-
result += f"**كمية الماء:** {plan.water_amount}\n\n"
|
| 53 |
-
result += f"**إضافات مهمة:** {plan.supplements}\n\n"
|
| 54 |
|
| 55 |
-
|
| 56 |
-
|
| 57 |
-
result += "• تأكد من نظافة المعالف والمشارب يومياً\n"
|
| 58 |
-
result += "• وفر الماء النظيف باستمرار\n"
|
| 59 |
-
result += "• راقب استهلاك العلف والماء يومياً\n"
|
| 60 |
-
result += "• تدرج في تغيير نوع العلف خلال 7-10 أيام\n"
|
| 61 |
|
| 62 |
-
|
|
|
|
|
|
|
|
|
|
| 63 |
|
| 64 |
-
def
|
| 65 |
-
"""
|
| 66 |
-
|
| 67 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 68 |
|
| 69 |
-
|
| 70 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 71 |
|
| 72 |
-
|
| 73 |
-
|
| 74 |
-
tip = ai_assistant.get_daily_tip()
|
| 75 |
-
prevention_tip = ai_assistant.get_prevention_tip()
|
| 76 |
-
|
| 77 |
-
result = "## نصيحة اليوم 💡\n\n"
|
| 78 |
-
result += f"**الرعاية اليومية:** {tip}\n\n"
|
| 79 |
-
result += f"**الوقاية:** {prevention_tip}\n\n"
|
| 80 |
-
result += "---\n\n"
|
| 81 |
-
result += "💡 **تذكر:** الوقاية خير من العلاج!"
|
| 82 |
-
|
| 83 |
-
return result
|
| 84 |
|
| 85 |
-
#
|
| 86 |
with gr.Blocks(
|
| 87 |
-
title="مساعد تربية الدجاج الذكي",
|
| 88 |
-
theme=gr.themes.Soft(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 89 |
css="""
|
| 90 |
.gradio-container {
|
| 91 |
-
|
| 92 |
-
|
| 93 |
-
text-align: right;
|
| 94 |
}
|
| 95 |
-
.
|
| 96 |
-
|
| 97 |
-
|
| 98 |
color: white;
|
| 99 |
-
|
|
|
|
|
|
|
|
|
|
| 100 |
}
|
| 101 |
-
.
|
| 102 |
-
background:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 103 |
}
|
| 104 |
-
.
|
| 105 |
-
|
| 106 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 107 |
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
| 108 |
color: white;
|
|
|
|
| 109 |
border-radius: 10px;
|
| 110 |
-
|
|
|
|
| 111 |
}
|
| 112 |
"""
|
| 113 |
) as app:
|
| 114 |
|
| 115 |
# العنوان الرئيسي
|
| 116 |
gr.HTML("""
|
| 117 |
-
<div class="header">
|
| 118 |
-
<h1
|
| 119 |
-
|
| 120 |
-
<
|
|
|
|
|
|
|
|
|
|
| 121 |
</div>
|
| 122 |
""")
|
| 123 |
|
| 124 |
-
|
|
|
|
| 125 |
|
| 126 |
-
# تبويب تشخيص
|
| 127 |
-
with gr.Tab("
|
| 128 |
-
gr.
|
|
|
|
|
|
|
| 129 |
|
| 130 |
with gr.Row():
|
| 131 |
with gr.Column(scale=2):
|
| 132 |
symptoms_input = gr.Textbox(
|
| 133 |
-
label="الأعراض",
|
| 134 |
-
placeholder="مثال: خمول، فقدان شهية، إسهال، صعوبة في التنفس",
|
| 135 |
lines=3,
|
| 136 |
-
|
| 137 |
)
|
| 138 |
-
diagnose_btn = gr.Button("تشخيص المرض", variant="primary")
|
| 139 |
|
| 140 |
-
with gr.Column(scale=
|
| 141 |
-
gr.Markdown(""
|
| 142 |
-
**أمثلة على الأعراض:**
|
| 143 |
-
- خمول وكسل
|
| 144 |
-
- فقدان الشهية
|
| 145 |
-
- إسهال (أبيض، أخضر، دموي)
|
| 146 |
-
- صعوبة في التنفس
|
| 147 |
-
- عطس وسعال
|
| 148 |
-
- تورم الوجه
|
| 149 |
-
- انخفاض إنتاج البيض
|
| 150 |
-
""")
|
| 151 |
|
| 152 |
-
|
| 153 |
-
diagnose_btn.click(diagnose_symptoms, inputs=symptoms_input, outputs=diagnosis_output)
|
| 154 |
|
| 155 |
-
# تبويب
|
| 156 |
-
with gr.Tab("
|
| 157 |
-
gr.
|
|
|
|
|
|
|
| 158 |
|
| 159 |
with gr.Row():
|
| 160 |
-
|
| 161 |
-
|
| 162 |
-
|
| 163 |
-
|
| 164 |
-
|
| 165 |
-
|
| 166 |
-
|
| 167 |
-
|
| 168 |
-
|
| 169 |
-
|
| 170 |
-
|
| 171 |
-
|
| 172 |
-
|
| 173 |
-
|
| 174 |
-
|
| 175 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 176 |
|
| 177 |
-
|
| 178 |
-
feeding_output = gr.Markdown(label="خطة التغذية")
|
| 179 |
-
feeding_btn.click(
|
| 180 |
-
generate_feeding_plan,
|
| 181 |
-
inputs=[age_input, type_input, condition_input],
|
| 182 |
-
outputs=feeding_output
|
| 183 |
-
)
|
| 184 |
|
| 185 |
-
# تبويب ال
|
| 186 |
-
with gr.Tab("
|
| 187 |
-
gr.
|
|
|
|
|
|
|
| 188 |
|
| 189 |
with gr.Row():
|
| 190 |
with gr.Column(scale=2):
|
| 191 |
question_input = gr.Textbox(
|
| 192 |
label="سؤالك",
|
| 193 |
-
placeholder="مثال: كيف أزيد من إنتاج البيض؟",
|
| 194 |
-
lines=
|
| 195 |
-
rtl=True
|
| 196 |
)
|
| 197 |
-
ask_btn = gr.Button("اسأل", variant="primary")
|
| 198 |
|
| 199 |
-
with gr.Column(scale=
|
| 200 |
-
gr.Markdown(""
|
| 201 |
-
**أمثلة على الأسئلة:**
|
| 202 |
-
- كيف أزيد من إنتاج البيض؟
|
| 203 |
-
- ما هي أفضل طريقة لتنظيف الحظيرة؟
|
| 204 |
-
- كم مرة أغير الماء؟
|
| 205 |
-
- متى أحصن الدجاج؟
|
| 206 |
-
- ما هي علامات الدجاج الصحي؟
|
| 207 |
-
""")
|
| 208 |
|
| 209 |
-
|
| 210 |
-
ask_btn.click(answer_general_question, inputs=question_input, outputs=answer_output)
|
| 211 |
|
| 212 |
-
# تبويب ال
|
| 213 |
-
with gr.Tab("
|
| 214 |
-
gr.
|
|
|
|
|
|
|
| 215 |
|
| 216 |
-
|
| 217 |
-
|
| 218 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 219 |
|
| 220 |
-
|
| 221 |
-
|
| 222 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 223 |
|
| 224 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 225 |
|
| 226 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 227 |
|
| 228 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 229 |
|
| 230 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 231 |
|
| 232 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 233 |
|
| 234 |
-
|
| 235 |
-
""")
|
| 236 |
|
| 237 |
-
#
|
| 238 |
-
|
| 239 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 240 |
|
| 241 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 242 |
|
| 243 |
-
|
| 244 |
-
|
| 245 |
-
|
| 246 |
-
|
|
|
|
| 247 |
|
| 248 |
-
|
| 249 |
-
|
| 250 |
-
|
| 251 |
-
|
| 252 |
|
| 253 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 254 |
|
| 255 |
-
|
| 256 |
-
|
| 257 |
-
""")
|
| 258 |
|
| 259 |
# تشغيل التطبيق
|
| 260 |
if __name__ == "__main__":
|
|
@@ -262,6 +496,7 @@ if __name__ == "__main__":
|
|
| 262 |
server_name="0.0.0.0",
|
| 263 |
server_port=7860,
|
| 264 |
share=False,
|
| 265 |
-
show_error=True
|
|
|
|
| 266 |
)
|
| 267 |
|
|
|
|
| 1 |
import gradio as gr
|
| 2 |
+
import pandas as pd
|
| 3 |
+
import plotly.graph_objects as go
|
| 4 |
+
import plotly.express as px
|
| 5 |
+
from datetime import datetime, timedelta
|
| 6 |
import json
|
| 7 |
+
import os
|
| 8 |
+
from chicken_ai import AdvancedChickenAI
|
| 9 |
|
| 10 |
+
# إنشاء مثيل من نموذج الذكاء الاصطناعي
|
| 11 |
+
ai = AdvancedChickenAI()
|
| 12 |
|
| 13 |
+
# متغيرات عامة لتخزين البيانات
|
| 14 |
+
production_data = []
|
| 15 |
+
health_records = []
|
| 16 |
+
feed_consumption = []
|
| 17 |
+
|
| 18 |
+
def format_diagnosis_results(results):
|
| 19 |
+
"""تنسيق نتائج التشخيص"""
|
| 20 |
+
if not results:
|
| 21 |
+
return "لم يتم العثور على تشخيص مطابق للأعراض المدخلة."
|
| 22 |
|
| 23 |
+
output = "## 🔍 نتائج التشخيص\n\n"
|
|
|
|
| 24 |
|
| 25 |
+
for i, result in enumerate(results, 1):
|
| 26 |
+
confidence_percentage = result.probability * 100
|
| 27 |
+
confidence_emoji = "🔴" if confidence_percentage >= 80 else "🟡" if confidence_percentage >= 60 else "🟢"
|
| 28 |
+
|
| 29 |
+
output += f"### {confidence_emoji} التشخيص {i}: {result.disease}\n"
|
| 30 |
+
output += f"**نسبة الثقة:** {confidence_percentage:.1f}%\n"
|
| 31 |
+
output += f"**الأعراض المطابقة:** {', '.join(result.symptoms_matched)}\n\n"
|
| 32 |
+
|
| 33 |
+
output += f"**💊 العلاج:**\n{result.treatment}\n\n"
|
| 34 |
+
output += f"**🛡️ الوقاية:**\n{result.prevention}\n\n"
|
| 35 |
+
output += f"**🧼 النظافة:**\n{result.hygiene}\n\n"
|
| 36 |
+
output += "---\n\n"
|
| 37 |
|
| 38 |
+
return output
|
| 39 |
+
|
| 40 |
+
def format_nutrition_plan(plan):
|
| 41 |
+
"""تنسيق خطة التغذية"""
|
| 42 |
+
output = f"## 🍽️ خطة التغذية المخصصة\n\n"
|
| 43 |
+
output += f"**العمر:** {plan.age_weeks} أسبوع\n"
|
| 44 |
+
output += f"**نوع الدجاج:** {plan.chicken_type}\n"
|
| 45 |
+
output += f"**الحالة:** {plan.condition}\n\n"
|
| 46 |
|
| 47 |
+
output += f"### 📊 المتطلبات الغذائية:\n"
|
| 48 |
+
output += f"- **البروتين:** {plan.protein_percentage}%\n"
|
| 49 |
+
output += f"- **الطاقة:** {plan.energy_kcal} كيلو كالوري/كجم\n"
|
| 50 |
+
output += f"- **الكمية اليومية:** {plan.daily_amount} جرام\n"
|
| 51 |
+
output += f"- **عدد الوجبات:** {plan.feeding_frequency} وجبات يومياً\n\n"
|
| 52 |
|
| 53 |
+
output += f"### 💊 المكملات الغذائية:\n"
|
| 54 |
+
for supplement in plan.supplements:
|
| 55 |
+
output += f"- {supplement}\n"
|
|
|
|
|
|
|
|
|
|
|
|
|
| 56 |
|
| 57 |
+
output += f"\n### 🌱 العلائق البديلة المقترحة:\n"
|
| 58 |
+
for feed in plan.alternative_feeds:
|
| 59 |
+
output += f"- {feed}\n"
|
| 60 |
|
| 61 |
+
return output
|
| 62 |
|
| 63 |
+
def diagnose_disease_interface(symptoms):
|
| 64 |
+
"""واجهة تشخيص الأمراض"""
|
| 65 |
+
if not symptoms.strip():
|
| 66 |
+
return "يرجى إدخال الأعراض أولاً."
|
| 67 |
+
|
| 68 |
+
results = ai.diagnose_disease(symptoms)
|
| 69 |
+
return format_diagnosis_results(results)
|
| 70 |
+
|
| 71 |
+
def generate_nutrition_plan_interface(age, chicken_type, condition):
|
| 72 |
+
"""واجهة توليد خطة التغذية"""
|
| 73 |
try:
|
| 74 |
+
age_weeks = int(age)
|
| 75 |
+
plan = ai.generate_nutrition_plan(age_weeks, chicken_type, condition)
|
| 76 |
+
return format_nutrition_plan(plan)
|
| 77 |
+
except ValueError:
|
| 78 |
return "يرجى إدخال عمر صحيح بالأسابيع."
|
| 79 |
+
|
| 80 |
+
def answer_question_interface(question):
|
| 81 |
+
"""واجهة الأسئلة والأجوبة"""
|
| 82 |
+
if not question.strip():
|
| 83 |
+
return "يرجى كتابة سؤالك أولاً."
|
| 84 |
|
| 85 |
+
answer = ai.answer_general_question(question)
|
| 86 |
+
return f"## 💬 الإجابة:\n\n{answer}"
|
| 87 |
+
|
| 88 |
+
def get_daily_tips_interface():
|
| 89 |
+
"""واجهة النصائح اليومية"""
|
| 90 |
+
tips = ai.get_daily_tips()
|
| 91 |
+
output = "## 📝 نصائح يومية لتربية الدجاج\n\n"
|
| 92 |
+
for i, tip in enumerate(tips, 1):
|
| 93 |
+
output += f"{i}. {tip}\n\n"
|
| 94 |
+
return output
|
| 95 |
+
|
| 96 |
+
def get_breed_info_interface(breed_name):
|
| 97 |
+
"""واجهة معلومات السلالات"""
|
| 98 |
+
if not breed_name.strip():
|
| 99 |
+
return "يرجى اختيار سلالة من القائمة."
|
| 100 |
+
|
| 101 |
+
breed_info = ai.get_breed_info(breed_name)
|
| 102 |
+
if not breed_info:
|
| 103 |
+
return f"لم يتم العثور على معلومات عن سلالة {breed_name}."
|
| 104 |
|
| 105 |
+
output = f"## 🐔 معلومات سلالة {breed_name}\n\n"
|
| 106 |
+
output += f"**النوع:** {breed_info['type']}\n"
|
| 107 |
|
| 108 |
+
if 'egg_production' in breed_info:
|
| 109 |
+
output += f"**إنتاج البيض:** {breed_info['egg_production']}\n"
|
| 110 |
+
output += f"**لون البيض:** {breed_info['egg_color']}\n"
|
|
|
|
|
|
|
|
|
|
| 111 |
|
| 112 |
+
if 'growth_rate' in breed_info:
|
| 113 |
+
output += f"**معدل النمو:** {breed_info['growth_rate']}\n"
|
|
|
|
|
|
|
|
|
|
|
|
|
| 114 |
|
| 115 |
+
output += f"**الخصائص:** {breed_info['characteristics']}\n"
|
| 116 |
+
output += f"**المناعة:** {breed_info['immunity']}\n"
|
| 117 |
+
|
| 118 |
+
return output
|
| 119 |
|
| 120 |
+
def add_production_record(date, eggs_count, feed_consumed, notes):
|
| 121 |
+
"""إضافة سجل إنتاج"""
|
| 122 |
+
global production_data
|
| 123 |
+
|
| 124 |
+
try:
|
| 125 |
+
record = {
|
| 126 |
+
"date": date,
|
| 127 |
+
"eggs": int(eggs_count) if eggs_count else 0,
|
| 128 |
+
"feed": float(feed_consumed) if feed_consumed else 0.0,
|
| 129 |
+
"notes": notes or ""
|
| 130 |
+
}
|
| 131 |
+
production_data.append(record)
|
| 132 |
+
|
| 133 |
+
# حفظ البيانات في ملف
|
| 134 |
+
with open('/home/ubuntu/chicken_assistant/production_data.json', 'w', encoding='utf-8') as f:
|
| 135 |
+
json.dump(production_data, f, ensure_ascii=False, indent=2)
|
| 136 |
+
|
| 137 |
+
return f"✅ تم إضافة السجل بنجاح!\nالتاريخ: {date}\nعدد البيض: {record['eggs']}\nالعلف المستهلك: {record['feed']} كجم"
|
| 138 |
|
| 139 |
+
except ValueError:
|
| 140 |
+
return "❌ خطأ في البيانات المدخلة. يرجى التأكد من صحة الأرقام."
|
| 141 |
+
|
| 142 |
+
def generate_production_chart():
|
| 143 |
+
"""إنشاء مخطط الإنتاج"""
|
| 144 |
+
if not production_data:
|
| 145 |
+
return None
|
| 146 |
+
|
| 147 |
+
df = pd.DataFrame(production_data)
|
| 148 |
+
df['date'] = pd.to_datetime(df['date'])
|
| 149 |
+
df = df.sort_values('date')
|
| 150 |
+
|
| 151 |
+
# مخطط إنتاج البيض
|
| 152 |
+
fig = go.Figure()
|
| 153 |
+
|
| 154 |
+
fig.add_trace(go.Scatter(
|
| 155 |
+
x=df['date'],
|
| 156 |
+
y=df['eggs'],
|
| 157 |
+
mode='lines+markers',
|
| 158 |
+
name='إنتاج البيض',
|
| 159 |
+
line=dict(color='#FF6B6B', width=3),
|
| 160 |
+
marker=dict(size=8)
|
| 161 |
+
))
|
| 162 |
+
|
| 163 |
+
fig.update_layout(
|
| 164 |
+
title='📈 تطور إنتاج البيض',
|
| 165 |
+
xaxis_title='التاريخ',
|
| 166 |
+
yaxis_title='عدد البيض',
|
| 167 |
+
font=dict(family="Arial", size=12),
|
| 168 |
+
plot_bgcolor='white',
|
| 169 |
+
paper_bgcolor='white',
|
| 170 |
+
showlegend=True
|
| 171 |
+
)
|
| 172 |
+
|
| 173 |
+
return fig
|
| 174 |
+
|
| 175 |
+
def generate_feed_consumption_chart():
|
| 176 |
+
"""إنشاء مخطط استهلاك العلف"""
|
| 177 |
+
if not production_data:
|
| 178 |
+
return None
|
| 179 |
+
|
| 180 |
+
df = pd.DataFrame(production_data)
|
| 181 |
+
df['date'] = pd.to_datetime(df['date'])
|
| 182 |
+
df = df.sort_values('date')
|
| 183 |
+
|
| 184 |
+
fig = go.Figure()
|
| 185 |
+
|
| 186 |
+
fig.add_trace(go.Bar(
|
| 187 |
+
x=df['date'],
|
| 188 |
+
y=df['feed'],
|
| 189 |
+
name='استهلاك العلف',
|
| 190 |
+
marker_color='#4ECDC4'
|
| 191 |
+
))
|
| 192 |
+
|
| 193 |
+
fig.update_layout(
|
| 194 |
+
title='📊 استهلاك العلف اليومي',
|
| 195 |
+
xaxis_title='التاريخ',
|
| 196 |
+
yaxis_title='الكمية (ك��م)',
|
| 197 |
+
font=dict(family="Arial", size=12),
|
| 198 |
+
plot_bgcolor='white',
|
| 199 |
+
paper_bgcolor='white'
|
| 200 |
+
)
|
| 201 |
+
|
| 202 |
+
return fig
|
| 203 |
+
|
| 204 |
+
def load_existing_data():
|
| 205 |
+
"""تحميل البيانات الموجودة"""
|
| 206 |
+
global production_data
|
| 207 |
+
|
| 208 |
+
try:
|
| 209 |
+
if os.path.exists('/home/ubuntu/chicken_assistant/production_data.json'):
|
| 210 |
+
with open('/home/ubuntu/chicken_assistant/production_data.json', 'r', encoding='utf-8') as f:
|
| 211 |
+
production_data = json.load(f)
|
| 212 |
+
except:
|
| 213 |
+
production_data = []
|
| 214 |
|
| 215 |
+
# تحميل البيانات عند بدء التطبيق
|
| 216 |
+
load_existing_data()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 217 |
|
| 218 |
+
# إنشاء الواجهة الرئيسية
|
| 219 |
with gr.Blocks(
|
| 220 |
+
title="🐔 مساعد تربية الدجاج الذكي",
|
| 221 |
+
theme=gr.themes.Soft(
|
| 222 |
+
primary_hue="emerald",
|
| 223 |
+
secondary_hue="blue",
|
| 224 |
+
neutral_hue="slate",
|
| 225 |
+
font=[gr.themes.GoogleFont("Cairo"), "Arial", "sans-serif"]
|
| 226 |
+
),
|
| 227 |
css="""
|
| 228 |
.gradio-container {
|
| 229 |
+
max-width: 1200px !important;
|
| 230 |
+
margin: auto !important;
|
|
|
|
| 231 |
}
|
| 232 |
+
.main-header {
|
| 233 |
+
text-align: center;
|
| 234 |
+
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
| 235 |
color: white;
|
| 236 |
+
padding: 2rem;
|
| 237 |
+
border-radius: 15px;
|
| 238 |
+
margin-bottom: 2rem;
|
| 239 |
+
box-shadow: 0 10px 30px rgba(0,0,0,0.1);
|
| 240 |
}
|
| 241 |
+
.feature-card {
|
| 242 |
+
background: white;
|
| 243 |
+
border-radius: 12px;
|
| 244 |
+
padding: 1.5rem;
|
| 245 |
+
box-shadow: 0 4px 15px rgba(0,0,0,0.1);
|
| 246 |
+
border: 1px solid #e2e8f0;
|
| 247 |
+
transition: transform 0.3s ease;
|
| 248 |
}
|
| 249 |
+
.feature-card:hover {
|
| 250 |
+
transform: translateY(-5px);
|
| 251 |
+
box-shadow: 0 8px 25px rgba(0,0,0,0.15);
|
| 252 |
+
}
|
| 253 |
+
.tab-nav {
|
| 254 |
+
background: #f8fafc;
|
| 255 |
+
border-radius: 10px;
|
| 256 |
+
padding: 0.5rem;
|
| 257 |
+
}
|
| 258 |
+
.metric-card {
|
| 259 |
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
| 260 |
color: white;
|
| 261 |
+
padding: 1rem;
|
| 262 |
border-radius: 10px;
|
| 263 |
+
text-align: center;
|
| 264 |
+
margin: 0.5rem;
|
| 265 |
}
|
| 266 |
"""
|
| 267 |
) as app:
|
| 268 |
|
| 269 |
# العنوان الرئيسي
|
| 270 |
gr.HTML("""
|
| 271 |
+
<div class="main-header">
|
| 272 |
+
<h1 style="font-size: 2.5rem; margin-bottom: 0.5rem; font-weight: bold;">
|
| 273 |
+
🐔 مساعد تربية الدجاج الذكي
|
| 274 |
+
</h1>
|
| 275 |
+
<p style="font-size: 1.2rem; opacity: 0.9; margin: 0;">
|
| 276 |
+
نظام متطور لإدارة ومراقبة تربية الدجاج مع ذكاء اصطناعي متقدم
|
| 277 |
+
</p>
|
| 278 |
</div>
|
| 279 |
""")
|
| 280 |
|
| 281 |
+
# التبويبات الرئيسية
|
| 282 |
+
with gr.Tabs(elem_classes="tab-nav") as tabs:
|
| 283 |
|
| 284 |
+
# تبويب التشخيص
|
| 285 |
+
with gr.Tab("🔍 تشخيص الأمراض", elem_id="diagnosis-tab"):
|
| 286 |
+
gr.HTML("<div class='feature-card'>")
|
| 287 |
+
gr.Markdown("### 🩺 نظام التشخيص الذكي")
|
| 288 |
+
gr.Markdown("أدخل الأعراض التي تلاحظها على الدجاج وسيقوم النظام بتحليلها وتقديم التشخيص المحتمل مع العلاج المناسب.")
|
| 289 |
|
| 290 |
with gr.Row():
|
| 291 |
with gr.Column(scale=2):
|
| 292 |
symptoms_input = gr.Textbox(
|
| 293 |
+
label="الأعراض الملاحظة",
|
| 294 |
+
placeholder="مثال: خمول، فقدان شهية، إسهال أخضر، صعوبة في التنفس",
|
| 295 |
lines=3,
|
| 296 |
+
info="اكتب الأعراض مفصولة بفواصل"
|
| 297 |
)
|
| 298 |
+
diagnose_btn = gr.Button("🔍 تشخيص المرض", variant="primary", size="lg")
|
| 299 |
|
| 300 |
+
with gr.Column(scale=3):
|
| 301 |
+
diagnosis_output = gr.Markdown(label="نتائج التشخيص")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 302 |
|
| 303 |
+
gr.HTML("</div>")
|
|
|
|
| 304 |
|
| 305 |
+
# تبويب التغذية
|
| 306 |
+
with gr.Tab("🍽️ خطط التغذية", elem_id="nutrition-tab"):
|
| 307 |
+
gr.HTML("<div class='feature-card'>")
|
| 308 |
+
gr.Markdown("### 🌾 مولد خطط التغذية المتقدم")
|
| 309 |
+
gr.Markdown("احصل على خطة تغذية مخصصة تتضمن العلائق البديلة والمكملات الغذائية المناسبة.")
|
| 310 |
|
| 311 |
with gr.Row():
|
| 312 |
+
with gr.Column():
|
| 313 |
+
age_input = gr.Number(
|
| 314 |
+
label="العمر بالأسابيع",
|
| 315 |
+
value=10,
|
| 316 |
+
minimum=1,
|
| 317 |
+
maximum=100
|
| 318 |
+
)
|
| 319 |
+
chicken_type = gr.Dropdown(
|
| 320 |
+
label="نوع الدجاج",
|
| 321 |
+
choices=["بياض", "لاحم", "مختلط"],
|
| 322 |
+
value="بياض"
|
| 323 |
+
)
|
| 324 |
+
condition = gr.Dropdown(
|
| 325 |
+
label="الحالة الصحية",
|
| 326 |
+
choices=["صحي", "مريض", "نقاهة"],
|
| 327 |
+
value="صحي"
|
| 328 |
+
)
|
| 329 |
+
nutrition_btn = gr.Button("🍽️ إنشاء خطة التغذية", variant="primary", size="lg")
|
| 330 |
+
|
| 331 |
+
with gr.Column(scale=2):
|
| 332 |
+
nutrition_output = gr.Markdown(label="خطة التغذية")
|
| 333 |
|
| 334 |
+
gr.HTML("</div>")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 335 |
|
| 336 |
+
# تبويب الاستشارات
|
| 337 |
+
with gr.Tab("💬 استشارات عامة", elem_id="consultation-tab"):
|
| 338 |
+
gr.HTML("<div class='feature-card'>")
|
| 339 |
+
gr.Markdown("### 🤖 مساعد الاستشارات الذكي")
|
| 340 |
+
gr.Markdown("اطرح أي سؤال حول تربية الدجاج واحصل على إجابة مفصلة من خبير الذكاء الاصطناعي.")
|
| 341 |
|
| 342 |
with gr.Row():
|
| 343 |
with gr.Column(scale=2):
|
| 344 |
question_input = gr.Textbox(
|
| 345 |
label="سؤالك",
|
| 346 |
+
placeholder="مثال: كيف أزيد من إنتاج البيض؟ أو ما هي أفضل طريقة لتنظيف الحظيرة؟",
|
| 347 |
+
lines=3
|
|
|
|
| 348 |
)
|
| 349 |
+
ask_btn = gr.Button("💬 اسأل الخبير", variant="primary", size="lg")
|
| 350 |
|
| 351 |
+
with gr.Column(scale=3):
|
| 352 |
+
answer_output = gr.Markdown(label="الإجابة")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 353 |
|
| 354 |
+
gr.HTML("</div>")
|
|
|
|
| 355 |
|
| 356 |
+
# تبويب السلالات
|
| 357 |
+
with gr.Tab("🐔 معلومات السلالات", elem_id="breeds-tab"):
|
| 358 |
+
gr.HTML("<div class='feature-card'>")
|
| 359 |
+
gr.Markdown("### 📚 دليل سلالات الدجاج")
|
| 360 |
+
gr.Markdown("تعرف على خصائص وإنتاجية السلالات المختلفة لاختيار الأنسب لمشروعك.")
|
| 361 |
|
| 362 |
+
with gr.Row():
|
| 363 |
+
with gr.Column():
|
| 364 |
+
breed_selector = gr.Dropdown(
|
| 365 |
+
label="اختر السلالة",
|
| 366 |
+
choices=list(ai.breeds_db.keys()),
|
| 367 |
+
value="ليجهورن"
|
| 368 |
+
)
|
| 369 |
+
breed_info_btn = gr.Button("📖 عرض المعلومات", variant="primary", size="lg")
|
| 370 |
+
|
| 371 |
+
with gr.Column(scale=2):
|
| 372 |
+
breed_info_output = gr.Markdown(label="معلومات السلالة")
|
| 373 |
|
| 374 |
+
gr.HTML("</div>")
|
| 375 |
+
|
| 376 |
+
# تبويب النصائح
|
| 377 |
+
with gr.Tab("📝 نصائح يومية", elem_id="tips-tab"):
|
| 378 |
+
gr.HTML("<div class='feature-card'>")
|
| 379 |
+
gr.Markdown("### 💡 نصائح الخبراء")
|
| 380 |
+
gr.Markdown("احصل على نصائح يومية مفيدة لتحسين إدارة مزرعتك وزيادة الإنتاجية.")
|
| 381 |
|
| 382 |
+
with gr.Row():
|
| 383 |
+
with gr.Column():
|
| 384 |
+
tips_btn = gr.Button("📝 احصل على نصائح جديدة", variant="primary", size="lg")
|
| 385 |
+
|
| 386 |
+
with gr.Column(scale=2):
|
| 387 |
+
tips_output = gr.Markdown(label="النصائح اليومية")
|
| 388 |
|
| 389 |
+
gr.HTML("</div>")
|
| 390 |
+
|
| 391 |
+
# تبويب لوحة التحكم
|
| 392 |
+
with gr.Tab("📊 لوحة التحكم", elem_id="dashboard-tab"):
|
| 393 |
+
gr.HTML("<div class='feature-card'>")
|
| 394 |
+
gr.Markdown("### 📈 إدارة الإنتاج والمراقبة")
|
| 395 |
+
gr.Markdown("سجل بيانات الإنتاج اليومية وراقب الأداء من خلال المخططات التفاعلية.")
|
| 396 |
|
| 397 |
+
# قسم إدخال البيانات
|
| 398 |
+
with gr.Row():
|
| 399 |
+
with gr.Column():
|
| 400 |
+
gr.Markdown("#### ➕ إضافة سجل جديد")
|
| 401 |
+
record_date = gr.Textbox(label="التاريخ", value=datetime.now().strftime("%Y-%m-%d"), placeholder="YYYY-MM-DD")
|
| 402 |
+
eggs_count = gr.Number(label="عدد البيض", value=0, minimum=0)
|
| 403 |
+
feed_consumed = gr.Number(label="العلف المستهلك (كجم)", value=0.0, minimum=0, step=0.1)
|
| 404 |
+
notes = gr.Textbox(label="ملاحظات", placeholder="أي ملاحظات إضافية...")
|
| 405 |
+
add_record_btn = gr.Button("➕ إضافة السجل", variant="primary")
|
| 406 |
+
record_status = gr.Markdown()
|
| 407 |
+
|
| 408 |
+
with gr.Column():
|
| 409 |
+
gr.Markdown("#### 📊 إحصائيات سريعة")
|
| 410 |
+
if production_data:
|
| 411 |
+
total_eggs = sum(record.get('eggs', 0) for record in production_data)
|
| 412 |
+
total_feed = sum(record.get('feed', 0) for record in production_data)
|
| 413 |
+
avg_eggs = total_eggs / len(production_data) if production_data else 0
|
| 414 |
+
|
| 415 |
+
gr.HTML(f"""
|
| 416 |
+
<div style="display: grid; grid-template-columns: 1fr 1fr; gap: 1rem;">
|
| 417 |
+
<div class="metric-card">
|
| 418 |
+
<h3>🥚 إجمالي البيض</h3>
|
| 419 |
+
<h2>{total_eggs}</h2>
|
| 420 |
+
</div>
|
| 421 |
+
<div class="metric-card">
|
| 422 |
+
<h3>🌾 إجمالي العلف</h3>
|
| 423 |
+
<h2>{total_feed:.1f} كجم</h2>
|
| 424 |
+
</div>
|
| 425 |
+
<div class="metric-card">
|
| 426 |
+
<h3>📈 متوسط البيض</h3>
|
| 427 |
+
<h2>{avg_eggs:.1f}/يوم</h2>
|
| 428 |
+
</div>
|
| 429 |
+
<div class="metric-card">
|
| 430 |
+
<h3>📅 عدد السجلات</h3>
|
| 431 |
+
<h2>{len(production_data)}</h2>
|
| 432 |
+
</div>
|
| 433 |
+
</div>
|
| 434 |
+
""")
|
| 435 |
|
| 436 |
+
# قسم المخططات
|
| 437 |
+
with gr.Row():
|
| 438 |
+
with gr.Column():
|
| 439 |
+
production_chart = gr.Plot(label="📈 مخطط إنتاج البيض")
|
| 440 |
+
with gr.Column():
|
| 441 |
+
feed_chart = gr.Plot(label="📊 مخطط استهلاك العلف")
|
| 442 |
|
| 443 |
+
# تحديث المخططات عند بدء التطبيق
|
| 444 |
+
app.load(
|
| 445 |
+
fn=lambda: (generate_production_chart(), generate_feed_consumption_chart()),
|
| 446 |
+
outputs=[production_chart, feed_chart]
|
| 447 |
+
)
|
| 448 |
|
| 449 |
+
gr.HTML("</div>")
|
|
|
|
| 450 |
|
| 451 |
+
# ربط الأحداث
|
| 452 |
+
diagnose_btn.click(
|
| 453 |
+
fn=diagnose_disease_interface,
|
| 454 |
+
inputs=[symptoms_input],
|
| 455 |
+
outputs=[diagnosis_output]
|
| 456 |
+
)
|
| 457 |
+
|
| 458 |
+
nutrition_btn.click(
|
| 459 |
+
fn=generate_nutrition_plan_interface,
|
| 460 |
+
inputs=[age_input, chicken_type, condition],
|
| 461 |
+
outputs=[nutrition_output]
|
| 462 |
+
)
|
| 463 |
|
| 464 |
+
ask_btn.click(
|
| 465 |
+
fn=answer_question_interface,
|
| 466 |
+
inputs=[question_input],
|
| 467 |
+
outputs=[answer_output]
|
| 468 |
+
)
|
| 469 |
|
| 470 |
+
breed_info_btn.click(
|
| 471 |
+
fn=get_breed_info_interface,
|
| 472 |
+
inputs=[breed_selector],
|
| 473 |
+
outputs=[breed_info_output]
|
| 474 |
+
)
|
| 475 |
|
| 476 |
+
tips_btn.click(
|
| 477 |
+
fn=get_daily_tips_interface,
|
| 478 |
+
outputs=[tips_output]
|
| 479 |
+
)
|
| 480 |
|
| 481 |
+
add_record_btn.click(
|
| 482 |
+
fn=add_production_record,
|
| 483 |
+
inputs=[record_date, eggs_count, feed_consumed, notes],
|
| 484 |
+
outputs=[record_status]
|
| 485 |
+
).then(
|
| 486 |
+
fn=lambda: (generate_production_chart(), generate_feed_consumption_chart()),
|
| 487 |
+
outputs=[production_chart, feed_chart]
|
| 488 |
+
)
|
| 489 |
|
| 490 |
+
# تحميل النصائح عند بدء التطبيق
|
| 491 |
+
app.load(fn=get_daily_tips_interface, outputs=[tips_output])
|
|
|
|
| 492 |
|
| 493 |
# تشغيل التطبيق
|
| 494 |
if __name__ == "__main__":
|
|
|
|
| 496 |
server_name="0.0.0.0",
|
| 497 |
server_port=7860,
|
| 498 |
share=False,
|
| 499 |
+
show_error=True,
|
| 500 |
+
quiet=False
|
| 501 |
)
|
| 502 |
|
chicken_ai.py
CHANGED
|
@@ -1,13 +1,15 @@
|
|
| 1 |
-
import
|
| 2 |
import re
|
|
|
|
| 3 |
from typing import Dict, List, Tuple, Optional
|
| 4 |
from dataclasses import dataclass
|
| 5 |
from datetime import datetime
|
| 6 |
|
| 7 |
@dataclass
|
| 8 |
-
class
|
| 9 |
-
|
| 10 |
-
|
|
|
|
| 11 |
treatment: str
|
| 12 |
prevention: str
|
| 13 |
hygiene: str
|
|
@@ -16,275 +18,429 @@ class Disease:
|
|
| 16 |
class NutritionPlan:
|
| 17 |
age_weeks: int
|
| 18 |
chicken_type: str
|
| 19 |
-
|
| 20 |
-
|
| 21 |
-
|
| 22 |
-
|
| 23 |
-
|
|
|
|
|
|
|
| 24 |
|
| 25 |
-
class
|
| 26 |
def __init__(self):
|
| 27 |
-
self.
|
| 28 |
-
self.
|
| 29 |
-
self.
|
| 30 |
-
self.
|
| 31 |
|
| 32 |
-
def
|
| 33 |
-
"""تحميل قاعدة بيانات الأمراض"""
|
| 34 |
-
|
| 35 |
-
|
| 36 |
-
|
| 37 |
-
|
| 38 |
-
treatment
|
| 39 |
-
prevention
|
| 40 |
-
hygiene
|
| 41 |
-
|
| 42 |
-
|
| 43 |
-
|
| 44 |
-
|
| 45 |
-
treatment
|
| 46 |
-
prevention
|
| 47 |
-
hygiene
|
| 48 |
-
|
| 49 |
-
|
| 50 |
-
|
| 51 |
-
|
| 52 |
-
treatment
|
| 53 |
-
prevention
|
| 54 |
-
hygiene
|
| 55 |
-
|
| 56 |
-
|
| 57 |
-
|
| 58 |
-
|
| 59 |
-
treatment
|
| 60 |
-
prevention
|
| 61 |
-
hygiene
|
| 62 |
-
|
| 63 |
-
|
| 64 |
-
|
| 65 |
-
|
| 66 |
-
treatment
|
| 67 |
-
prevention
|
| 68 |
-
hygiene
|
| 69 |
-
|
| 70 |
-
|
| 71 |
-
|
| 72 |
-
|
| 73 |
-
treatment
|
| 74 |
-
prevention
|
| 75 |
-
hygiene
|
| 76 |
-
|
| 77 |
-
|
| 78 |
-
|
| 79 |
-
|
| 80 |
-
treatment
|
| 81 |
-
prevention
|
| 82 |
-
hygiene
|
| 83 |
-
|
| 84 |
-
|
| 85 |
-
|
| 86 |
-
|
| 87 |
-
treatment
|
| 88 |
-
prevention
|
| 89 |
-
hygiene
|
| 90 |
-
|
| 91 |
-
|
| 92 |
-
|
| 93 |
-
|
| 94 |
-
treatment
|
| 95 |
-
prevention
|
| 96 |
-
hygiene
|
| 97 |
-
|
| 98 |
-
|
| 99 |
-
|
| 100 |
-
|
| 101 |
-
treatment
|
| 102 |
-
prevention
|
| 103 |
-
hygiene
|
| 104 |
-
|
| 105 |
-
|
| 106 |
-
return diseases
|
| 107 |
|
| 108 |
-
def
|
| 109 |
-
"""تحميل
|
| 110 |
-
|
| 111 |
-
"
|
| 112 |
-
|
| 113 |
-
|
| 114 |
-
|
| 115 |
-
|
| 116 |
-
|
| 117 |
-
|
| 118 |
-
|
| 119 |
-
|
| 120 |
-
|
| 121 |
-
|
| 122 |
-
|
| 123 |
-
|
| 124 |
-
|
| 125 |
-
|
| 126 |
-
|
| 127 |
-
|
| 128 |
-
|
| 129 |
-
|
| 130 |
-
|
| 131 |
-
|
| 132 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 133 |
}
|
| 134 |
-
return plans
|
| 135 |
|
| 136 |
-
def
|
| 137 |
-
"""تحميل ا
|
| 138 |
-
return
|
| 139 |
-
"
|
| 140 |
-
|
| 141 |
-
|
| 142 |
-
|
| 143 |
-
|
| 144 |
-
|
| 145 |
-
|
| 146 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 147 |
|
| 148 |
-
def
|
| 149 |
-
"""تحميل ن
|
| 150 |
-
return
|
| 151 |
-
"
|
| 152 |
-
|
| 153 |
-
|
| 154 |
-
|
| 155 |
-
|
| 156 |
-
|
| 157 |
-
|
| 158 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 159 |
|
| 160 |
-
def diagnose_disease(self, symptoms:
|
| 161 |
-
"""تشخيص المرض بناءً على الأعراض"""
|
|
|
|
| 162 |
results = []
|
| 163 |
|
| 164 |
-
for disease in self.
|
| 165 |
-
|
| 166 |
-
|
| 167 |
-
|
| 168 |
-
|
|
|
|
|
|
|
| 169 |
if self._symptoms_match(symptom, disease_symptom):
|
| 170 |
-
|
|
|
|
|
|
|
| 171 |
break
|
| 172 |
|
| 173 |
-
if
|
| 174 |
-
|
| 175 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 176 |
|
| 177 |
-
# ترتيب النتائج حسب
|
| 178 |
-
results.sort(key=lambda x: x
|
| 179 |
return results[:3] # أفضل 3 تشخيصات
|
| 180 |
|
| 181 |
-
def _symptoms_match(self,
|
| 182 |
-
"""فحص تطابق الأعراض"""
|
| 183 |
-
|
| 184 |
-
|
| 185 |
|
| 186 |
-
#
|
| 187 |
-
|
| 188 |
-
|
| 189 |
-
|
| 190 |
-
|
| 191 |
-
if
|
| 192 |
-
return
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 193 |
|
| 194 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 195 |
if age_weeks <= 6:
|
| 196 |
-
|
| 197 |
elif age_weeks <= 18:
|
| 198 |
-
|
| 199 |
-
elif chicken_type == "
|
| 200 |
-
|
| 201 |
else:
|
| 202 |
-
|
| 203 |
|
| 204 |
-
|
| 205 |
-
plans = self.nutrition_plans[category]
|
| 206 |
-
# العثور على أقرب خطة للعمر المطلوب
|
| 207 |
-
best_plan = min(plans, key=lambda p: abs(p.age_weeks - age_weeks))
|
| 208 |
-
return best_plan
|
| 209 |
|
| 210 |
-
|
| 211 |
-
|
| 212 |
-
|
| 213 |
-
|
| 214 |
-
question_lower = question.lower()
|
| 215 |
|
| 216 |
-
#
|
| 217 |
-
if
|
| 218 |
-
|
| 219 |
-
|
| 220 |
-
|
| 221 |
-
|
| 222 |
-
|
| 223 |
-
|
| 224 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 225 |
|
| 226 |
-
#
|
| 227 |
-
|
| 228 |
-
|
|
|
|
|
|
|
| 229 |
|
| 230 |
-
|
| 231 |
-
|
| 232 |
-
|
| 233 |
-
|
| 234 |
-
• توفير خضروات ورقية خضراء
|
| 235 |
-
• الحفاظ على درجة حرارة مناسبة (18-24°م)"""
|
| 236 |
-
|
| 237 |
-
# أسئلة حول التغذية
|
| 238 |
-
elif any(word in question_lower for word in ["علف", "طعام", "تغذية", "أكل"]):
|
| 239 |
-
return """نصائح التغذية السليمة:
|
| 240 |
|
| 241 |
-
|
| 242 |
-
|
| 243 |
-
|
| 244 |
-
|
| 245 |
-
• تجنب الطعام المتعفن أو المالح
|
| 246 |
-
• وفر حصى صغيرة للهضم"""
|
| 247 |
|
| 248 |
-
#
|
| 249 |
-
|
| 250 |
-
return """نصائح النظافة:
|
| 251 |
-
|
| 252 |
-
• قلب الفرشة يومياً للحفاظ على جفافها
|
| 253 |
-
• أضف طبقة جديدة من الفرشة بانتظام
|
| 254 |
-
• أزل الفرشة المبللة والمتسخة فوراً
|
| 255 |
-
• نظف المعالف والمشارب يومياً
|
| 256 |
-
• طهر الحظيرة بالكامل بين الدورات
|
| 257 |
-
• تخلص من الطيور النافقة بطريقة آمنة"""
|
| 258 |
|
| 259 |
-
|
| 260 |
-
|
| 261 |
-
|
| 262 |
-
|
| 263 |
-
|
| 264 |
-
|
| 265 |
-
|
| 266 |
-
|
| 267 |
-
|
| 268 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 269 |
|
| 270 |
-
|
| 271 |
-
|
| 272 |
-
|
| 273 |
-
|
| 274 |
-
|
| 275 |
-
|
| 276 |
-
|
| 277 |
-
|
| 278 |
-
|
| 279 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 280 |
|
| 281 |
-
def
|
| 282 |
-
"""الحصول على
|
| 283 |
-
|
| 284 |
-
return random.choice(self.daily_tips)
|
| 285 |
|
| 286 |
-
def
|
| 287 |
-
"""الحصول على نص
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 288 |
import random
|
| 289 |
-
return random.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 290 |
|
|
|
|
| 1 |
+
import os
|
| 2 |
import re
|
| 3 |
+
import json
|
| 4 |
from typing import Dict, List, Tuple, Optional
|
| 5 |
from dataclasses import dataclass
|
| 6 |
from datetime import datetime
|
| 7 |
|
| 8 |
@dataclass
|
| 9 |
+
class DiagnosisResult:
|
| 10 |
+
disease: str
|
| 11 |
+
probability: float
|
| 12 |
+
symptoms_matched: List[str]
|
| 13 |
treatment: str
|
| 14 |
prevention: str
|
| 15 |
hygiene: str
|
|
|
|
| 18 |
class NutritionPlan:
|
| 19 |
age_weeks: int
|
| 20 |
chicken_type: str
|
| 21 |
+
condition: str
|
| 22 |
+
protein_percentage: float
|
| 23 |
+
energy_kcal: int
|
| 24 |
+
daily_amount: int
|
| 25 |
+
feeding_frequency: int
|
| 26 |
+
supplements: List[str]
|
| 27 |
+
alternative_feeds: List[str]
|
| 28 |
|
| 29 |
+
class AdvancedChickenAI:
|
| 30 |
def __init__(self):
|
| 31 |
+
self.diseases_db = self._load_diseases_database()
|
| 32 |
+
self.nutrition_db = self._load_nutrition_database()
|
| 33 |
+
self.breeds_db = self._load_breeds_database()
|
| 34 |
+
self.alternative_feeds_db = self._load_alternative_feeds_database()
|
| 35 |
|
| 36 |
+
def _load_diseases_database(self) -> Dict:
|
| 37 |
+
"""تحميل قاعدة بيانات الأمراض المحدثة"""
|
| 38 |
+
return {
|
| 39 |
+
"نيوكاسل": {
|
| 40 |
+
"symptoms": ["خمول", "فقدان شهية", "إسهال أخضر", "أعراض تنفسية", "التواء الرقبة", "شلل", "نفوق مفاجئ"],
|
| 41 |
+
"probability_weights": {"خمول": 0.8, "فقدان شهية": 0.9, "إسهال أخضر": 0.95, "أعراض تنفسية": 0.9, "التواء الرقبة": 0.98, "شلل": 0.95, "نفوق مفاجئ": 0.9},
|
| 42 |
+
"treatment": "لا يوجد علاج نوعي للفيروس. استخدام مضادات حيوية واسعة الطيف (التايلوزين أو الدوكسيسايكلين) للسيطرة على العدوى البكتيرية الثانوية. إضافة فيتامينات A, D, E وأملاح معدنية في ماء الشرب لدعم المناعة.",
|
| 43 |
+
"prevention": "تطبيق برنامج تحصين صارم يتضمن لقاحات حية وميتة. التشديد على إجراءات الأمن الحيوي الصارمة لمنع دخول الفيروس للمزرعة. المراقبة المستمرة للقطيع.",
|
| 44 |
+
"hygiene": "تطهير شامل للحظائر والمعدات. التحكم في حركة الأشخاص والمركبات. مكافحة القوارض والطيور البرية."
|
| 45 |
+
},
|
| 46 |
+
"كوكسيديا": {
|
| 47 |
+
"symptoms": ["إسهال دموي", "خمول", "فقدان شهية", "شحوب", "انخفاض النمو", "ريش منفوش"],
|
| 48 |
+
"probability_weights": {"إسهال دموي": 0.95, "خمول": 0.8, "فقدان شهية": 0.85, "شحوب": 0.9, "انخفاض النمو": 0.8, "ريش منفوش": 0.7},
|
| 49 |
+
"treatment": "استخدام مضادات الكوكسيديا الحديثة (التولترازوريل أو الديكلازوريل) بجرعات دقيقة. إضافة فيتامين K لتقليل النزيف المعوي. في الحالات الشديدة، علاج جماعي للقطيع.",
|
| 50 |
+
"prevention": "إدارة الفرشة بشكل ممتاز لضمان جفافها المستمر. استخدام علف يحتوي على مضادات كوكسيديا بشكل وقائي. التناوب بين أنواع مضادات الكوكسيديا لمنع تطور المقاومة.",
|
| 51 |
+
"hygiene": "تنظيف وتطهير الحظائر بانتظام. تغيير الفرشة عند الحاجة. ضمان جفاف البيئة."
|
| 52 |
+
},
|
| 53 |
+
"إسهال أبيض": {
|
| 54 |
+
"symptoms": ["إسهال أبيض", "خمول", "فقدان شهية", "عطش شديد", "انخفاض النمو", "نفوق في الكتاكيت"],
|
| 55 |
+
"probability_weights": {"إسهال أبيض": 0.98, "خمول": 0.8, "فقدان شهية": 0.85, "عطش شديد": 0.9, "انخفاض النمو": 0.8, "نفوق في الكتاكيت": 0.9},
|
| 56 |
+
"treatment": "استخدام مضادات حيوية فعالة ضد السالمونيلا مثل الفلورفينيكول أو الجنتاميسين تحت إشراف بيطري. عزل الطيور المصابة والتخلص منها بشكل آمن.",
|
| 57 |
+
"prevention": "الشراء من مصادر موثوقة ومعتمدة وخالية من السالمونيلا. تطبيق برامج اختبار منتظمة للقطيع الأم للكشف عن حاملي المرض.",
|
| 58 |
+
"hygiene": "التطهير الشامل للفقاسات والحظائر ومعدات التربية باستخدام مطهرات قوية."
|
| 59 |
+
},
|
| 60 |
+
"جدري الدجاج": {
|
| 61 |
+
"symptoms": ["بثور على الوجه", "تورم الوجه", "صعوبة في التنفس", "انخفاض إنتاج البيض", "خمول"],
|
| 62 |
+
"probability_weights": {"بثور على الوجه": 0.98, "تورم الوجه": 0.9, "صعوبة في التنفس": 0.85, "انخفاض إنتاج البيض": 0.8, "خمول": 0.7},
|
| 63 |
+
"treatment": "لا يوجد علاج نوعي للفيروس. استخدام مطهرات موضعية (صبغة اليود أو محلول برمنجنات البوتاسيوم) على البثور الخارجية. استخدام مضادات حيوية واسعة الطيف إذا حدثت عدوى بكتيرية ثانوية.",
|
| 64 |
+
"prevention": "التحصين الإجباري للقطيع في المناطق الموبوءة باستخدام لقاح الجدري (طريقة الوخز بالجناح). مكافحة الحشرات الناقلة للمرض مثل البعوض والذباب.",
|
| 65 |
+
"hygiene": "توفير بيئة نظيفة وجافة. استخدام المبيدات الحشرية الآمنة للدواجن."
|
| 66 |
+
},
|
| 67 |
+
"التهاب الشعب الهوائية": {
|
| 68 |
+
"symptoms": ["سعال", "عطس", "رشح", "صعوبة في التنفس", "انخفاض إنتاج البيض"],
|
| 69 |
+
"probability_weights": {"سعال": 0.9, "عطس": 0.85, "رشح": 0.8, "صعوبة في التنفس": 0.9, "انخفاض إنتاج البيض": 0.8},
|
| 70 |
+
"treatment": "لا يوجد علاج نوعي للفيروس. استخدام مضادات حيوية للسيطرة على العدوى البكتيرية الثانوية. إضافة فيتامينات A و E ومحفزات مناعة في ماء الشرب. تحسين التهوية وتدفئة الحظيرة.",
|
| 71 |
+
"prevention": "تطبيق برنامج تحصين دقيق باستخدام اللقاحات المناسبة للسلالات المنتشرة في المنطقة. التشديد على الأمن الحيوي. تجنب الإجهاد البيئي.",
|
| 72 |
+
"hygiene": "تحسين التهوية. تقليل مستويات الغبار والأمونيا في الحظيرة."
|
| 73 |
+
},
|
| 74 |
+
"مايكوبلازما": {
|
| 75 |
+
"symptoms": ["أعراض تنفسية", "تورم الوجه", "إفرازات أنفية", "انخفاض إنتاج البيض"],
|
| 76 |
+
"probability_weights": {"أعراض تنفسية": 0.9, "تورم الوجه": 0.85, "إفرازات أنفية": 0.9, "انخفاض إنتاج البيض": 0.8},
|
| 77 |
+
"treatment": "استخدام مضادات حيوية فعالة ضد المايكوبلازما مثل التايلوزين، التيلمايكوسين، أو الدوكسيسايكلين. يجب أن يكون العلاج مبكراً ولفترة كافية.",
|
| 78 |
+
"prevention": "الشراء من قطعان أم خالية من المايكوبلازما. تقليل مستويات الغبار والأمونيا في الحظيرة عن طريق التهوية الجيدة وإدارة الفرشة.",
|
| 79 |
+
"hygiene": "تحسين التهوية. إدارة الفرشة بشكل جيد. تقليل الغبار."
|
| 80 |
+
},
|
| 81 |
+
"كوليرا": {
|
| 82 |
+
"symptoms": ["إسهال أصفر", "خمول", "فقدان شهية", "انتفاخ الوجه", "صعوبة في التنفس"],
|
| 83 |
+
"probability_weights": {"إسهال أصفر": 0.9, "خمول": 0.8, "فقدان شهية": 0.85, "انتفاخ الوجه": 0.9, "صعوبة في التنفس": 0.8},
|
| 84 |
+
"treatment": "استخدام مضادات حيوية فعالة مثل السلفا، التتراسيكلين، أو الفلورفينيكول. يجب أن يكون العلاج مبكراً ومستمراً. في حالات التفشي، قد يكون العلاج الجماعي ضرورياً.",
|
| 85 |
+
"prevention": "التحصين المنتظم ضد الكوليرا. مكافحة القوارض والطيور البرية التي تعتبر خزاناً للمرض. تطبيق إجراءات أمن حيوي صارمة.",
|
| 86 |
+
"hygiene": "نظافة وتطهير الحظائر ومصادر المياه. مكافحة القوارض."
|
| 87 |
+
},
|
| 88 |
+
"ماريك": {
|
| 89 |
+
"symptoms": ["شلل في الأرجل", "شلل في الأجنحة", "عمى", "أورام", "نفوق"],
|
| 90 |
+
"probability_weights": {"شلل في الأرجل": 0.95, "شلل في الأجنحة": 0.9, "عمى": 0.85, "أورام": 0.9, "نفوق": 0.8},
|
| 91 |
+
"treatment": "لا يوجد علاج للمرض بعد الإصابة. التركيز على الرعاية الداعمة فقط.",
|
| 92 |
+
"prevention": "التحصين الإجباري للكتاكيت في عمر يوم واحد (في الفقاسة) باستخدام لقاح ماريك. التأكد من جودة اللقاح وطريقة التطبيق الصحيحة.",
|
| 93 |
+
"hygiene": "نظافة وتطهير الحظائر بشكل جيد قبل إدخال الكتاكيت. الشراء من مصادر موثوقة."
|
| 94 |
+
},
|
| 95 |
+
"التهاب الأمعاء النخري": {
|
| 96 |
+
"symptoms": ["إسهال", "خمول", "فقدان شهية", "انتفاخ البطن", "نفوق مفاجئ"],
|
| 97 |
+
"probability_weights": {"إسهال": 0.9, "خمول": 0.8, "فقدان شهية": 0.85, "انتفاخ البطن": 0.9, "نفوق مفاجئ": 0.8},
|
| 98 |
+
"treatment": "استخدام مضادات حيوية مثل الأموكسيسيلين، الباسيتراسين، أو الميترونيدازول. يمكن إضافة البروبيوتيك والبريبايوتيك لدعم صحة الأمعاء.",
|
| 99 |
+
"prevention": "إدارة الفرشة الجيدة والجافة. تجنب التغيرات المفاجئة في العلف. استخدام البروبيوتيك والبريبايوتيك بشكل وقائي.",
|
| 100 |
+
"hygiene": "إدارة الفرشة بشكل جيد. التحكم في العوامل المسببة للإجهاد."
|
| 101 |
+
},
|
| 102 |
+
"إجهاد حراري": {
|
| 103 |
+
"symptoms": ["لهاث", "انتشار الأجنحة", "انخفاض إنتاج البيض", "فقدان شهية", "خمول"],
|
| 104 |
+
"probability_weights": {"لهاث": 0.95, "انتشار الأجنحة": 0.9, "انخفاض إنتاج البيض": 0.85, "فقدان شهية": 0.8, "خمول": 0.8},
|
| 105 |
+
"treatment": "توفير مياه شرب باردة ونظيفة مع إضافة فيتامين C والأملاح المعدنية. رش الدجاج بالماء البارد (رذاذ خفيف). استخدام مراوح تبريد وأنظمة تبريد تبخيري.",
|
| 106 |
+
"prevention": "تصميم حظائر جيدة التهوية والعزل. توفير الظل الكافي. استخدام أنظمة تبريد فعالة. تقليل كثافة الطيور في الحظيرة.",
|
| 107 |
+
"hygiene": "توفير مياه شرب كافية. إضافة مضادات الإجهاد الحراري للعلف أو الماء."
|
| 108 |
+
}
|
| 109 |
+
}
|
|
|
|
| 110 |
|
| 111 |
+
def _load_nutrition_database(self) -> Dict:
|
| 112 |
+
"""تحميل قاعدة بيانات التغذية المحدثة"""
|
| 113 |
+
return {
|
| 114 |
+
"starter": { # 0-6 أسابيع
|
| 115 |
+
"protein": {"بياض": 20-22, "لاحم": 22-24, "مختلط": 21-23},
|
| 116 |
+
"energy": {"بياض": 2900-3000, "لاحم": 3000-3100, "مختلط": 2950-3050},
|
| 117 |
+
"daily_amount": {"بياض": 25-40, "لاحم": 30-50, "مختلط": 28-45},
|
| 118 |
+
"feeding_frequency": 4,
|
| 119 |
+
"supplements": ["فيتامين A", "فيتامين D3", "فيتامين E", "فيتامين K", "فيتامينات B المركبة"]
|
| 120 |
+
},
|
| 121 |
+
"grower": { # 7-18 أسابيع
|
| 122 |
+
"protein": {"بياض": 16-18, "لاحم": 18-20, "مختلط": 17-19},
|
| 123 |
+
"energy": {"بياض": 2800-2900, "لاحم": 3100-3200, "مختلط": 2950-3050},
|
| 124 |
+
"daily_amount": {"بياض": 60-80, "لاحم": 80-120, "مختلط": 70-100},
|
| 125 |
+
"feeding_frequency": 3,
|
| 126 |
+
"supplements": ["كالسيوم", "فوسفور", "فيتامين D3", "فيتامينات B"]
|
| 127 |
+
},
|
| 128 |
+
"layer": { # 19+ أسابيع (بياض)
|
| 129 |
+
"protein": {"بياض": 16-18, "مختلط": 16-18},
|
| 130 |
+
"energy": {"بياض": 2700-2800, "مختلط": 2750-2850},
|
| 131 |
+
"daily_amount": {"بياض": 110-130, "مختلط": 115-135},
|
| 132 |
+
"feeding_frequency": 2,
|
| 133 |
+
"supplements": ["كالسيوم عالي", "فيتامين D3", "فيتامين E", "أوميغا 3"]
|
| 134 |
+
},
|
| 135 |
+
"finisher": { # 6+ أسابيع (لاحم)
|
| 136 |
+
"protein": {"لاحم": 18-20},
|
| 137 |
+
"energy": {"لاحم": 3200-3300},
|
| 138 |
+
"daily_amount": {"لاحم": 150-200},
|
| 139 |
+
"feeding_frequency": 2,
|
| 140 |
+
"supplements": ["فيتامين E", "سيلينيوم", "مضادات الأكسدة"]
|
| 141 |
+
}
|
| 142 |
}
|
|
|
|
| 143 |
|
| 144 |
+
def _load_breeds_database(self) -> Dict:
|
| 145 |
+
"""تحميل قاعدة بيانات السلالات"""
|
| 146 |
+
return {
|
| 147 |
+
"ليجهورن": {
|
| 148 |
+
"type": "بياض",
|
| 149 |
+
"egg_production": "280-320 بيضة/سنة",
|
| 150 |
+
"egg_color": "أبيض",
|
| 151 |
+
"characteristics": "نشيطة، صغيرة الحجم، استهلاك قليل للعلف",
|
| 152 |
+
"immunity": "جيدة"
|
| 153 |
+
},
|
| 154 |
+
"رود آيلاند": {
|
| 155 |
+
"type": "ثنائي الغرض",
|
| 156 |
+
"egg_production": "200-300 بيضة/سنة",
|
| 157 |
+
"egg_color": "بني",
|
| 158 |
+
"characteristics": "قوية ومقاومة، ريش أحمر داكن",
|
| 159 |
+
"immunity": "ممتازة"
|
| 160 |
+
},
|
| 161 |
+
"أوسترالورب": {
|
| 162 |
+
"type": "ثنائي الغرض",
|
| 163 |
+
"egg_production": "250-300 بيضة/سنة",
|
| 164 |
+
"egg_color": "بني",
|
| 165 |
+
"characteristics": "هادئة ومطيعة، سوداء اللون",
|
| 166 |
+
"immunity": "قوية"
|
| 167 |
+
},
|
| 168 |
+
"فيومي": {
|
| 169 |
+
"type": "بياض",
|
| 170 |
+
"egg_production": "150-200 بيضة/سنة",
|
| 171 |
+
"egg_color": "أبيض/كريمي",
|
| 172 |
+
"characteristics": "مقاومة للأمراض، تتحمل الظروف الصعبة",
|
| 173 |
+
"immunity": "ممتازة"
|
| 174 |
+
},
|
| 175 |
+
"ساسكس": {
|
| 176 |
+
"type": "ثنائي الغرض",
|
| 177 |
+
"egg_production": "200-250 بيضة/سنة",
|
| 178 |
+
"egg_color": "بني",
|
| 179 |
+
"characteristics": "هادئة ومطيعة، ريش أبيض مع أطراف سوداء",
|
| 180 |
+
"immunity": "جيدة"
|
| 181 |
+
},
|
| 182 |
+
"روس 308": {
|
| 183 |
+
"type": "لاحم",
|
| 184 |
+
"growth_rate": "5-7 أسابيع للتسويق",
|
| 185 |
+
"characteristics": "نمو سريع، كفاءة تحويل علف عالية",
|
| 186 |
+
"immunity": "جيدة"
|
| 187 |
+
},
|
| 188 |
+
"كوب 500": {
|
| 189 |
+
"type": "لاحم",
|
| 190 |
+
"growth_rate": "5-7 أسابيع للتسويق",
|
| 191 |
+
"characteristics": "نمو سريع، إنتاجية عالية من اللحم",
|
| 192 |
+
"immunity": "جيدة"
|
| 193 |
+
}
|
| 194 |
+
}
|
| 195 |
|
| 196 |
+
def _load_alternative_feeds_database(self) -> Dict:
|
| 197 |
+
"""تحميل قاعدة بيانات العلائق البديلة"""
|
| 198 |
+
return {
|
| 199 |
+
"protein_sources": {
|
| 200 |
+
"نباتية": [
|
| 201 |
+
"كسب عباد الشمس - بديل جيد لكسب فول الصويا",
|
| 202 |
+
"كسب الكتان - مصدر للبروتين والأوميغا 3",
|
| 203 |
+
"البقوليات (الفول، العدس، الحمص) - بعد المعالجة الحرارية",
|
| 204 |
+
"الخميرة - غنية بالبروتين وفيتامينات B",
|
| 205 |
+
"السبيرولينا - طحالب غنية بالبروتين والفيتامينات"
|
| 206 |
+
],
|
| 207 |
+
"حيوانية": [
|
| 208 |
+
"مسحوق اللحم والعظم - غني بالبروتين والكالسيوم والفوسفور",
|
| 209 |
+
"مسحوق السمك - بروتين عالي الجودة",
|
| 210 |
+
"ديدان الأرض والحشرات - مصادر بروتين مستدامة"
|
| 211 |
+
]
|
| 212 |
+
},
|
| 213 |
+
"energy_sources": [
|
| 214 |
+
"الشعير - بديل جزئي للذرة، غني بالألياف",
|
| 215 |
+
"القمح - مصدر جيد للطاقة",
|
| 216 |
+
"الأرز المكسور - مصدر طاقة عالي للكتاكيت",
|
| 217 |
+
"الدهون والزيوت النباتية - لزيادة محتوى الطاقة",
|
| 218 |
+
"البطاطا الحلوة والبطاطس المطبوخة - مصادر كربوهيدرات"
|
| 219 |
+
],
|
| 220 |
+
"vitamin_sources": [
|
| 221 |
+
"الأعلاف الخضراء (البرسيم، السبانخ، الخس) - فيتامينات A و K",
|
| 222 |
+
"الجزر - غني بالبيتا كاروتين",
|
| 223 |
+
"الخميرة - فيتامينات B المركبة",
|
| 224 |
+
"زيت كبد الحوت - فيتامينات A و D",
|
| 225 |
+
"التعرض لأشعة الشمس - فيتامين D طبيعي"
|
| 226 |
+
]
|
| 227 |
+
}
|
| 228 |
|
| 229 |
+
def diagnose_disease(self, symptoms: str) -> List[DiagnosisResult]:
|
| 230 |
+
"""تشخيص الأمراض بناءً على الأعراض مع خوارزمية محسنة"""
|
| 231 |
+
symptoms_list = [s.strip() for s in symptoms.split(',') if s.strip()]
|
| 232 |
results = []
|
| 233 |
|
| 234 |
+
for disease, data in self.diseases_db.items():
|
| 235 |
+
matched_symptoms = []
|
| 236 |
+
total_probability = 0.0
|
| 237 |
+
|
| 238 |
+
for symptom in symptoms_list:
|
| 239 |
+
# البحث عن تطابق جزئي أو كامل
|
| 240 |
+
for disease_symptom in data["symptoms"]:
|
| 241 |
if self._symptoms_match(symptom, disease_symptom):
|
| 242 |
+
matched_symptoms.append(disease_symptom)
|
| 243 |
+
weight = data["probability_weights"].get(disease_symptom, 0.5)
|
| 244 |
+
total_probability += weight
|
| 245 |
break
|
| 246 |
|
| 247 |
+
if matched_symptoms:
|
| 248 |
+
# حساب الاحتمالية النهائية
|
| 249 |
+
probability = min(total_probability / len(data["symptoms"]), 1.0)
|
| 250 |
+
|
| 251 |
+
result = DiagnosisResult(
|
| 252 |
+
disease=disease,
|
| 253 |
+
probability=probability,
|
| 254 |
+
symptoms_matched=matched_symptoms,
|
| 255 |
+
treatment=data["treatment"],
|
| 256 |
+
prevention=data["prevention"],
|
| 257 |
+
hygiene=data["hygiene"]
|
| 258 |
+
)
|
| 259 |
+
results.append(result)
|
| 260 |
|
| 261 |
+
# ترتيب النتائج حسب الاحتمالية
|
| 262 |
+
results.sort(key=lambda x: x.probability, reverse=True)
|
| 263 |
return results[:3] # أفضل 3 تشخيصات
|
| 264 |
|
| 265 |
+
def _symptoms_match(self, input_symptom: str, disease_symptom: str) -> bool:
|
| 266 |
+
"""فحص تطابق الأعراض مع تحسينات في المطابقة"""
|
| 267 |
+
input_symptom = input_symptom.strip().lower()
|
| 268 |
+
disease_symptom = disease_symptom.strip().lower()
|
| 269 |
|
| 270 |
+
# تطابق كامل
|
| 271 |
+
if input_symptom == disease_symptom:
|
| 272 |
+
return True
|
| 273 |
+
|
| 274 |
+
# تطابق جزئي
|
| 275 |
+
if input_symptom in disease_symptom or disease_symptom in input_symptom:
|
| 276 |
+
return True
|
| 277 |
+
|
| 278 |
+
# مرادفات شائعة
|
| 279 |
+
synonyms = {
|
| 280 |
+
"خمول": ["كسل", "ضعف", "عدم نشاط"],
|
| 281 |
+
"فقدان شهية": ["عدم أكل", "رفض الطعام", "قلة أكل"],
|
| 282 |
+
"إسهال": ["براز سائل", "إسهال شديد"],
|
| 283 |
+
"صعوبة تنفس": ["ضيق تنفس", "أعراض تنفسية", "مشاكل تنفسية"],
|
| 284 |
+
"نفوق": ["موت", "وفاة", "نفوق مفاجئ"]
|
| 285 |
+
}
|
| 286 |
|
| 287 |
+
for key, values in synonyms.items():
|
| 288 |
+
if (input_symptom == key.lower() and disease_symptom.lower() in [v.lower() for v in values]) or \
|
| 289 |
+
(disease_symptom.lower() == key.lower() and input_symptom in [v.lower() for v in values]):
|
| 290 |
+
return True
|
| 291 |
+
|
| 292 |
+
return False
|
| 293 |
+
|
| 294 |
+
def generate_nutrition_plan(self, age_weeks: int, chicken_type: str, condition: str) -> NutritionPlan:
|
| 295 |
+
"""توليد خطة تغذية مخصصة مع العلائق البديلة"""
|
| 296 |
+
# تحديد مرحلة النمو
|
| 297 |
if age_weeks <= 6:
|
| 298 |
+
phase = "starter"
|
| 299 |
elif age_weeks <= 18:
|
| 300 |
+
phase = "grower"
|
| 301 |
+
elif chicken_type == "لاحم":
|
| 302 |
+
phase = "finisher"
|
| 303 |
else:
|
| 304 |
+
phase = "layer"
|
| 305 |
|
| 306 |
+
phase_data = self.nutrition_db[phase]
|
|
|
|
|
|
|
|
|
|
|
|
|
| 307 |
|
| 308 |
+
# تعديل القيم حسب الحالة
|
| 309 |
+
protein_base = phase_data["protein"][chicken_type]
|
| 310 |
+
energy_base = phase_data["energy"][chicken_type]
|
| 311 |
+
amount_base = phase_data["daily_amount"][chicken_type]
|
|
|
|
| 312 |
|
| 313 |
+
# تعديلات حسب الحالة
|
| 314 |
+
if condition == "مريض":
|
| 315 |
+
protein_adjustment = 1.1 # زيادة البروتين 10%
|
| 316 |
+
energy_adjustment = 0.9 # تقليل الطاقة 10%
|
| 317 |
+
amount_adjustment = 0.8 # تقليل الكمية 20%
|
| 318 |
+
elif condition == "نقاهة":
|
| 319 |
+
protein_adjustment = 1.05
|
| 320 |
+
energy_adjustment = 0.95
|
| 321 |
+
amount_adjustment = 0.9
|
| 322 |
+
else: # صحي
|
| 323 |
+
protein_adjustment = 1.0
|
| 324 |
+
energy_adjustment = 1.0
|
| 325 |
+
amount_adjustment = 1.0
|
| 326 |
|
| 327 |
+
# حساب القيم النهائية
|
| 328 |
+
if isinstance(protein_base, dict):
|
| 329 |
+
protein_final = protein_base[chicken_type] * protein_adjustment
|
| 330 |
+
else:
|
| 331 |
+
protein_final = protein_base * protein_adjustment
|
| 332 |
|
| 333 |
+
if isinstance(energy_base, dict):
|
| 334 |
+
energy_final = energy_base[chicken_type] * energy_adjustment
|
| 335 |
+
else:
|
| 336 |
+
energy_final = energy_base * energy_adjustment
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 337 |
|
| 338 |
+
if isinstance(amount_base, dict):
|
| 339 |
+
amount_final = amount_base[chicken_type] * amount_adjustment
|
| 340 |
+
else:
|
| 341 |
+
amount_final = amount_base * amount_adjustment
|
|
|
|
|
|
|
| 342 |
|
| 343 |
+
# اختيار العلائق البديلة المناسبة
|
| 344 |
+
alternative_feeds = self._select_alternative_feeds(phase, chicken_type, condition)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 345 |
|
| 346 |
+
return NutritionPlan(
|
| 347 |
+
age_weeks=age_weeks,
|
| 348 |
+
chicken_type=chicken_type,
|
| 349 |
+
condition=condition,
|
| 350 |
+
protein_percentage=round(protein_final, 1),
|
| 351 |
+
energy_kcal=int(energy_final),
|
| 352 |
+
daily_amount=int(amount_final),
|
| 353 |
+
feeding_frequency=phase_data["feeding_frequency"],
|
| 354 |
+
supplements=phase_data["supplements"],
|
| 355 |
+
alternative_feeds=alternative_feeds
|
| 356 |
+
)
|
| 357 |
+
|
| 358 |
+
def _select_alternative_feeds(self, phase: str, chicken_type: str, condition: str) -> List[str]:
|
| 359 |
+
"""اختيار العلائق البديلة المناسبة"""
|
| 360 |
+
alternatives = []
|
| 361 |
|
| 362 |
+
# مصادر البروتين البديلة
|
| 363 |
+
if phase in ["starter", "grower"] or chicken_type == "لاحم":
|
| 364 |
+
alternatives.extend([
|
| 365 |
+
"كسب عباد الشمس (بديل كسب فول الصويا)",
|
| 366 |
+
"مسحوق السمك (للنمو السريع)",
|
| 367 |
+
"الخميرة (غنية بفيتامينات B)"
|
| 368 |
+
])
|
| 369 |
+
|
| 370 |
+
# مصادر الطاقة البديلة
|
| 371 |
+
alternatives.extend([
|
| 372 |
+
"الشعير المطحون (75% من طاقة الذرة)",
|
| 373 |
+
"القمح المكسور (مصدر طاقة جيد)",
|
| 374 |
+
"الأرز المكسور (للكتاكيت)"
|
| 375 |
+
])
|
| 376 |
+
|
| 377 |
+
# إضافات خاصة حسب الحالة
|
| 378 |
+
if condition == "مريض":
|
| 379 |
+
alternatives.extend([
|
| 380 |
+
"البروبيوتيك (لصحة الأمعاء)",
|
| 381 |
+
"فيتامين C (مضاد للإجهاد)",
|
| 382 |
+
"الأعلاف الخضراء (فيتامينات طبيعية)"
|
| 383 |
+
])
|
| 384 |
+
elif condition == "نقاهة":
|
| 385 |
+
alternatives.extend([
|
| 386 |
+
"زيت كبد الحوت (فيتامينات A و D)",
|
| 387 |
+
"العسل الطبيعي (طاقة سريعة)",
|
| 388 |
+
"الجزر المبشور (بيتا كاروتين)"
|
| 389 |
+
])
|
| 390 |
+
|
| 391 |
+
return alternatives[:5] # أفضل 5 بدائل
|
| 392 |
|
| 393 |
+
def get_breed_info(self, breed_name: str) -> Optional[Dict]:
|
| 394 |
+
"""الحصول على معلومات السلالة"""
|
| 395 |
+
return self.breeds_db.get(breed_name)
|
|
|
|
| 396 |
|
| 397 |
+
def get_daily_tips(self) -> List[str]:
|
| 398 |
+
"""الحصول على نصائح يومية متقدمة"""
|
| 399 |
+
tips = [
|
| 400 |
+
"🌡️ راقب درجة الحرارة: الحرارة المثلى للدجاج البالغ 18-24°م",
|
| 401 |
+
"💧 تأكد من نظافة الماء: غير الماء يومياً واغسل المشارب",
|
| 402 |
+
"🌾 فحص العلف: تأكد من عدم وجود عفن أو رطوبة في العلف",
|
| 403 |
+
"🧹 نظافة الحظيرة: نظف الفرشة وأزل الفضلات بانتظام",
|
| 404 |
+
"👁️ مراقبة السلوك: لاحظ أي تغيير في سلوك أو شهية الدجاج",
|
| 405 |
+
"🌬️ التهوية الجيدة: تأكد من تجديد الهواء دون تيارات باردة",
|
| 406 |
+
"🦠 الأمن الحيوي: اغسل يديك قبل وبعد التعامل مع الدجاج",
|
| 407 |
+
"📊 سجل الإنتاج: احتفظ بسجل يومي لإنتاج البيض والاستهلاك",
|
| 408 |
+
"🌱 الأعلاف الخضراء: قدم خضروات طازجة كمكمل غذائي",
|
| 409 |
+
"⚡ الإضاءة المناسبة: 14-16 ساعة إضاءة يومياً للدجاج البياض"
|
| 410 |
+
]
|
| 411 |
+
|
| 412 |
+
# اختيار 3 نصائح عشوائية
|
| 413 |
import random
|
| 414 |
+
return random.sample(tips, 3)
|
| 415 |
+
|
| 416 |
+
def answer_general_question(self, question: str) -> str:
|
| 417 |
+
"""الإجابة على الأسئلة العامة مع ذكاء اصطناعي محسن"""
|
| 418 |
+
question = question.lower().strip()
|
| 419 |
+
|
| 420 |
+
# قاعدة معرفة للأسئلة الشائعة
|
| 421 |
+
qa_database = {
|
| 422 |
+
"ماء": "يحتاج الدجاج إلى ماء نظيف وبارد متاح على مدار 24 ساعة. الدجاجة الواحدة تشرب حوالي 200-300 مل يومياً في الظروف العادية، وقد تزيد في الطقس الحار. يجب تغيير الماء يومياً وتنظيف المشارب بانتظام.",
|
| 423 |
+
|
| 424 |
+
"بيض": "لزيادة إنتاج البيض: 1) قدم علفاً متوازناً يحتوي على 16-18% بروتين، 2) وفر 14-16 ساعة إضاءة يومياً، 3) حافظ على درجة حرارة 18-24°م، 4) قدم كالسيوم إضافي (قشر المحار)، 5) قلل الإجهاد والضوضاء.",
|
| 425 |
+
|
| 426 |
+
"علف": "الدجاج البالغ يحتاج 100-130 جرام علف يومياً. يجب أن يحتوي العلف على: بروتين 16-18%، طاقة 2700-2800 كيلو كالوري/كجم، كالسيوم 3.5-4%، فوسفور 0.6%، وفيتامينات ومعادن متوازنة.",
|
| 427 |
+
|
| 428 |
+
"تحصين": "برنامج التحصين الأساسي: 1) ماريك (يوم واحد)، 2) نيوكاسل + التهاب الشعب (7-10 أيام)، 3) جامبورو (14-18 يوم)، 4) نيوكاسل (تنشيطي في 4-5 أسابيع)، 5) جدري الدجاج (6-8 أسابيع). استشر طبيباً بيطرياً للبرنامج المناسب لمنطقتك.",
|
| 429 |
+
|
| 430 |
+
"نظافة": "نظف الحظيرة يومياً من الفضلات، غير الفرشة أسبوعياً أو عند الحاجة، طهر المعدات شهرياً، اغسل المشارب والمعالف كل 2-3 أيام، وتأكد من التهوية الجيدة لمنع تراكم الأمونيا.",
|
| 431 |
+
|
| 432 |
+
"حرارة": "الحرارة المثلى للدجاج البالغ 18-24°م. في الطقس الحار: وفر ظلاً، زد كمية الماء، استخدم مراوح، قدم العلف في الأوقات الباردة. في الطقس البارد: وفر تدفئة إضافية، تأكد من عدم وجود تيارات هواء، زد كمية العلف.",
|
| 433 |
+
|
| 434 |
+
"مساحة": "كل دجاجة تحتاج 0.25-0.4 متر مربع داخل الحظيرة، و2-4 متر مربع في المرعى الخارجي. الازدحام يؤدي إلى الإجهاد، انتشار الأمراض، وانخفاض الإنتاج.",
|
| 435 |
+
|
| 436 |
+
"فيتامينات": "الفيتامينات المهمة للدجاج: A (للنمو والرؤية)، D3 (لامتصاص الكالسيوم)، E (مضاد أكسدة)، K (تجلط الدم)، B المركبة (الأيض). يمكن إضافتها للماء أو العلف حسب الحاجة."
|
| 437 |
+
}
|
| 438 |
+
|
| 439 |
+
# البحث عن الكلمات المفتاحية
|
| 440 |
+
for keyword, answer in qa_database.items():
|
| 441 |
+
if keyword in question:
|
| 442 |
+
return answer
|
| 443 |
+
|
| 444 |
+
# إجابة عامة إذا لم يتم العثور على تطابق
|
| 445 |
+
return "أعتذر، لم أتمكن من فهم سؤالك بوضوح. يرجى إعادة صياغة السؤال أو تحديد الموضوع الذي تريد معرفة المزيد عنه (مثل: التغذية، الأمراض، التحصين، النظافة، إنتاج البيض، إلخ)."
|
| 446 |
|
requirements.txt
CHANGED
|
@@ -1,4 +1,8 @@
|
|
| 1 |
gradio>=4.0.0
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2 |
python-multipart
|
| 3 |
uvicorn
|
| 4 |
fastapi
|
|
|
|
| 1 |
gradio>=4.0.0
|
| 2 |
+
pandas>=1.5.0
|
| 3 |
+
plotly>=5.0.0
|
| 4 |
+
numpy>=1.21.0
|
| 5 |
+
python-dateutil>=2.8.0
|
| 6 |
python-multipart
|
| 7 |
uvicorn
|
| 8 |
fastapi
|