File size: 1,924 Bytes
dd2a7f7
 
 
9b0a1f4
dd2a7f7
9b0a1f4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
dd2a7f7
 
9b0a1f4
dd2a7f7
9b0a1f4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
dd2a7f7
9b0a1f4
 
dd2a7f7
 
 
 
 
 
 
 
 
 
 
 
 
 
9b0a1f4
dd1926a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
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)