File size: 2,176 Bytes
3340af7
50b663f
 
b21e1b5
50b663f
b21e1b5
50b663f
 
 
 
 
 
3340af7
b21e1b5
 
 
50b663f
 
 
b21e1b5
 
50b663f
 
 
 
b21e1b5
 
 
a82008f
 
 
 
b21e1b5
 
 
 
 
 
 
 
 
c49c564
50b663f
 
3340af7
b21e1b5
50b663f
 
 
 
b21e1b5
50b663f
 
 
 
b21e1b5
50b663f
3340af7
50b663f
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
56
57
58
59
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()