
Real-time streaming met Whisper: gids voor spraak-naar-tekst met lage latentie (2026)
Eric King
Author
Real-time streaming met Whisper: gids voor spraak-naar-tekst met lage latentie
OpenAI Whisper is een open-source spraakherkenningsmodel met hoge nauwkeurigheid en meertalige ondersteuning. Hoewel Whisper oorspronkelijk niet is ontworpen voor streaming, kun je met de juiste pipeline real-time spraak-naar-tekstsystemen met lage latentie bouwen — ideaal voor live ondertiteling, vergaderingstranscriptie, livestreams en spraakassistenten.
Deze gids legt uit hoe je Whisper in real-time laat werken, inclusief architectuur, technieken, afwegingen en referentiecode.
Waarom streaming lastig is
Traditionele Whisper draait op volledige audioblokken, niet op continue streams. Uitdagingen zijn onder andere:
- Incrementele decodering — omgaan met gedeeltelijke audio
- Lage latentie — snel resultaten geven
- Artefacten op chunk-grenzen
- GPU-benutting vs. responsiviteit
Om dit op te lossen gebruik je schuivende vensters met overlap en incrementele buffering.
Architectuuroverzicht
Real-time streaming met Whisper gebruikt meestal de volgende componenten:
Audio Source → Audio Buffer → Segmenter → Whisper Inference → Post-processing → Consumer
- Audio Source — microfoon / browser / telefonie
- Segmenter — maakt overlappende chunks
- Whisper Inference — modellen op GPU/CPU
- Post-processing — voegt tekst samen met timestamps
Segmenteren voor lage latentie
Je ontvangt continu audio van de client. Om te voorkomen dat je te lange blokken doorstuurt:
- Vensterlengte: 1–5 seconden
- Overlap: 0,5–1 seconde
- Buffergrootte: hangt af van de latentie-eisen
Een kleiner venster betekent lagere latentie maar meer overhead.
Modellen kiezen voor streaming
| Model | VRAM | Latentie | Nauwkeurigheid |
|---|---|---|---|
| tiny | 1–2 GB | ⭐⭐⭐⭐ | ❌ |
| base | 2–4 GB | ⭐⭐⭐ | ⭐⭐ |
| small | 4–8 GB | ⭐⭐ | ⭐⭐⭐ |
| medium | 8–12 GB+ | ⭐ | ⭐⭐⭐⭐ |
Beste trade-off voor streaming:
base of smallBasis workflow voor streaming (pseudocode)
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"])
Dit print continu gedeeltelijke transcripties met hergebruik van de overlap.
Overlaps en stitching afhandelen
Overlap vermindert weggevallen woorden op de grenzen tussen segmenten.
Bijvoorbeeld:
Segmenten:
- 0–3s
- 2–5s
- 4–7s
Daarna:
- Dubbele tekst in overlappende delen verwijderen
- Timestamps aanpassen
- Een doorlopende stream produceren
Real-time in de browser
Je kunt audio vanuit de browser streamen met WebRTC of de 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
};
Deploymentpatronen
☁️ Serverless (Cloud)
- Clients sturen audio via WebSockets
- AWS Lambda (korte audio) / GPU-server
- Whisper draait op een GPU-instance
- Schaalbaarheid via auto-scaling
🖥️ Toegewijde GPU-server
- Persistente GPU
- Lagere latentie
- Het beste voor 24/7-diensten
🌀 Hybride
- Edge vangt audio op + klein pre-filtermodel
- Stuurt door naar GPU voor volledige transcriptie
Latentie verlagen
🟡 1. Gebruik kleinere vensters
Minder batching → snellere gedeeltelijke resultaten
🔵 2. Overlap buffers
Minder weggevallen woorden
🟢 3. Gebruik FP16 / BF16
Snellere inferentie
🔴 4. Batch meerdere gebruikers
Als de server veel streams verwerkt, verhoogt batching de throughput
Monitoring en metrics
Houd bij:
- Latentie per segment
- Word error rate (WER)
- GPU-benutting
- Gedeeltelijke vs. definitieve nauwkeurigheid
Gebruik Prometheus / Grafana voor dashboards.
Afwegingen
| Doel | Afweging |
|---|---|
| Lage latentie | Minder context → lagere nauwkeurigheid |
| Hoge nauwkeurigheid | Grotere vensters → hogere latentie |
| Klein model | Sneller, minder nauwkeurig |
| Groot model | Langzamer, nauwkeuriger |
Voorbeeldgebruik
- Live ondertiteling voor livestreams
- Transcriptie van vergaderingen of lessen
- Interactieve spraakapps
- Diensten voor conferenties en webinars
Conclusie
Real-time streaming met Whisper is absoluut mogelijk — maar je moet een balans vinden tussen:
- Venstergrootte
- Overlap
- Modelgrootte
- Hardwareprestaties
Met het juiste ontwerp kun je streamingtranscriptie met lage latentie en hoge nauwkeurigheid bereiken, geschikt voor productieomgevingen.
