|
import gradio as gr |
|
from langdetect import detect |
|
from gtts import gTTS |
|
import tempfile |
|
|
|
|
|
lang_map = { |
|
'en': 'English', |
|
'es': 'Spanish', |
|
'fr': 'French', |
|
'de': 'German', |
|
'it': 'Italian', |
|
'pt': 'Portuguese', |
|
'nl': 'Dutch', |
|
'ru': 'Russian', |
|
'zh-cn': 'Chinese (Simplified)', |
|
'ja': 'Japanese', |
|
'ko': 'Korean', |
|
'pl': 'Polish', |
|
'uk': 'Ukrainian', |
|
'sk': 'Slovak', |
|
'lt': 'Lithuanian', |
|
'cs': 'Czech', |
|
'sr': 'Serbian', |
|
'hr': 'Croatian', |
|
'hi': 'Hindi' |
|
} |
|
|
|
def identify_and_pronounce(name, selected_lang): |
|
""" |
|
This function detects the language of the given name and generates its pronunciation using gTTS. |
|
|
|
Parameters: |
|
name (str): The name input provided by the user. |
|
selected_lang (str): Either 'Auto' (to use detected language) or a specific language name to override. |
|
|
|
Returns: |
|
tuple: A status message string and the path to the generated audio file. |
|
""" |
|
|
|
if not name or name.strip() == "": |
|
return "Please enter a name.", None |
|
|
|
|
|
try: |
|
detected_lang = detect(name) |
|
except Exception as e: |
|
return f"Error detecting language: {str(e)}", None |
|
|
|
|
|
detected_lang_name = lang_map.get(detected_lang, 'English (default)') |
|
|
|
detected_lang_code = detected_lang if detected_lang in lang_map else 'en' |
|
|
|
|
|
if selected_lang != "Auto" and selected_lang in lang_map.values(): |
|
lang_name = selected_lang |
|
|
|
lang_code = [code for code, name in lang_map.items() if name == selected_lang][0] |
|
else: |
|
lang_name = detected_lang_name |
|
lang_code = detected_lang_code |
|
|
|
|
|
try: |
|
tts = gTTS(text=name, lang=lang_code, slow=False) |
|
|
|
|
|
temp_file = tempfile.NamedTemporaryFile(delete=False, suffix=".mp3") |
|
tts.save(temp_file.name) |
|
temp_file.close() |
|
return f"Detected language: {detected_lang_name}\nPronounced in: {lang_name}", temp_file.name |
|
except Exception as e: |
|
return f"Error generating pronunciation: {str(e)}", None |
|
|
|
|
|
language_options = ["Auto"] + list(lang_map.values()) |
|
|
|
|
|
|
|
interface = gr.Interface( |
|
fn=identify_and_pronounce, |
|
inputs=[ |
|
gr.Textbox(label="Enter a name", value="Tomasz Durzyński"), |
|
gr.Dropdown(choices=language_options, label="Select Language (Auto uses detection)", value="Auto") |
|
], |
|
outputs=[ |
|
gr.Textbox(label="Language Info"), |
|
gr.Audio(label="Pronunciation", type="filepath") |
|
], |
|
title="Name Language Detector and Pronouncer", |
|
description=("Enter a name to detect its language and hear it pronounced. " |
|
"Optionally, select a language to override the default.") |
|
) |
|
|
|
|
|
|
|
interface.launch(server_name="0.0.0.0") |
|
|