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