
Streaming en tiempo real con Whisper: Guía para transcripción de voz a texto de baja latencia (2026)
Eric King
Author
Streaming en tiempo real con Whisper: Guía para transcripción de voz a texto de baja latencia
OpenAI Whisper es un modelo de reconocimiento de voz de código abierto con gran precisión y soporte multilingüe. Aunque Whisper no fue diseñado originalmente para streaming, con la canalización adecuada puedes crear sistemas de voz a texto en tiempo real y de baja latencia, ideales para subtítulos en vivo, transcripción de reuniones, transmisiones en directo y asistentes de voz.
Esta guía explora cómo hacer que Whisper funcione en tiempo real, incluyendo arquitectura, técnicas, compensaciones y código de referencia.
Por qué el streaming es difícil
Whisper tradicional se ejecuta sobre segmentos de audio completos, no sobre flujos continuos. Entre los desafíos se incluyen:
- Decodificación incremental: manejo de audio parcial
- Baja latencia: entregar resultados rápidamente
- Artefactos en los límites de los chunks
- Uso de GPU vs. capacidad de respuesta
Para superar esto, utilizas ventanas deslizantes + solapamiento y buffer incremental.
Visión general de la arquitectura
El streaming en tiempo real con Whisper suele usar los siguientes componentes:
Audio Source → Audio Buffer → Segmenter → Whisper Inference → Post-processing → Consumer
- Audio Source: micrófono / navegador / telefonía
- Segmenter: crea chunks solapados
- Whisper Inference: modelos en GPU/CPU
- Post-processing: combinar texto con marcas de tiempo
Segmentación para baja latencia
Recibes audio continuamente desde el cliente. Para evitar enviar bloques de datos demasiado largos:
- Duración de la ventana: 1–5 segundos
- Solapamiento: 0,5–1 segundo
- Tamaño del buffer: depende de las necesidades de latencia
Una ventana más pequeña implica menor latencia pero más sobrecarga.
Elección de modelos para streaming
| Model | VRAM | Latency | Accuracy |
|---|---|---|---|
| tiny | 1–2 GB | ⭐⭐⭐⭐ | ❌ |
| base | 2–4 GB | ⭐⭐⭐ | ⭐⭐ |
| small | 4–8 GB | ⭐⭐ | ⭐⭐⭐ |
| medium | 8–12 GB+ | ⭐ | ⭐⭐⭐⭐ |
Mejor equilibrio para streaming:
base o smallFlujo básico de streaming (Pseudo Code)
import whisper
import sounddevice as sd
import numpy as np
model = whisper.load_model("small").to("cuda")
BUFFER = []
WINDOW = 3 # seconds
OVERLAP = 1 # seconds
RATE = 16000
def callback(indata, frames, time, status):
global BUFFER
BUFFER.extend(indata.flatten().tolist())
# When buffer length > window, process
if len(BUFFER) >= RATE * WINDOW:
segment = BUFFER[:RATE * WINDOW]
BUFFER = BUFFER[int(RATE * (WINDOW - OVERLAP)):]
audio = np.array(segment)
result = model.transcribe(audio, fp16=True)
print("--- partial →", result["text"])
Este flujo imprime continuamente transcripciones parciales reutilizando el solapamiento.
Manejo de solapamientos y unión (stitching)
El solapamiento reduce las palabras perdidas en los límites de los segmentos.
Por ejemplo:
Segmentos:
- 0–3 s
- 2–5 s
- 4–7 s
Luego:
- Eliminar duplicados de texto en las zonas solapadas
- Ajustar marcas de tiempo
- Producir un flujo continuo
Tiempo real en el navegador
Puedes hacer streaming de audio desde el navegador usando WebRTC o la Web Audio API:
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
const processor = audioContext.createScriptProcessor(4096, 1, 1);
source.connect(processor);
processor.connect(audioContext.destination);
processor.onaudioprocess = (e) => {
const chunk = e.inputBuffer.getChannelData(0);
sendToServer(chunk); // WebSocket/Socket.io
};
Patrones de despliegue
☁️ Serverless (Cloud)
- Los clientes envían audio mediante WebSockets
- AWS Lambda (audio corto) / servidor con GPU
- Whisper ejecutándose en una instancia con GPU
- Escalabilidad mediante autoescalado
🖥️ Servidor GPU dedicado
- GPU persistente
- Menor latencia
- Ideal para servicios 24/7
🌀 Híbrido
- El edge captura audio + modelo pequeño como prefiltro
- Reenvía a la GPU para la transcripción completa
Reducción de latencia
🟡 1. Usar ventanas más pequeñas
Menos batching → resultados parciales más rápidos
🔵 2. Solapar buffers
Menos palabras perdidas
🟢 3. Usar FP16 / BF16
Inferencia más rápida
🔴 4. Agrupar varios usuarios
Si el servidor maneja muchos streams, el batching mejora el rendimiento global
Monitorización y métricas
Controla:
- Latencia por segmento
- Word Error Rate (WER)
- Uso de la GPU
- Precisión parcial vs. final
Utiliza Prometheus / Grafana para los paneles.
Trade-offs
| Goal | Tradeoff |
|---|---|
| Baja latencia | Menos contexto → menor precisión |
| Alta precisión | Ventanas más grandes → mayor latencia |
| Modelo pequeño | Más rápido, menos preciso |
| Modelo grande | Más lento, más preciso |
Ejemplos de casos de uso
- Subtítulos en vivo para transmisiones en directo
- Transcripción de reuniones o clases
- Aplicaciones de voz interactivas
- Servicios para conferencias y webinars
Conclusión
El streaming en tiempo real con Whisper es totalmente posible, pero necesitas equilibrar:
- Tamaño de la ventana
- Solapamiento
- Tamaño del modelo
- Rendimiento del hardware
Con el diseño adecuado, puedes lograr transcripción en streaming de baja latencia y alta precisión, apta para entornos de producción.
