ENtoES / app.py
Kamaranis's picture
Update app.py
a82008f verified
import gradio as gr
from transformers import pipeline
import numpy as np
import librosa
# 1. Cargamos el pipeline del modelo ASR
print("Cargando el modelo de transcripci贸n...")
modelo_transcriptor = pipeline(
"automatic-speech-recognition",
model="facebook/wav2vec2-large-xlsr-53-spanish"
)
print("Modelo cargado.")
# Definimos la frecuencia de muestreo que el modelo espera
FRECUENCIA_OBJETIVO = 16000
# 2. Definimos la funci贸n que procesar谩 el audio
def transcribir_audio(audio):
"""
Recibe los datos del audio desde Gradio, los remuestrea a 16kHz
y devuelve el texto transcrito.
"""
if audio is None:
return "Por favor, graba algo de audio primero."
# La variable 'audio' es una tupla: (frecuencia_original, datos_numpy)
frecuencia_original, datos_audio = audio
print(f"Recibido audio. Frecuencia original: {frecuencia_original}, Forma de los datos: {datos_audio.shape}")
# Convertimos el array de audio de enteros a punto flotante de 32 bits
datos_audio = datos_audio.astype(np.float32)
print(f"Convertido a tipo de dato: {datos_audio.dtype}")
# Comprobamos si la frecuencia de muestreo es la correcta. Si no, la remuestreamos.
if frecuencia_original != FRECUENCIA_OBJETIVO:
print(f"Remuestreando de {frecuencia_original} Hz a {FRECUENCIA_OBJETIVO} Hz...")
datos_audio = librosa.resample(y=datos_audio, orig_sr=frecuencia_original, target_sr=FRECUENCIA_OBJETIVO)
print("Remuestreo completado.")
# Ahora le pasamos al modelo el audio a la velocidad correcta
texto = modelo_transcriptor(datos_audio)["text"]
print(f"Texto transcrito: {texto}")
return texto
# 3. Creamos y lanzar la interfaz de Gradio
demo = gr.Interface(
fn=transcribir_audio,
inputs=gr.Audio(
sources=["microphone"],
type="numpy",
label="Graba tu voz en espa帽ol"
),
outputs=gr.Textbox(label="Transcripci贸n"),
title="Transcripci贸n de Audio a Texto en Espa帽ol",
description="Habla en el micr贸fono y el modelo Wav2Vec2 transcribir谩 tu voz a texto. El audio se remuestrear谩 a 16kHz autom谩ticamente."
)
demo.launch()