EdgarDataScientist's picture
Update app.py
fa15dd8 verified
raw
history blame
1.62 kB
import streamlit as st
from moviepy.editor import VideoFileClip
from speechbrain.pretrained import EncoderClassifier
import torchaudio
import os
from pytube import YouTube
CLASSIFIER = "Jzuluaga/accent-id-commonaccent_xlsr-en-english"
def download_video(url):
"""Handles YouTube and direct video links"""
if "youtube.com" in url:
yt = YouTube(url)
stream = yt.streams.filter(progressive=True, file_extension='mp4').first()
return stream.download()
else: # Direct download
# Implement custom download logic for non-YouTube links
return url
def extract_audio(video_path):
clip = VideoFileClip(video_path)
audio_path = "temp_audio.wav"
clip.audio.write_audiofile(audio_path)
return audio_path
def classify_accent(audio_path):
classifier = EncoderClassifier.from_hparams(
source=CLASSIFIER,
savedir="pretrained_models/accent_classifier"
)
waveform, sample_rate = torchaudio.load(audio_path)
prediction = classifier.classify_batch(waveform)
return prediction
def main():
st.title("REM Waste Accent Classifier")
url = st.text_input("Enter video URL:", "")
if url:
with st.spinner("Processing..."):
video_path = download_video(url)
audio_path = extract_audio(video_path)
prediction = classify_accent(audio_path)
st.success("Analysis Complete")
st.metric("Detected Accent", prediction[3][0])
st.metric("Confidence Score", f"{prediction[1].exp().max().item()*100:.2f}%")
if __name__ == "__main__":
main()