accent_demo_id2 / app.py
JCrimson1's picture
Update app.py
39f5b13 verified
import torch
import librosa
from speechbrain.inference.classifiers import EncoderClassifier
from pydub import AudioSegment
import gradio as gr
import uuid
import os
# Load model once
classifier = EncoderClassifier.from_hparams(
source="Jzuluaga/accent-id-commonaccent_ecapa",
savedir="pretrained_models/accent-id-commonaccent_ecapa"
)
def classify_accent(video):
# Generate unique filename
temp_wav = f"/tmp/{uuid.uuid4().hex}.wav"
# Convert to .wav
audio = AudioSegment.from_file(video, format="mp4")
audio.export(temp_wav, format="wav")
# Load waveform
waveform, sr = librosa.load(temp_wav, sr=16000, mono=True)
waveform_tensor = torch.tensor(waveform).unsqueeze(0)
# Predict
prediction = classifier.classify_batch(waveform_tensor)
_, score, _, text_lab = prediction
# Cleanup
os.remove(temp_wav)
return f"Accent: {text_lab[0]} (Confidence: {score.item():.2f})"
app = gr.Interface(
fn=classify_accent,
inputs=gr.Video(label="Upload an MP4"),
outputs=gr.Text(label="Prediction"),
title="English Accent Classifier",
description="Upload a short MP4 video of spoken English to detect accent."
)
if __name__ == "__main__":
app.launch()