adnaniqbal001 commited on
Commit
856e338
·
verified ·
1 Parent(s): f990346

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +105 -0
app.py ADDED
@@ -0,0 +1,105 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import os
3
+ import speech_recognition as sr
4
+ from transformers import MarianMTModel, MarianTokenizer
5
+ from gtts import gTTS
6
+ from io import BytesIO
7
+ import tempfile
8
+
9
+ def load_model(source_lang, target_lang):
10
+ model_name = f"Helsinki-NLP/opus-mt-{source_lang}-{target_lang}"
11
+ try:
12
+ tokenizer = MarianTokenizer.from_pretrained(model_name)
13
+ model = MarianMTModel.from_pretrained(model_name)
14
+ return tokenizer, model
15
+ except Exception as e:
16
+ st.error(f"Failed to load model for {source_lang} to {target_lang}. Ensure the language pair is supported. Error: {e}")
17
+ return None, None
18
+
19
+ def translate_text(tokenizer, model, text):
20
+ if not text:
21
+ return ""
22
+ inputs = tokenizer(text, return_tensors="pt", padding=True, truncation=True)
23
+ outputs = model.generate(**inputs)
24
+ translated_text = tokenizer.decode(outputs[0], skip_special_tokens=True)
25
+ return translated_text
26
+
27
+ def audio_to_text(audio_file):
28
+ recognizer = sr.Recognizer()
29
+ with sr.AudioFile(audio_file) as source:
30
+ audio_data = recognizer.record(source)
31
+ try:
32
+ text = recognizer.recognize_google(audio_data)
33
+ return text
34
+ except sr.UnknownValueError:
35
+ st.error("Speech Recognition could not understand the audio.")
36
+ except sr.RequestError as e:
37
+ st.error(f"Could not request results from Speech Recognition service; {e}")
38
+ return ""
39
+
40
+ def text_to_audio(text, lang):
41
+ tts = gTTS(text=text, lang=lang)
42
+ audio_file = BytesIO()
43
+ tts.write_to_fp(audio_file)
44
+ audio_file.seek(0)
45
+ return audio_file
46
+
47
+ def main():
48
+ st.title("Audio Language Translation App")
49
+ st.write("Translate audio between multiple languages using open-source models.")
50
+
51
+ # Language selection
52
+ languages = {
53
+ "English": "en",
54
+ "Spanish": "es",
55
+ "French": "fr",
56
+ "German": "de",
57
+ "Italian": "it",
58
+ "Russian": "ru",
59
+ "Chinese": "zh",
60
+ "Japanese": "ja",
61
+ "Korean": "ko",
62
+ }
63
+
64
+ source_language = st.selectbox("Select source language:", options=list(languages.keys()))
65
+ target_language = st.selectbox("Select target language:", options=list(languages.keys()))
66
+
67
+ if source_language == target_language:
68
+ st.warning("Source and target languages must be different.")
69
+ return
70
+
71
+ source_lang_code = languages[source_language]
72
+ target_lang_code = languages[target_language]
73
+
74
+ # Load the model and tokenizer
75
+ tokenizer, model = load_model(source_lang_code, target_lang_code)
76
+
77
+ if tokenizer and model:
78
+ # Audio input
79
+ uploaded_audio = st.file_uploader("Upload an audio file (WAV format):", type=["wav"])
80
+
81
+ if uploaded_audio is not None:
82
+ with tempfile.NamedTemporaryFile(delete=False, suffix=".wav") as temp_audio:
83
+ temp_audio.write(uploaded_audio.read())
84
+ temp_audio_path = temp_audio.name
85
+
86
+ st.audio(uploaded_audio, format="audio/wav")
87
+
88
+ with st.spinner("Converting audio to text..."):
89
+ input_text = audio_to_text(temp_audio_path)
90
+ st.success("Audio converted to text!")
91
+ st.text_area("Transcribed text:", input_text, height=100)
92
+
93
+ if st.button("Translate and Generate Audio"):
94
+ with st.spinner("Translating text..."):
95
+ translated_text = translate_text(tokenizer, model, input_text)
96
+ st.success("Translation completed!")
97
+ st.text_area("Translated text:", translated_text, height=100)
98
+
99
+ with st.spinner("Generating audio..."):
100
+ output_audio = text_to_audio(translated_text, target_lang_code)
101
+ st.success("Audio generated!")
102
+ st.audio(output_audio, format="audio/mp3")
103
+
104
+ if __name__ == "__main__":
105
+ main()