Traducere automată · Originalul în engleză

Activitatea vocală Deviaţie Silero VAD

p99 · VAP

Două modele VAD sunt disponibile: Pyannote segmentare pentru prelucrarea pe loturi offline cu mare precizie și Silero VAD pentru detectarea de joasă altitudine.

Pyannote (Offline)

Pyannote segmentation-3.0 oferă o precizie ridicată VAD folosind o arhitectură PyanNet. Procesează vorbirea în ferestre glisante de 10 secunde cu o treaptă de 1 secundă, apoi agregatele suprapuse predicțiilor și aplică netezirea histerezei.

Arhitectură

Etape Detalii
SincNet40 de filtre de tip bandpass învăţate (în total 80: 40 cos + 40 de păcate)
BiLSTM4 straturi, ascunse=128, bidirecționale (256-dim)
Liniar Straturi lineare 2 cu LeakyReLU (negativ_slopă=0.01)
IeșireSoftmax de 7 clase cu histereză post-procesare

Mărime model: ~1.49M parametri, ~5.7 MB pe disc.

Praguri implicite

Utilizarea 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 este un model de streaming ușor care procesează 512 bucăți de eșantion (32 ms la 16 kHz). Se execută la 23x în timp real în modul de eliberare, ceea ce îl face potrivit pentru aplicații audio live.

Spațiu suport: MLX și CoreML ambele acum implicit la Silero v6.2.1 exporturi: aufklarer/Silero-VAD-v6.2.1-MLX şi aufklarer/Silero-VAD-v6.2.1-CoreML Ambele păstrează același 32 ms streaming API.

Arhitectură

Etape Detalii
STFTConv1d (1 până la 258 canale), pad-ul de reflexie numai pentru dreptul de 64
Codor4x Conv1d + ReLU
LSTM Mărimea ascunsă 128, starea transportată peste bucăți
DecodorConv1d (128 până la 1) pe starea ascunsă LSTM, ieșire sigmoidală

Mărime model: ~309K parametri, ~1.2 MB pe disc.

Masina de stat de streaming

Procesorul de streaming VAD utilizează o mașină de 4 state pentru a produce segmente de vorbire curate:

  1. silence
  2. pendingSpeech
  3. Discurs
  4. PendingSilence

Praguri implicite

Utilizarea 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

Opțiuni

OpțiuneSe aplică Descriere
--onset AmbelePrag de probabilitate la debutul vorbirii
--offset AmbelePrag de probabilitate de compensare a vorbirii
--min-speechStreaming Durata minimă a segmentului de vorbire (secunde)
--min-silenceStreaming Durata minimă de tăcere până la segmentul final (secunde)
--engineStreamingMotor de referință: mlx sau coreml
--json AmbeleFormat de ieșire JSON
Important

Pentru aplicaţii în timp real, utilizaţi speech vad-stream cu Silero VAD. Modelul Pyannote necesită fişierul audio complet şi este mai potrivit pentru procesarea pe loturi offline, unde precizia este prioritatea.

Confirmă pauzele cu Smart Turn

A VAD aude doar tăcerea, astfel încât nu poate spune o propoziţie terminată dintr-o pauză de la mijlocul secvenţei. Ataşaţi Smart Turn v3.2 la StreamingVADProcessor sau rulaţi speech vad-stream --smart-turn

Modele de descărcări

ModelPlatformăDimensiuneHuggingFace
Silero-VAD-v6.2.1MLX~1.2 MOaufklater/Silero-VAD-v6.2.1-MLX
Silero-VAD-v6.2.1CoreML~1.2 MOaufklater/Silero-VAD-v6.2.1-CoreML
Pyannote-Segmentation-3.0MLX~5,7 MOaufklarer/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")
    }
}

De asemenea, disponibil la Android și la Linux & Windows prin Core de vorbire (ONNX Runtime).