Spaces:
Runtime error
Runtime error
| 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() | |