- VAD - Voice Activity Detection - 语音活动检测
- 对音频帧判断 speech / non-speech,常用于过滤静音、切分 ASR 输入、触发录音和辅助 endpointing。
- VAD 只判断“是否有人声”,不理解一句话是否说完;语音 Agent 通常还要结合 silence/hangover、STT endpointing 或 semantic turn detection。
- 常见输出
- frame-level speech probability / boolean
- speech segment timestamps
- speech start / speech end event
快速选择
- 通用本地与服务端:优先评估 Silero VAD,生态成熟,支持 PyTorch/ONNX,便于跨语言部署。
- 极低延迟、C/Web/mobile:评估 TEN VAD;部署前必须检查其 Apache 2.0 附加条件是否适用。
- 多语言、歌声、音乐与 Audio Event Detection:评估 FireRedVAD。
- 中文 ASR pipeline:评估 FunASR FSMN-VAD,可与 ASR、标点和 speaker diarization 组合。
- 极小依赖、传统 DSP、固定帧实时处理:评估 WebRTC VAD;在 speech/noise 混合场景中需重点验证误判。
- 浏览器:使用基于 Silero VAD + ONNX Runtime Web 的封装,或 TEN VAD WASM。
VAD vs Turn Detection
- VAD
- 根据音频判断 speech/non-speech,不理解语言和对话上下文。
- Endpointing
- 在 VAD/STT 信号上增加 silence duration、hangover、punctuation 等规则,判断 utterance 何时结束。
- Semantic turn detection
- 使用音频语调/节奏、partial transcript 或多模态上下文判断用户是否真正说完,减少停顿处抢话,同时控制响应延迟。
- Speaker diarization
- 判断“谁在何时说话”,与“是否有人说话”是不同任务;可以消费 VAD/SAD 结果,也可以由统一模型联合预测。
- Voice agent 常见组合
- VAD 检测 speech start/end。
- STT 持续生成 partial transcript。
- Endpointing/turn detector 综合静音与语义决定何时提交用户 turn。
- Interruption logic 决定用户何时可以打断 TTS。
- 不要直接比较不同项目 README 中的单一 F1/AUC;dataset、frame size、threshold、smoothing 和后处理不同会显著影响结果。
- Frame-level
- precision / recall / F1、ROC-AUC、false positive rate、false negative rate。
- Segment/endpoint-level
- speech onset latency、endpoint latency、premature cutoff、missed endpoint、segment fragmentation。
- Runtime
- real-time factor、单帧延迟、CPU/内存、cold start、并发、模型大小。
- 输入与环境
- sample rate、frame/hop size、噪声、回声、远场、音乐、歌声、重叠说话、多语言和口音。
- 后处理参数
- threshold、minimum speech/silence duration、speech padding、hangover、maximum segment duration。
- 应使用目标场景录音建立测试集,并同时评估准确率与用户感知延迟。
Neural VAD
- snakers4/silero-vad
- MIT, Python, PyTorch, ONNX
- 支持 8 kHz/16 kHz;项目提供 Python、C++、Rust、Go、Java、C# 和浏览器等部署示例。
- 适合本地实时语音、服务端切分和跨平台 ONNX 推理。
- TEN-framework/ten-vad
- Custom license (Apache-2.0 + additional conditions), C, ONNX, WASM
- 面向实时 voice agent 的 frame-level VAD,输入为 16 kHz,推荐 10/16 ms hop;提供 C、Python、Java、Go、Web、Android 和 iOS 集成。
- LICENSE 限制与 Agora 竞争的部署方式,不能只按标准 Apache-2.0 理解。
- FireRedTeam/FireRedVAD
- Apache-2.0, Python, PyTorch
- 支持 non-streaming/streaming VAD 和 non-streaming Audio Event Detection,覆盖 100+ 语言,并检测 speech、singing、music 等音频事件。
- 输入为 16 kHz 16-bit mono PCM;仓库提供约 2.2 MB 的 streaming/non-streaming 模型。
- modelscope/FunASR
- MIT, Python, PyTorch
fsmn-vad 可独立使用,也可与 Paraformer/SenseVoice、标点恢复和 CAM++ speaker model 组成 pipeline,适合中文语音处理。
- Toolkit 使用 MIT;预训练模型权重许可证按各 model card 单独确认。
WebRTC VAD
- WebRTC VAD 是传统低成本 frame classifier,提供 0-3 aggressiveness mode;适合资源受限和固定帧实时处理。
- 输入通常为 16-bit mono PCM,sample rate 为 8/16/32/48 kHz,frame 长度必须为 10/20/30 ms。
- wiseman/py-webrtcvad
- MIT (binding), BSD-3-Clause (WebRTC code), C, Python
- Google WebRTC VAD 的 Python binding,适合快速验证和服务端预处理。
- dpirch/libfvad
- BSD-3-Clause, C
- 从 WebRTC Native Code 提取的独立 C library,适合嵌入式或不需要完整 WebRTC stack 的环境。
Speech analysis
- pyannote/pyannote-audio
- MIT, Python, PyTorch
- 以 speaker diarization 为核心,提供 speech activity detection、overlapped speech detection、speaker change detection 和 speaker embedding 等组件;更适合离线/分析场景,不是低延迟 voice-agent VAD 的默认首选。
- 部分 Hugging Face 模型需要接受使用条件和提供 token,代码许可证不等于模型许可证。
Runtime 与平台封装
- k2-fsa/sherpa-onnx
- Apache-2.0, C++, ONNX Runtime
- 提供 Silero VAD 及 VAD + ASR pipeline,覆盖 C/C++、Python、Go、JavaScript、WebAssembly、Android、iOS、HarmonyOS 和嵌入式平台。
- ricky0123/vad
- ISC, TypeScript, ONNX Runtime Web, Web Audio API
- 浏览器端 Silero VAD(MIT)封装,可直接产生 speech start/end 和音频片段;项目已停止维护 Node.js 支持,聚焦 browser use case。
- gkonovalov/android-vad
- MIT, C, Kotlin, Android
- Android VAD library,统一封装 WebRTC VAD、Silero VAD 和 YamNet VAD,适合移动端对比与集成。
Benchmark
文档与论文