Spaces:
Sleeping
Sleeping
| import os | |
| import subprocess | |
| import sys | |
| # Ensure required libraries are installed | |
| try: | |
| import yt_dlp as youtube_dl | |
| except ImportError: | |
| subprocess.check_call([sys.executable, "-m", "pip", "install", "yt-dlp"]) | |
| import yt_dlp as youtube_dl | |
| import gradio as gr | |
| from transformers import pipeline | |
| def download_video(video_url, filename="downloaded_video.mp4"): | |
| """ | |
| Download the video file using yt_dlp with cookies.txt for authentication. | |
| """ | |
| ydl_opts = { | |
| 'format': 'best', | |
| 'outtmpl': filename, | |
| 'noplaylist': True, | |
| 'quiet': True, | |
| 'cookiefile': 'cookies.txt', | |
| 'user_agent': ( | |
| 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) ' | |
| 'AppleWebKit/537.36 (KHTML, like Gecko) ' | |
| 'Chrome/115.0.0.0 Safari/537.36' | |
| ), | |
| } | |
| with youtube_dl.YoutubeDL(ydl_opts) as ydl: | |
| ydl.download([video_url]) | |
| return filename | |
| def extract_audio(video_filename, audio_filename="extracted_audio.wav"): | |
| command = [ | |
| 'ffmpeg', | |
| '-y', | |
| '-i', video_filename, | |
| '-vn', | |
| '-acodec', 'pcm_s16le', | |
| '-ar', '44100', | |
| '-ac', '2', | |
| audio_filename | |
| ] | |
| subprocess.run(command, check=True) | |
| return audio_filename | |
| def classify_accent(audio_file, model_name="your-hf-accent-model"): | |
| if model_name == "your-hf-accent-model": | |
| return "Accent: Demo Accent\nConfidence: 100.00%" | |
| classifier = pipeline("audio-classification", model=model_name) | |
| results = classifier(audio_file) | |
| if results: | |
| top = results[0] | |
| return f"Accent: {top['label']}\nConfidence: {top['score'] * 100:.2f}%" | |
| else: | |
| return "No classification result." | |
| def accent_classifier(video_url): | |
| try: | |
| video_filename = download_video(video_url) | |
| audio_filename = extract_audio(video_filename) | |
| result = classify_accent(audio_filename) | |
| except Exception as e: | |
| result = f"Error occurred: {e}" | |
| finally: | |
| if os.path.exists("downloaded_video.mp4"): | |
| os.remove("downloaded_video.mp4") | |
| if os.path.exists("extracted_audio.wav"): | |
| os.remove("extracted_audio.wav") | |
| return result | |
| iface = gr.Interface( | |
| fn=accent_classifier, | |
| inputs=gr.Textbox(label="Video URL", placeholder="Enter a public YouTube, Vimeo, or Dailymotion link"), | |
| outputs="text", | |
| title="Accent Classifier", | |
| description="Downloads a video, extracts audio, and classifies the accent using a Hugging Face model." | |
| ) | |
| if __name__ == "__main__": | |
| iface.launch() | |