Spaces:
Runtime error
Runtime error
| # واجهة بايثون | |
| الفئة الأساسية للاستدلال هي `Muaalem` في `src/quran_muaalem/inference.py`. هذه الفئة تشغّل نموذج CTC متعدد المستويات وتعيد نواتج الفونيمات وصفات الحروف. | |
| ## توقيع الفئة | |
| ```python | |
| class Muaalem: | |
| def __init__( | |
| self, | |
| model_name_or_path: str = "obadx/muaalem-model-v3_2", | |
| device: str = "cpu", | |
| dtype=torch.bfloat16, | |
| ): | |
| ... | |
| @torch.no_grad() | |
| def __call__( | |
| self, | |
| waves: list[list[float] | torch.FloatTensor | NDArray], | |
| ref_quran_phonetic_script_list: list[QuranPhoneticScriptOutput], | |
| sampling_rate: int, | |
| ) -> list[MuaalemOutput]: | |
| ... | |
| ``` | |
| ## المدخلات | |
| ### 1) الصوت (`waves`) | |
| - قائمة من الموجات (batch). | |
| - كل موجة يمكن أن تكون: | |
| - `list[float]` | |
| - `torch.FloatTensor` | |
| - `numpy.ndarray` | |
| - **معدل العينة المطلوب:** `16000 Hz`. التنفيذ يرفع `ValueError` إن لم يكن كذلك. | |
| ### 2) المرجع الصوتي (`ref_quran_phonetic_script_list`) | |
| - قائمة من كائنات `QuranPhoneticScriptOutput`. | |
| - يتم توليدها عبر `quran_transcript.quran_phonetizer(..., remove_spaces=True)` لضمان تطابق المحاذاة. | |
| مثال توليد المرجع: | |
| ```python | |
| from quran_transcript import Aya, quran_phonetizer, MoshafAttributes | |
| uthmani_ref = Aya(8, 75).get_by_imlaey_words(17, 9).uthmani | |
| moshaf = MoshafAttributes( | |
| rewaya="hafs", | |
| madd_monfasel_len=4, | |
| madd_mottasel_len=4, | |
| madd_mottasel_waqf=4, | |
| madd_aared_len=4, | |
| ) | |
| ref = quran_phonetizer(uthmani_ref, moshaf, remove_spaces=True) | |
| ``` | |
| ## المخرجات | |
| الإرجاع يكون `list[MuaalemOutput]` (عنصر لكل موجة). راجع `src/quran_muaalem/muaalem_typing.py`: | |
| - `Unit`: تسلسل مفكوك مع `text` و `probs` و `ids`. | |
| - `Sifa`: خصائص لكل مجموعة فونيمات (قيمة `SingleUnit` أو `None`). | |
| - `MuaalemOutput`: حاوية تضم `phonemes` و `sifat`. | |
| للتفاصيل والمثال العملي راجع صفحة **المخرجات**. | |
| ## مثال سريع | |
| ```python | |
| from librosa.core import load | |
| import torch | |
| from quran_transcript import Aya, quran_phonetizer, MoshafAttributes | |
| from quran_muaalem import Muaalem | |
| sampling_rate = 16000 | |
| wave, _ = load("./assets/test.wav", sr=sampling_rate, mono=True) | |
| uthmani_ref = Aya(8, 75).get_by_imlaey_words(17, 9).uthmani | |
| moshaf = MoshafAttributes( | |
| rewaya="hafs", | |
| madd_monfasel_len=4, | |
| madd_mottasel_len=4, | |
| madd_mottasel_waqf=4, | |
| madd_aared_len=4, | |
| ) | |
| ref = quran_phonetizer(uthmani_ref, moshaf, remove_spaces=True) | |
| model = Muaalem(device="cuda" if torch.cuda.is_available() else "cpu") | |
| outs = model([wave], [ref], sampling_rate=sampling_rate) | |
| print(outs[0].phonemes.text) | |
| ``` | |
| ## ملاحظات عن الأخطاء والحالات الطرفية | |
| - إذا كان `sampling_rate` لا يساوي 16000 يتم رفع `ValueError`. | |
| - عند اختلاف أطوال المحاذاة قد تُضاف رموز حشو، وقد تكون بعض صفات `Sifa` بقيمة `None`. | |
| - النموذج يعمل دائمًا في وضع الاستدلال (`torch.no_grad()`). | |
| ## الأداء | |
| - القيمة الافتراضية لـ `dtype` هي `torch.bfloat16`. يمكن تغييرها إلى `torch.float16` إذا كانت بطاقة الرسوم لا تدعم BF16. | |
| - يفضل إعادة استخدام نفس كائن `Muaalem` لتجنب تكلفة إعادة تحميل النموذج. | |