Spaces:
Paused
Paused
File size: 9,959 Bytes
5dd8287 1e9ff93 233fed6 214097c 5dd8287 1cd840c 233fed6 5dd8287 214097c 233fed6 5dd8287 1f7d056 233fed6 1f7d056 233fed6 1f7d056 233fed6 5dd8287 1f7d056 233fed6 1f7d056 233fed6 1f7d056 233fed6 1f7d056 233fed6 1f7d056 233fed6 1f7d056 233fed6 5dd8287 1e9ff93 1f7d056 1e9ff93 1f7d056 233fed6 1e9ff93 5dd8287 233fed6 1e9ff93 233fed6 1e9ff93 233fed6 1e9ff93 233fed6 |
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 104 |
import torch
import torchaudio
import jiwer
from transformers import Wav2Vec2Processor, Wav2Vec2ForCTC
# Load the Arabic-specific processor and model
model_name = "omarxadel/wav2vec2-large-xlsr-53-arabic-egyptian"
processor = Wav2Vec2Processor.from_pretrained(model_name)
model = Wav2Vec2ForCTC.from_pretrained(model_name)
# Set the model to evaluation mode
model.eval()
# Define the chunk length in seconds
CHUNK_LENGTH = 30 # 30 seconds
SAMPLE_RATE = 16000 # 16 kHz
def transcribe_chunk(chunk):
"""
Transcribes a single audio chunk.
"""
# Process the audio chunk with the processor
inputs = processor(chunk, sampling_rate=SAMPLE_RATE, return_tensors="pt", padding=True)
# Get logits from the model
with torch.no_grad():
logits = model(inputs.input_values).logits
# Decode the predicted ids to text
predicted_ids = torch.argmax(logits, dim=-1)
transcription = processor.batch_decode(predicted_ids, skip_special_tokens=True)[0]
return transcription.strip()
def transcribe_audio_in_chunks(audio_file):
"""
Loads an audio file, splits it into chunks, transcribes each chunk, and combines the transcriptions.
"""
# Load the audio file
print("Loading audio file...")
waveform, sr = torchaudio.load(audio_file)
print(f"Original Sample Rate: {sr}, Waveform shape: {waveform.shape}")
# Convert to mono if it's stereo
if waveform.shape[0] > 1:
waveform = torch.mean(waveform, dim=0, keepdim=True)
print(f"Converted to mono. New shape: {waveform.shape}")
# Resample if needed
if sr != SAMPLE_RATE:
print(f"Resampling from {sr} to {SAMPLE_RATE}...")
resampler = torchaudio.transforms.Resample(orig_freq=sr, new_freq=SAMPLE_RATE)
waveform = resampler(waveform)
print(f"Resampled waveform shape: {waveform.shape}")
# Calculate the number of samples per chunk
chunk_size = CHUNK_LENGTH * SAMPLE_RATE
total_samples = waveform.shape[1]
num_chunks = (total_samples + chunk_size - 1) // chunk_size # Ceiling division
print(f"Total samples: {total_samples}, Chunk size (in samples): {chunk_size}, Number of chunks: {num_chunks}")
transcriptions = []
for i in range(num_chunks):
start_sample = i * chunk_size
end_sample = min(start_sample + chunk_size, total_samples)
chunk = waveform[:, start_sample:end_sample].squeeze(0)
print(f"Processing chunk {i+1}/{num_chunks}, Samples {start_sample}:{end_sample}")
# Normalize the audio
chunk = chunk / torch.abs(chunk).max()
transcription = transcribe_chunk(chunk.numpy())
transcriptions.append(transcription)
print(f"Transcription for chunk {i+1}: {transcription}\n")
# Combine all transcriptions
full_transcription = ' '.join(transcriptions)
return full_transcription.strip()
# Define reference transcription for WER calculation
reference_transcription = "ูุงู ุงูู
ุตูู ุฑุญู
ู ุงููู ุชุนุงูู ูููุนูุง ุงููู ุจุนููู
ู ูู ุงูุฏุงุฑูู ุงู
ูู ูุตู ูุงูุฑุจุง ูู ุงูุฐูุจ ูุงููุถู ูุงูู
ุทุนูู
ุงุช ุงูุฑุจุง ุดูู ู
ู ุงุดูุงู ุงูุจููุน ููู ุชุจุงุฏู ู
ุซู ุงูุซู
ู ูุงูู
ุซู
ู ูููุง ููู ู
ุงู ุจุงุฒุงุก ู
ุงู ููุฐูู ุงุฎุชูุท ุงูุงู
ุฑ ุนูู ุงูู
ุดุฑููู ูู ู
ูู ููุงููุง ุงูู
ุง ุงูุจูุน ู
ุซู ุงูุฑุจุง ูุนูู ูุฐุง ููู ู
ุจุงุฏูู ููุฐุง ููู ู
ุจุงุฏูู ููู ุงูู
ุจุงุฏูู ุฒูุงุฏู ุจูู ุงูุซู
ู ู ุงูู
ุซู
ู ูููุง ุฒูุงุฏู ุจูู ุงูุซู
ู ูุงูู
ุซู
ู ูู
ุง ุงููุฑู ูุญู ูุจูุน ููุดุชุฑู ูุงููุฑู ูู ุงู ุงููู ุณุจุญุงูู ูุชุนุงูู ุงู
ุฑ ุจุญุฑู
ุฉ ุงูุฑุจุง ู
ู ุงุฌู ุงูุญูุงุธ ุนูู ูุธุงู
ุงูุงูุชุตุงุฏ ุงูููุฏู ู
ู ุฏุงุฎูู ููู ุงุจุงุญ ุงููู ุงูุฑุจุง ููุงู ููุงู ุฒูุงุฏู ูู ูุณูุท ุงูุชุจุงุฏู ุฏูู ุฒูุงุฏุฉ ุงูุงูุชุงุฌ ููุญุฏุซ ุจุฐูู ุงูุชุถุฎู
ู
ู ุฏุงุฎู ุงููุธุงู
ูุงุฐุง ุญุฏุซ ุงูุชุถุฎู
ู
ู ุฐุงุช ุงููุธุงู
ู ุงูุฐู ูุถุงุฑ ุจุฐูู ู
ุญุฏูุฏ ุงูุฏุฎู ุงูุฐู ูุถุงุฑ ุจุฐูู ุงููููุฑ ูุญุฑู
ุงููู ุงูุฑุจุง ู
ู ุงุฌู ุงูุง ููุน ุธูู
ุนูู ุงููููุฑ ูุงูุฌุจ ุงูุฒูุงู ุญุชู ูุชุนุงุฏู ุฏุฎู ุงููููุฑ ูุงุฏุงุก ู
ูุชุถูุงุช ุงูุญูุงู ูุชุญุฑูู
ุงูุฑุจุง ู
ุฑุชุจุท ูู ุงููุธุฑ ุงูุงููู ู
ุน ุงูุฌุงุจ ุงูุฒูุงู ุญุฑู
ุงููู ุงูุฑุจุง ูุงูุฌุจ ุญุฑู
ูุงูุฌุจ ุงูุฒูุงู ู
ู ุงุฌู ุญู
ุงูุฉ ุงูุณุงููุฉ ุงููููุฑ ู
ุญุฏูุฏ ุงูุฏุฎู ููุง ูุฌุฏ ุงูุงุณุนุงุฑ ููู ุงูุทุงูู ููุณุชุทูุน ุงู ูุญุตู ุจุงุณุชููุงูู ูู
ุง ุงุฎุฐู ู
ู ุงูุฒูุงู ู
ุง ูุฑูุฏ ู
ู ู
ูุชุถูุงุช ุงูุญูุงู ูุงุฐุง ูุงู ุงูุงู
ุฑ ูุฐูู ููุฐุง ูุธุงู
ุฑุจุงูู ุงููู ูุงู ุญุฑุง ูุง ูุณุชุทูุน ุงุญุฏ ุงู ูุชุญูู
ููู ูุง ูู ุงุฌุชู
ุงุน ููุง ูู ุณูุงุณู ููุง ูู ุงูุชุตุงุฏ ููู
ู ุงูู
ูุธูู
ู ุงูุตูุงู ูุงุฐุง ุฐูุจูุง ุงููุงุณ ููููุง ู
ุชุฌุงูุฑูู ุงูุบูู ุจุฌูุงุฑู ุงููููุฑ ูุงููููุฑ ุจุฌูุงุฑู ุงูู
ุณููู ูุงูู
ุณููู ุจุฌูุงุฑู ุงูุบูู ูุง ูุฑู ุจูููู
ุง ูุงูุตู ุงูุงูู ู
ูุงุฎ ู
ู ุณุจู ุณุจู ุงูู ุงูุตู ุงูุงูู ุงูุบูู ุงู ุณุจู ุงูู ุงูุตู ุงูุซุงูู ุงู ุณุจู ุงูู ุงูุตู ุงูุงูู ุงููููุฑ ูุง ูุณุชุทูุน ุงุญุฏ ุงู ูุฌุฐุจู ู
ู ุงูููุชู ุญุชู ูุชุงุฎุฑ ุจุณุจุจ ุบูุงู ุงู ุฌุงูู ุงู ุณูุทุงูู ูุงู ู
ู ุฌุงุก ููุฌุฏ ุงูุตูุงู ููููุญู ุจูุง ุญูุซ ู
ุง ุงูุชูู ุจู ุงูุตู ููุฐูู ูู ุทูุจ ุงูุนูู
ุญูุซ ู
ุง ุงูุชูู ุจู ุงูู
ุฌูุณ ู
ู ุงูู ุชุชุงุชู ูุฐู ุงูููุณูู ุงูุงุจูู ู
ู ุฏูู ูุจุฑ ุงูู
ุง ุจุนุฒู ูุฑูู ูุงูุณุงููู ุจูุฌูุจ ุงูุฒูุงู ูุงูุฒูุงุฉ ููุณุช ู
ูู ููุง ุนุทูู ููุง ูู ูุฏ ุนููุง ู ุจุญุฑู
ุฉ ุงูุฑุจุง ุญุชู ูุญุงูุธ ุนูู ุงููุธุงู
ุงูุงูุชุตุงุฏู ู
ู ุฏุงุฎูู ู
ู ุงูุชุถุฎู
ุฐูุจุช ุงูุงูุงู
ูุฌุงุกุช ุงูุงูุงู
ูุชุณูุท ุนูููุง ุงุจุงูุณู ุงูุฌู ูุงูุงูุณ ูุงุฎุฑุฌูุง ุงูุฐูุจ ูุงููุถู ู
ู ุงูุชุนุงู
ู ูุงุณุชุจุฏููุง ุจูุง ุญููู ุณุฎููู ููู ุญููู ุงููุฑู ุงูููุฏู ุฌุนููุง ูู ุงููุง ุบุทุงุก ุซู
ุจุนุฏ ุฐูู ุชูุงุณูุง ุงูุบุทุงุก ูุงุตุจุญ ูุฑูุง ูุง ููู
ู ูู ูู ุงูุชุงุฌู ู
ุน ููู
ุชู ุฏููุงุฑ ุงูุฐูุจ 4 ุฌุฑุงู
ูุฑุจุน ูู ุณูุญูุงู ูุทูุน 4 ุฌุฑุงู
ูุฑุจุน ุฐูุจ ูู ุตูููุงู ูุทูุน 4 ุฌุฑุงู
ูุฑุจุน ุฐูุจ ูู ุจุนูุงู ูุทูุน 4 ุฌุฑุงู
ูุฑุจุน ุงูุฐูุจ ููู
ุชู ููู ุงููุฑูู ุงู 200 ุฌููู ุงููู ูู ุฌูุจู ู
ุชูููู 16 ูุฑุด ุญุชุฉ ุงููุฑูู ุฏู ูุดููุฉ ุงูุงุญุจุงุฑ ุงููู ุนูููุง 16 ูุฑุด ุทุจ ุงููุฑู ุจูู 16 ูุฑุด ู200 ุฌููู ููู ุณูุทุฉ ุงูุฏููู ุณูุทุฉ ุงูุงุตุฏุงุฑ ูุณูุทุฉ ุงูุฏููู ุฏู ุจุชุชุญุณุจ ุงุฒุงู ูู ููุณูุง ุจูุง ูุนูู ุฌูู ู
ุตุฑ ูุฏู ูุจูู ุจูุง ูุนูู ุงู 200 ุฌููู 200 ุฌููู ุทุจ ููู ุฎุงุฑุฌูุง ูุจูู ุจููุฉ ุงูุชุงุฌูุง ูุงูุฏููุงุฑ ูุจูู ุจ 50 ุฌููู ุงููู ูู ูุงู ุจ 39 ูุฑุด ููุต ูุนูู ูุงู ุงูุฌููู ุจ 5 ุฏููุงุฑ ูุจุนุฏูู ูู
ุง ุงููุงุฑ ุจูู 2 ููุต ูู ุงูุงูู ูู ุงูุงุฑุจุนููุงุช ูุงู ุงูุฌููู ุงูู
ุตุฑู ุจ 5 ุฏููุงุฑ 5 ุฏููุงุฑ ูู 50 ุฌููู ูุจูู ุจูุงู
ูุจูู ุจ 250 ู
ุฑู ูุจูู ุงูุฌููู ุงุจู 40 ุณูุฉ 40 ุจูุณุงูู 250 ุฌููู ู
ู ุงูุฌูููุงุช ุงููู ู
ุนุงูุง ุฏู ุชุฎูู ุงุถุฑุจ ุฏุฎูู ูู 250 ููู ุณุงููุง ุงูุดูุฎ ููุงู ููุง ุนูุงู ุจุชุงุฎุฏ ูุงู
ูููููู ุนุจุงุฑู ุนู 6000 ุฌููู ูู ุงูุดูุฑ ุทุจ 6000 ุฌููู ูู ุงูุดูุฑ ุงุถุฑุจูุง ูู 250 ูุจูู 150 ูุตุงุฏูุง ุตูุฑ ูุจูู ู
ูููู ููุต ูุง ุชุฎูู ููุณู ุจูู ุงู ุงูุช ู
ุนุงู ู
ูููู ููุต ูู ุดูุฑ ูุชุนุฑู ุชุณูู ูุชุนุฑู ุชุดุชุฑู ูู ุนุฑุจูู ู
ู ุงู
2 ู
ูููู ุฏู ุงูู ุญุงุฌู ุญุชู ุงูุนุฑุจูู ุงู
14 ู
ูููู ู
ู
ูู ุชุฌูุจูุง ุจุณ ุจุงูุชูุณูุท ุงููู ูู ุงูู ุงููู ุญุตู ุชุถุฎู
ูุงูุชุถุฎู
ุฏู ู
ุนูุงุชู ุงูู ู
ุนูุงุชู ุงู ูุฐุง ุงููุณูุท ููุชุจุงุฏู ูู
ูุนุฏ ุณุจุจุง ูุงุบูุงุก ุงููููุฑ ุงูููุงู
ุฏู ููู ูุง ุงุฎู ููููุง ุงูุดุงูุนู ููู
ู ุงูููุงู
ุงููู ุงุญูุง ูููุงู ุฏู ูุงูุงู
ุงู
ุงูุบุฒุงูู ุฑูู ุงูุดุงูุนูู ูุงูู
ููู ุจููุชุจูู ุนุงุฏู ูุฏู ููููู ุฑุถู ุงููู ุชุนุงูู ุนูู ูู ุงูุงู
ูุนูุฉ ุงูุฑุจุง ุชุนุจุฏูู ูุงูุฐูุจ ูุงููุถู ุฌุฒุก ุนูู ูุนูู ุฌุฒุก ุงูุนูู ูุนูู ุงุฐุง ุฎุฑุฌ ุนู ุงูุฐูุจูู ูุงููุถูู ููุง ุฑุจุง ููููู ุงุจู ุงูุญุงุฌุจ ููู ุญุฑู
ุงูุฑุจุง ูุฌููุฑูู
ุง ุงู ูุฌููุฑูุชูู
ุง ุงูุฐูุจ ูุงููุถู ูุฌููุฑูู
ุง ุนุดุงู ูู
ุฐูุจ ููุถู ููุง ูุงููู
ูุณูุท ููุชุจุงุฏู ูุงู ุจู ูุฌููุฑูู
ุง ูุฌููุฑูู
ุง ูุนูู ูุงููู
ุฐูุจ ููุถู ู
ุด ูุฌููุฑูุชูู
ุง ูุนูู ููููู
ูุณูุท ููุชุจุงุฏู ุจูู ุงููุงุณ ูู ูุงู ูุณูุท "
# Transcribe the audio file in chunks
audio_file = "sidiali_reba_zahab_feda.wav"
transcription = transcribe_audio_in_chunks(audio_file)
if transcription:
print("Final Transcription:\n", transcription)
# Calculate Word Error Rate (WER)
wer = jiwer.wer(reference_transcription, transcription)
print(f"\nWord Error Rate (WER): {wer}")
# Save the transcription and WER to a file
with open("evaluation_results.txt", "w", encoding="utf-8") as f:
f.write(f"Transcription:\n{transcription}\n\n")
f.write(f"Reference:\n{reference_transcription}\n\n")
f.write(f"Word Error Rate (WER): {wer}\n")
print("\nEvaluation results saved to evaluation_results.txt")
else:
print("Transcription failed.")
|