mrwabnalas40 commited on
Commit
2e691c7
·
verified ·
1 Parent(s): 7af3e14

Upload analyzer.py

Browse files
Files changed (1) hide show
  1. analyzer.py +195 -0
analyzer.py ADDED
@@ -0,0 +1,195 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import tempfile
3
+ import requests
4
+ from PIL import Image
5
+ from io import BytesIO
6
+ import PyPDF2
7
+ from urllib.parse import urlparse
8
+ import speech_recognition as sr
9
+
10
+ # التحقق من وجود المكتبات المطلوبة
11
+ try:
12
+ import moviepy.editor as mp
13
+ MOVIEPY_AVAILABLE = True
14
+ except ImportError:
15
+ MOVIEPY_AVAILABLE = False
16
+
17
+ try:
18
+ import cv2
19
+ CV2_AVAILABLE = True
20
+ except ImportError:
21
+ CV2_AVAILABLE = False
22
+
23
+ try:
24
+ from pydub import AudioSegment
25
+ PYDUB_AVAILABLE = True
26
+ except ImportError:
27
+ PYDUB_AVAILABLE = False
28
+
29
+ try:
30
+ import av
31
+ AV_AVAILABLE = True
32
+ except ImportError:
33
+ AV_AVAILABLE = False
34
+
35
+ # ============= وظائف تحليل الروابط =============
36
+ def analyze_url_type(url: str) -> str:
37
+ """تحديد نوع الرابط بناء على النطاق"""
38
+ domain = urlparse(url).netloc.lower()
39
+ if "youtube.com" in domain or "youtu.be" in domain:
40
+ return "YouTube"
41
+ if "github.com" in domain:
42
+ return "GitHub"
43
+ if "twitter.com" in domain or "x.com" in domain:
44
+ return "تغريدة"
45
+ if domain.endswith(".pdf"):
46
+ return "ملف PDF"
47
+ return "موقع ويب عام"
48
+
49
+ def fix_url(url: str) -> str:
50
+ """إصلاح الروابط الناقصة"""
51
+ if not url.startswith(("http://", "https://")):
52
+ return "https://" + url.lstrip("//")
53
+ return url
54
+
55
+ def detect_media_type(url: str) -> str:
56
+ """تحديد نوع الملف من امتداده"""
57
+ url = url.lower()
58
+ if url.endswith(('.jpg', '.jpeg', '.png', '.gif', '.webp')):
59
+ return 'image'
60
+ elif url.endswith(('.mp4', '.mov', '.avi', '.webm')):
61
+ return 'video'
62
+ elif url.endswith(('.mp3', '.wav', '.ogg', '.m4a')):
63
+ return 'audio'
64
+ elif url.endswith('.pdf'):
65
+ return 'pdf'
66
+ return 'link'
67
+
68
+ # ============= وظائف تحليل الملفات =============
69
+ def analyze_image_from_url(image_url: str) -> str:
70
+ """تحليل الصور من الروابط"""
71
+ response = requests.get(image_url)
72
+ response.raise_for_status()
73
+ image = Image.open(BytesIO(response.content))
74
+ return f"تحليل الصورة: الحجم {image.size}، الصيغة {image.format}"
75
+
76
+ def analyze_pdf_from_url(pdf_url: str) -> str:
77
+ """استخراج النص من ملفات PDF"""
78
+ response = requests.get(pdf_url)
79
+ response.raise_for_status()
80
+ with tempfile.NamedTemporaryFile(delete=False, suffix=".pdf") as temp_file:
81
+ temp_file.write(response.content)
82
+ temp_path = temp_file.name
83
+
84
+ try:
85
+ with open(temp_path, "rb") as f:
86
+ reader = PyPDF2.PdfReader(f)
87
+ text = "".join([page.extract_text() or "" for page in reader.pages])
88
+ return f"تم استخراج النص التالي من PDF:\n{text[:500]}..."
89
+ finally:
90
+ os.remove(temp_path)
91
+
92
+ def extract_text_from_audio_file(audio_path: str) -> str:
93
+ """استخراج النص من الملفات الصوتية"""
94
+ recognizer = sr.Recognizer()
95
+ with sr.AudioFile(audio_path) as source:
96
+ audio = recognizer.record(source)
97
+ try:
98
+ return recognizer.recognize_google(audio, language="ar-SA")
99
+ except sr.UnknownValueError:
100
+ return "لم أتمكن من التعرف على الصوت"
101
+ except sr.RequestError:
102
+ return "خطأ في الاتصال بخدمة التعرف على الصوت"
103
+
104
+ def analyze_audio_from_url(audio_url: str) -> str:
105
+ """تحليل الملفات الصوتية من الروابط"""
106
+ response = requests.get(audio_url)
107
+ response.raise_for_status()
108
+ with tempfile.NamedTemporaryFile(delete=False, suffix=".wav") as temp_audio:
109
+ temp_audio.write(response.content)
110
+ temp_path = temp_audio.name
111
+
112
+ try:
113
+ text = extract_text_from_audio_file(temp_path)
114
+ return f"نص الصوت:\n{text}"
115
+ finally:
116
+ os.remove(temp_path)
117
+
118
+ def analyze_video_from_url(video_url: str) -> str:
119
+ """تحليل الفيديو باستخدام moviepy"""
120
+ if not MOVIEPY_AVAILABLE:
121
+ return "مكتبة moviepy غير متوفرة لتحليل الفيديو"
122
+
123
+ response = requests.get(video_url)
124
+ response.raise_for_status()
125
+ with tempfile.NamedTemporaryFile(delete=False, suffix=".mp4") as temp_video:
126
+ temp_video.write(response.content)
127
+ video_path = temp_video.name
128
+
129
+ audio_path = video_path.replace(".mp4", ".wav")
130
+ try:
131
+ video = mp.VideoFileClip(video_path)
132
+ video.audio.write_audiofile(audio_path, verbose=False, logger=None)
133
+ text = extract_text_from_audio_file(audio_path)
134
+ return f"نص الفيديو:\n{text}"
135
+ finally:
136
+ os.remove(video_path)
137
+ if os.path.exists(audio_path):
138
+ os.remove(audio_path)
139
+
140
+ # ============= وظائف إضافية لمعالجة الفيديو =============
141
+ def process_video_with_ffmpeg():
142
+ """معالجة الفيديو باستخدام ffmpeg (إذا كان ��تاحًا)"""
143
+ if not has_ffmpeg():
144
+ return "FFmpeg غير متوفر"
145
+
146
+ try:
147
+ ffmpeg.input('input.mp4').output('output.mp4', ss=10, t=5).run()
148
+ return "تم معالجة الفيديو باستخدام FFmpeg"
149
+ except Exception as e:
150
+ return f"خطأ في معالجة الفيديو: {str(e)}"
151
+
152
+ def process_video_with_cv2():
153
+ """معالجة الفيديو باستخدام OpenCV (إذا كان متاحًا)"""
154
+ if not CV2_AVAILABLE:
155
+ return "OpenCV غير متوفر"
156
+
157
+ cap = cv2.VideoCapture('video.mp4')
158
+ results = []
159
+
160
+ try:
161
+ while cap.isOpened():
162
+ ret, frame = cap.read()
163
+ if not ret:
164
+ break
165
+ # يمكن إضافة معالجة للإطارات هنا
166
+ results.append(frame)
167
+ return "تم معالجة الفيديو باستخدام OpenCV"
168
+ finally:
169
+ cap.release()
170
+
171
+ def process_video_with_pydub():
172
+ """استخراج الصوت من الفيديو باستخدام pydub (إذا كان متاحًا)"""
173
+ if not PYDUB_AVAILABLE:
174
+ return "pydub غير متوفر"
175
+
176
+ try:
177
+ sound = AudioSegment.from_file("video.mp4")
178
+ sound.export("audio.mp3", format="mp3")
179
+ return "تم استخراج الصوت من الفيديو"
180
+ except Exception as e:
181
+ return f"خطأ في استخراج الصوت: {str(e)}"
182
+
183
+ def process_video_with_av():
184
+ """معالجة الفيديو باستخدام PyAV (إذا كان متاحًا)"""
185
+ if not AV_AVAILABLE:
186
+ return "PyAV غير متوفر"
187
+
188
+ try:
189
+ container = av.open("video.mp4")
190
+ frames = []
191
+ for frame in container.decode(video=0):
192
+ frames.append(frame.to_image())
193
+ return f"تم استخراج {len(frames)} إطار من الفيديو"
194
+ except Exception as e:
195
+ return f"خطأ في معالجة الفيديو: {str(e)}"