Automatische vertaling · Engels origineel
Voice Activity Detection .Silero VAD
Twee VAD modellen zijn beschikbaar: Pyannote segmentatie voor offline batchverwerking met hoge nauwkeurigheid, en Silero VAD voor het streamen van lage-latency detectie. Beide draaien volledig op het apparaat.
Pyannote (Offline)
Pyannote segmentation-3.0 biedt hoge nauwkeurigheid VAD met behulp van een PyanNet-architectuur. Het verwerkt spraak in 10-seconde schuifvensters met een 1-seconde stap, aggregeert overlappende voorspellingen en past hysteresis gladmaken toe.
Architectuur
| Fase | Gegevens |
|---|---|
| SincNet | 40 geleerde bandpass filters (80 totaal: 40 cos + 40 sin) |
| BILSTM | 4 lagen, verborgen=128, bidirectionele (256-dim uitvoer) |
| Lineair | 2 lineaire lagen met LeakyReLU (negatief_helling=0,01) |
| Uitvoer | 7-klasse softmax met hysterese na verwerking |
Modelgrootte: ~1.49M parameters, ~5.7 MB op schijf.
Standaarddrempels
- Begin:
0.767waarschijnlijkheid boven welke spraak wordt gedetecteerd - Verschuiving:
0.377waarschijnlijkheid waaronder spraak eindigt
CLI-gebruik
# 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 is een lichtgewicht streamingmodel dat 512-sample brokken verwerkt (32 ms bij 16 kHz). Het draait op 23x real-time in release-modus, waardoor het geschikt is voor live audio-toepassingen.
Backend split: MLX en CoreML zijn nu allebei standaard aan Silero v6.2.1 export: aufklarer/Silero-VAD-v6.2.1-MLX en aufklarer/Silero-VAD-v6.2.1-CoreML. Beide houden dezelfde 32 ms streaming API.
Architectuur
| Fase | Gegevens |
|---|---|
| STFT | Conv1d (1 tot 258 kanalen), alleen-rechts-reflectie pad van 64 |
| Encoder | 4x Conv1d + ReLU |
| LSTM | Verborgen maat 128, staat gedragen over brokken |
| Decoder | Conv1d (128 tot 1) op LSTM verborgen toestand, sigmoid uitvoer |
Modelgrootte: ~309K parameters, ~1.2 MB op schijf.
Streaming State Machine
De streaming VAD processor gebruikt een 4-state machine om schone spraaksegmenten te produceren:
- stilte
- pendencySpeech
- speech bevestigd spraaksegment in uitvoering
- pendencySilence Overgestoken offsetdrempel, wachtend op minimale stilteduur
Standaarddrempels
- Begin:
0.5 - Verschuiving:
0.35 - Minimale spraakduur:
0.25s - Minimale stilteduur:
0.1s
CLI-gebruik
# 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
Opties
| Optie | Geldt voor | Omschrijving |
|---|---|---|
--onset | Beide | Speech begin-kansdrempel |
--offset | Beide | Speech offset waarschijnlijkheidsdrempel |
--min-speech | Streaming | Minimale duur van het spraaksegment (seconden) |
--min-silence | Streaming | Minimale stilteduur tot eindsegment (seconden) |
--engine | Streaming | Inferentiemotor: mlx of coreml |
--json | Beide | JSON-uitvoerformaat |
Voor real-time toepassingen, gebruik speech vad-stream met Silero VAD. Het Pyannote model vereist het volledige audiobestand en is beter geschikt voor offline batchverwerking waar nauwkeurigheid de prioriteit heeft.
Een VAD hoort alleen stilte, dus het kan een voltooide zin van een pauze middenzin niet onderscheiden. Voeg Smart Turn v3.2 toe aan StreamingVADProcessor of voer speech vad-stream --smart-turn uit om elke pauze te bevestigen voordat het segment eindigt: een voltooide zin eindigt de turn onmiddellijk, een mid-sententiepauze blijft luisteren.
Modeldownloads
| Model | Backend | Grootte | 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")
}
}
Ook beschikbaar op Android, en op Linux & Windows via Speech Core (ONNX Runtime).