Maskinoversettelse · Engelsk original
Deteksjon av stemmeaktivitet — Silero VAD
To VAD-modeller er tilgjengelige: Pyannote-segmentering for offline batchprosessering med høy nøyaktighet, og Silero VAD for streaming av lav latens deteksjon. Begge kjører helt på-device.
Pyannote (på linje)
Pyannote segmentation-3.0 gir høy nøyaktighet VAD ved hjelp av en pyanNet-arkitektur. Den behandler tale i 10-sekunds glidende vinduer med et 1-sekunders steg, deretter samler overlappende spådommer og anvender hysteress glatting.
Arkitektur
| Stage | Detaljer |
|---|---|
| SincNet | 40 lærde bandpass filtre (80 totalt: 40 cos + 40 synd) |
| BiLSTM | 4 lag, skjult = 128, toveis (256-dim utgang) |
| Linear | 2 lineære lag med LeakyReLU (negativ_sloppe=0,01) |
| Utgang | 7-klasse mykmaks med hysterese etter behandling |
Modellstørrelse: ~ 1.49M parametre, ~ 5,7 MB på disken.
Standardgrenser
- Onset:
0.767- sannsynlighet over hvilken tale detekteres - Offset:
0.377- sannsynligheten under hvilken tale som slutter
CLI bruk
# 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 er en lett streaming modell som behandler 512-sample biter (32 ms ved 16 kHz). Den kjører ved 23x sanntid i frigjøringsmodus, noe som gjør den egnet for live lydprogrammer.
Motordeling: MLX og CoreML nå begge standard til Silero v6.2.1 eksport: aufklarer/Silero-VAD-v6.2.1-MLX og aufklarer/Silero-VAD-v6.2.1-CoreML. Begge holde den samme 32 ms streaming API.
Arkitektur
| Stage | Detaljer |
|---|---|
| STFT | Conv1d (1 til 258 kanaler), refleksjonspute til høyre på 64 |
| Koder | 4x Conv1d + ReLU |
| LSTM | Skjult størrelse 128, State båret over biter |
| Dehydrering | Conv1d (128 til 1) på LSTM skjult tilstand, sigmoid utgang |
Modellstørrelse: ~ 309K parametere, ~ 1,2 MB på disken.
Streaming State Machine
Streaming VAD prosessoren bruker en 4-tilstandsmaskin til å produsere rene talesegmenter:
- silens - ingen tale oppdaget
- avhengig tale - startgrense krysset, venter på minste taletid
- speech - bekreftet talesegment i gang
- avhengigSilence - offset terskel krysset, venter på minimum stillhet varighet
Standardgrenser
- Onset:
0.5 - Offset:
0.35 - Minimum talelengde:
0.25s - Minimum stillhetsvarighet:
0.1s
CLI bruk
# 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
Alternativer
| Mulighet | Gjelder | Beskrivelse |
|---|---|---|
--onset | Begge deler | Sannsynsgrense for talestart |
--offset | Begge deler | Tale offset sannsynlighetsgrense |
--min-speech | Streaming | Minimum talesegment varighet (sekunder) |
--min-silence | Streaming | Minimum stillhet varighet til slutt segment (sekunder) |
--engine | Streaming | Inferensmotor: mlx eller coreml |
--json | Begge deler | JSON-utgangsformat |
For sanntidsapplikasjoner, bruk speech vad-stream med Silero VAD. Pyannote modellen krever full lydfil og er bedre egnet for offline batchbehandling der nøyaktighet er prioriteten.
A VAD hører bare stillhet, så det kan ikke fortelle en ferdig setning fra en pause midt-sentens. Legg til Smart Turn v3.2 til StreamingVADProcessor — eller kjør speech vad-stream --smart-turn — for å bekrefte hver pause før segmentet avsluttes: en ferdig setning avslutter turen umiddelbart, fortsetter en midt-sentence pause å lytte.
Modellnedlastninger
| Modell | Motor | Størrelse | 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")
}
}
Også tilgjengelig på Android, og på Linux & Windows gjennom talekjerne (ONNX Runtime).