File size: 1,954 Bytes
ff65cf8
 
 
 
 
d5adb33
 
ff65cf8
 
 
d5adb33
ff65cf8
 
d5adb33
 
ff65cf8
 
 
 
 
 
 
 
 
 
d5adb33
 
ff65cf8
 
d5adb33
 
 
 
 
 
ff65cf8
 
 
d5adb33
ff65cf8
 
 
 
 
 
 
 
 
ef28ba0
ff65cf8
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
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()