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()