VoiceAI61 / app.py
mguven61's picture
Update app.py
b93fe8f verified
import gradio as gr
import whisper
from deep_translator import GoogleTranslator
from gtts import gTTS
import tempfile
import os
import warnings
warnings.filterwarnings("ignore")
model = whisper.load_model("base")
def translate_audio(text_input, upload_audio, mic_audio, source_lang="tr", target_lang="en"):
audio_file = None
audio_source = ""
if mic_audio is not None and mic_audio != "":
audio_file = mic_audio
audio_source = "Microphone"
print(f"Using microphone audio: {mic_audio}")
elif upload_audio is not None:
audio_file = upload_audio
audio_source = "Upload"
print(f"Using uploaded audio: {upload_audio}")
elif text_input and text_input.strip():
try:
original_text = text_input.strip()
if source_lang != target_lang:
translator = GoogleTranslator(source=source_lang, target=target_lang)
translated_text = translator.translate(original_text)
else:
translated_text = original_text
tts = gTTS(text=translated_text, lang=target_lang, slow=False)
with tempfile.NamedTemporaryFile(delete=False, suffix='.mp3') as tmp_file:
tts.save(tmp_file.name)
return (
tmp_file.name,
f"Original: {original_text}",
f"Translated: {translated_text}",
f" Source: Text Input"
)
except Exception as e:
return None, f" Error: {str(e)}", "Please try again", "Source: Text Input"
else:
return None, " No input provided", "Please upload audio, record with microphone, OR enter text", ""
try:
print(f"Processing {audio_source} audio: {audio_file}")
result = model.transcribe(audio_file, language=source_lang, fp16=False)
original_text = result["text"].strip()
if not original_text:
return None, " No speech detected", "Please try again with clearer audio", f"Source: {audio_source}"
print(f"Transcribed: {original_text}")
if source_lang != target_lang:
translator = GoogleTranslator(source=source_lang, target=target_lang)
translated_text = translator.translate(original_text)
else:
translated_text = original_text
print(f"Translated: {translated_text}")
tts = gTTS(text=translated_text, lang=target_lang, slow=False)
with tempfile.NamedTemporaryFile(delete=False, suffix='.mp3') as tmp_file:
tts.save(tmp_file.name)
return (
tmp_file.name,
f"Original: {original_text}",
f" Translated: {translated_text}",
f" Source: {audio_source}"
)
except Exception as e:
print(f"Error: {str(e)}")
return None, f" Error: {str(e)}", "Please try again", f"Source: {audio_source}"
languages = {
"tr": "Turkish",
"en": "English",
"fr": "French",
"es": "Spanish",
"de": "German",
"hi": "Hindi",
"ja": "Japanese",
"ar": "Arabic",
"ru": "Russian",
"zh": "Chinese"
}
demo = gr.Interface(
fn=translate_audio,
inputs=[
gr.Textbox(
label="Enter text to translate",
placeholder="Type text here or leave empty to use audio input...",
lines=2
),
gr.Audio(
type="filepath",
sources=["upload"],
label="Upload Audio File"
),
gr.Audio(
sources=["microphone"],
label="OR Record with Microphone",
type="filepath"
),
gr.Dropdown(
choices=list(languages.keys()),
value="tr",
label="Source Language"
),
gr.Dropdown(
choices=list(languages.keys()),
value="en",
label="Target Language"
)
],
outputs=[
gr.Audio(label="Translated Audio Output"),
gr.Textbox(label="Original Text"),
gr.Textbox(label="Translated Text"),
gr.Textbox(label="Audio Source Info")
],
title="VoiceAI61",
article="""
<div style="text-align: center; margin-top: 20px;">
<p>📱 <strong>dear users:</strong> trabzon champion. </p>
</div>
""",
examples=[
["", None, None, "tr", "en"],
["", None, None, "en", "fr"],
["Hello world", None, None, "en", "es"],
],
allow_flagging="never"
)
if __name__ == "__main__":
demo.launch()