lalitwale100 commited on
Commit
2de80cc
Β·
verified Β·
1 Parent(s): 57b43db

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +100 -99
app.py CHANGED
@@ -1,99 +1,100 @@
1
- import streamlit as st
2
- from transformers import M2M100ForConditionalGeneration, M2M100Tokenizer
3
- import speech_recognition as sr
4
- from gtts import gTTS
5
- from pydub import AudioSegment
6
- import os
7
- import tempfile
8
-
9
- # Load Translation Model
10
- @st.cache_resource
11
- def load_m2m_model():
12
- model_name = "facebook/m2m100_418M"
13
- model = M2M100ForConditionalGeneration.from_pretrained(model_name)
14
- tokenizer = M2M100Tokenizer.from_pretrained(model_name)
15
- return model, tokenizer
16
-
17
- model, tokenizer = load_m2m_model()
18
-
19
- # Language Mapping
20
- language_codes = {
21
- "English": "en",
22
- "Hindi": "hi",
23
- "Marathi": "mr",
24
- "Chinese": "zh",
25
- "Japanese": "ja",
26
- "Spanish": "es",
27
- "Korean": "ko"
28
- }
29
-
30
- # Streamlit App
31
- st.markdown("<h1 style='text-align: center;'>πŸ”„ PolyglotPal πŸ”„</h1>", unsafe_allow_html=True)
32
- st.markdown("<h5 style='text-align: center;'>Your friendly multilingual assistant</h5>", unsafe_allow_html=True)
33
- st.sidebar.header("Language Translation Options")
34
-
35
- # Input Language
36
- input_language = st.sidebar.selectbox("Select Input Language", list(language_codes.keys()))
37
-
38
- # Target Language
39
- target_language = st.sidebar.selectbox(
40
- "Select Target Language",
41
- [lang for lang in language_codes.keys() if lang != input_language]
42
- )
43
-
44
- # Input Method
45
- input_method = st.radio("Select Input Method", ["Text Input", "Speech Input"])
46
-
47
- if input_method == "Speech Input":
48
- st.subheader("Upload Audio File for Translation")
49
- audio_file = st.file_uploader("Upload an MP3 file", type=["mp3"])
50
-
51
- # Text Input or Speech-to-Text
52
- input_text = ""
53
- if input_method == "Text Input":
54
- st.subheader(f"Input Text ({input_language})")
55
- input_text = st.text_area("Enter text to translate:", height=150)
56
- elif input_method == "Speech Input" and audio_file:
57
- # Process MP3 to WAV
58
- try:
59
- # Convert MP3 to WAV using pydub
60
- with tempfile.NamedTemporaryFile(delete=False, suffix=".wav") as tmp_wav_file:
61
- audio = AudioSegment.from_file(audio_file, format="mp3")
62
- audio.export(tmp_wav_file.name, format="wav")
63
-
64
- # Perform Speech-to-Text
65
- recognizer = sr.Recognizer()
66
- with sr.AudioFile(tmp_wav_file.name) as source:
67
- audio_data = recognizer.record(source)
68
- input_text = recognizer.recognize_google(audio_data, language=language_codes[input_language])
69
- st.success(f"Recognized Speech: {input_text}")
70
- except Exception as e:
71
- st.error(f"Error processing audio: {e}")
72
-
73
- if st.button("Translate"):
74
- if input_text.strip():
75
- try:
76
- # Set source and target languages
77
- tokenizer.src_lang = language_codes[input_language]
78
- encoded_input = tokenizer(input_text, return_tensors="pt")
79
-
80
- # Generate translation
81
- generated_tokens = model.generate(
82
- **encoded_input,
83
- forced_bos_token_id=tokenizer.lang_code_to_id[language_codes[target_language]]
84
- )
85
- translated_text = tokenizer.decode(generated_tokens[0], skip_special_tokens=True)
86
-
87
- # Display Translation
88
- st.subheader(f"Translated Text ({target_language})")
89
- st.text_area("Translation Result:", value=translated_text, height=150, disabled=True)
90
-
91
- # Text-to-Speech
92
- st.subheader("Text-to-Speech Output")
93
- tts = gTTS(translated_text, lang=language_codes[target_language])
94
- tts.save("translated_audio.mp3")
95
- st.audio("translated_audio.mp3", format="audio/mp3")
96
- except Exception as e:
97
- st.error(f"Translation error: {e}")
98
- else:
99
- st.error("Please provide text or speech input for translation.")
 
 
1
+ import streamlit as st
2
+ from transformers import M2M100ForConditionalGeneration, M2M100Tokenizer
3
+ import speech_recognition as sr
4
+ from gtts import gTTS
5
+ from pydub import AudioSegment
6
+ import os
7
+ import tempfile
8
+
9
+ # Load Translation Model
10
+ @st.cache_resource
11
+ def load_m2m_model():
12
+ model_name = "facebook/m2m100_418M"
13
+ model = M2M100ForConditionalGeneration.from_pretrained(model_name)
14
+ tokenizer = M2M100Tokenizer.from_pretrained(model_name)
15
+ return model, tokenizer
16
+
17
+ model, tokenizer = load_m2m_model()
18
+
19
+ # Language Mapping
20
+ language_codes = {
21
+ "English": "en",
22
+ "Hindi": "hi",
23
+ "Marathi": "mr",
24
+ "Chinese": "zh",
25
+ "Japanese": "ja",
26
+ "Spanish": "es",
27
+ "Korean": "ko"
28
+ }
29
+
30
+ # Streamlit App
31
+ st.markdown("<h1 style='text-align: center;'>πŸ”„ PolyglotPal πŸ”„</h1>", unsafe_allow_html=True)
32
+ st.markdown("<h5 style='text-align: center;'>Your friendly multilingual assistant</h5>", unsafe_allow_html=True)
33
+ st.sidebar.header("Language Translation Options")
34
+
35
+ # Input Language
36
+ input_language = st.sidebar.selectbox("Select Input Language", list(language_codes.keys()))
37
+
38
+ # Target Language
39
+ target_language = st.sidebar.selectbox(
40
+ "Select Target Language",
41
+ [lang for lang in language_codes.keys() if lang != input_language]
42
+ )
43
+
44
+ # Input Method
45
+ input_method = st.radio("Select Input Method", ["Text Input", "Speech Input"])
46
+
47
+ if input_method == "Speech Input":
48
+ st.subheader("Upload Audio File for Translation")
49
+ audio_file = st.file_uploader("Upload an MP3 file", type=["mp3"])
50
+
51
+ # Text Input or Speech-to-Text
52
+ input_text = ""
53
+ if input_method == "Text Input":
54
+ st.subheader(f"Input Text ({input_language})")
55
+ input_text = st.text_area("Enter text to translate:", height=150)
56
+ elif input_method == "Speech Input" and audio_file:
57
+ # Process MP3 to WAV
58
+ try:
59
+ # Convert MP3 to WAV using pydub
60
+ with tempfile.NamedTemporaryFile(delete=False, suffix=".wav") as tmp_wav_file:
61
+ audio = AudioSegment.from_file(audio_file, format="mp3")
62
+ audio.export(tmp_wav_file.name, format="wav")
63
+
64
+ # Perform Speech-to-Text
65
+ recognizer = sr.Recognizer()
66
+ with sr.AudioFile(tmp_wav_file.name) as source:
67
+ audio_data = recognizer.record(source)
68
+ input_text = recognizer.recognize_google(audio_data, language=language_codes[input_language])
69
+ st.success(f"Recognized Speech: {input_text}")
70
+ except Exception as e:
71
+ st.error(f"Error processing audio: {e}")
72
+
73
+ if st.button("Translate"):
74
+ if input_text.strip():
75
+ try:
76
+ # Set source and target languages
77
+ tokenizer.src_lang = language_codes[input_language]
78
+ encoded_input = tokenizer(input_text, return_tensors="pt")
79
+
80
+ # Generate translation
81
+ generated_tokens = model.generate(
82
+ **encoded_input,
83
+ forced_bos_token_id=tokenizer.lang_code_to_id[language_codes[target_language]]
84
+ )
85
+ translated_text = tokenizer.decode(generated_tokens[0], skip_special_tokens=True)
86
+
87
+ # Display Translation
88
+ st.subheader(f"Translated Text ({target_language})")
89
+ st.text_area("Translation Result:", value=translated_text, height=150, disabled=True)
90
+
91
+ # Text-to-Speech
92
+ # st.subheader("Text-to-Speech Output")
93
+ # tts = gTTS(translated_text, lang=language_codes[target_language])
94
+ # tts.save("translated_audio.mp3")
95
+ # st.audio("translated_audio.mp3", format="audio/mp3")
96
+ except:
97
+ #st.error(f"Translation error: {e}")
98
+ pass
99
+ else:
100
+ st.error("Please provide text or speech input for translation.")