|
--- |
|
license: apache-2.0 |
|
language: |
|
- bn |
|
base_model: |
|
- openai/whisper-small |
|
|
|
pipeline_tag: automatic-speech-recognition |
|
|
|
--- |
|
BengaliRegionalASR trained on bengali regional dialact dataset. [sha1779/Bengali_Regional_dataset](https://huggingface.co/datasets/sha1779/Bengali_Regional_dataset) |
|
|
|
|
|
This model is trained on this barishal regional data only. The dataset is taken from [ভাষা-বিচিত্রা: ASR for Regional Dialects](https://www.kaggle.com/competitions/ben10) competition. |
|
|
|
# Try the model |
|
|
|
```bash |
|
!pip install librosa torch torchaudio transformers |
|
``` |
|
|
|
```py |
|
import os |
|
import requests |
|
import librosa |
|
import torch |
|
import numpy as np |
|
from transformers import WhisperTokenizer, WhisperProcessor, WhisperFeatureExtractor, WhisperForConditionalGeneration |
|
|
|
# Define model and device |
|
model_path_ = "sha1779/BengaliRegionalASR" |
|
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') |
|
feature_extractor = WhisperFeatureExtractor.from_pretrained(model_path_) |
|
tokenizer = WhisperTokenizer.from_pretrained(model_path_) |
|
processor = WhisperProcessor.from_pretrained(model_path_) |
|
model = WhisperForConditionalGeneration.from_pretrained(model_path_).to(device) |
|
model.config.forced_decoder_ids = processor.get_decoder_prompt_ids(language="bengali", task="transcribe") |
|
|
|
# MP3 URL |
|
mp3_url = "https://huggingface.co/sha1779/BengaliRegionalASR/resolve/main/Mp3/valid_barishal%20(1).wav" |
|
local_audio_path = "temp_audio.wav" |
|
|
|
# Download the MP3 file |
|
print("Downloading audio file...") |
|
response = requests.get(mp3_url) |
|
if response.status_code == 200: |
|
with open(local_audio_path, 'wb') as f: |
|
f.write(response.content) |
|
print("Download complete.") |
|
else: |
|
raise Exception(f"Failed to download file. HTTP status code: {response.status_code}") |
|
|
|
# Load and preprocess the audio |
|
try: |
|
print("Processing audio file...") |
|
speech_array, sampling_rate = librosa.load(local_audio_path, sr=16000) |
|
speech_array = librosa.resample(np.asarray(speech_array), orig_sr=sampling_rate, target_sr=16000) |
|
input_features = feature_extractor(speech_array, sampling_rate=16000, return_tensors="pt").input_features |
|
|
|
# Generate transcription |
|
print("Generating transcription...") |
|
predicted_ids = model.generate(inputs=input_features.to(device))[0] |
|
transcription = processor.decode(predicted_ids, skip_special_tokens=True) |
|
|
|
# Print the transcription |
|
print("Transcription:", transcription) |
|
|
|
finally: |
|
# Clean up: delete the temporary audio file |
|
if os.path.exists(local_audio_path): |
|
os.remove(local_audio_path) |
|
print("Temporary audio file deleted.") |
|
|
|
``` |
|
|
|
## For larger audio , more than 30s |
|
```py |
|
import os |
|
import requests |
|
import librosa |
|
import torch |
|
import numpy as np |
|
from transformers import WhisperTokenizer, WhisperProcessor, WhisperFeatureExtractor, WhisperForConditionalGeneration |
|
|
|
# Define model and device |
|
model_path_ = "sha1779/BengaliRegionalASR" |
|
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') |
|
feature_extractor = WhisperFeatureExtractor.from_pretrained(model_path_) |
|
tokenizer = WhisperTokenizer.from_pretrained(model_path_) |
|
processor = WhisperProcessor.from_pretrained(model_path_) |
|
model = WhisperForConditionalGeneration.from_pretrained(model_path_).to(device) |
|
model.config.forced_decoder_ids = processor.get_decoder_prompt_ids(language="bengali", task="transcribe") |
|
|
|
# Remote MP3 file URL |
|
mp3_url = "https://huggingface.co/sha1779/BengaliRegionalASR/resolve/main/Mp3/valid_barishal%20(1).wav" |
|
local_audio_path = "temp_audio.wav" |
|
|
|
# Download the MP3 file |
|
response = requests.get(mp3_url) |
|
if response.status_code == 200: |
|
with open(local_audio_path, 'wb') as f: |
|
f.write(response.content) |
|
else: |
|
raise Exception(f"Failed to download file. HTTP status code: {response.status_code}") |
|
|
|
# Load audio |
|
speech_array, sampling_rate = librosa.load(local_audio_path, sr=16000) |
|
|
|
# Define chunk parameters |
|
chunk_duration = 30 # seconds |
|
overlap = 5 # seconds |
|
chunk_size = int(chunk_duration * sampling_rate) |
|
overlap_size = int(overlap * sampling_rate) |
|
|
|
# Split audio into chunks |
|
chunks = [ |
|
speech_array[start : start + chunk_size] |
|
for start in range(0, len(speech_array), chunk_size - overlap_size) |
|
] |
|
|
|
# Process and transcribe each chunk |
|
transcriptions = [] |
|
for i, chunk in enumerate(chunks): |
|
# Resample and extract features |
|
chunk = librosa.resample(np.asarray(chunk), orig_sr=sampling_rate, target_sr=16000) |
|
input_features = feature_extractor(chunk, sampling_rate=16000, return_tensors="pt").input_features |
|
|
|
# Generate transcription |
|
predicted_ids = model.generate(inputs=input_features.to(device))[0] |
|
transcription = processor.decode(predicted_ids, skip_special_tokens=True) |
|
transcriptions.append(transcription) |
|
|
|
# Combine and print the transcriptions |
|
print(" ".join(transcriptions)) |
|
|
|
# Clean up temporary file |
|
os.remove(local_audio_path) |
|
|
|
``` |
|
|
|
# Evaluation |
|
Word Error Rate 0.65 % |
|
|
|
|
|
|
|
|