File size: 2,519 Bytes
c3a047c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import gradio as gr
from tts_engine import TTSEngine
from translation import Translator, CustomTranslator
from data_manager import save_uploaded_file, convert_to_jsonl
from training.train_translation import train_from_jsonl
from stt_engine import STTEngine
import os

# Init engines
stt_engine = STTEngine()
tts_engine = TTSEngine(use_coqui=True)
translator = CustomTranslator() if os.path.exists("./training/outputs/model") else Translator()

LANGUAGES = ["english", "yoruba", "igbo", "hausa", "pidgin", "esan", "tiv", "calabar", "benin"]

def handle_conversation(audio, src_lang, tgt_lang, clone_voice):
    if audio is None:
        return "", None

    # Step 1: Speech to Text
    text = stt_engine.transcribe(audio, language=src_lang)

    # Step 2: Translate
    translated = translator.translate(text, src_lang, tgt_lang)

    # Step 3: Text to Speech
    audio_path = tts_engine.speak(translated, lang=tgt_lang, voice_clone=clone_voice)

    return translated, audio_path

def admin_upload(file):
    file_path = save_uploaded_file(file, file.name)
    jsonl_path = convert_to_jsonl(file_path)
    train_from_jsonl(jsonl_path)
    return "βœ… Training done. Model updated!"

with gr.Blocks(title="🌍 Two-Way Voice Translator") as demo:
    gr.Markdown("# 🌍 Nigerian Two-Way Voice Translator")
    with gr.Tab("Translator"):
        with gr.Row():
            src_lang = gr.Dropdown(LANGUAGES, value="english", label="Speaker A Language")
            tgt_lang = gr.Dropdown(LANGUAGES, value="hausa", label="Speaker B Language")

        with gr.Row():
            audio_in = gr.Audio(sources=["microphone"], type="filepath", label="🎀 Speak")
            translated = gr.Textbox(label="Translated Text", interactive=False)
            audio_out = gr.Audio(label="πŸ”Š Translation Audio")

        clone_voice = gr.Checkbox(value=False, label="πŸŽ™οΈ Use my cloned voice (if my_voice.wav exists)")

        audio_in.change(
            handle_conversation,
            inputs=[audio_in, src_lang, tgt_lang, clone_voice],
            outputs=[translated, audio_out]
        )

    with gr.Tab("Admin (Training)"):
        gr.Markdown("Upload Hausa ↔ English data (.csv, .xlsx, .tsv, .jsonl)")
        file_in = gr.File(label="Upload dataset")
        train_btn = gr.Button("πŸš€ Train Model")
        output_box = gr.Textbox(label="Training Status")
        train_btn.click(admin_upload, inputs=file_in, outputs=output_box)

demo.launch()