KZTech commited on
Commit
66d3857
·
verified ·
1 Parent(s): be66069

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +53 -0
app.py ADDED
@@ -0,0 +1,53 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ from transformers import pipeline
3
+ from gtts import gTTS
4
+ import uuid
5
+ import os
6
+
7
+ # Language options and model map (simplified to just one pair)
8
+ MODEL_MAP = {
9
+ ("en", "fr"): "Helsinki-NLP/opus-mt-en-fr",
10
+ ("fr", "en"): "Helsinki-NLP/opus-mt-fr-en"
11
+ }
12
+
13
+ TRANSLATORS = {}
14
+
15
+ # UI
16
+ st.title("🌍 Multilingual Translator with Text-to-Speech")
17
+
18
+ src_lang_name = st.selectbox("Select source language", ["English", "French"], index=0)
19
+ tgt_lang_name = st.selectbox("Select target language", ["English", "French"], index=1)
20
+
21
+ src_lang = "en" if src_lang_name == "English" else "fr"
22
+ tgt_lang = "en" if tgt_lang_name == "English" else "fr"
23
+
24
+ text_input = st.text_area("Enter text to translate:")
25
+
26
+ if st.button("Translate & Speak"):
27
+ if not text_input.strip():
28
+ st.warning("Please enter some text.")
29
+ elif src_lang == tgt_lang:
30
+ st.warning("Source and target languages must be different.")
31
+ else:
32
+ # Load model lazily
33
+ if (src_lang, tgt_lang) not in TRANSLATORS:
34
+ with st.spinner(f"Loading model: {MODEL_MAP[(src_lang, tgt_lang)]}"):
35
+ TRANSLATORS[(src_lang, tgt_lang)] = pipeline("translation", model=MODEL_MAP[(src_lang, tgt_lang)])
36
+
37
+ translator = TRANSLATORS[(src_lang, tgt_lang)]
38
+ with st.spinner("Translating..."):
39
+ translated_text = translator(text_input)[0]["translation_text"]
40
+ st.success("Translation complete!")
41
+
42
+ st.text_area("Translated Text:", translated_text)
43
+
44
+ try:
45
+ audio_filename = f"{uuid.uuid4().hex}.mp3"
46
+ tts = gTTS(text=translated_text, lang=tgt_lang)
47
+ tts.save(audio_filename)
48
+ audio_file = open(audio_filename, "rb")
49
+ st.audio(audio_file.read(), format="audio/mp3")
50
+ audio_file.close()
51
+ os.remove(audio_filename)
52
+ except Exception as e:
53
+ st.warning(f"Translation OK, but TTS failed: {e}")