Spaces:
Running
Running
| # π£οΈ Audio Translator | CPU-only HF Space | |
| import tempfile | |
| from deep_translator import GoogleTranslator | |
| from gtts import gTTS | |
| import gradio as gr | |
| from transformers import pipeline | |
| # 1. ASR pipeline (Whisper Tiny) | |
| asr = pipeline( | |
| "automatic-speech-recognition", | |
| model="openai/whisper-tiny", | |
| device=-1, | |
| chunk_length_s=30 | |
| ) | |
| def audio_translate(audio_path: str, target_lang: str): | |
| if not audio_path: | |
| return "", "", None | |
| # 2. Transcribe | |
| result = asr(audio_path) | |
| transcript = result["text"].strip() | |
| # 3. Translate | |
| dest_code = "es" if target_lang == "Spanish" else "en" | |
| translated = GoogleTranslator(source="auto", target=dest_code).translate(transcript) | |
| # 4. Text-to-speech | |
| tts = gTTS(translated, lang=dest_code) | |
| tmp = tempfile.NamedTemporaryFile(suffix=".mp3", delete=False) | |
| tts.write_to_fp(tmp) | |
| tmp.flush() | |
| return transcript, translated, tmp.name | |
| # 5. Gradio UI | |
| with gr.Blocks(title="π£οΈ Audio Translator") as demo: | |
| gr.Markdown( | |
| "# π£οΈ Audio Translator\n" | |
| "Upload an audio clip (any language), choose **English** or **Spanish**,\n" | |
| "and get an immediate translated transcript and spoken audio." | |
| ) | |
| # <-- here: remove `source="upload"` entirely --> | |
| audio_in = gr.Audio(label="Upload Audio", type="filepath") | |
| lang_sel = gr.Radio(["Spanish", "English"], value="Spanish", label="Translate to") | |
| translate_btn = gr.Button("Translate π", variant="primary") | |
| orig_txt = gr.Textbox(label="Transcription", interactive=False) | |
| trans_txt = gr.Textbox(label="Translation", interactive=False) | |
| audio_out = gr.Audio(label="Translated Speech", type="filepath") | |
| translate_btn.click( | |
| audio_translate, | |
| inputs=[audio_in, lang_sel], | |
| outputs=[orig_txt, trans_txt, audio_out] | |
| ) | |
| if __name__ == "__main__": | |
| demo.launch(server_name="0.0.0.0") | |