Terjemahan mesin · Versi asli bahasa Inggris

Deteksi Aktivitas Suara - Silero VAD

p99 · VAP - Model

Dua model VAD tersedia: Pyannote segmentasi untuk pemrosesan batch offline dengan akurasi tinggi, dan Silero VAD untuk streaming pendeteksi low-latency. Keduanya dijalankan sepenuhnya on- perangkat.

Pyannote (Offline)

Pyannote segmentation-3.0 menyediakan akurasi tinggi VAD menggunakan arsitektur PyanNet. Proses ini memproses pidato dalam 10-second geser jendela dengan sebuah 1-langkah kedua, kemudian mengumpulkan overlapping prediksi dan berlaku histeresis smooling.

Arsitektur

TahapRincian
SincNetFilter di Bandpass 40 belajar (80 total: 40 cos + 40 dosa)
BiLSTM4 lapis, tersembunyi = 128, bidirectional (keluaran 256-dim)
Linear2 lapisan linear dengan LeakyRLU (negatif _ slope = 0.01)
Keluaran7-class softmax dengan postingan hysteresis-processing

Ukuran model: ~ 1.49M parameter, ~ 5.7 MB pada disk.

Ambang Bawaan

Penggunaan 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 adalah sebuah model streaming ringan yang proses 512-sample potongan (32 ms di 16 KHz). lt berjalan di 23x real-time dalam mode rilis, membuatnya cocok untuk aplikasi audio hidup.

Pembagian latar: MLX dan CoreML kini keduanya telah baku ke ekspor Silero v6.2.1: aufklarer/Silero-VAD-v6.2.1-MLX dan aufklarer/Silero-VAD-v6.2.1-CoreMLKeduanya menjaga 32 yang sama streaming API.

Arsitektur

TahapRincian
STFTConv1d (1 ke saluran 258), benar-benar hanya pad refleksi dari 64
Enkoder4x Conv1d + ReLU
LSTMUkuran tersembunyi 128, negara membawa seluruh potongan
DecoderConv1d (128 ke 1) pada LSTM negara tersembunyi, keluaran sigmoid

Ukuran model: ~ 309K parameter, ~ 1.2 MB pada disk.

Mesin Keadaan Streaming

Streaming VAD prosesor menggunakan sebuah mesin negara 4- untuk menghasilkan segmen pidato bersih:

  1. diam - Tidak ada pidato terdeteksi
  2. pendingSpeech - onset threshold crossed, waiting for minimum speech durasi
  3. pidato - dikonfirmasi segmen pidato dalam proses
  4. PendingSilence - batas ofset menyeberangi, menunggu durasi keheningan minimum

Ambang Bawaan

Penggunaan 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

Opsi

OpsiApplies ToDeskripsi
--onsetKeduanyaPidato onset Ambang probabilitas
--offsetKeduanyaKalimat ofset kemungkinan threshold
--min-speechStreamingDurasi segmen pidato minimum (detik)
--min-silenceStreamingDurasi keheningan minimum untuk mengakhiri segmen (detik)
--engineStreamingInferensi mesin: mlx atau coreml
--jsonKeduanyaFormat keluaran JSON
Penting

Untuk aplikasi real-time, gunakan speech vad-stream dengan Silero VAD. Model Pyannote memerlukan berkas audio penuh dan lebih cocok untuk pemrosesan batch offline dimana akurasi adalah prioritas.

Konfirmasi jeda dengan Smart Turn

Sebuah VAD hanya mendengar keheningan, sehingga tidak dapat membedakan kalimat selesai dari jeda tengah kalimat. Lampirkan Smart Turn v3.2 ke StreamingVADProcessor - atau lari speech vad-stream --smart-turn - untuk mengkonfirmasi setiap jeda sebelum segmen berakhir: sebuah kalimat selesai mengakhiri gilirannya segera, jeda pertengahan kalimat terus mendengarkan.

Unduhan Model

ModelBackendUkuranHuggingFace
Silero-VAD-v6.2.1MLX~ 1.2 MBaufklarer / Silero-VAD-v6.2.1-MLX
Silero-VAD-v6.2.1CoreML~ 1.2 MBaufklarer / Silero-VAD-v6.2.1-CoreML
Pyannote-Segmentation-3.0MLX- 5.7 MBAufklacer / Pynotte- 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")
    }
}

Juga tersedia di Android, dan pada Linux & Windows melalui Speech Core (ONNX Runtime).