import gradio as gr from transformers import pipeline from gtts import gTTS import os # Mapping user-selected languages to available translation models TRANSLATION_MODELS = { "fr": "Helsinki-NLP/opus-mt-en-fr", "es": "Helsinki-NLP/opus-mt-en-es", "de": "Helsinki-NLP/opus-mt-en-de", "it": "Helsinki-NLP/opus-mt-en-it", "zh": "Helsinki-NLP/opus-mt-en-zh", "ar": "Helsinki-NLP/opus-mt-en-ar", "hi": "Helsinki-NLP/opus-mt-en-hi", "ur": "Helsinki-NLP/opus-mt-en-ur" } # Language mapping for gTTS TTS_LANGUAGES = { "fr": "fr", "es": "es", "de": "de", "it": "it", "zh": "zh", "ar": "ar", "hi": "hi", "ur": "ur" } def translate_and_speak(text, target_language): """ Translates input text to the selected language and converts it to speech. """ if not text.strip(): return "Please enter some text.", None if target_language not in TRANSLATION_MODELS: return "Translation model not available for this language.", None try: # Load translation model dynamically based on user choice translator = pipeline("translation", model=TRANSLATION_MODELS[target_language]) translated_text = translator(text)[0]['translation_text'] # Convert text to speech using gTTS output_path = "output.mp3" tts = gTTS(text=translated_text, lang=TTS_LANGUAGES[target_language]) tts.save(output_path) return translated_text, output_path except Exception as e: return f"Error: {str(e)}", None # Gradio Interface demo = gr.Interface( fn=translate_and_speak, inputs=[ gr.Textbox(label="Enter Text"), gr.Dropdown(["fr", "es", "de", "it", "zh", "ar", "hi", "ur"], label="Target Language") ], outputs=[ gr.Textbox(label="Translated Text"), gr.Audio(label="Generated Speech") ] ) # Launch Gradio App demo.launch(share=True)