Traduzione automatica · Originale inglese

Detezione dell'attività vocale — Silero VAD

p99 · VAP — Modelli

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

FaseDettagli
Sincreti40 filtri per bandpass appresi (80 totali: 40 cos + 40 sin)
BiLSTM4 strati, nascosto=128, bidirezionale (256-dim output)
Lineare2 strati lineari con LeakyReLU (negative_slope=0.01)
ProduzioneSoftmax di 7 classe con isteresi post-processing

Dimensione del modello: ~1.49M parametri, ~5.7 MB su disco.

Predefiniti Tracce

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

FaseDettagli
STATOConv1d (1 a 258 canali), pad di riflessione a destra di 64
Encoder4x Conv1d + ReLU
LSTMDimensioni nascoste 128, stato portato attraverso pezzi
DecoderConv1d (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:

  1. silence — nessun discorso rilevato
  2. pendingSpeech — soglia d'inizio attraversata, in attesa della durata minima del discorso
  3. speech — segmento di discorso confermato in corso
  4. pendingSilence — soglia di compensazione attraversata, in attesa della durata minima del silenzio

Predefiniti Tracce

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

OpzioneRiguardo aDesignazione
--onsetEntrambi.Soglia di probabilità di insorgenza del discorso
--offsetEntrambi.Soglia di probabilità di offset del discorso
--min-speechStreamingDurata minima del segmento di discorso (secondi)
--min-silenceStreamingDurata minima del silenzio fino al segmento finale (secondi)
--engineStreamingMotore di inferenza: mlx o coreml
--jsonEntrambi.Formato di uscita JSON
Importante

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à.

Confermare le pause con Smart Turn

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

ModelloIndietroDimensioneHuggingFace
Silero-VAD-v6.2.1MLX~ 1,2 MBaufklarer/Silero-VAD-v6.2.1-MLX
Silero-VAD-v6.2.1CoreML~ 1,2 MBaufklarer/Silero-VAD-v6.2.1-CoreML
Pyannote-Segmentation-3.0MLX5,7 MBaufklarer/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).