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ı
# Ç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ş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ı
# 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ç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
// Ç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.