वॉइस गतिविधि पहचान — Silero VAD
दो VAD मॉडल उपलब्ध हैं: उच्च सटीकता के साथ offline batch प्रोसेसिंग के लिए Pyannote segmentation, और streaming low-latency डिटेक्शन के लिए Silero VAD। दोनों पूरी तरह ऑन-डिवाइस चलते हैं।
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/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 (Streaming)
Silero VAD एक हल्का streaming मॉडल है जो 512-sample chunks (16 kHz पर 32 ms) प्रोसेस करता है। यह release mode में 23x रियल-टाइम पर चलता है, जो इसे live audio applications के लिए उपयुक्त बनाता है।
Backend विभाजन: MLX और CoreML अब दोनों Silero v6.2.1 exports को डिफ़ॉल्ट रूप से उपयोग करते हैं: aufklarer/Silero-VAD-v6.2.1-MLX और aufklarer/Silero-VAD-v6.2.1-CoreML। दोनों वही 32 ms streaming API बनाए रखते हैं।
आर्किटेक्चर
| चरण | विवरण |
|---|---|
| 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/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
विकल्प
| विकल्प | लागू होता है | विवरण |
|---|---|---|
--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 के साथ speech vad-stream का उपयोग करें। Pyannote मॉडल को पूरी ऑडियो फ़ाइल की आवश्यकता होती है और यह offline batch प्रोसेसिंग के लिए बेहतर उपयुक्त है जहाँ सटीकता प्राथमिकता है।
VAD केवल मौन सुनता है, इसलिए वह पूरे हो चुके वाक्य और वाक्य के बीच के विराम में अंतर नहीं कर सकता। Smart Turn v3.2 को StreamingVADProcessor से जोड़ें — या speech vad-stream --smart-turn चलाएँ — ताकि सेगमेंट समाप्त होने से पहले हर विराम की पुष्टि हो: पूरा हुआ वाक्य बारी तुरंत समाप्त करता है, वाक्य के बीच का विराम सुनना जारी रखता है।
मॉडल डाउनलोड
| मॉडल | बैकएंड | आकार | HuggingFace |
|---|---|---|---|
| Silero-VAD-v6.2.1 | MLX | ~1.2 MB | aufklarer/Silero-VAD-v6.2.1-MLX |
| Silero-VAD-v6.2.1 | CoreML | ~1.2 MB | aufklarer/Silero-VAD-v6.2.1-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")
}
}
Android पर भी, और Speech Core (ONNX Runtime) के माध्यम से Linux व Windows पर उपलब्ध।