import gradio as gr from transformers import pipeline import numpy as np import librosa # Usamos el modelo Whisper "base" que es más rápido para depurar. MODEL_ID = "openai/whisper-base" # 1. Cargamos el pipeline del modelo ASR print(f"Cargando el modelo de transcripción: {MODEL_ID}...") # Especificamos el dispositivo para asegurarnos de que usa CPU o GPU de forma consistente modelo_transcriptor = pipeline( "automatic-speech-recognition", model=MODEL_ID, device=0 # 0 para la primera GPU, "cpu" si no hay GPU ) print("Modelo cargado.") FRECUENCIA_OBJETIVO = 16000 def transcribir_audio(audio): if audio is None: return "Por favor, graba algo de audio primero." frecuencia_original, datos_audio = audio # Convertimos a float32 datos_audio = datos_audio.astype(np.float32) # Normalizamos el audio al rango [-1.0, 1.0] # Esto es crucial para que Whisper genere el espectrograma correctamente. datos_audio /= np.max(np.abs(datos_audio)) print(f"Audio normalizado. Max value: {np.max(np.abs(datos_audio))}") # Remuestreamos si es necesario if frecuencia_original != FRECUENCIA_OBJETIVO: datos_audio = librosa.resample(y=datos_audio, orig_sr=frecuencia_original, target_sr=FRECUENCIA_OBJETIVO) # El pipeline recibe un audio limpio, normalizado y a la frecuencia correcta. resultado = modelo_transcriptor(datos_audio, generate_kwargs={"language": "spanish"}) texto = resultado["text"] print(f"Texto transcrito: {texto}") return texto # Creamos y lanzamos 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 con OpenAI Whisper", description="Habla en el micrófono y el modelo Whisper transcribirá tu voz a texto." ) demo.launch()