Maskinoversættelse · Engelsk original

Stemmeaktivitetsdetektion - Silero VAD

p99 · VAP - Modeller

To VAD modeller er tilgængelige: Pyannote segmentering til offline batch-behandling med høj nøjagtighed, og Silero VAD for streaming lav- latency detektering. Begge kører helt on- enhed.

Pyannote (Offline)

Pyannote segmentation-3.0 giver høj nøjagtighed VAD ved hjælp af en PyanNet arkitektur. Det behandler tale i 10- anden glidende vinduer med et 1-andet trin, derefter aggregater overlappende forudsigelser og anvender hysterese udjævning.

Arkitektur

FaseDetaljer
SincNet40 indlærte bandpass filtre (80 i alt: 40 cos + 40 synd)
BiLSTM4 lag, skjult = 128, torettet (256-dim udgang)
Lineær2 lineære lag med LeakyRedu (negativ _ hældning = 0,01)
Output7- class softmax med hysterese efter forarbejdning

Model størrelse: ~ 1,49M parametre, ~ 5,7 MB på disk.

Standardtærskelværdier

CLI-brug

# 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 letvægts streaming model, der behandler 512-prøve stykker (32 ms at 16 kHz). 23x real- tid i release mode, hvilket gør det egnet til live audio applikationer.

Opdeling efter motor: MLX og CoreML er nu både 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

FaseDetaljer
STFTConv1d (1 til 258-kanaler), ret- only refleksions pad of 64
Encoder4x Conv1d + RELU
LSTMSkjult størrelse 128, stat båret på tværs stykker
AfkoderStencilsConv1d (128 til 1) på LSTM skjult tilstand, sigmoid output

Model størrelse: ~ 309K parametre, ~ 1,2 MB på disk.

Streaming af statsmaskine

streaming VAD processor bruger en 4- state maskine til at producere ren tale segmenter:

  1. tavshed - ingen tale opdaget
  2. indeståendetale - tærskelværdi for indsættelse, der er overskredet, og som venter på en minimumsvarighed
  3. tale - bekræftet tale segment i gang
  4. pendingSilence - forskudt tærskel, der er overskredet, og som afventer minimumsvarighed

Standardtærskelværdier

CLI-brug

# 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

Indstillinger

ValgmulighedGælder forVarebeskrivelse
--onsetBegge deleSandsynlighedstærskel for taledebut
--offsetBegge deleTærsklen for talesondering af sandsynlighedsgrænser
--min-speechStreamingMindste talesegmentvarighed (sekunder)
--min-silenceStreamingMindste stilhed varighed til ende segment (sekunder)
--engineStreamingInferensmotor: mlx eller coreml
--jsonBegge deleJSON outputformat
Vigtigt

Til realtidsanvendelser, brug speech vad-stream med Silero VAD. Pyannote modellen kræver den fulde lydfil og er bedre egnet til offline batch behandling, hvor nøjagtighed er prioritet.

Bekræft pauser med Smart Turn

En VAD hører kun stilhed, så det kan ikke se en færdig sætning fra en pause midt-sætning. Vedlæg Smart Turn v3.2 til StreamingVADProcessor - eller løbe speech vad-stream --smart-turn - for at bekræfte hver pause, før segmentet slutter: en færdig sætning slutter svinget med det samme, en midtpunktspause bliver ved med at lytte.

Model Downloads

ModelBackendStørrelseHuggingFace
Silero-VAD-v6.2.1MLX~ 1,2 MBaufklarer / Silero-VAD-v6.2.1-MLX
Silero-VAD-v6.2.1CoreML~ 1,2 MBaufklarer / Silero-VAD-v6.2.1-CoreML
Pyannote-Segmentation-3.0MLX~ 5,7 MBaufklarer / Pyanete- 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")
    }
}

Fås også den Android, og Linux & Windows gennem talekerne (ONNX Runtime).