Spaces:
Runtime error
Runtime error
File size: 3,578 Bytes
6401a19 | 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 | # واجهة بايثون
الفئة الأساسية للاستدلال هي `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` لتجنب تكلفة إعادة تحميل النموذج.
|