Tłumaczenie automatyczne · Oryginał angielski
Wykrywanie aktywności głosu - Silero VAD
Dostępne są dwa modele VAD: Segmentacja Pyannote do przetwarzania partii offline z wysoką dokładnością, oraz Silero VAD do wykrywania niskiego opóźnienia strumieniowego. Oba działają w całości na urządzeniu.
Pyannote (Offline)
Pyannote segmentation-3.0 zapewnia wysoką dokładność VAD przy użyciu architektury PyanNet. Przetwarza mowę w oknie przesuwnym 10- drugim etapie 1-, następnie agreguje pokrywające się przewidywania i stosuje wygładzanie histerezy.
Architektura
| Etap | Szczegóły |
|---|---|
| SindNet | 40 uczonych filtrów (80 razem: 40 cos + 40 sin) |
| BiLSTM | 4 warstwy, ukryte = 128, dwukierunkowe (wyjście 256- dim) |
| Liniowe | 2 warstwy liniowe z LeakyReLU (ujemne _ nachylenie = 0,01) |
| Wyjście | 7-klasowy softmax z histerezą po przetworzeniu |
Rozmiar modelu: ~ 1.49M parametry, ~ 5.7 MB na dysku.
Domyślne progi
- Początek:
0.767- prawdopodobieństwo wykrycia mowy - Offset:
0.377- prawdopodobieństwo, poniżej którego kończy się mowa
Zastosowanie 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
Silero VAD jest lekkim modelem strumieniowym, który przetwarza fragmenty próbki 512- (32 ms przy 16 kHz). Działa w czasie rzeczywistym 23x, co czyni go odpowiednim dla aplikacji audio na żywo.
Rozdzielone tyły: MLX i CoreML teraz oba domyślne do eksportu Silero v6.2.1: aufklarer/Silero-VAD-v6.2.1-MLX oraz aufklarer/Silero-VAD-v6.2.1-CoreML. Oba przechowywać ten sam 32 ms streaming API.
Architektura
| Etap | Szczegóły |
|---|---|
| STFT | Conv1d (1 do kanałów 258), tylko prawe odbicie 64 |
| Enkoder | 4x Conv1d + ReLU |
| LSTM | Ukryty rozmiar 128, stan przenoszony przez kawałki |
| Dekoder | Conv1d (128 do 1) w stanie ukrytym LSTM, wyjście sigmoid |
Rozmiar modelu: ~ 309K parametry, ~ 1.2 MB na dysku.
Streaming State Machine
Procesor strumieniowy VAD wykorzystuje maszynę stanu 4- do produkcji czystych segmentów mowy:
- Cisza - nie wykryto mowy
- pendingSpeech - próg początkowy przekroczony, czekający na minimalny czas trwania mowy
- przemowa - potwierdzony segment mowy w toku
- wahadłucz Cisza - przekroczony próg kompensacyjny, czekający na minimalny czas trwania ciszy
Domyślne progi
- Początek:
0.5 - Offset:
0.35 - Minimalny czas trwania mowy:
0.25s - Minimalny czas trwania ciszy:
0.1s
Zastosowanie 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
Opcje
| Opcja | Dotyczy | Opis |
|---|---|---|
--onset | Oba | Próg prawdopodobieństwa wystąpienia mowy |
--offset | Oba | Próg prawdopodobieństwa offsetu mowy |
--min-speech | Strumieniowanie | Minimalny czas trwania segmentu mowy (sekundy) |
--min-silence | Strumieniowanie | Minimalny czas trwania ciszy do segmentu końcowego (sekundy) |
--engine | Strumieniowanie | Silnik do składania wniosków: mlx lub coreml |
--json | Oba | Format wyjściowy JSON |
Dla aplikacji w czasie rzeczywistym, zastosowanie speech vad-stream Silero VAD. Model Pyannote wymaga pełnego pliku audio i jest lepiej dostosowany do przetwarzania partii offline, gdzie dokładność jest priorytetem.
VAD słyszy tylko ciszę, więc nie może odróżnić gotowego zdania od zdania środkowego. Smart Turn v3.2 do StreamingVADProcessor - lub uruchomić speech vad-stream --smart-turn - aby potwierdzić każdą pauzę przed zakończeniem segmentu: gotowe zdanie kończy się natychmiast zakrętem, przerwa w zdaniu środkowym ciągle słucha.
Pobieranie modeli
| Wzór | Wstecz | Rozmiar | 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")
}
}
Dostępne również na stronie Android, i Linux i Windows poprzez rdzeń mowy (ONNX Runtime).