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ı

# Çevrimdışı VAD
.build/release/speech vad recording.wav

# JSON çıktı
.build/release/speech vad recording.wav --json

# Özel eşikler
.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ı

# Akış VAD
.build/release/speech vad-stream recording.wav

# Özel eşikler
.build/release/speech vad-stream recording.wav --onset 0.6 --offset 0.3

# Minimum süreler
.build/release/speech vad-stream recording.wav --min-speech 0.5 --min-silence 0.2

# Motor seç
.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

// Çevrimdışı VAD (Pyannote)
let pyannote = try await PyannoteVAD.loadFromHub()
let segments = try await pyannote.detectSpeech(audioFile: "recording.wav")
for segment in segments {
    print("\(segment.start)s - \(segment.end)s")
}

// Akış VAD (Silero)
let silero = try await SileroVAD.loadFromHub()
let processor = StreamingVADProcessor(model: silero, config: .sileroDefault)
for chunk in audioChunks {
    if let segment = try processor.process(chunk: chunk) {
        print("Speech: \(segment.start)s - \(segment.end)s")
    }
}

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