Test / analyzer.py
mrwabnalas40's picture
Upload analyzer.py
2e691c7 verified
import os
import tempfile
import requests
from PIL import Image
from io import BytesIO
import PyPDF2
from urllib.parse import urlparse
import speech_recognition as sr
# التحقق من وجود المكتبات المطلوبة
try:
import moviepy.editor as mp
MOVIEPY_AVAILABLE = True
except ImportError:
MOVIEPY_AVAILABLE = False
try:
import cv2
CV2_AVAILABLE = True
except ImportError:
CV2_AVAILABLE = False
try:
from pydub import AudioSegment
PYDUB_AVAILABLE = True
except ImportError:
PYDUB_AVAILABLE = False
try:
import av
AV_AVAILABLE = True
except ImportError:
AV_AVAILABLE = False
# ============= وظائف تحليل الروابط =============
def analyze_url_type(url: str) -> str:
"""تحديد نوع الرابط بناء على النطاق"""
domain = urlparse(url).netloc.lower()
if "youtube.com" in domain or "youtu.be" in domain:
return "YouTube"
if "github.com" in domain:
return "GitHub"
if "twitter.com" in domain or "x.com" in domain:
return "تغريدة"
if domain.endswith(".pdf"):
return "ملف PDF"
return "موقع ويب عام"
def fix_url(url: str) -> str:
"""إصلاح الروابط الناقصة"""
if not url.startswith(("http://", "https://")):
return "https://" + url.lstrip("//")
return url
def detect_media_type(url: str) -> str:
"""تحديد نوع الملف من امتداده"""
url = url.lower()
if url.endswith(('.jpg', '.jpeg', '.png', '.gif', '.webp')):
return 'image'
elif url.endswith(('.mp4', '.mov', '.avi', '.webm')):
return 'video'
elif url.endswith(('.mp3', '.wav', '.ogg', '.m4a')):
return 'audio'
elif url.endswith('.pdf'):
return 'pdf'
return 'link'
# ============= وظائف تحليل الملفات =============
def analyze_image_from_url(image_url: str) -> str:
"""تحليل الصور من الروابط"""
response = requests.get(image_url)
response.raise_for_status()
image = Image.open(BytesIO(response.content))
return f"تحليل الصورة: الحجم {image.size}، الصيغة {image.format}"
def analyze_pdf_from_url(pdf_url: str) -> str:
"""استخراج النص من ملفات PDF"""
response = requests.get(pdf_url)
response.raise_for_status()
with tempfile.NamedTemporaryFile(delete=False, suffix=".pdf") as temp_file:
temp_file.write(response.content)
temp_path = temp_file.name
try:
with open(temp_path, "rb") as f:
reader = PyPDF2.PdfReader(f)
text = "".join([page.extract_text() or "" for page in reader.pages])
return f"تم استخراج النص التالي من PDF:\n{text[:500]}..."
finally:
os.remove(temp_path)
def extract_text_from_audio_file(audio_path: str) -> str:
"""استخراج النص من الملفات الصوتية"""
recognizer = sr.Recognizer()
with sr.AudioFile(audio_path) as source:
audio = recognizer.record(source)
try:
return recognizer.recognize_google(audio, language="ar-SA")
except sr.UnknownValueError:
return "لم أتمكن من التعرف على الصوت"
except sr.RequestError:
return "خطأ في الاتصال بخدمة التعرف على الصوت"
def analyze_audio_from_url(audio_url: str) -> str:
"""تحليل الملفات الصوتية من الروابط"""
response = requests.get(audio_url)
response.raise_for_status()
with tempfile.NamedTemporaryFile(delete=False, suffix=".wav") as temp_audio:
temp_audio.write(response.content)
temp_path = temp_audio.name
try:
text = extract_text_from_audio_file(temp_path)
return f"نص الصوت:\n{text}"
finally:
os.remove(temp_path)
def analyze_video_from_url(video_url: str) -> str:
"""تحليل الفيديو باستخدام moviepy"""
if not MOVIEPY_AVAILABLE:
return "مكتبة moviepy غير متوفرة لتحليل الفيديو"
response = requests.get(video_url)
response.raise_for_status()
with tempfile.NamedTemporaryFile(delete=False, suffix=".mp4") as temp_video:
temp_video.write(response.content)
video_path = temp_video.name
audio_path = video_path.replace(".mp4", ".wav")
try:
video = mp.VideoFileClip(video_path)
video.audio.write_audiofile(audio_path, verbose=False, logger=None)
text = extract_text_from_audio_file(audio_path)
return f"نص الفيديو:\n{text}"
finally:
os.remove(video_path)
if os.path.exists(audio_path):
os.remove(audio_path)
# ============= وظائف إضافية لمعالجة الفيديو =============
def process_video_with_ffmpeg():
"""معالجة الفيديو باستخدام ffmpeg (إذا كان متاحًا)"""
if not has_ffmpeg():
return "FFmpeg غير متوفر"
try:
ffmpeg.input('input.mp4').output('output.mp4', ss=10, t=5).run()
return "تم معالجة الفيديو باستخدام FFmpeg"
except Exception as e:
return f"خطأ في معالجة الفيديو: {str(e)}"
def process_video_with_cv2():
"""معالجة الفيديو باستخدام OpenCV (إذا كان متاحًا)"""
if not CV2_AVAILABLE:
return "OpenCV غير متوفر"
cap = cv2.VideoCapture('video.mp4')
results = []
try:
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
# يمكن إضافة معالجة للإطارات هنا
results.append(frame)
return "تم معالجة الفيديو باستخدام OpenCV"
finally:
cap.release()
def process_video_with_pydub():
"""استخراج الصوت من الفيديو باستخدام pydub (إذا كان متاحًا)"""
if not PYDUB_AVAILABLE:
return "pydub غير متوفر"
try:
sound = AudioSegment.from_file("video.mp4")
sound.export("audio.mp3", format="mp3")
return "تم استخراج الصوت من الفيديو"
except Exception as e:
return f"خطأ في استخراج الصوت: {str(e)}"
def process_video_with_av():
"""معالجة الفيديو باستخدام PyAV (إذا كان متاحًا)"""
if not AV_AVAILABLE:
return "PyAV غير متوفر"
try:
container = av.open("video.mp4")
frames = []
for frame in container.decode(video=0):
frames.append(frame.to_image())
return f"تم استخراج {len(frames)} إطار من الفيديو"
except Exception as e:
return f"خطأ في معالجة الفيديو: {str(e)}"