Voice Activity Detection
दो VAD मॉडल उपलब्ध हैं: उच्च सटीकता के साथ offline batch प्रोसेसिंग के लिए Pyannote segmentation, और streaming low-latency डिटेक्शन के लिए Silero VAD v5। दोनों पूरी तरह ऑन-डिवाइस चलते हैं।
Pyannote (Offline)
Pyannote segmentation-3.0 PyanNet आर्किटेक्चर का उपयोग करके उच्च-सटीकता VAD प्रदान करता है। यह ऑडियो को 1-सेकंड step के साथ 10-सेकंड sliding windows में प्रोसेस करता है, फिर overlapping predictions को aggregate करता है और hysteresis smoothing लागू करता है।
आर्किटेक्चर
| चरण | विवरण |
|---|---|
| SincNet | 40 learned bandpass filters (कुल 80: 40 cos + 40 sin) |
| BiLSTM | 4 layers, hidden=128, bidirectional (256-dim आउटपुट) |
| Linear | LeakyReLU (negative_slope=0.01) के साथ 2 linear layers |
| Output | Hysteresis post-processing के साथ 7-class softmax |
मॉडल आकार: ~1.49M पैरामीटर, डिस्क पर ~5.7 MB।
डिफ़ॉल्ट Thresholds
- Onset:
0.767— वह probability जिसके ऊपर speech का पता चलता है - Offset:
0.377— वह probability जिसके नीचे speech समाप्त होती है
CLI उपयोग
# Offline VAD
.build/release/audio vad recording.wav
# JSON output
.build/release/audio vad recording.wav --json
# Custom thresholds
.build/release/audio vad recording.wav --onset 0.6 --offset 0.3
Silero VAD v5 (Streaming)
Silero VAD v5 एक हल्का streaming मॉडल है जो 512-sample chunks (16 kHz पर 32 ms) प्रोसेस करता है। यह release mode में 23x रियल-टाइम पर चलता है, जो इसे live audio applications के लिए उपयुक्त बनाता है।
आर्किटेक्चर
| चरण | विवरण |
|---|---|
| STFT | Conv1d (1 से 258 channels), 64 का right-only reflection pad |
| Encoder | 4x Conv1d + ReLU |
| LSTM | Hidden size 128, state chunks में carry होता है |
| Decoder | LSTM hidden state पर Conv1d (128 से 1), sigmoid आउटपुट |
मॉडल आकार: ~309K पैरामीटर, डिस्क पर ~1.2 MB।
Streaming State Machine
Streaming VAD processor साफ़ speech segments उत्पन्न करने के लिए एक 4-state machine का उपयोग करता है:
- silence — कोई speech का पता नहीं चला
- pendingSpeech — onset threshold पार हुई, न्यूनतम speech अवधि की प्रतीक्षा
- speech — confirmed speech segment progress में
- pendingSilence — offset threshold पार हुई, न्यूनतम silence अवधि की प्रतीक्षा
डिफ़ॉल्ट Thresholds
- Onset:
0.5 - Offset:
0.35 - न्यूनतम speech duration:
0.25s - न्यूनतम silence duration:
0.1s
CLI उपयोग
# Streaming VAD
.build/release/audio vad-stream recording.wav
# Custom thresholds
.build/release/audio vad-stream recording.wav --onset 0.6 --offset 0.3
# Minimum durations
.build/release/audio vad-stream recording.wav --min-speech 0.5 --min-silence 0.2
# Choose engine
.build/release/audio vad-stream recording.wav --engine coreml
विकल्प
| विकल्प | लागू होता है | विवरण |
|---|---|---|
--onset | दोनों | Speech onset probability threshold |
--offset | दोनों | Speech offset probability threshold |
--min-speech | Streaming | न्यूनतम speech segment अवधि (सेकंड) |
--min-silence | Streaming | Segment समाप्त करने के लिए न्यूनतम silence अवधि (सेकंड) |
--engine | Streaming | इन्फ़रेंस इंजन: mlx या coreml |
--json | दोनों | JSON आउटपुट फ़ॉर्मैट |
रियल-टाइम applications के लिए, Silero VAD के साथ audio vad-stream का उपयोग करें। Pyannote मॉडल को पूरी ऑडियो फ़ाइल की आवश्यकता होती है और यह offline batch प्रोसेसिंग के लिए बेहतर उपयुक्त है जहाँ सटीकता प्राथमिकता है।
मॉडल डाउनलोड
| मॉडल | बैकएंड | आकार | 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 PyannoteVAD.loadFromHub()
let segments = try await pyannote.detectSpeech(audioFile: "recording.wav")
for segment in segments {
print("\(segment.start)s - \(segment.end)s")
}
// Streaming 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")
}
}
ONNX Runtime के माध्यम से Android और Linux पर भी उपलब्ध।