C / app.py
planetBlind73's picture
Upload 2 files
da027a6 verified
import gradio as gr
from transformers import VitsModel, AutoTokenizer
import torch
import scipy.io.wavfile
# تحميل النموذج و "tokenizer"
model_name = "wasmdashai/vits-ar-sa-huba-v2"
try:
model = VitsModel.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)
model_loaded_successfully = True
print(f"تم تحميل النموذج '{model_name}' بنجاح.")
except Exception as e:
model_loaded_successfully = False
error_message = f"حدث خطأ أثناء تحميل النموذج '{model_name}': {e}"
print(error_message)
# يمكنك اختيار إيقاف التطبيق هنا أو عرض رسالة خطأ في الواجهة
# دالة التنبؤ (تحويل النص إلى كلام)
def text_to_speech(text):
if not model_loaded_successfully:
return None, f"خطأ: لم يتم تحميل النموذج. {error_message}"
if not text:
return None, "الرجاء إدخال نص."
try:
inputs = tokenizer(text, return_tensors="pt")
with torch.no_grad():
output = model(**inputs).waveform
# التأكد من أن المخرجات هي 1D tensor
if output.ndim > 1:
# إذا كانت متعددة الأبعاد، جرب أخذ القناة الأولى أو المتوسط
# هنا نفترض أن القناة الأولى هي الصوت المطلوب
waveform = output[0].cpu().numpy()
else:
waveform = output.cpu().numpy()
# معدل أخذ العينات للنموذج (عادة ما يكون مذكورًا في بطاقة النموذج أو تكوينه)
# إذا لم يكن متاحًا بشكل مباشر، قد تحتاج إلى التحقق من config النموذج
# القيمة الشائعة لنماذج VITS هي 22050 أو 16000
# بالنظر إلى بطاقة النموذج، يبدو أنها لا تحدد صراحةً، سنجرب 22050
sampling_rate = model.config.sampling_rate if hasattr(model.config, 'sampling_rate') else 22050
# حفظ الملف الصوتي مؤقتًا
output_path = "output_audio.wav"
scipy.io.wavfile.write(output_path, rate=sampling_rate, data=waveform)
return output_path, None # لا يوجد رسالة خطأ
except Exception as e:
print(f"حدث خطأ أثناء تحويل النص إلى كلام: {e}")
return None, f"حدث خطأ أثناء المعالجة: {str(e)}"
# إنشاء واجهة Gradio
iface = gr.Interface(
fn=text_to_speech,
inputs=gr.Textbox(lines=3, placeholder="أدخل النص العربي هنا...", label="النص العربي"),
outputs=[
gr.Audio(label="الصوت الناتج", type="filepath"),
gr.Textbox(label="رسالة الخطأ (إن وجدت)") # لإظهار رسائل الخطأ بشكل واضح
],
title="تحويل النص إلى كلام باللغة العربية (نموذج vits-ar-sa-huda-v2)",
description="أدخل نصًا باللغة العربية ليتم تحويله إلى كلام باستخدام نموذج VITS المدرب على اللهجة السعودية . النموذج من تطوير `wasmdashai`.",
allow_flagging="never",
examples=[
["السلام عليكم ورحمة الله وبركاته."],
["كيف حالك اليوم؟"],
["أهلاً وسهلاً بكم في هذه المساحة."],
]
)
# تشغيل الواجهة
if __name__ == "__main__":
if model_loaded_successfully:
iface.launch()
else:
# إذا لم يتم تحميل النموذج، قم بتشغيل واجهة بسيطة تعرض الخطأ
def error_interface():
with gr.Blocks() as demo:
gr.Markdown(f"# خطأ في تحميل النموذج\n{error_message}")
return demo
error_interface().launch()