insider12 commited on
Commit
52c0097
Β·
verified Β·
1 Parent(s): b463078

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +47 -83
app.py CHANGED
@@ -1,100 +1,64 @@
1
- import torch
2
  import gradio as gr
3
- import json
4
  from transformers import pipeline
5
- import pyttsx3
6
- import tempfile
7
  import os
 
8
 
9
- # Load the NLLB model
10
- # model_path = "../text_translator/model/models--facebook--nllb-200-distilled-600M/snapshots/f8d333a098d19b4fd9a8b18f94170487ad3f821d"
11
- # translator = pipeline("translation", model=model_path)
12
-
13
  translator = pipeline("translation", model="facebook/nllb-200-distilled-600M")
14
- # Load language codes
15
- # def load_lang_codes(file_path='../text_translator/lang file/lang_code.json'):
16
- def load_lang_codes(file_path='lang_code.json'):
17
- try:
18
- with open(file_path, 'r', encoding='utf-8') as f:
19
- data = json.load(f)
20
- return {entry['Language']: entry['FLORES-200 code'] for entry in data}
21
- except Exception as e:
22
- print(f"Error loading language codes: {e}")
23
- return {}
24
-
25
- lang_dict = load_lang_codes()
26
- language_list = list(lang_dict.keys())
27
 
28
- # Text-to-Speech function using pyttsx3
29
- def text_to_speech(text):
30
- engine = pyttsx3.init()
31
- engine.setProperty('rate', 160)
32
- engine.setProperty('volume', 1.0)
 
 
 
 
33
 
34
- # Save speech to a temporary file
35
- with tempfile.NamedTemporaryFile(delete=False, suffix=".wav") as fp:
36
- filename = fp.name
37
- engine.save_to_file(text, filename)
38
- engine.runAndWait()
39
- return filename
40
 
41
- # Translation + TTS function
42
- def translate_and_speak(text, src_lang, tgt_lang):
43
- src_code = lang_dict.get(src_lang)
44
- tgt_code = lang_dict.get(tgt_lang)
 
 
45
 
46
- if not src_code or not tgt_code:
47
- return "Invalid language selected.", None
 
 
48
 
49
- try:
50
- result = translator(text, src_lang=src_code, tgt_lang=tgt_code)
51
- translated_text = result[0]['translation_text']
52
- audio_path = text_to_speech(translated_text)
53
- return translated_text, audio_path
54
  except Exception as e:
55
- return f"Translation error: {e}", None
56
 
57
- # Gradio UI
58
- with gr.Blocks(css="""
59
- .gradio-container {
60
- font-family: 'Segoe UI', sans-serif;
61
- background-color: #f4f4f4;
62
- padding: 40px;
63
- }
64
- h1 {
65
- color: black !important;
66
- font-size: 28px !important;
67
- margin-bottom: 30px !important;
68
- }
69
- .gr-button {
70
- font-size: 16px !important;
71
- padding: 10px 20px !important;
72
- }
73
- .gr-box {
74
- padding: 20px !important;
75
- }
76
- """) as demo:
77
- gr.Markdown("<h1 style='text-align: center;'>@GenAI MultiLanguage Translator Model</h1>")
78
 
79
  with gr.Row():
80
- with gr.Column(scale=1):
81
- input_text = gr.Textbox(
82
- label="🌐 Enter Text",
83
- placeholder="Type something to translate...",
84
- lines=4
85
- )
86
- gr.Markdown("<br>")
87
- src_dropdown = gr.Dropdown(choices=language_list, label="πŸ“€ Source Language", value="English")
88
- tgt_dropdown = gr.Dropdown(choices=language_list, label="πŸ“₯ Target Language", value="French")
89
- gr.Markdown("<br>")
90
- translate_button = gr.Button("πŸ”„ Translate", variant="primary")
91
- with gr.Column(scale=1):
92
- output_text = gr.Textbox(label="βœ… Translated Text", lines=6, interactive=False)
93
- audio_output = gr.Audio(label="πŸ”Š Speak Translation", type="filepath", autoplay=True)
94
 
95
- translate_button.click(fn=translate_and_speak,
96
- inputs=[input_text, src_dropdown, tgt_dropdown],
97
- outputs=[output_text, audio_output])
 
 
98
 
99
- # Launch
100
  demo.launch()
 
 
1
  import gradio as gr
 
2
  from transformers import pipeline
3
+ from gtts import gTTS
 
4
  import os
5
+ import uuid
6
 
7
+ # Load translation model
 
 
 
8
  translator = pipeline("translation", model="facebook/nllb-200-distilled-600M")
 
 
 
 
 
 
 
 
 
 
 
 
 
9
 
10
+ # Supported languages
11
+ languages = {
12
+ "English": "eng_Latn",
13
+ "French": "fra_Latn",
14
+ "Spanish": "spa_Latn",
15
+ "German": "deu_Latn",
16
+ "Hindi": "hin_Deva",
17
+ "Marathi": "mar_Deva"
18
+ }
19
 
20
+ def translate_text(text, source_lang, target_lang):
21
+ if not text.strip():
22
+ return "Please enter text to translate.", None
 
 
 
23
 
24
+ try:
25
+ translated = translator(
26
+ text,
27
+ src_lang=languages[source_lang],
28
+ tgt_lang=languages[target_lang]
29
+ )[0]['translation_text']
30
 
31
+ # Create TTS for translated text
32
+ tts_file = f"{uuid.uuid4()}.mp3"
33
+ tts = gTTS(translated, lang=target_lang[:3].lower())
34
+ tts.save(tts_file)
35
 
36
+ return translated, tts_file
 
 
 
 
37
  except Exception as e:
38
+ return f"Error: {str(e)}", None
39
 
40
+
41
+ # UI
42
+ with gr.Blocks(css=".gradio-container {max-width: 750px; margin: auto;}") as demo:
43
+ gr.Markdown(
44
+ "<h1 style='text-align: center; color: black;'>@GenAi MultiLanguage Translator Model</h1>"
45
+ )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
46
 
47
  with gr.Row():
48
+ with gr.Column():
49
+ src_text = gr.Textbox(label="Enter your text", placeholder="Type something here...")
50
+ src_lang = gr.Dropdown(list(languages.keys()), value="English", label="Source Language")
51
+ tgt_lang = gr.Dropdown(list(languages.keys()), value="French", label="Target Language")
52
+ translate_btn = gr.Button("Translate", variant="primary")
53
+
54
+ with gr.Column():
55
+ translated_text = gr.Textbox(label="Translated Text")
56
+ audio_output = gr.Audio(label="Speak Translation", type="filepath")
 
 
 
 
 
57
 
58
+ translate_btn.click(
59
+ translate_text,
60
+ inputs=[src_text, src_lang, tgt_lang],
61
+ outputs=[translated_text, audio_output]
62
+ )
63
 
 
64
  demo.launch()