textTOspeech / app.py
vismaya2939's picture
Update app.py
868c283 verified
raw
history blame
2.49 kB
import os
import streamlit as st
from huggingface_hub import InferenceApi
from dotenv import load_dotenv
import base64
import requests
# Load environment variables from the .env file
load_dotenv()
# Set your Hugging Face API token from the environment variable
HUGGINGFACE_API_TOKEN = os.getenv("HUGGINGFACE_API_TOKEN")
# Function to get user input
def get_text():
input_text = st.text_input("Enter text for speech generation:", key="input")
return input_text
# Function to select the language model
def select_language():
language_options = {
"English": "google/tts_model_en",
"Spanish": "google/tts_model_es",
"German": "google/tts_model_de",
"French": "google/tts_model_fr",
"Italian": "google/tts_model_it",
}
selected_language = st.selectbox("Select Language", list(language_options.keys()))
return language_options[selected_language]
# Initialize Streamlit UI
st.set_page_config(page_title="Multilingual Text-to-Speech", page_icon="πŸ”Š")
st.header("Multilingual Text-to-Speech Demo")
# Get user input and language selection
user_input = get_text()
model_id = select_language()
# Function to play audio in Streamlit
def play_audio(audio_bytes):
b64 = base64.b64encode(audio_bytes).decode()
audio_html = f"""
<audio controls autoplay>
<source src="data:audio/wav;base64,{b64}" type="audio/wav">
Your browser does not support the audio element.
</audio>
"""
st.markdown(audio_html, unsafe_allow_html=True)
# Create a button for generating speech
submit = st.button('Generate Speech')
# If the generate button is clicked and user input is not empty
if submit and user_input:
with st.spinner("Generating speech..."):
# Make a direct request to the API
url = f"https://api-inference.huggingface.co/models/{model_id}"
headers = {"Authorization": f"Bearer {HUGGINGFACE_API_TOKEN}"}
payload = {"inputs": user_input}
# Requesting raw response with the option to manually handle the audio
response = requests.post(url, headers=headers, json=payload, stream=True)
if response.status_code == 200:
audio_data = response.content
# Assuming the response is in audio/wav or another format
play_audio(audio_data)
else:
st.error(f"Error: {response.status_code} - {response.text}")
elif submit:
st.warning("Please enter some text.") # Warning for empty input
has context menu