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 लागू करता है।

आर्किटेक्चर

चरणविवरण
SincNet40 learned bandpass filters (कुल 80: 40 cos + 40 sin)
BiLSTM4 layers, hidden=128, bidirectional (256-dim आउटपुट)
LinearLeakyReLU (negative_slope=0.01) के साथ 2 linear layers
OutputHysteresis post-processing के साथ 7-class softmax

मॉडल आकार: ~1.49M पैरामीटर, डिस्क पर ~5.7 MB।

डिफ़ॉल्ट Thresholds

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 के लिए उपयुक्त बनाता है।

आर्किटेक्चर

चरणविवरण
STFTConv1d (1 से 258 channels), 64 का right-only reflection pad
Encoder4x Conv1d + ReLU
LSTMHidden size 128, state chunks में carry होता है
DecoderLSTM hidden state पर Conv1d (128 से 1), sigmoid आउटपुट

मॉडल आकार: ~309K पैरामीटर, डिस्क पर ~1.2 MB।

Streaming State Machine

Streaming VAD processor साफ़ speech segments उत्पन्न करने के लिए एक 4-state machine का उपयोग करता है:

  1. silence — कोई speech का पता नहीं चला
  2. pendingSpeech — onset threshold पार हुई, न्यूनतम speech अवधि की प्रतीक्षा
  3. speech — confirmed speech segment progress में
  4. pendingSilence — offset threshold पार हुई, न्यूनतम silence अवधि की प्रतीक्षा

डिफ़ॉल्ट Thresholds

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-speechStreamingन्यूनतम speech segment अवधि (सेकंड)
--min-silenceStreamingSegment समाप्त करने के लिए न्यूनतम silence अवधि (सेकंड)
--engineStreamingइन्फ़रेंस इंजन: mlx या coreml
--jsonदोनोंJSON आउटपुट फ़ॉर्मैट
महत्वपूर्ण

रियल-टाइम applications के लिए, Silero VAD के साथ audio vad-stream का उपयोग करें। Pyannote मॉडल को पूरी ऑडियो फ़ाइल की आवश्यकता होती है और यह offline batch प्रोसेसिंग के लिए बेहतर उपयुक्त है जहाँ सटीकता प्राथमिकता है।

मॉडल डाउनलोड

मॉडलबैकएंडआकारHuggingFace
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

// 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 पर भी उपलब्ध