Spaces:
Build error
Build error
| import asyncio | |
| import gradio as gr | |
| import tempfile | |
| from pathlib import Path | |
| from app.utils import download_video, extract_audio, trim_silence | |
| from app.accent_classifier import get_classifier | |
| clf = get_classifier() | |
| async def _url_pipeline(url: str): | |
| with tempfile.TemporaryDirectory() as td: | |
| tdir = Path(td) | |
| video = await download_video(url, tdir) | |
| wav = tdir / "aud.wav" | |
| await extract_audio(video, wav) | |
| wav = trim_silence(wav) | |
| return clf.classify(str(wav)) | |
| def analyze_url(url: str): | |
| return asyncio.run(_url_pipeline(url)) | |
| def analyze_file(file): | |
| path = Path(file.name) | |
| if path.suffix.lower() in {".mp4", ".mov", ".mkv"}: | |
| wav = path.with_suffix(".wav") | |
| asyncio.run(extract_audio(path, wav)) | |
| else: | |
| wav = path | |
| wav = trim_silence(wav) | |
| return clf.classify(str(wav)) | |
| def fmt(res): | |
| if not res: | |
| return "Analysis failed." | |
| return f"**Accent:** {res['accent']}\n\n**Confidence:** {res['confidence']}%" | |
| with gr.Blocks(title="English Accent Detector") as demo: | |
| gr.Markdown("## REM Waste – Accent Screening Tool") | |
| with gr.Tab("From URL"): | |
| url_in = gr.Text(label="Public video URL (Loom, MP4, YouTube, …)") | |
| btn = gr.Button("Analyze") | |
| out = gr.Markdown() | |
| btn.click(lambda u: fmt(analyze_url(u)), inputs=url_in, outputs=out) | |
| with gr.Tab("Upload File"): | |
| file_in = gr.File() | |
| btn2 = gr.Button("Analyze") | |
| out2 = gr.Markdown() | |
| btn2.click(lambda f: fmt(analyze_file(f)), inputs=file_in, outputs=out2) | |
| if __name__ == "__main__": | |
| demo.launch() |