Update app.py
Browse files
app.py
CHANGED
|
@@ -1,9 +1,9 @@
|
|
| 1 |
import gradio as gr
|
| 2 |
from transformers import pipeline
|
| 3 |
import numpy as np
|
|
|
|
| 4 |
|
| 5 |
-
# 1. Cargamos el pipeline del modelo ASR
|
| 6 |
-
# Este modelo es grande y puede tardar en cargar la primera vez.
|
| 7 |
print("Cargando el modelo de transcripci贸n...")
|
| 8 |
modelo_transcriptor = pipeline(
|
| 9 |
"automatic-speech-recognition",
|
|
@@ -11,33 +11,45 @@ modelo_transcriptor = pipeline(
|
|
| 11 |
)
|
| 12 |
print("Modelo cargado.")
|
| 13 |
|
|
|
|
|
|
|
|
|
|
| 14 |
# 2. Definimos la funci贸n que procesar谩 el audio
|
| 15 |
def transcribir_audio(audio):
|
| 16 |
"""
|
| 17 |
-
Recibe los datos del audio desde Gradio
|
|
|
|
| 18 |
"""
|
| 19 |
if audio is None:
|
| 20 |
return "Por favor, graba algo de audio primero."
|
| 21 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 22 |
|
| 23 |
-
# La variable 'audio' es una tupla: (frecuencia_muestreo, datos_numpy)
|
| 24 |
-
# El modelo solo quiere los datos_numpy, que es el segundo elemento.
|
| 25 |
-
print("Recibido audio, iniciando transcripci贸n...")
|
| 26 |
-
texto = modelo_transcriptor(audio[1])["text"] #solo el array de NumPy con la onda de sonido)
|
| 27 |
print(f"Texto transcrito: {texto}")
|
| 28 |
return texto
|
| 29 |
|
| 30 |
-
# 3.
|
| 31 |
demo = gr.Interface(
|
| 32 |
fn=transcribir_audio,
|
| 33 |
inputs=gr.Audio(
|
| 34 |
sources=["microphone"],
|
| 35 |
-
type="numpy",
|
| 36 |
label="Graba tu voz en espa帽ol"
|
| 37 |
),
|
| 38 |
outputs=gr.Textbox(label="Transcripci贸n"),
|
| 39 |
title="Transcripci贸n de Audio a Texto en Espa帽ol",
|
| 40 |
-
description="Habla en el micr贸fono y el modelo Wav2Vec2 transcribir谩 tu voz a texto.
|
| 41 |
)
|
| 42 |
|
| 43 |
demo.launch()
|
|
|
|
| 1 |
import gradio as gr
|
| 2 |
from transformers import pipeline
|
| 3 |
import numpy as np
|
| 4 |
+
import librosa
|
| 5 |
|
| 6 |
+
# 1. Cargamos el pipeline del modelo ASR
|
|
|
|
| 7 |
print("Cargando el modelo de transcripci贸n...")
|
| 8 |
modelo_transcriptor = pipeline(
|
| 9 |
"automatic-speech-recognition",
|
|
|
|
| 11 |
)
|
| 12 |
print("Modelo cargado.")
|
| 13 |
|
| 14 |
+
# Definimos la frecuencia de muestreo que el modelo espera
|
| 15 |
+
FRECUENCIA_OBJETIVO = 16000
|
| 16 |
+
|
| 17 |
# 2. Definimos la funci贸n que procesar谩 el audio
|
| 18 |
def transcribir_audio(audio):
|
| 19 |
"""
|
| 20 |
+
Recibe los datos del audio desde Gradio, los remuestrea a 16kHz
|
| 21 |
+
y devuelve el texto transcrito.
|
| 22 |
"""
|
| 23 |
if audio is None:
|
| 24 |
return "Por favor, graba algo de audio primero."
|
| 25 |
|
| 26 |
+
# La variable 'audio' es una tupla: (frecuencia_original, datos_numpy)
|
| 27 |
+
frecuencia_original, datos_audio = audio
|
| 28 |
+
print(f"Recibido audio. Frecuencia original: {frecuencia_original}, Forma de los datos: {datos_audio.shape}")
|
| 29 |
+
|
| 30 |
+
# Comprobamos si la frecuencia de muestreo es la correcta. Si no, la remuestreamos.
|
| 31 |
+
if frecuencia_original != FRECUENCIA_OBJETIVO:
|
| 32 |
+
print(f"Remuestreando de {frecuencia_original} Hz a {FRECUENCIA_OBJETIVO} Hz...")
|
| 33 |
+
datos_audio = librosa.resample(y=datos_audio, orig_sr=frecuencia_original, target_sr=FRECUENCIA_OBJETIVO)
|
| 34 |
+
print("Remuestreo completado.")
|
| 35 |
+
|
| 36 |
+
# Ahora le pasamos al modelo el audio a la velocidad correcta
|
| 37 |
+
texto = modelo_transcriptor(datos_audio)["text"]
|
| 38 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 39 |
print(f"Texto transcrito: {texto}")
|
| 40 |
return texto
|
| 41 |
|
| 42 |
+
# 3. Creamos y lanzar la interfaz de Gradio
|
| 43 |
demo = gr.Interface(
|
| 44 |
fn=transcribir_audio,
|
| 45 |
inputs=gr.Audio(
|
| 46 |
sources=["microphone"],
|
| 47 |
+
type="numpy",
|
| 48 |
label="Graba tu voz en espa帽ol"
|
| 49 |
),
|
| 50 |
outputs=gr.Textbox(label="Transcripci贸n"),
|
| 51 |
title="Transcripci贸n de Audio a Texto en Espa帽ol",
|
| 52 |
+
description="Habla en el micr贸fono y el modelo Wav2Vec2 transcribir谩 tu voz a texto. El audio se remuestrear谩 a 16kHz autom谩ticamente."
|
| 53 |
)
|
| 54 |
|
| 55 |
demo.launch()
|