text-to-speach / main.py
Shabbir-Anjum's picture
Create main.py
f84c58e verified
raw
history blame
2.18 kB
import streamlit as st
from transformers import pipeline, SpeechT5Processor, SpeechT5ForTextToSpeech, SpeechT5HifiGan
from datasets import load_dataset
import torch
import soundfile as sf
import os
# Function to generate speech using the pipeline method
def generate_speech_pipeline(text, speaker_embedding):
synthesiser = pipeline("text-to-speech", "microsoft/speecht5_tts")
speech = synthesiser(text, forward_params={"speaker_embeddings": speaker_embedding})
return speech["audio"], speech["sampling_rate"]
# Function to generate speech using the processor + generate method
def generate_speech_processor(text, speaker_embedding):
processor = SpeechT5Processor.from_pretrained("microsoft/speecht5_tts")
model = SpeechT5ForTextToSpeech.from_pretrained("microsoft/speecht5_tts")
vocoder = SpeechT5HifiGan.from_pretrained("microsoft/speecht5_hifigan")
inputs = processor(text=text, return_tensors="pt")
speech = model.generate_speech(inputs["input_ids"], speaker_embedding, vocoder=vocoder)
return speech.numpy(), 16000
def main():
st.title("Text-to-Speech with SpeechT5")
st.write("Enter the text you want to convert to speech:")
text = st.text_area("Text", "Hello, my dog is cooler than you!")
if st.button("Generate Speech"):
st.write("Generating speech...")
# Load xvector containing speaker's voice characteristics from a dataset
embeddings_dataset = load_dataset("Matthijs/cmu-arctic-xvectors", split="validation")
speaker_embedding = torch.tensor(embeddings_dataset[7306]["xvector"]).unsqueeze(0)
# Choose the method to generate speech
method = st.selectbox("Choose the method for generating speech", ["Pipeline", "Processor + Generate"])
if method == "Pipeline":
audio, samplerate = generate_speech_pipeline(text, speaker_embedding)
else:
audio, samplerate = generate_speech_processor(text, speaker_embedding)
# Save and play the generated speech
output_path = "speech.wav"
sf.write(output_path, audio, samplerate=samplerate)
st.audio(output_path)
if __name__ == "__main__":
main()