
Streaming in tempo reale con Whisper: guida al riconoscimento vocale a bassa latenza (2026)
Eric King
Author
Streaming in tempo reale con Whisper: guida al riconoscimento vocale a bassa latenza
OpenAI Whisper è un modello open-source di riconoscimento vocale con alta accuratezza e supporto multilingue. Anche se Whisper non è stato progettato originariamente per lo streaming, con la giusta pipeline puoi costruire sistemi di speech-to-text in tempo reale e a bassa latenza — ideali per sottotitoli live, trascrizione di meeting, livestream, e assistenti vocali.
Questa guida spiega come far funzionare Whisper in tempo reale, includendo architettura, tecniche, compromessi ed esempi di codice di riferimento.
Perché lo streaming è difficile
Whisper tradizionale lavora su segmenti audio completi, non su flussi continui. Le sfide includono:
- Decodifica incrementale — gestione dell’audio parziale
- Bassa latenza — fornire risultati rapidamente
- Artefatti ai bordi dei chunk
- Utilizzo della GPU vs reattività
Per superarle, si usano finestre scorrevoli con overlap e buffering incrementale.
Panoramica dell’architettura
Lo streaming in tempo reale con Whisper in genere usa i seguenti componenti:
Audio Source → Audio Buffer → Segmenter → Whisper Inference → Post-processing → Consumer
- Audio Source — microfono / browser / telefonia
- Segmenter — crea chunk sovrapposti
- Whisper Inference — modelli su GPU/CPU
- Post-processing — unisce il testo con i timestamp
Segmentazione per bassa latenza
Ricevi continuamente audio dal client. Per evitare di passare blocchi troppo lunghi:
- Lunghezza finestra: 1–5 secondi
- Overlap: 0,5–1 secondo
- Dimensione buffer: dipende dai requisiti di latenza
Una finestra più piccola significa latenza più bassa ma più overhead.
Scelta dei modelli per lo streaming
| Modello | VRAM | Latenza | Accuratezza |
|---|---|---|---|
| tiny | 1–2 GB | ⭐⭐⭐⭐ | ❌ |
| base | 2–4 GB | ⭐⭐⭐ | ⭐⭐ |
| small | 4–8 GB | ⭐⭐ | ⭐⭐⭐ |
| medium | 8–12 GB+ | ⭐ | ⭐⭐⭐⭐ |
Miglior compromesso per lo streaming:
base o smallFlusso di base per lo streaming (pseudo codice)
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"])
Questo stampa continuamente trascrizioni parziali riutilizzando l’overlap.
Gestione degli overlap e stitching
L’overlap riduce le parole perse ai bordi tra i segmenti.
Ad esempio:
Segmenti:
- 0–3s
- 2–5s
- 4–7s
Poi:
- Rimuovere i duplicati di testo nelle parti sovrapposte
- Aggiustare i timestamp
- Produrre uno stream continuo
Tempo reale nel browser
Puoi trasmettere audio dal browser usando WebRTC o 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
};
Pattern di deployment
☁️ Serverless (Cloud)
- I client inviano audio tramite WebSocket
- AWS Lambda (audio breve) / server GPU
- Whisper in esecuzione su istanza GPU
- Scalabilità tramite auto-scaling
🖥️ Server GPU dedicato
- GPU persistente
- Latenza inferiore
- Ideale per servizi 24/7
🌀 Ibrido
- L’edge cattura l’audio + piccolo modello di pre-filtraggio
- Invio alla GPU per la trascrizione completa
Riduzione della latenza
🟡 1. Usa finestre più piccole
Meno batching → risultati parziali più rapidi
🔵 2. Sovrapponi i buffer
Meno parole perse
🟢 3. Usa FP16 / BF16
Inferenza più veloce
🔴 4. Effettua il batching di più utenti
Se il server gestisce molti stream, il batching aumenta il throughput
Monitoraggio e metriche
Monitora:
- Latenza per segmento
- Word error rate (WER)
- Utilizzo della GPU
- Accuratezza parziale vs finale
Usa Prometheus / Grafana per le dashboard.
Compromessi
| Obiettivo | Compromesso |
|---|---|
| Bassa latenza | Meno contesto → minore accuratezza |
| Alta accuratezza | Finestre più grandi → maggiore latenza |
| Modello piccolo | Più veloce, meno accurato |
| Modello grande | Più lento, più accurato |
Casi d’uso di esempio
- Sottotitoli live per livestream
- Trascrizione di riunioni o lezioni
- App vocali interattive
- Servizi per conferenze e webinar
Conclusione
Lo streaming in tempo reale con Whisper è assolutamente possibile — ma devi bilanciare:
- Dimensione della finestra
- Overlap
- Dimensione del modello
- Prestazioni dell’hardware
Con il design giusto, puoi ottenere trascrizioni in streaming a bassa latenza e alta accuratezza, pronte per ambienti di produzione.
