ghostai1's picture
Update app.py
4344bf1 verified
# πŸ—£οΈ 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")