File size: 6,807 Bytes
f0076e7
 
 
0502cd7
baae19f
 
 
e5e7630
f0076e7
4d9dba9
 
 
 
 
e8dd2ef
4d9dba9
 
 
f0076e7
4d9dba9
f0076e7
 
 
1275944
f0076e7
1275944
f0076e7
 
 
 
0199b96
f0076e7
 
4d9dba9
f0076e7
 
 
4d9dba9
f0076e7
582c56a
f0076e7
402f170
f0076e7
 
 
4d9dba9
 
f0076e7
4d9dba9
f0076e7
4d9dba9
 
f0076e7
 
 
 
582c56a
f0076e7
40dae95
f0076e7
 
 
4d9dba9
f0076e7
e5e7630
4d9dba9
f0076e7
 
 
 
 
 
e5e7630
 
47f5fb9
 
e5e7630
 
baae19f
4d9dba9
 
baae19f
 
 
 
 
f0076e7
4d9dba9
 
f0076e7
c16188d
582c56a
c16188d
f0076e7
 
 
 
 
 
4d9dba9
 
 
77cdd75
4d9dba9
 
582c56a
 
f0076e7
1275944
 
 
 
 
 
 
 
 
4d9dba9
 
1275944
 
 
4d9dba9
1275944
 
 
 
 
 
4d9dba9
 
1275944
 
 
4d9dba9
1275944
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4d9dba9
1275944
 
 
 
 
 
 
 
4d9dba9
1275944
 
 
f0076e7
 
 
 
4d9dba9
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
import openai
import os
import streamlit as st
from PIL import Image
from gtts import gTTS
import tempfile
import shutil
import re

# Language mapping for gTTS
LANGUAGE_MAP = {
    "English": "en",
    "Japanese": "ja",
    "German": "de",
    "Hindi": "hi"
}

def translate_text(api_key, text, target_language):
    """
    Translates English text to the selected target language using OpenAI's API and provides pronunciation.
    """
    # Validate input
    if not api_key:
        return "Error: API key is missing.", None
    if not text:
        return "Error: Input text is empty.", None

    # Set the OpenAI API key
    openai.api_key = api_key
    
    # Define the messages for the chat model
    messages_translation = [
        {"role": "system", "content": "You are a helpful translator."},
        {"role": "user", "content": f"Translate the following English text to {target_language}:\n\n{text}"}
    ]
    
    try:
        # Call the OpenAI API to get the translation
        response_translation = openai.ChatCompletion.create(
            model="gpt-4o",  # Use the correct endpoint for chat models
            messages=messages_translation,
            max_tokens=300,
            temperature=0.5
        )

        # Extract the translation from the response
        translation = response_translation.choices[0].message['content'].strip()

        # Define the messages for the pronunciation request (Romaji or other phonetic systems)
        messages_pronunciation = [
            {"role": "system", "content": "You are a helpful assistant who provides the pronunciation of the translated text."},
            {"role": "user", "content": f"Provide the pronunciation for the following {target_language} text:\n\n{translation}"}
        ]
        
        # Call the OpenAI API to get the pronunciation
        response_pronunciation = openai.ChatCompletion.create(
            model="gpt-4o",
            messages=messages_pronunciation,
            max_tokens=300,
            temperature=0.5
        )

        # Extract the pronunciation from the response
        pronunciation = response_pronunciation.choices[0].message['content'].strip()

        return translation, pronunciation

    except openai.error.OpenAIError as e:
        return f"OpenAI API error: {str(e)}", None
    except Exception as e:
        return f"An unexpected error occurred: {str(e)}", None

# Function to clean pronunciation text
def clean_pronunciation(pronunciation_text):
    # Remove introductory phrases like "Certainly! The pronunciation for the Arabic text..."
    pronunciation_cleaned = re.sub(r"^(Certainly!|Sure!|The pronunciation for the .+? text.*?is[:]*\s*)", "", pronunciation_text).strip()
    return pronunciation_cleaned

# Function to generate audio file from text using gTTS
def generate_audio_from_text(text, language_code):
    tts = gTTS(text, lang=language_code)  # Dynamically use the language code
    # Save audio to a temporary file
    temp_audio_file = tempfile.NamedTemporaryFile(delete=False, suffix=".mp3")
    tts.save(temp_audio_file.name)
    return temp_audio_file.name

# Streamlit UI
st.title("Multi-language Translator with Pronunciation")
st.markdown("Translate English text into various languages and get its pronunciation.")

translateimg = Image.open("Untitled.png")  # Ensure the file is in the correct directory
st.image(translateimg, use_container_width=True)  # Adjust the size as per preference

# Access the API key from Hugging Face Secrets
api_key = os.getenv("OPENAI_API_KEY")

# Input field for the text
english_text = st.text_area("Enter the English text to translate")

# Dropdown menu for language selection
language_option = st.selectbox(
    "Select Target Language",
    ["English", "Japanese", "German", "Hindi"]
)

# Button to trigger the translation
if st.button("Translate"):
    if api_key and english_text:
        # Initialize the progress bar
        progress_bar = st.progress(0)
        progress_text = st.empty()  # To show the progress text

        try:
            # Step 1: Request translation
            progress_text.text("Translating text...")
            progress_bar.progress(33)  # Update progress bar to 33%

            # Translate text and get pronunciation
            translated_text, pronunciation = translate_text(api_key, english_text, language_option)

            # Step 2: Check if translation was successful
            if pronunciation:
                progress_text.text("Generating pronunciation...")
                progress_bar.progress(66)  # Update progress bar to 66%

                # Clean pronunciation (remove unnecessary parts)
                cleaned_pronunciation = clean_pronunciation(pronunciation)

                st.markdown("### Translation Result:")
                st.write(f"**Original English Text:** {english_text}")
                st.write(f"**Translated Text ({language_option}):** {translated_text}")
                st.write(f"**Pronunciation:** {cleaned_pronunciation}")

                # Save the result in a text file
                result_text = f"Original English Text: {english_text}\n\nTranslated Text ({language_option}): {translated_text}\nPronunciation: {cleaned_pronunciation}"

                # Write to a text file
                with open("translation_result.txt", "w") as file:
                    file.write(result_text)

                # Create a download button for the user to download the file
                with open("translation_result.txt", "rb") as file:
                    st.download_button(
                        label="Download Translation Result",
                        data=file,
                        file_name="translation_result.txt",
                        mime="text/plain"
                    )

                # Step 3: Generate audio for pronunciation
                progress_text.text("Generating pronunciation audio...")
                progress_bar.progress(100)  # Update progress bar to 100%

                audio_file_path = generate_audio_from_text(cleaned_pronunciation, LANGUAGE_MAP[language_option])

                # Provide a button to play the pronunciation audio
                st.audio(audio_file_path, format="audio/mp3")

                translateimg2 = Image.open("v3.png")  # Ensure the file is in the correct directory
                st.image(translateimg2, width=150)  # Adjust the size as per preference

            else:
                st.error(translated_text)  # Display error message if API call fails

        except Exception as e:
            st.error(f"An error occurred: {str(e)}")
    else:
        if not api_key:
            st.error("API key is missing. Please add it as a secret in Hugging Face Settings.")
        else:
            st.error("Please provide text to translate.")