Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
|
@@ -3,19 +3,19 @@ from transformers import pipeline
|
|
| 3 |
import numpy as np
|
| 4 |
import librosa
|
| 5 |
|
| 6 |
-
#
|
| 7 |
-
|
| 8 |
-
MODEL_ID = "openai/whisper-medium"
|
| 9 |
|
| 10 |
# 1. Cargamos el pipeline del modelo ASR
|
| 11 |
print(f"Cargando el modelo de transcripci贸n: {MODEL_ID}...")
|
|
|
|
| 12 |
modelo_transcriptor = pipeline(
|
| 13 |
"automatic-speech-recognition",
|
| 14 |
-
model=MODEL_ID
|
|
|
|
| 15 |
)
|
| 16 |
print("Modelo cargado.")
|
| 17 |
|
| 18 |
-
# El resto del c贸digo es EXACTAMENTE IGUAL para otros modelos
|
| 19 |
FRECUENCIA_OBJETIVO = 16000
|
| 20 |
|
| 21 |
def transcribir_audio(audio):
|
|
@@ -23,12 +23,20 @@ def transcribir_audio(audio):
|
|
| 23 |
return "Por favor, graba algo de audio primero."
|
| 24 |
|
| 25 |
frecuencia_original, datos_audio = audio
|
|
|
|
|
|
|
| 26 |
datos_audio = datos_audio.astype(np.float32)
|
| 27 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 28 |
if frecuencia_original != FRECUENCIA_OBJETIVO:
|
| 29 |
datos_audio = librosa.resample(y=datos_audio, orig_sr=frecuencia_original, target_sr=FRECUENCIA_OBJETIVO)
|
| 30 |
|
| 31 |
-
#
|
| 32 |
resultado = modelo_transcriptor(datos_audio, generate_kwargs={"language": "spanish"})
|
| 33 |
texto = resultado["text"]
|
| 34 |
|
|
|
|
| 3 |
import numpy as np
|
| 4 |
import librosa
|
| 5 |
|
| 6 |
+
# Usamos el modelo Whisper "base" que es m谩s r谩pido para depurar.
|
| 7 |
+
MODEL_ID = "openai/whisper-base"
|
|
|
|
| 8 |
|
| 9 |
# 1. Cargamos el pipeline del modelo ASR
|
| 10 |
print(f"Cargando el modelo de transcripci贸n: {MODEL_ID}...")
|
| 11 |
+
# Especificamos el dispositivo para asegurarnos de que usa CPU o GPU de forma consistente
|
| 12 |
modelo_transcriptor = pipeline(
|
| 13 |
"automatic-speech-recognition",
|
| 14 |
+
model=MODEL_ID,
|
| 15 |
+
device=0 # 0 para la primera GPU, "cpu" si no hay GPU
|
| 16 |
)
|
| 17 |
print("Modelo cargado.")
|
| 18 |
|
|
|
|
| 19 |
FRECUENCIA_OBJETIVO = 16000
|
| 20 |
|
| 21 |
def transcribir_audio(audio):
|
|
|
|
| 23 |
return "Por favor, graba algo de audio primero."
|
| 24 |
|
| 25 |
frecuencia_original, datos_audio = audio
|
| 26 |
+
|
| 27 |
+
# Convertimos a float32
|
| 28 |
datos_audio = datos_audio.astype(np.float32)
|
| 29 |
|
| 30 |
+
# Normalizamos el audio al rango [-1.0, 1.0]
|
| 31 |
+
# Esto es crucial para que Whisper genere el espectrograma correctamente.
|
| 32 |
+
datos_audio /= np.max(np.abs(datos_audio))
|
| 33 |
+
print(f"Audio normalizado. Max value: {np.max(np.abs(datos_audio))}")
|
| 34 |
+
|
| 35 |
+
# Remuestreamos si es necesario
|
| 36 |
if frecuencia_original != FRECUENCIA_OBJETIVO:
|
| 37 |
datos_audio = librosa.resample(y=datos_audio, orig_sr=frecuencia_original, target_sr=FRECUENCIA_OBJETIVO)
|
| 38 |
|
| 39 |
+
# El pipeline recibe un audio limpio, normalizado y a la frecuencia correcta.
|
| 40 |
resultado = modelo_transcriptor(datos_audio, generate_kwargs={"language": "spanish"})
|
| 41 |
texto = resultado["text"]
|
| 42 |
|