File size: 2,522 Bytes
8e6e515
1551825
8e6e515
 
1551825
e8dd4ac
 
 
 
 
 
8e6e515
 
 
e8dd4ac
 
 
 
 
 
 
 
 
 
 
1551825
e8dd4ac
1551825
 
 
e8dd4ac
 
1551825
 
 
8e6e515
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1551825
 
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
66
67
68
69
70
71
from transformers import MarianMTModel, MarianTokenizer, pipeline
import gradio as gr
import tempfile
from gtts import gTTS

MODEL_NAME = "victorachede/tiv-translator"

print("Loading tokenizer...")
tokenizer = MarianTokenizer.from_pretrained(MODEL_NAME)
print("Loading model...")
model = MarianMTModel.from_pretrained(MODEL_NAME)
print("Loading Whisper...")
asr = pipeline("automatic-speech-recognition", model="openai/whisper-base")
print("All models ready.")

def translate(text: str) -> str:
    if not text or not text.strip():
        return ""
    inputs = tokenizer(
        text.strip(),
        return_tensors="pt",
        padding=True,
        truncation=True,
        max_length=512
    )
    outputs = model.generate(
        **inputs,
        max_length=128,
        num_beams=5,
        repetition_penalty=1.3,
        no_repeat_ngram_size=3,
        early_stopping=True
    )
    return tokenizer.decode(outputs[0], skip_special_tokens=True)

def text_to_speech(tiv_text: str) -> str:
    tts = gTTS(text=tiv_text, lang='en')  # placeholder — swap for ElevenLabs later
    tmp = tempfile.NamedTemporaryFile(delete=False, suffix=".mp3")
    tts.save(tmp.name)
    return tmp.name

def translate_text(english_text: str):
    tiv = translate(english_text)
    audio = text_to_speech(tiv)
    return tiv, audio

def speech_to_speech(audio_path: str):
    result = asr(audio_path)
    english_text = result["text"]
    tiv = translate(english_text)
    audio = text_to_speech(tiv)
    return english_text, tiv, audio

with gr.Blocks(title="TRANSLTR — by Black Sheep Co.") as demo:
    gr.Markdown("# TRANSLTR\n### English → Tiv | by Black Sheep Co.")

    with gr.Tab("Text"):
        text_in = gr.Textbox(label="English", placeholder="Enter English text...", lines=3)
        text_out = gr.Textbox(label="Tiv", lines=3)
        audio_out_text = gr.Audio(label="Tiv (spoken)")
        text_in.submit(translate_text, inputs=text_in, outputs=[text_out, audio_out_text])
        gr.Button("Translate").click(translate_text, inputs=text_in, outputs=[text_out, audio_out_text])

    with gr.Tab("Speech"):
        audio_in = gr.Audio(sources=["microphone"], type="filepath", label="Speak English")
        english_heard = gr.Textbox(label="English (heard)")
        tiv_out = gr.Textbox(label="Tiv (translated)")
        audio_out_speech = gr.Audio(label="Tiv (spoken)")
        gr.Button("Translate").click(speech_to_speech, inputs=audio_in, outputs=[english_heard, tiv_out, audio_out_speech])

demo.launch()