EGYADMIN commited on
Commit
46982ed
·
verified ·
1 Parent(s): 6148ffb

Update modules/ai_assistant/ai_app.py

Browse files
Files changed (1) hide show
  1. modules/ai_assistant/ai_app.py +75 -4
modules/ai_assistant/ai_app.py CHANGED
@@ -1,3 +1,6 @@
 
 
 
1
  import os
2
  import sys
3
  import logging
@@ -13,9 +16,77 @@ import requests
13
  from PIL import Image
14
  import pandas as pd
15
  import numpy as np
 
16
 
17
- # استيراد وحدة التحقق من الصور
18
- from image_validator import validate_image
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19
 
20
  # محاولة استيراد المحللات المختلفة
21
  try:
@@ -1278,8 +1349,8 @@ def _render_faq_tab(self):
1278
  للحصول على المساعدة، يمكنك:
1279
  1. استخدام المساعد الذكي في تبويب "المساعد الذكي" لطرح أسئلتك
1280
  2. الاطلاع على الأسئلة الشائعة في هذا التبويب
1281
- 3. التواصل مع فريق الدعم الفني عبر البريد الإلكتروني: support@wahbi-ai.com
1282
- 4. زيارة موقع الدعم الفني: https://support.wahbi-ai.com
1283
  """
1284
  }
1285
  ]
 
1
+ """
2
+ تعديل ملف ai_app.py لدمج وحدة التحقق من الصور مباشرة وإصلاح مشكلة الاستيراد
3
+ """
4
  import os
5
  import sys
6
  import logging
 
16
  from PIL import Image
17
  import pandas as pd
18
  import numpy as np
19
+ import plotly.express as px
20
 
21
+ # دمج وحدة التحقق من الصور مباشرة لتجنب مشاكل الاستيراد
22
+ def validate_image(image_path, max_size_mb=10):
23
+ """
24
+ التحقق من صحة الصورة وتحسينها قبل إرسالها إلى API
25
+
26
+ المعلمات:
27
+ image_path: مسار الصورة
28
+ max_size_mb: الحجم الأقصى المسموح به بالميجابايت
29
+
30
+ العوائد:
31
+ tuple: (صورة محسنة، نوع الملف، حالة الصلاحية، رسالة الخطأ)
32
+ """
33
+ try:
34
+ # التحقق من وجود الملف
35
+ if not os.path.exists(image_path):
36
+ return None, None, False, f"الملف غير موجود: {image_path}"
37
+
38
+ # التحقق من حجم الملف
39
+ file_size_mb = os.path.getsize(image_path) / (1024 * 1024)
40
+ if file_size_mb > max_size_mb:
41
+ return None, None, False, f"حجم الملف كبير جداً: {file_size_mb:.2f} ميجابايت (الحد الأقصى: {max_size_mb} ميجابايت)"
42
+
43
+ # تحديد نوع الملف من امتداده
44
+ _, ext = os.path.splitext(image_path)
45
+ ext = ext.lower()
46
+
47
+ if ext in ('.jpg', '.jpeg'):
48
+ file_type = "image/jpeg"
49
+ elif ext == '.png':
50
+ file_type = "image/png"
51
+ elif ext == '.gif':
52
+ file_type = "image/gif"
53
+ elif ext == '.webp':
54
+ file_type = "image/webp"
55
+ else:
56
+ return None, None, False, f"نوع الملف غير مدعوم: {ext}"
57
+
58
+ # فتح الصورة باستخدام PIL للتحقق من صحتها
59
+ try:
60
+ with Image.open(image_path) as img:
61
+ # التحقق من أبعاد الصورة
62
+ width, height = img.size
63
+ if width > 4000 or height > 4000:
64
+ # تغيير حجم الصورة إذا كانت كبيرة جداً
65
+ img = img.resize((min(width, 4000), min(height, 4000)), Image.LANCZOS)
66
+
67
+ # تحويل الصورة إلى تنسيق مناسب
68
+ if ext == '.png' and img.mode == 'RGBA':
69
+ # تحويل الصور الشفافة إلى RGB
70
+ background = Image.new('RGB', img.size, (255, 255, 255))
71
+ background.paste(img, mask=img.split()[3])
72
+ img = background
73
+
74
+ # حفظ الصورة في ذاكرة مؤقتة
75
+ buffer = io.BytesIO()
76
+ img.save(buffer, format=file_type.split('/')[1].upper())
77
+ buffer.seek(0)
78
+
79
+ # تحويل إلى base64
80
+ file_content = buffer.getvalue()
81
+ file_base64 = base64.b64encode(file_content).decode('utf-8')
82
+
83
+ return file_base64, file_type, True, ""
84
+
85
+ except Exception as e:
86
+ return None, None, False, f"خطأ في معالجة الصورة: {str(e)}"
87
+
88
+ except Exception as e:
89
+ return None, None, False, f"خطأ في التحقق من الصورة: {str(e)}"
90
 
91
  # محاولة استيراد المحللات المختلفة
92
  try:
 
1349
  للحصول على المساعدة، يمكنك:
1350
  1. استخدام المساعد الذكي في تبويب "المساعد الذكي" لطرح أسئلتك
1351
  2. الاطلاع على الأسئلة الشائعة في هذا التبويب
1352
+ 3. التواصل مع فريق الدعم الفني عبر البريد الإلكتروني: tgoahry@sajco.com.sa
1353
+ 4. زيارة موقع الدعم الفني: https://sajco.com
1354
  """
1355
  }
1356
  ]