KIMOSSINO commited on
Commit
f4ac0b9
·
verified ·
1 Parent(s): e2e38c2

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +19 -82
app.py CHANGED
@@ -1,9 +1,8 @@
1
  import os
2
  import gradio as gr
3
  import whisper
4
- from transformers import MarianMTModel, MarianTokenizer
5
  import torch
6
- from TTS.api import TTS
7
 
8
  # تهيئة النماذج
9
  DEVICE = "cuda" if torch.cuda.is_available() else "cpu"
@@ -17,16 +16,6 @@ SUPPORTED_LANGUAGES = {
17
  "es": "Español"
18
  }
19
 
20
- # قاموس لنماذج الترجمة
21
- TRANSLATION_MODELS = {
22
- "ar-en": "Helsinki-NLP/opus-mt-ar-en",
23
- "en-ar": "Helsinki-NLP/opus-mt-en-ar",
24
- "fr-en": "Helsinki-NLP/opus-mt-fr-en",
25
- "en-fr": "Helsinki-NLP/opus-mt-en-fr",
26
- "es-en": "Helsinki-NLP/opus-mt-es-en",
27
- "en-es": "Helsinki-NLP/opus-mt-en-es"
28
- }
29
-
30
  def transcribe_audio(audio_file, source_lang):
31
  """تحويل الصوت إلى نص باستخدام Whisper"""
32
  try:
@@ -40,48 +29,14 @@ def translate_text(text, source_lang, target_lang):
40
  if source_lang == target_lang:
41
  return text
42
 
43
- model_key = f"{source_lang}-en" if source_lang != "en" else f"en-{target_lang}"
44
  try:
45
- model_name = TRANSLATION_MODELS[model_key]
46
- model = MarianMTModel.from_pretrained(model_name)
47
- tokenizer = MarianTokenizer.from_pretrained(model_name)
48
-
49
- inputs = tokenizer(text, return_tensors="pt", padding=True)
50
- translated = model.generate(**inputs)
51
- result = tokenizer.decode(translated[0], skip_special_tokens=True)
52
-
53
- # إذا كانت اللغة المصدر ليست الإنجليزية والهدف ليس الإنجليزية
54
- if source_lang != "en" and target_lang != "en":
55
- # ترجمة إضافية من الإنجليزية إلى اللغة الهدف
56
- model_name = TRANSLATION_MODELS[f"en-{target_lang}"]
57
- model = MarianMTModel.from_pretrained(model_name)
58
- tokenizer = MarianTokenizer.from_pretrained(model_name)
59
-
60
- inputs = tokenizer(result, return_tensors="pt", padding=True)
61
- translated = model.generate(**inputs)
62
- result = tokenizer.decode(translated[0], skip_special_tokens=True)
63
-
64
  return result
65
  except Exception as e:
66
  return f"خطأ في الترجمة: {str(e)}"
67
 
68
- def text_to_speech(text, target_lang, gender, style):
69
- """تحويل النص إلى صوت"""
70
- try:
71
- # اختيار النموذج المناسب بناءً على اللغة والجنس
72
- tts = TTS(model_name="tts_models/multilingual/multi-dataset/your_tts", progress_bar=False)
73
-
74
- # تعيين معرف المتحدث والنمط
75
- speaker_id = "female" if gender == "أنثى" else "male"
76
- speed = 1.0 if style == "عادي" else 1.3 if style == "سريع" else 0.8
77
-
78
- output_path = "output.wav"
79
- tts.tts_to_file(text=text, speaker=speaker_id, speed=speed, file_path=output_path)
80
-
81
- return output_path
82
- except Exception as e:
83
- return f"خطأ في تحويل النص إلى صوت: {str(e)}"
84
-
85
  # إنشاء واجهة Gradio
86
  with gr.Blocks(title="معالج الصوت والترجمة", theme=gr.themes.Soft()) as demo:
87
  gr.Markdown("# معالج الصوت والترجمة متعدد اللغات")
@@ -89,9 +44,11 @@ with gr.Blocks(title="معالج الصوت والترجمة", theme=gr.themes.S
89
  with gr.Tab("تحويل الصوت إلى نص"):
90
  with gr.Row():
91
  audio_input = gr.Audio(type="filepath", label="الملف الصوتي")
92
- source_lang = gr.Dropdown(choices=list(SUPPORTED_LANGUAGES.keys()),
93
- value="ar",
94
- label="لغة الملف الصوتي")
 
 
95
 
96
  transcribe_btn = gr.Button("تحويل إلى نص")
97
  transcribed_text = gr.Textbox(label="النص المستخرج", lines=5)
@@ -108,12 +65,16 @@ with gr.Blocks(title="معالج الصوت والترجمة", theme=gr.themes.S
108
  translated_text = gr.Textbox(label="النص المترجم", lines=5)
109
 
110
  with gr.Row():
111
- trans_source_lang = gr.Dropdown(choices=list(SUPPORTED_LANGUAGES.keys()),
112
- value="ar",
113
- label="اللغة المصدر")
114
- trans_target_lang = gr.Dropdown(choices=list(SUPPORTED_LANGUAGES.keys()),
115
- value="en",
116
- label="اللغة الهدف")
 
 
 
 
117
 
118
  translate_btn = gr.Button("ترجمة")
119
 
@@ -122,30 +83,6 @@ with gr.Blocks(title="معالج الصوت والترجمة", theme=gr.themes.S
122
  inputs=[input_text, trans_source_lang, trans_target_lang],
123
  outputs=translated_text
124
  )
125
-
126
- with gr.Tab("تحويل النص إلى صوت"):
127
- with gr.Row():
128
- tts_text = gr.Textbox(label="النص المراد تحويله إلى صوت", lines=5)
129
- tts_output = gr.Audio(label="الصوت الناتج")
130
-
131
- with gr.Row():
132
- tts_lang = gr.Dropdown(choices=list(SUPPORTED_LANGUAGES.keys()),
133
- value="ar",
134
- label="لغة النص")
135
- tts_gender = gr.Radio(choices=["ذكر", "أنثى"],
136
- value="ذكر",
137
- label="جنس المتحدث")
138
- tts_style = gr.Radio(choices=["سريع", "عادي", "تعليق صوتي"],
139
- value="عادي",
140
- label="نمط الإلقاء")
141
-
142
- tts_btn = gr.Button("تحويل إلى صوت")
143
-
144
- tts_btn.click(
145
- fn=text_to_speech,
146
- inputs=[tts_text, tts_lang, tts_gender, tts_style],
147
- outputs=tts_output
148
- )
149
 
150
  # تشغيل التطبيق
151
  demo.launch()
 
1
  import os
2
  import gradio as gr
3
  import whisper
 
4
  import torch
5
+ from transformers import pipeline
6
 
7
  # تهيئة النماذج
8
  DEVICE = "cuda" if torch.cuda.is_available() else "cpu"
 
16
  "es": "Español"
17
  }
18
 
 
 
 
 
 
 
 
 
 
 
19
  def transcribe_audio(audio_file, source_lang):
20
  """تحويل الصوت إلى نص باستخدام Whisper"""
21
  try:
 
29
  if source_lang == target_lang:
30
  return text
31
 
 
32
  try:
33
+ translator = pipeline("translation",
34
+ model=f"Helsinki-NLP/opus-mt-{source_lang}-{target_lang}")
35
+ result = translator(text)[0]['translation_text']
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
36
  return result
37
  except Exception as e:
38
  return f"خطأ في الترجمة: {str(e)}"
39
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
40
  # إنشاء واجهة Gradio
41
  with gr.Blocks(title="معالج الصوت والترجمة", theme=gr.themes.Soft()) as demo:
42
  gr.Markdown("# معالج الصوت والترجمة متعدد اللغات")
 
44
  with gr.Tab("تحويل الصوت إلى نص"):
45
  with gr.Row():
46
  audio_input = gr.Audio(type="filepath", label="الملف الصوتي")
47
+ source_lang = gr.Dropdown(
48
+ choices=list(SUPPORTED_LANGUAGES.keys()),
49
+ value="ar",
50
+ label="لغة الملف الصوتي"
51
+ )
52
 
53
  transcribe_btn = gr.Button("تحويل إلى نص")
54
  transcribed_text = gr.Textbox(label="النص المستخرج", lines=5)
 
65
  translated_text = gr.Textbox(label="النص المترجم", lines=5)
66
 
67
  with gr.Row():
68
+ trans_source_lang = gr.Dropdown(
69
+ choices=list(SUPPORTED_LANGUAGES.keys()),
70
+ value="ar",
71
+ label="اللغة المصد��"
72
+ )
73
+ trans_target_lang = gr.Dropdown(
74
+ choices=list(SUPPORTED_LANGUAGES.keys()),
75
+ value="en",
76
+ label="اللغة الهدف"
77
+ )
78
 
79
  translate_btn = gr.Button("ترجمة")
80
 
 
83
  inputs=[input_text, trans_source_lang, trans_target_lang],
84
  outputs=translated_text
85
  )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
86
 
87
  # تشغيل التطبيق
88
  demo.launch()