from transformers import Wav2Vec2Processor, Wav2Vec2ForCTC import torchaudio import torch # تحميل المعالج والموديل العربي processor = Wav2Vec2Processor.from_pretrained("jonatasgrosman/wav2vec2-large-xlsr-53-arabic") model = Wav2Vec2ForCTC.from_pretrained("jonatasgrosman/wav2vec2-large-xlsr-53-arabic") def speech_to_text(audio_path): if audio_path is None: raise ValueError("الصوت غير موجود") # تحميل الملف الصوتي waveform, sample_rate = torchaudio.load(audio_path) # إذا الصوت ستيريو نحوله لمونو if waveform.shape[0] > 1: waveform = waveform.mean(dim=0).unsqueeze(0) # إعادة تحويل التردد إلى 16000 لو كان مختلف if sample_rate != 16000: resampler = torchaudio.transforms.Resample(orig_freq=sample_rate, new_freq=16000) waveform = resampler(waveform) # تجهيز الإدخال للنموذج input_values = processor(waveform.squeeze().numpy(), return_tensors="pt", sampling_rate=16000).input_values # تمرير البيانات للنموذج والحصول على النتائج with torch.no_grad(): logits = model(input_values).logits predicted_ids = torch.argmax(logits, dim=-1) # تحويل التنبؤ إلى نص transcription = processor.batch_decode(predicted_ids) return transcription[0]