|
|
import gradio as gr |
|
|
from transformers import pipeline |
|
|
import numpy as np |
|
|
import librosa |
|
|
|
|
|
|
|
|
print("Cargando el modelo de transcripci贸n...") |
|
|
modelo_transcriptor = pipeline( |
|
|
"automatic-speech-recognition", |
|
|
model="facebook/wav2vec2-large-xlsr-53-spanish" |
|
|
) |
|
|
print("Modelo cargado.") |
|
|
|
|
|
|
|
|
FRECUENCIA_OBJETIVO = 16000 |
|
|
|
|
|
|
|
|
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." |
|
|
|
|
|
|
|
|
frecuencia_original, datos_audio = audio |
|
|
print(f"Recibido audio. Frecuencia original: {frecuencia_original}, Forma de los datos: {datos_audio.shape}") |
|
|
|
|
|
|
|
|
datos_audio = datos_audio.astype(np.float32) |
|
|
print(f"Convertido a tipo de dato: {datos_audio.dtype}") |
|
|
|
|
|
|
|
|
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.") |
|
|
|
|
|
|
|
|
texto = modelo_transcriptor(datos_audio)["text"] |
|
|
|
|
|
print(f"Texto transcrito: {texto}") |
|
|
return texto |
|
|
|
|
|
|
|
|
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() |