Traduzione automatica · Originale inglese
Detezione dell'attività vocale — Silero VAD
Sono disponibili due modelli VAD: Pyannote segmentazione per l'elaborazione di batch offline con alta precisione, e Silero VAD
Pyannote (Offline)
Pyannote segmentation-3.0 fornisce un'elevata precisione VAD utilizzando un'architettura PyanNet. Elabora il discorso in finestre scorrevoli di 10 secondi con un passo di 1 secondo, poi aggrega previsioni sovrapposte e applica l'isteresis lisciante.
Architettura
| Fase | Dettagli |
|---|---|
| Sincreti | 40 filtri per bandpass appresi (80 totali: 40 cos + 40 sin) |
| BiLSTM | 4 strati, nascosto=128, bidirezionale (256-dim output) |
| Lineare | 2 strati lineari con LeakyReLU (negative_slope=0.01) |
| Produzione | Softmax di 7 classe con isteresi post-processing |
Dimensione del modello: ~1.49M parametri, ~5.7 MB su disco.
Predefiniti Tracce
- Onset:
0.767— probabilità sopra quale discorso viene rilevato - Disturbo:
0.377— probabilità sotto la quale termina il discorso
Uso CLI
# Offline VAD
.build/release/speech vad recording.wav
# JSON output
.build/release/speech vad recording.wav --json
# Custom thresholds
.build/release/speech vad recording.wav --onset 0.6 --offset 0.3
Silero VAD (Streaming)
Silero VAD è un modello di streaming leggero che elabora blocchi da 512-sampli (32 ms a 16 kHz). Funziona in tempo reale 23x in modalità di rilascio, rendendolo adatto per applicazioni audio dal vivo.
Schienale diviso: MLX e CoreML ora entrambi predefiniti per le esportazioni Silero v6.2.1: aufklarer/Silero-VAD-v6.2.1-MLX e aufklarer/Silero-VAD-v6.2.1-CoreML. Entrambi mantengono lo stesso 32 ms in streaming API.
Architettura
| Fase | Dettagli |
|---|---|
| STATO | Conv1d (1 a 258 canali), pad di riflessione a destra di 64 |
| Encoder | 4x Conv1d + ReLU |
| LSTM | Dimensioni nascoste 128, stato portato attraverso pezzi |
| Decoder | Conv1d (128 a 1) sullo stato nascosto di LSTM, uscita sigmoide |
Dimensione del modello: ~309K parametri, ~1.2 MB su disco.
Macchina di stato di streaming
Il processore di streaming VAD utilizza una macchina a 4 stati per produrre segmenti di discorso puliti:
- silence — nessun discorso rilevato
- pendingSpeech — soglia d'inizio attraversata, in attesa della durata minima del discorso
- speech — segmento di discorso confermato in corso
- pendingSilence — soglia di compensazione attraversata, in attesa della durata minima del silenzio
Predefiniti Tracce
- Inserzione:
0.5 - Disturbo:
0.35 - Durata minima del discorso:
0.25s - Durata minima del silenzio:
0.1s
Uso CLI
# Streaming VAD
.build/release/speech vad-stream recording.wav
# Custom thresholds
.build/release/speech vad-stream recording.wav --onset 0.6 --offset 0.3
# Minimum durations
.build/release/speech vad-stream recording.wav --min-speech 0.5 --min-silence 0.2
# Choose engine
.build/release/speech vad-stream recording.wav --engine coreml
Opzioni
| Opzione | Riguardo a | Designazione |
|---|---|---|
--onset | Entrambi. | Soglia di probabilità di insorgenza del discorso |
--offset | Entrambi. | Soglia di probabilità di offset del discorso |
--min-speech | Streaming | Durata minima del segmento di discorso (secondi) |
--min-silence | Streaming | Durata minima del silenzio fino al segmento finale (secondi) |
--engine | Streaming | Motore di inferenza: mlx o coreml |
--json | Entrambi. | Formato di uscita JSON |
Per le applicazioni in tempo reale, utilizzare speech vad-stream con Silero VAD. Il modello Pyannote richiede il file audio completo ed è più adatto per l'elaborazione in batch offline, dove l'accuratezza è la priorità.
A VAD sente solo il silenzio, quindi non può dire una frase finita da una pausa di mezza-sentenza. Smart Turn v3.2 a StreamingVADProcessor — oppure speech vad-stream --smart-turn — per confermare ogni pausa prima della fine del segmento: una frase finita termina immediatamente il giro, una pausa di mezza-sentenza continua ad ascoltare.
Download del modello
| Modello | Indietro | Dimensione | HuggingFace |
|---|---|---|---|
| Silero-VAD-v6.2.1 | MLX | ~ 1,2 MB | aufklarer/Silero-VAD-v6.2.1-MLX |
| Silero-VAD-v6.2.1 | CoreML | ~ 1,2 MB | aufklarer/Silero-VAD-v6.2.1-CoreML |
| Pyannote-Segmentation-3.0 | MLX | 5,7 MB | aufklarer/Pyannote-Segmentation-MLX |
Swift API
import SpeechVAD
// Offline VAD (Pyannote)
let pyannote = try await PyannoteVADModel.fromPretrained()
let segments = pyannote.detectSpeech(audio: samples, sampleRate: 16000)
for segment in segments {
print("\(segment.startTime)s - \(segment.endTime)s")
}
// Streaming VAD (Silero)
let silero = try await SileroVADModel.fromPretrained()
let processor = StreamingVADProcessor(model: silero, config: .sileroDefault)
for event in processor.process(samples: audioBuffer) {
switch event {
case .speechStarted(let time):
print("Speech started at \(time)s")
case .speechEnded(let segment):
print("Speech: \(segment.startTime)s - \(segment.endTime)s")
}
}
Disponibile anche su AndroidE poi... Linux & Windows attraverso Speech Core (ONNX Runtime).