|
|
import whisper |
|
|
from transformers import MarianMTModel, MarianTokenizer |
|
|
from gtts import gTTS |
|
|
import tempfile |
|
|
import os |
|
|
import certifi |
|
|
|
|
|
os.environ["SSL_CERT_FILE"] = certifi.where() |
|
|
|
|
|
def transcribe_translate_speak(audio_path, target_language): |
|
|
|
|
|
model = whisper.load_model("tiny") |
|
|
result = model.transcribe(audio_path) |
|
|
transcription = result["text"] |
|
|
|
|
|
|
|
|
model_map = { |
|
|
'hi': "Helsinki-NLP/opus-mt-en-hi", |
|
|
'es': "Helsinki-NLP/opus-mt-en-es", |
|
|
'fr': "Helsinki-NLP/opus-mt-en-fr", |
|
|
'bn': "shhossain/opus-mt-en-to-bn" |
|
|
} |
|
|
|
|
|
if target_language not in model_map: |
|
|
raise ValueError(f"Unsupported language: {target_language}") |
|
|
|
|
|
trans_model = MarianMTModel.from_pretrained(model_map[target_language]) |
|
|
tokenizer = MarianTokenizer.from_pretrained(model_map[target_language]) |
|
|
inputs = tokenizer(transcription, return_tensors="pt", padding=True, truncation=True) |
|
|
outputs = trans_model.generate(**inputs) |
|
|
translated_text = tokenizer.decode(outputs[0], skip_special_tokens=True) |
|
|
|
|
|
|
|
|
tts = gTTS(translated_text, lang=target_language) |
|
|
tts_path = tempfile.NamedTemporaryFile(suffix=".mp3", delete=False).name |
|
|
tts.save(tts_path) |
|
|
|
|
|
return transcription, translated_text, tts_path |
|
|
|