Strojový překlad · Anglický originál
Detekce hlasové aktivity - Silero VAD
K dispozici jsou dva modely VAD: segmentace Pyannote pro offline zpracování šarží s vysokou přesností a Silero VAD pro streamování detekce nízké latence. Oba běží zcela on-zařízení.
Pyannote (Offline)
Pyannote segmentation-3.0 poskytuje vysokou přesnost VAD pomocí architektury PyanNet. Provádí řeč v 10-second posuvná okna s 1- second krokem, pak agregáty překrývající předpovědi a aplikuje hysterezi vyhlazení.
Architektura
| Fáze | Podrobnosti |
|---|---|
| IngelNet | 40 učených bandpassových filtrů (celkem 80: 40 cos + 40 sin) |
| BiLSTM | 4 vrstvy, skryté = 128, obousměrné (256-dim výstup) |
| Lineární | 2 lineární vrstvy s LeakyReLU (negativní _ sklon = 0,01) |
| Výstup | 7- třída softmax s hysterezi post- processing |
Velikost modelu: ~ 1.49M parametry, ~ 5.7 MB na disku.
Výchozí prahové hodnoty
- Nástup:
0.767- pravděpodobnost, nad kterou je řeč detekována - Offset:
0.377- pravděpodobnost, pod níž končí řeč
Použití 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 je lehký streamingový model, který zpracovává vzorky 512- vzorku (32 ms na 16 kHz). V reálném čase 23x v režimu uvolnění je vhodný pro živé audio aplikace.
Backend split: MLX a CoreML nyní oba výchozí hodnoty pro Silero v6.2.1 vývozy: aufklarer/Silero-VAD-v6.2.1-MLX a aufklarer/Silero-VAD-v6.2.1-CoreML. Oba mají stejné 32 ms streaming API.
Architektura
| Fáze | Podrobnosti |
|---|---|
| STFT | Conv1d (1 do 258 kanálů), pouze odrazový blok 64 |
| Enkodér | 4x Conv1d + ReLU |
| LSTM | Skrytá velikost 128, stav přenášen přes kusy |
| Dekodér | Conv1d (128 to 1) na LSTM skrytém stavu, sigmoid výstup |
Velikost modelu: ~ 309K parametry, ~ 1.2 MB na disku.
Streaming State Machine
Proudový procesor VAD používá stroj 4-state k výrobě čistějších řeckých segmentů:
- Ticho. - žádný projev nebyl zaznamenán
- přívěšek Projev - nástupní práh překročen, čekání na minimální trvání řeči
- řeč - probíhá potvrzený segment řeči
- Tiše. - kompenzační práh překročen, čekání na minimální dobu ticha
Výchozí prahové hodnoty
- Nástup:
0.5 - Offset:
0.35 - Minimální délka řeči:
0.25s - Minimální doba ticha:
0.1s
Použití 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
Možnosti
| Možnost | Platí pro | Popis |
|---|---|---|
--onset | Obojí | Prahová hodnota pravděpodobnosti nástupu řeči |
--offset | Obojí | Prahová hodnota pravděpodobnosti pro odstupňování řeči |
--min-speech | Streaming | Minimální délka části řeči (sekundy) |
--min-silence | Streaming | Minimální doba ticha do konce segmentu (sekundy) |
--engine | Streaming | Spouštěcí motor: mlx nebo coreml |
--json | Obojí | Výstupní formát JSON |
Pro aplikace v reálném čase, použijte speech vad-stream s Silero VAD. Model Pyannote vyžaduje plný audio soubor a je vhodnější pro offline zpracování šarží, kde je přesnost prioritou.
VAD slyší pouze ticho, takže nemůže určit dokončenou větu z pauzy uprostřed. Smart Turn v3.2 do StreamingVADProcessor - nebo utečte speech vad-stream --smart-turn - pro potvrzení každé pauzy před koncem segmentu: dokončená věta okamžitě ukončí zatáčku, přestávka uprostřed věty stále poslouchá.
Stáhnout model
| Vzor | Backend | Velikost | 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")
}
}
Také k dispozici na Android, a dále Linux & Windows prostřednictvím jádra řeči (ONNX Runtime).