Spaces:
Runtime error
Runtime error
File size: 3,082 Bytes
3db1824 bcfc38a 3db1824 de71883 fe81f6a 3db1824 de71883 3db1824 bcfc38a c1b4117 bcfc38a 3db1824 de71883 09efded de71883 09efded de71883 fe81f6a de71883 fe81f6a de71883 fe81f6a 3db1824 c1b4117 bcfc38a fe81f6a de71883 fe81f6a de71883 37da971 de71883 fe81f6a de71883 fe81f6a de71883 c1b4117 | 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 | import os
import subprocess
# Ensure required dependencies are installed
try:
import whisper
except ImportError:
subprocess.run(["pip", "install", "openai-whisper"])
import whisper
import gradio as gr
import torch
import librosa
from pydub import AudioSegment
from transformers import Wav2Vec2Processor, Wav2Vec2ForCTC
# Load Models
models = {
"Odia (AI4Bharat IndicWav2Vec)": {
"processor": Wav2Vec2Processor.from_pretrained("ai4bharat/indicwav2vec-odia"),
"model": Wav2Vec2ForCTC.from_pretrained("ai4bharat/indicwav2vec-odia").to("cuda" if torch.cuda.is_available() else "cpu"),
},
"Hindi (AI4Bharat IndicWav2Vec)": {
"processor": Wav2Vec2Processor.from_pretrained("ai4bharat/indicwav2vec-hindi"),
"model": Wav2Vec2ForCTC.from_pretrained("ai4bharat/indicwav2vec-hindi").to("cuda" if torch.cuda.is_available() else "cpu"),
},
"English (Facebook Wav2Vec2-960h)": {
"processor": Wav2Vec2Processor.from_pretrained("facebook/wav2vec2-large-960h"),
"model": Wav2Vec2ForCTC.from_pretrained("facebook/wav2vec2-large-960h").to("cuda" if torch.cuda.is_available() else "cpu"),
}
}
# Function to convert audio to WAV (if needed)
def convert_to_wav(audio_file):
file_ext = os.path.splitext(audio_file)[-1].lower()
if file_ext != ".wav":
temp_wav = "converted_temp.wav"
sound = AudioSegment.from_file(audio_file, format=file_ext[1:])
sound = sound.set_channels(1).set_frame_rate(16000) # Convert to mono 16kHz
sound.export(temp_wav, format="wav")
return temp_wav
return audio_file
# Transcription Function with Time Snippets
def transcribe(audio, language):
# Convert audio to WAV if needed
audio_path = convert_to_wav(audio)
# Load and process audio
audio, sr = librosa.load(audio_path, sr=16000)
duration = librosa.get_duration(y=audio, sr=sr)
# Select appropriate model
selected_model = models[f"{language.capitalize()} (AI4Bharat IndicWav2Vec)" if language != "english" else "English (Facebook Wav2Vec2-960h)"]
processor = selected_model["processor"]
model = selected_model["model"]
inputs = processor(audio, sampling_rate=16000, return_tensors="pt", padding=True)
with torch.no_grad():
logits = model(**inputs).logits
predicted_ids = torch.argmax(logits, dim=-1)
transcription = processor.batch_decode(predicted_ids, skip_special_tokens=True)[0]
# Clean up temporary file if created
if audio_path == "converted_temp.wav":
os.remove(audio_path)
return transcription
# Gradio Interface
app = gr.Interface(
fn=transcribe,
inputs=[
gr.Audio(type="filepath", label="Upload Audio File"),
gr.Dropdown(choices=["odia", "hindi", "english"], label="Select Language", value="odia"),
],
outputs=gr.Textbox(label="Transcription"),
title="Multilingual ASR Web App",
description="Upload an audio file and select a language (Odia, Hindi, or English) to generate transcription.",
)
# Launch the App
app.launch() |