Ses Etkinlik Algılama — Silero VAD v5

İki VAD modeli mevcuttur: yüksek doğrulukla çevrimdışı toplu işleme için Pyannote segmentation ve düşük gecikmeli akış algılama için Silero VAD v5. İkisi de tamamen cihaz üzerinde çalışır.

Pyannote (Çevrimdışı)

Pyannote segmentation-3.0, PyanNet mimarisini kullanarak yüksek doğrulukta VAD sağlar. Konuşmayı 1 saniyelik adımla 10 saniyelik kayan pencerelerde işler, ardından örtüşen tahminleri birleştirir ve histerezis yumuşatma uygular.

Mimari

AşamaAyrıntılar
SincNet40 öğrenilmiş bant geçiren filtre (toplam 80: 40 cos + 40 sin)
BiLSTM4 katman, hidden=128, çift yönlü (256 boyutlu çıkış)
LinearLeakyReLU ile 2 doğrusal katman (negative_slope=0.01)
ÇıkışHisterezis sonradan-işleme ile 7 sınıflı softmax

Model boyutu: ~1.49M parametre, diskte ~5.7 MB.

Varsayılan Eşikler

CLI Kullanımı

# 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 v5 (Akış)

Silero VAD v5, 512 örneklik parçaları (16 kHz'de 32 ms) işleyen hafif bir akış modelidir. Release modunda gerçek zamanın 23 katı hızda çalışır, bu da onu canlı ses uygulamaları için uygun kılar.

Mimari

AşamaAyrıntılar
STFTConv1d (1'den 258 kanala), 64'lük sağa yansıma dolgusu
Encoder4x Conv1d + ReLU
LSTMHidden size 128, durum parçalar arasında taşınır
DecoderLSTM gizli durumu üzerinde Conv1d (128'den 1'e), sigmoid çıkışı

Model boyutu: ~309K parametre, diskte ~1.2 MB.

Akış Durum Makinesi

Akış VAD işlemcisi, temiz konuşma segmentleri üretmek için 4 durumlu bir makine kullanır:

  1. silence — konuşma algılanmadı
  2. pendingSpeech — onset eşiği aşıldı, minimum konuşma süresi bekleniyor
  3. speech — onaylanmış konuşma segmenti devam ediyor
  4. pendingSilence — offset eşiği aşıldı, minimum sessizlik süresi bekleniyor

Varsayılan Eşikler

CLI Kullanımı

# 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

Seçenekler

SeçenekUygulanırAçıklama
--onsetHer ikisiKonuşma başlangıç olasılık eşiği
--offsetHer ikisiKonuşma bitiş olasılık eşiği
--min-speechAkışMinimum konuşma segmenti süresi (saniye)
--min-silenceAkışSegmenti sonlandırmak için minimum sessizlik süresi (saniye)
--engineAkışÇıkarım motoru: mlx veya coreml
--jsonHer ikisiJSON çıktı biçimi
Önemli

Gerçek zamanlı uygulamalar için Silero VAD ile birlikte speech vad-stream kullanın. Pyannote modeli tüm ses dosyasını gerektirir ve doğruluğun öncelikli olduğu çevrimdışı toplu işlemeye daha uygundur.

Model İndirmeleri

ModelBackendBoyutHuggingFace
Silero-VAD-v5MLX~1.2 MBaufklarer/Silero-VAD-v5-MLX
Silero-VAD-v5CoreML~1.2 MBaufklarer/Silero-VAD-v5-CoreML
Pyannote-Segmentation-3.0MLX~5.7 MBaufklarer/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")
    }
}

Ayrıca ONNX Runtime aracılığıyla Android, Linux ve Windows'ta da mevcuttur.