Views
No views yet
1import pandas as pd
2from datasets import load_dataset, load_metric,Dataset
3from tqdm import tqdm
4import torch
5import soundfile as sf
6import torchaudio
7from transformers import Wav2Vec2ForCTC
8from transformers import Wav2Vec2Processor
9from transformers import Wav2Vec2FeatureExtractor
10from transformers import Wav2Vec2CTCTokenizer
11
12model_name = "kingabzpro/wav2vec2-large-xlsr-53-wolof"
13device = "cuda"
14
15model = Wav2Vec2ForCTC.from_pretrained(model_name).to(device)
16processor = Wav2Vec2Processor.from_pretrained(model_name)
17
18val =pd.read_csv("../input/automatic-speech-recognition-in-wolof/Test.csv")
19val["path"] = "../input/automatic-speech-recognition-in-wolof/Noise Removed/tmp/WOLOF_ASR_dataset/noise_remove/"+val["ID"]+".wav"
20val.rename(columns = {'transcription':'sentence'}, inplace = True)
21common_voice_val = Dataset.from_pandas(val)
22
23def speech_file_to_array_fn_test(batch):
24 speech_array, sampling_rate = sf.read(batch["path"])#(.wav) 16000 sample rate
25 batch["speech"] = speech_array
26 batch["sampling_rate"] = sampling_rate
27 return batch
28
29def prepare_dataset_test(batch):
30 # check that all files have the correct sampling rate
31 assert (
32 len(set(batch["sampling_rate"])) == 1
33 ), f"Make sure all inputs have the same sampling rate of {processor.feature_extractor.sampling_rate}."
34
35 batch["input_values"] = processor(batch["speech"], padding=True,sampling_rate=batch["sampling_rate"][0]).input_values
36 return batch
37
38common_voice_val = common_voice_val.remove_columns([ "ID","age", "down_votes", "gender", "up_votes"]) # Remove columns
39common_voice_val = common_voice_val.map(speech_file_to_array_fn_test, remove_columns=common_voice_val.column_names)# Applying speech_file_to_array function
40common_voice_val = common_voice_val.map(prepare_dataset_test, remove_columns=common_voice_val.column_names, batch_size=8, num_proc=4, batched=True)# Applying prepare_dataset_test function
41
42final_pred = []
43for i in tqdm(range(common_voice_val.shape[0])):# Testing model on Wolof Dataset
44 input_dict = processor(common_voice_val[i]["input_values"], return_tensors="pt", padding=True)
45
46 logits = model(input_dict.input_values.to("cuda")).logits
47
48 pred_ids = torch.argmax(logits, dim=-1)[0]
49 prediction = processor.decode(pred_ids)
50 final_pred.append(prediction)
51