Views
No views yet
1import soundfile as sf
2import torch
3from transformers import Wav2Vec2ForCTC, Wav2Vec2Processor
4import argparse
5
6def parse_transcription(wav_file):
7 # load pretrained model
8 processor = Wav2Vec2Processor.from_pretrained("Harveenchadha/vakyansh-wav2vec2-hindi-him-4200")
9 model = Wav2Vec2ForCTC.from_pretrained("Harveenchadha/vakyansh-wav2vec2-hindi-him-4200")
10
11 # load audio
12 audio_input, sample_rate = sf.read(wav_file)
13
14 # pad input values and return pt tensor
15 input_values = processor(audio_input, sampling_rate=sample_rate, return_tensors="pt").input_values
16
17 # INFERENCE
18 # retrieve logits & take argmax
19 logits = model(input_values).logits
20 predicted_ids = torch.argmax(logits, dim=-1)
21
22 # transcribe
23 transcription = processor.decode(predicted_ids[0], skip_special_tokens=True)
24 print(transcription)
251
2import torch
3import torchaudio
4from datasets import load_dataset, load_metric
5from transformers import Wav2Vec2ForCTC, Wav2Vec2Processor
6import re
7
8test_dataset = load_dataset("common_voice", "hi", split="test")
9wer = load_metric("wer")
10
11processor = Wav2Vec2Processor.from_pretrained("Harveenchadha/vakyansh-wav2vec2-hindi-him-4200")
12model = Wav2Vec2ForCTC.from_pretrained("Harveenchadha/vakyansh-wav2vec2-hindi-him-4200")
13model.to("cuda")
14
15resampler = torchaudio.transforms.Resample(48_000, 16_000)
16
17chars_to_ignore_regex = '[\,\?\.\!\-\;\:\"\“]'
18
19# Preprocessing the datasets.
20# We need to read the aduio files as arrays
21def speech_file_to_array_fn(batch):
22 batch["sentence"] = re.sub(chars_to_ignore_regex, '', batch["sentence"]).lower()
23 speech_array, sampling_rate = torchaudio.load(batch["path"])
24 batch["speech"] = resampler(speech_array).squeeze().numpy()
25 return batch
26
27test_dataset = test_dataset.map(speech_file_to_array_fn)
28
29# Preprocessing the datasets.
30# We need to read the aduio files as arrays
31def evaluate(batch):
32 inputs = processor(batch["speech"], sampling_rate=16_000, return_tensors="pt", padding=True)
33
34 with torch.no_grad():
35 logits = model(inputs.input_values.to("cuda")).logits
36
37 pred_ids = torch.argmax(logits, dim=-1)
38 batch["pred_strings"] = processor.batch_decode(pred_ids, skip_special_tokens=True)
39 return batch
40
41result = test_dataset.map(evaluate, batched=True, batch_size=8)
42
43print("WER: {:2f}".format(100 * wer.compute(predictions=result["pred_strings"], references=result["sentence"])))
44