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="""
📱 dear users: trabzon champion.