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şama | Ayrıntılar |
|---|---|
| SincNet | 40 öğrenilmiş bant geçiren filtre (toplam 80: 40 cos + 40 sin) |
| BiLSTM | 4 katman, hidden=128, çift yönlü (256 boyutlu çıkış) |
| Linear | LeakyReLU 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
- Onset:
0.767— bu olasılığın üzerinde konuşma algılanır - Offset:
0.377— bu olasılığın altında konuşma sona erer
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şama | Ayrıntılar |
|---|---|
| STFT | Conv1d (1'den 258 kanala), 64'lük sağa yansıma dolgusu |
| Encoder | 4x Conv1d + ReLU |
| LSTM | Hidden size 128, durum parçalar arasında taşınır |
| Decoder | LSTM 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:
- silence — konuşma algılanmadı
- pendingSpeech — onset eşiği aşıldı, minimum konuşma süresi bekleniyor
- speech — onaylanmış konuşma segmenti devam ediyor
- pendingSilence — offset eşiği aşıldı, minimum sessizlik süresi bekleniyor
Varsayılan Eşikler
- Onset:
0.5 - Offset:
0.35 - Minimum konuşma süresi:
0.25s - Minimum sessizlik süresi:
0.1s
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çenek | Uygulanır | Açıklama |
|---|---|---|
--onset | Her ikisi | Konuşma başlangıç olasılık eşiği |
--offset | Her ikisi | Konuşma bitiş olasılık eşiği |
--min-speech | Akış | Minimum konuşma segmenti süresi (saniye) |
--min-silence | Akış | Segmenti sonlandırmak için minimum sessizlik süresi (saniye) |
--engine | Akış | Çıkarım motoru: mlx veya coreml |
--json | Her ikisi | JSON çıktı biçimi |
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
| Model | Backend | Boyut | HuggingFace |
|---|---|---|---|
| Silero-VAD-v5 | MLX | ~1.2 MB | aufklarer/Silero-VAD-v5-MLX |
| Silero-VAD-v5 | CoreML | ~1.2 MB | aufklarer/Silero-VAD-v5-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")
}
}
Ayrıca ONNX Runtime aracılığıyla Android, Linux ve Windows'ta da mevcuttur.