Spaces:
Runtime error
Runtime error
import streamlit as st | |
import speech_recognition as sr | |
from googletrans import Translator | |
from cryptography.fernet import Fernet | |
import pyttsx3 | |
# Function to encrypt the spoken words | |
def encrypt(text, key): | |
cipher = Fernet(key) | |
encrypted_text = cipher.encrypt(text.encode()) | |
return encrypted_text | |
# Function to translate spoken words and speak the result | |
def translate_and_encrypt(source_language, target_language, encrypt_text): | |
# Initialize the speech recognition module | |
recognizer = sr.Recognizer() | |
# Use the default microphone as the audio source | |
with sr.Microphone() as source: | |
st.write("Say something:") | |
audio = recognizer.listen(source) | |
# Google Web Speech API for speech-to-text conversion | |
try: | |
spoken_text = recognizer.recognize_google(audio, language=source_language) | |
st.write("You said:", spoken_text) | |
# Translate spoken words to the selected target language | |
translator = Translator() | |
translated_text = translator.translate(spoken_text, dest=target_language).text | |
st.write("Translated text:", translated_text) | |
# Speak the translated text | |
speak(translated_text, target_language) | |
# Encryption key for security | |
encryption_key = Fernet.generate_key() | |
# Encrypt the translated text if the user chooses encryption | |
if encrypt_text: | |
encrypted_text = encrypt(translated_text, encryption_key) | |
st.write("Encrypted text:", encrypted_text) | |
else: | |
encrypted_text = None | |
# Store the translated text and encryption status in session state | |
if 'translation_history' not in st.session_state: | |
st.session_state.translation_history = [] | |
st.session_state.translation_history.append({ | |
'spoken_text': spoken_text, | |
'translated_text': translated_text, | |
'encrypted_text': encrypted_text | |
}) | |
except sr.UnknownValueError: | |
st.write("Sorry, could not understand audio.") | |
except sr.RequestError as e: | |
st.write(f"Could not request results from Google Web Speech API; {e}") | |
def speak(text, language): | |
# Initialize the text-to-speech engine with SAPI5 voices | |
engine = pyttsx3.init() | |
voices = engine.getProperty('voices') | |
if language == "hindi": | |
engine.setProperty('voice', voices[0].id) # Select Hindi voice | |
elif language == "urdu": | |
engine.setProperty('voice', voices[1].id) # Select Urdu voice | |
engine.say(text) | |
engine.runAndWait() | |
# Streamlit UI | |
st.title("Speech Translation and Encryption") | |
# Language selection | |
language_options = ["en", "es", "fr", "de", "hindi", "urdu"] | |
language_names = ["English", "Spanish", "French", "German", "Hindi", "Urdu"] | |
source_language = st.selectbox("Select Source Language:", language_names, index=0) | |
target_language = st.selectbox("Select Target Language:", language_names, index=1) | |
# Checkbox for encryption | |
encrypt_text = st.checkbox("Encrypt Text") | |
# Button to trigger translation and encryption | |
if st.button("Translate and Encrypt"): | |
translate_and_encrypt(source_language, target_language, encrypt_text) | |
# Navigation to the Translation History tab | |
if 'translation_history' in st.session_state and st.session_state.translation_history: | |
st.title("Translation History") | |
st.table(st.session_state.translation_history) | |
# Organize the UI in tabs | |
tabs = ["Translation History"] | |
selected_tab = st.sidebar.radio("Select Tab", tabs) | |
if selected_tab == "Translation History": | |
if 'translation_history' in st.session_state and st.session_state.translation_history: | |
st.title("Translation History") | |
st.table(st.session_state.translation_history) | |
else: | |
st.write("No translation history yet.") | |