Spaces:
Build error
Build error
| 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() | |