Text-To-Speech / app.py
Bmo411's picture
Update app.py
5712a10 verified
raw
history blame
1.86 kB
import gradio as gr
import numpy as np
import tensorflow as tf
from tensorflow import keras
import torch
from speechbrain.inference.TTS import Tacotron2
# Cargar Tacotron2
tacotron2 = Tacotron2.from_hparams(
source="speechbrain/tts-tacotron2-ljspeech",
savedir="tmpdir_tts",
run_opts={"device": "cpu"}
)
# Cargar tu modelo generator.keras
# Cargar tu generator.keras desde HuggingFace
model_path = huggingface_hub.hf_hub_download(
repo_id="Bmo411/WGAN", # <<-- aquí pones tu ruta exacta
filename="generator_epoch_3500.keras" # o el nombre exacto del archivo en el repo
)
generator = keras.models.load_model(model_path, compile=False)
# Función de generación
def text_to_audio(text):
# 1. Convertir texto a mel-spectrograma
mel_output, _, _ = tacotron2.encode_text(text)
mel = mel_output.squeeze(0).detach().cpu().numpy().astype(np.float32) # (80, frames)
# 2. Preparar para generator
mel_input = mel[np.newaxis, ..., np.newaxis] # (1, 80, frames, 1)
mel_input = tf.convert_to_tensor(mel_input)
# 3. Usar generator para generar audio
fake_audio = generator(mel_input, training=False)
fake_audio = tf.squeeze(fake_audio, axis=0).numpy() # (samples,)
# 4. Asegurar que esté en [-1, 1] para audio
fake_audio = np.clip(fake_audio, -1.0, 1.0)
# 5. Devolver audio como (numpy_array, sample_rate)
return fake_audio, 8000 # tu modelo está entrenado en 8 kHz, ¿verdad?
# Interfaz Gradio
interface = gr.Interface(
fn=text_to_audio,
inputs=gr.Textbox(lines=1, placeholder="Escribe un número (ej. nine)"),
outputs=gr.Audio(type="numpy", label="Audio generado"),
title="Demo de TTS con Tacotron2 + Generator",
description="Convierte texto en audio usando Tacotron2 + tu modelo generator."
)
# Lanzar app
if __name__ == "__main__":
interface.launch()