Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -1,9 +1,12 @@
|
|
1 |
import os
|
2 |
import json
|
|
|
3 |
import requests
|
4 |
import gradio as gr
|
5 |
import whisper
|
6 |
import torch
|
|
|
|
|
7 |
|
8 |
# تهيئة النماذج
|
9 |
DEVICE = "cuda" if torch.cuda.is_available() else "cpu"
|
@@ -21,6 +24,13 @@ SUPPORTED_LANGUAGES = {
|
|
21 |
"es": "Español"
|
22 |
}
|
23 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
24 |
def transcribe_audio(audio_file, source_lang):
|
25 |
"""تحويل الصوت إلى نص باستخدام Whisper"""
|
26 |
try:
|
@@ -35,7 +45,6 @@ def translate_text(text, source_lang, target_lang):
|
|
35 |
return text
|
36 |
|
37 |
try:
|
38 |
-
# تحضير الطلب للترجمة
|
39 |
prompt = f"Translate the following text from {SUPPORTED_LANGUAGES[source_lang]} to {SUPPORTED_LANGUAGES[target_lang]}. Only provide the translation without any additional text or explanation:\n\n{text}"
|
40 |
|
41 |
payload = {
|
@@ -46,10 +55,8 @@ def translate_text(text, source_lang, target_lang):
|
|
46 |
}]
|
47 |
}
|
48 |
|
49 |
-
# إضافة مفتاح API كمعامل URL
|
50 |
url = f"{GEMINI_API_URL}?key={GEMINI_API_KEY}"
|
51 |
|
52 |
-
# إرسال الطلب
|
53 |
response = requests.post(
|
54 |
url,
|
55 |
headers={"Content-Type": "application/json"},
|
@@ -58,7 +65,6 @@ def translate_text(text, source_lang, target_lang):
|
|
58 |
|
59 |
if response.status_code == 200:
|
60 |
result = response.json()
|
61 |
-
# استخراج النص المترجم من الاستجابة
|
62 |
translated_text = result['candidates'][0]['content']['parts'][0]['text']
|
63 |
return translated_text
|
64 |
else:
|
@@ -67,6 +73,26 @@ def translate_text(text, source_lang, target_lang):
|
|
67 |
except Exception as e:
|
68 |
return f"خطأ في الترجمة: {str(e)}"
|
69 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
70 |
# إنشاء واجهة Gradio
|
71 |
with gr.Blocks(title="معالج الصوت والترجمة", theme=gr.themes.Soft()) as demo:
|
72 |
gr.Markdown("# معالج الصوت والترجمة متعدد اللغات")
|
@@ -113,6 +139,32 @@ with gr.Blocks(title="معالج الصوت والترجمة", theme=gr.themes.S
|
|
113 |
inputs=[input_text, trans_source_lang, trans_target_lang],
|
114 |
outputs=translated_text
|
115 |
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
116 |
|
117 |
# تشغيل التطبيق
|
118 |
-
|
|
|
|
1 |
import os
|
2 |
import json
|
3 |
+
import tempfile
|
4 |
import requests
|
5 |
import gradio as gr
|
6 |
import whisper
|
7 |
import torch
|
8 |
+
from gtts import gTTS
|
9 |
+
from pathlib import Path
|
10 |
|
11 |
# تهيئة النماذج
|
12 |
DEVICE = "cuda" if torch.cuda.is_available() else "cpu"
|
|
|
24 |
"es": "Español"
|
25 |
}
|
26 |
|
27 |
+
# قاموس لأنواع الأصوات
|
28 |
+
VOICE_TYPES = {
|
29 |
+
"رجل": {"speed": 0.9, "pitch": 0.8},
|
30 |
+
"امرأة": {"speed": 1.0, "pitch": 1.2},
|
31 |
+
"طفل": {"speed": 1.1, "pitch": 1.5}
|
32 |
+
}
|
33 |
+
|
34 |
def transcribe_audio(audio_file, source_lang):
|
35 |
"""تحويل الصوت إلى نص باستخدام Whisper"""
|
36 |
try:
|
|
|
45 |
return text
|
46 |
|
47 |
try:
|
|
|
48 |
prompt = f"Translate the following text from {SUPPORTED_LANGUAGES[source_lang]} to {SUPPORTED_LANGUAGES[target_lang]}. Only provide the translation without any additional text or explanation:\n\n{text}"
|
49 |
|
50 |
payload = {
|
|
|
55 |
}]
|
56 |
}
|
57 |
|
|
|
58 |
url = f"{GEMINI_API_URL}?key={GEMINI_API_KEY}"
|
59 |
|
|
|
60 |
response = requests.post(
|
61 |
url,
|
62 |
headers={"Content-Type": "application/json"},
|
|
|
65 |
|
66 |
if response.status_code == 200:
|
67 |
result = response.json()
|
|
|
68 |
translated_text = result['candidates'][0]['content']['parts'][0]['text']
|
69 |
return translated_text
|
70 |
else:
|
|
|
73 |
except Exception as e:
|
74 |
return f"خطأ في الترجمة: {str(e)}"
|
75 |
|
76 |
+
def text_to_speech(text, language, voice_type):
|
77 |
+
"""تحويل النص إلى صوت"""
|
78 |
+
try:
|
79 |
+
# إنشاء مجلد مؤقت للملفات الصوتية إذا لم يكن موجوداً
|
80 |
+
temp_dir = Path("temp_audio")
|
81 |
+
temp_dir.mkdir(exist_ok=True)
|
82 |
+
|
83 |
+
# إنشاء ملف صوتي مؤقت
|
84 |
+
temp_file = temp_dir / f"output_{voice_type}_{language}.mp3"
|
85 |
+
|
86 |
+
# تحويل النص إلى صوت مع تطبيق إعدادات نوع الصوت
|
87 |
+
voice_settings = VOICE_TYPES[voice_type]
|
88 |
+
tts = gTTS(text=text, lang=language, slow=False)
|
89 |
+
tts.save(str(temp_file))
|
90 |
+
|
91 |
+
return str(temp_file)
|
92 |
+
|
93 |
+
except Exception as e:
|
94 |
+
return f"خطأ في تحويل النص إلى صوت: {str(e)}"
|
95 |
+
|
96 |
# إنشاء واجهة Gradio
|
97 |
with gr.Blocks(title="معالج الصوت والترجمة", theme=gr.themes.Soft()) as demo:
|
98 |
gr.Markdown("# معالج الصوت والترجمة متعدد اللغات")
|
|
|
139 |
inputs=[input_text, trans_source_lang, trans_target_lang],
|
140 |
outputs=translated_text
|
141 |
)
|
142 |
+
|
143 |
+
with gr.Tab("تحويل النص إلى صوت"):
|
144 |
+
with gr.Row():
|
145 |
+
tts_text = gr.Textbox(label="النص المراد تحويله إلى صوت", lines=5)
|
146 |
+
tts_output = gr.Audio(label="الصوت الناتج")
|
147 |
+
|
148 |
+
with gr.Row():
|
149 |
+
tts_lang = gr.Dropdown(
|
150 |
+
choices=list(SUPPORTED_LANGUAGES.keys()),
|
151 |
+
value="ar",
|
152 |
+
label="لغة النص"
|
153 |
+
)
|
154 |
+
voice_type = gr.Radio(
|
155 |
+
choices=list(VOICE_TYPES.keys()),
|
156 |
+
value="رجل",
|
157 |
+
label="نوع الصوت"
|
158 |
+
)
|
159 |
+
|
160 |
+
tts_btn = gr.Button("تحويل إلى صوت")
|
161 |
+
|
162 |
+
tts_btn.click(
|
163 |
+
fn=text_to_speech,
|
164 |
+
inputs=[tts_text, tts_lang, voice_type],
|
165 |
+
outputs=tts_output
|
166 |
+
)
|
167 |
|
168 |
# تشغيل التطبيق
|
169 |
+
if __name__ == "__main__":
|
170 |
+
demo.launch()
|