Spaces:
Running
Running
| 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() |