Spaces:
Sleeping
Sleeping
# Import required libraries | |
import streamlit as st | |
import speech_recognition as sr | |
from transformers import pipeline | |
from gtts import gTTS | |
import os | |
# Function to transcribe audio to text | |
def transcribe_audio(audio_file, input_language): | |
try: | |
recognizer = sr.Recognizer() | |
with sr.AudioFile(audio_file) as source: | |
audio_data = recognizer.record(source) | |
text = recognizer.recognize_google(audio_data, language=input_language) | |
return text | |
except Exception as e: | |
return f"Error: {str(e)}" | |
# Function to translate text | |
def translate_text(text, target_language): | |
try: | |
translator = pipeline("translation", model=f"Helsinki-NLP/opus-mt-en-{target_language}") | |
translated = translator(text)[0]["translation_text"] | |
return translated | |
except Exception as e: | |
return f"Error: {str(e)}" | |
# Function to generate and play speech | |
def speak_text(text, language): | |
try: | |
tts = gTTS(text=text, lang=language) | |
tts.save("translated_audio.mp3") | |
return "translated_audio.mp3" | |
except Exception as e: | |
return None | |
# Streamlit app | |
st.title("Real-Time Voice-to-Voice Translator ππ€") | |
st.markdown(""" | |
This app translates spoken input between multiple languages in real time. | |
1. Select input and output languages. | |
2. Upload your audio file or record audio for translation. | |
3. Listen to the translated speech. | |
""") | |
# Language options | |
languages = { | |
"English": "en", | |
"Spanish": "es", | |
"French": "fr", | |
"German": "de", | |
"Chinese": "zh", | |
"Japanese": "ja", | |
"Korean": "ko", | |
"Hindi": "hi", | |
} | |
# Select input and output languages | |
input_lang = st.selectbox("Select input language", options=languages.keys()) | |
output_lang = st.selectbox("Select output language", options=languages.keys()) | |
# Upload audio file | |
uploaded_audio = st.file_uploader("Upload an audio file", type=["wav", "mp3", "ogg"]) | |
if uploaded_audio: | |
# Process the uploaded audio | |
st.audio(uploaded_audio, format="audio/wav") | |
st.write("Transcribing audio...") | |
input_language_code = languages[input_lang] | |
transcribed_text = transcribe_audio(uploaded_audio, input_language_code) | |
st.write(f"Transcribed Text: {transcribed_text}") | |
# Translate text | |
if transcribed_text and not transcribed_text.startswith("Error"): | |
st.write("Translating text...") | |
output_language_code = languages[output_lang] | |
translated_text = translate_text(transcribed_text, output_language_code) | |
st.write(f"Translated Text: {translated_text}") | |
# Generate speech for the translated text | |
st.write("Generating translated audio...") | |
audio_file = speak_text(translated_text, output_language_code) | |
if audio_file: | |
st.audio(audio_file, format="audio/mp3") | |
else: | |
st.error("Error in generating translated speech.") | |
else: | |
st.error("Error in transcription.") | |