# 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.")