innocentpeter commited on
Commit
64547af
Β·
verified Β·
1 Parent(s): a2c623c

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +44 -65
app.py CHANGED
@@ -1,85 +1,64 @@
1
- import os
2
  import gradio as gr
3
- from transformers import pipeline
4
  from tts_engine import TTSEngine
 
 
 
 
 
5
 
6
- # STT: Whisper
7
- stt_pipeline = pipeline("automatic-speech-recognition", model="openai/whisper-small", device=-1)
8
-
9
- # Translation: MarianMT (generic English <-> multilingual)
10
- translator_pipeline = pipeline("translation", model="Helsinki-NLP/opus-mt-mul-en")
11
-
12
  tts_engine = TTSEngine(use_coqui=True)
 
13
 
14
- LANGUAGES = [
15
- "english", "yoruba", "igbo", "hausa", "pidgin",
16
- "esan", "tiv", "calabar", "benin"
17
- ]
18
 
19
- def transcribe(audio, language="en"):
20
- """Speech to text using Whisper."""
21
  if audio is None:
22
- return ""
23
- result = stt_pipeline(audio, generate_kwargs={"language": language})
24
- return result["text"]
25
-
26
- def translate(text, src_lang, tgt_lang):
27
- """Dummy translation with Marian (you can extend with Nigerian mappings)."""
28
- if not text:
29
- return ""
30
- # For Nigerian languages not covered by Marian, just return the same text
31
- if src_lang not in ["english", "en"] or tgt_lang not in ["english", "en"]:
32
- return f"[{src_lang}->{tgt_lang}] {text}"
33
- translated = translator_pipeline(text)[0]["translation_text"]
34
- return translated
35
 
36
- def handle_conversation(audio, src_lang, tgt_lang, clone_voice):
37
- """One side speaks -> STT -> Translate -> TTS"""
38
- # Step 1: STT
39
- text = transcribe(audio, language="en" if src_lang == "english" else None)
40
 
41
  # Step 2: Translate
42
- translated = translate(text, src_lang, tgt_lang)
43
 
44
- # Step 3: TTS
45
  audio_path = tts_engine.speak(translated, lang=tgt_lang, voice_clone=clone_voice)
46
 
47
  return translated, audio_path
48
 
 
 
 
 
 
49
 
50
- with gr.Blocks(title="🌍 Two-Way Translation Assistant") as demo:
51
  gr.Markdown("# 🌍 Nigerian Two-Way Voice Translator")
52
- gr.Markdown("Speak in your language, hear it in theirs. Supports English ↔ Nigerian languages.")
53
-
54
- with gr.Row():
55
- with gr.Column():
56
- gr.Markdown("### πŸ§‘ Speaker A")
57
  src_lang = gr.Dropdown(LANGUAGES, value="english", label="Speaker A Language")
58
- audio_in_a = gr.Audio(sources=["microphone"], type="filepath", label="🎀 Speak here")
59
- translated_a = gr.Textbox(label="Translated Text", interactive=False)
60
- audio_out_a = gr.Audio(label="πŸ”Š Translation Audio")
61
-
62
- with gr.Column():
63
- gr.Markdown("### πŸ‘© Speaker B")
64
- tgt_lang = gr.Dropdown(LANGUAGES, value="yoruba", label="Speaker B Language")
65
- audio_in_b = gr.Audio(sources=["microphone"], type="filepath", label="🎀 Reply here")
66
- translated_b = gr.Textbox(label="Translated Text", interactive=False)
67
- audio_out_b = gr.Audio(label="πŸ”Š Translation Audio")
68
-
69
- clone_voice = gr.Checkbox(value=False, label="πŸŽ™οΈ Use my cloned voice (if my_voice.wav exists)")
70
-
71
- # Wire up A -> B
72
- audio_in_a.change(
73
- handle_conversation,
74
- inputs=[audio_in_a, src_lang, tgt_lang, clone_voice],
75
- outputs=[translated_a, audio_out_a]
76
- )
77
-
78
- # Wire up B -> A
79
- audio_in_b.change(
80
- handle_conversation,
81
- inputs=[audio_in_b, tgt_lang, src_lang, clone_voice],
82
- outputs=[translated_b, audio_out_b]
83
- )
84
 
85
  demo.launch()
 
 
1
  import gradio as gr
 
2
  from tts_engine import TTSEngine
3
+ from translation import Translator, CustomTranslator
4
+ from data_manager import save_uploaded_file, convert_to_jsonl
5
+ from training.train_translation import train_from_jsonl
6
+ from stt_engine import STTEngine
7
+ import os
8
 
9
+ # Init engines
10
+ stt_engine = STTEngine()
 
 
 
 
11
  tts_engine = TTSEngine(use_coqui=True)
12
+ translator = CustomTranslator() if os.path.exists("./training/outputs/model") else Translator()
13
 
14
+ LANGUAGES = ["english", "yoruba", "igbo", "hausa", "pidgin", "esan", "tiv", "calabar", "benin"]
 
 
 
15
 
16
+ def handle_conversation(audio, src_lang, tgt_lang, clone_voice):
 
17
  if audio is None:
18
+ return "", None
 
 
 
 
 
 
 
 
 
 
 
 
19
 
20
+ # Step 1: Speech to Text
21
+ text = stt_engine.transcribe(audio, language=src_lang)
 
 
22
 
23
  # Step 2: Translate
24
+ translated = translator.translate(text, src_lang, tgt_lang)
25
 
26
+ # Step 3: Text to Speech
27
  audio_path = tts_engine.speak(translated, lang=tgt_lang, voice_clone=clone_voice)
28
 
29
  return translated, audio_path
30
 
31
+ def admin_upload(file):
32
+ file_path = save_uploaded_file(file, file.name)
33
+ jsonl_path = convert_to_jsonl(file_path)
34
+ train_from_jsonl(jsonl_path)
35
+ return "βœ… Training done. Model updated!"
36
 
37
+ with gr.Blocks(title="🌍 Two-Way Voice Translator") as demo:
38
  gr.Markdown("# 🌍 Nigerian Two-Way Voice Translator")
39
+ with gr.Tab("Translator"):
40
+ with gr.Row():
 
 
 
41
  src_lang = gr.Dropdown(LANGUAGES, value="english", label="Speaker A Language")
42
+ tgt_lang = gr.Dropdown(LANGUAGES, value="hausa", label="Speaker B Language")
43
+
44
+ with gr.Row():
45
+ audio_in = gr.Audio(sources=["microphone"], type="filepath", label="🎀 Speak")
46
+ translated = gr.Textbox(label="Translated Text", interactive=False)
47
+ audio_out = gr.Audio(label="πŸ”Š Translation Audio")
48
+
49
+ clone_voice = gr.Checkbox(value=False, label="πŸŽ™οΈ Use my cloned voice (if my_voice.wav exists)")
50
+
51
+ audio_in.change(
52
+ handle_conversation,
53
+ inputs=[audio_in, src_lang, tgt_lang, clone_voice],
54
+ outputs=[translated, audio_out]
55
+ )
56
+
57
+ with gr.Tab("Admin (Training)"):
58
+ gr.Markdown("Upload Hausa ↔ English data (.csv, .xlsx, .tsv, .jsonl)")
59
+ file_in = gr.File(label="Upload dataset")
60
+ train_btn = gr.Button("πŸš€ Train Model")
61
+ output_box = gr.Textbox(label="Training Status")
62
+ train_btn.click(admin_upload, inputs=file_in, outputs=output_box)
 
 
 
 
 
63
 
64
  demo.launch()