insider12 commited on
Commit
42b415b
·
verified ·
1 Parent(s): 5239725

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +61 -41
app.py CHANGED
@@ -1,54 +1,74 @@
1
- import json
2
- import torch
3
  import gradio as gr
 
4
  from transformers import pipeline
 
5
  from gtts import gTTS
 
6
  import os
7
 
8
- # Load FLORES-200 language codes from lang_code.json
9
  with open("lang_code.json", "r", encoding="utf-8") as f:
10
- LANG_CODES = json.load(f)
 
 
 
 
 
 
11
 
12
- # Translation pipeline
13
- translator = pipeline("translation", model="facebook/nllb-200-distilled-600M")
 
 
 
 
14
 
15
- # Translation + TTS function
16
- def translate_and_speak(text, src_lang, tgt_lang):
17
- try:
18
- src_code = LANG_CODES[src_lang]
19
- tgt_code = LANG_CODES[tgt_lang]
 
20
 
21
- # Translate
22
- result = translator(text, src_lang=src_code, tgt_lang=tgt_code)
23
- translated_text = result[0]['translation_text']
 
 
 
 
 
24
 
25
- # Generate speech for translated text
26
- tts = gTTS(translated_text, lang=tgt_lang.split("_")[0])
27
- audio_path = "translated_audio.mp3"
28
- tts.save(audio_path)
29
 
30
- return translated_text, audio_path
31
- except Exception as e:
32
- return f"Error: {e}", None
 
 
 
33
 
34
  # Gradio UI
35
- with gr.Blocks(theme="soft") as demo:
36
- gr.HTML("<h1 style='color:black; text-align:center;'>@GenAi MultiLanguage Translator Model</h1>")
37
-
38
- with gr.Row():
39
- with gr.Column():
40
- src_text = gr.Textbox(label="Enter Text", placeholder="Type something here...")
41
- src_lang = gr.Dropdown(choices=list(LANG_CODES.keys()), value="English (Latin script)", label="Source Language")
42
- tgt_lang = gr.Dropdown(choices=list(LANG_CODES.keys()), value="French", label="Target Language")
43
- translate_btn = gr.Button("Translate")
44
-
45
- with gr.Column():
46
- output_text = gr.Textbox(label="Translated Text")
47
- output_audio = gr.Audio(label="Speech Output", type="filepath")
48
-
49
- translate_btn.click(fn=translate_and_speak,
50
- inputs=[src_text, src_lang, tgt_lang],
51
- outputs=[output_text, output_audio])
52
-
53
- # Run app
54
- demo.launch()
 
 
 
 
 
1
  import gradio as gr
2
+ import json
3
  from transformers import pipeline
4
+ import torch
5
  from gtts import gTTS
6
+ import tempfile
7
  import os
8
 
9
+ # Load language codes from JSON
10
  with open("lang_code.json", "r", encoding="utf-8") as f:
11
+ data = json.load(f)
12
+
13
+ # Convert list → dict if needed
14
+ if isinstance(data, list):
15
+ LANG_CODES = {item["Language"]: item["FLORES-200 code"] for item in data}
16
+ else:
17
+ LANG_CODES = data
18
 
19
+ # Load translation pipeline
20
+ translator = pipeline(
21
+ "translation",
22
+ model="facebook/nllb-200-distilled-600M",
23
+ device=0 if torch.cuda.is_available() else -1
24
+ )
25
 
26
+ # Text translation function
27
+ def translate_text(text, src_lang, tgt_lang):
28
+ src_code = LANG_CODES[src_lang]
29
+ tgt_code = LANG_CODES[tgt_lang]
30
+ result = translator(text, src_lang=src_code, tgt_lang=tgt_code)
31
+ return result[0]['translation_text']
32
 
33
+ # Speech translation function
34
+ def translate_speech(audio, src_lang, tgt_lang):
35
+ if audio is None:
36
+ return None, "Please provide an audio file."
37
+
38
+ # Convert speech to text (using Whisper)
39
+ asr = pipeline("automatic-speech-recognition", model="openai/whisper-base")
40
+ transcription = asr(audio)["text"]
41
 
42
+ # Translate the text
43
+ translated_text = translate_text(transcription, src_lang, tgt_lang)
 
 
44
 
45
+ # Convert translated text to speech
46
+ tts = gTTS(text=translated_text, lang='en') # gTTS uses ISO-639-1, adjust as needed
47
+ temp_file = tempfile.NamedTemporaryFile(delete=False, suffix=".mp3")
48
+ tts.save(temp_file.name)
49
+
50
+ return temp_file.name, translated_text
51
 
52
  # Gradio UI
53
+ with gr.Blocks() as demo:
54
+ gr.Markdown("## 🌐 Multilingual Text & Speech Translator")
55
+
56
+ with gr.Tab("Text Translation"):
57
+ src_lang = gr.Dropdown(choices=list(LANG_CODES.keys()), value="English (Latin script)", label="Source Language")
58
+ tgt_lang = gr.Dropdown(choices=list(LANG_CODES.keys()), value="French", label="Target Language")
59
+ input_text = gr.Textbox(label="Enter text to translate")
60
+ output_text = gr.Textbox(label="Translated text")
61
+ translate_btn = gr.Button("Translate")
62
+ translate_btn.click(translate_text, inputs=[input_text, src_lang, tgt_lang], outputs=output_text)
63
+
64
+ with gr.Tab("Speech Translation"):
65
+ src_lang_s = gr.Dropdown(choices=list(LANG_CODES.keys()), value="English (Latin script)", label="Source Language")
66
+ tgt_lang_s = gr.Dropdown(choices=list(LANG_CODES.keys()), value="French", label="Target Language")
67
+ audio_input = gr.Audio(sources=["microphone", "upload"], type="filepath")
68
+ audio_output = gr.Audio(label="Translated Speech")
69
+ translated_text_output = gr.Textbox(label="Translated Text")
70
+ translate_speech_btn = gr.Button("Translate Speech")
71
+ translate_speech_btn.click(translate_speech, inputs=[audio_input, src_lang_s, tgt_lang_s], outputs=[audio_output, translated_text_output])
72
+
73
+ if __name__ == "__main__":
74
+ demo.launch()