ASR_whisper / app.py
Kamaranis's picture
Update app.py
d5adb33 verified
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()