Silero VAD 语音活动检测:1分钟跑通,阈值怎么选?
2026/9/17 12:03:42 网站建设 项目流程

Silero VAD 语音活动检测:1分钟跑通,阈值怎么选?

【免费下载链接】silero-vadSilero VAD: pre-trained enterprise-grade Voice Activity Detector项目地址: https://gitcode.com/GitHub_Trending/si/silero-vad

Silero VAD 是一个开源的语音活动检测模型,它只回答一个问题:音频的哪些时间段里有人说话。手头有几百小时录音要先切掉静音段再送识别,或者想在实时音频流里人一开口就触发下一步逻辑,它都能干。模型基于 MIT 协议发布,无注册、无密钥、无遥测,拿过来就能用。

🚀 语音检测安装:一条命令跑通

环境要求不高:Python 3.8+、1GB 以上内存、带 AVX 指令集的 CPU 即可。

pip install silero-vad

最短可运行代码,输入一个 wav 文件,输出语音片段的起止时间:

from silero_vad import load_silero_vad, read_audio, get_speech_timestamps model = load_silero_vad() wav = read_audio('tests/data/test.wav') segments = get_speech_timestamps(wav, model, return_seconds=True) print(segments) # [{'start': 0.32, 'end': 1.87}, ...]

segments就是一组{'start', 'end'}字典,单位是秒(默认是采样点,加上return_seconds=True才换成秒)。

📦 批量检测文件里的语音片段

模型按固定窗口吃音频:16kHz 下每次 512 个点(32ms),8kHz 下 256 个点。它同时支持8000 Hz 和 16000 Hz两种采样率——电话录音大多是 8k,麦克风录音大多是 16k,按源头的真实采样率传sampling_rate参数即可。整包模型约 2MB,单帧推理在 CPU 上不到 1ms,几百小时的批量任务跑一晚上绰绰有余。

真正影响结果的是这几个参数。默认值(threshold=0.5min_speech_duration_ms=250speech_pad_ms=30)在多数场景够用,按下面的表微调:

适用场景thresholdmin_speech_duration_msspeech_pad_ms补充
通用默认0.525030不调整
嘈杂环境,怕漏检0.3~0.425050多垫一点语音边界
安静环境,怕误报0.6~0.725030阈值拉高
长录音切给 ASR0.525030另设max_speech_duration_s=15防超长片段

threshold是语音概率的判定线;min_speech_duration_ms以下的片段直接丢弃;speech_pad_ms给每个片段两侧加 padding,避免切掉字头字尾。如果默认参数在你的数据上始终不对劲,仓库里 tuning/ 目录提供了阈值搜索脚本search_thresholds.py和针对自有数据微调的tune.py

🎙️ 实时语音检测:按流式喂数据

流式场景不要用get_speech_timestamps整段跑,换成VADIterator。它内部维护模型状态,每来一小块音频就推一次,检测到语音开始/结束时返回事件:

from silero_vad import VADIterator vad = VADIterator(model, sampling_rate=16000) for chunk in audio_stream(chunk_samples=512): # 每次取 512 个采样点(16k) event = vad(chunk, return_seconds=True) if event: print(event) # {'start': 1.2} 或 {'end': 3.8}

拿到start时开启录音或唤醒后续流程,拿到end时切段送识别。完整麦克风接法可以对照 examples/pyaudio-streaming/ 里的 PyAudio 示例。

⚙️ 生产环境切到 ONNX 部署

Python 里只需改一行加载方式,后续 API 完全一样:

model = load_silero_vad(onnx=True, opset_version=16)

模型文件都在 src/silero_vad/data/ 目录下,随包分发:

  • silero_vad.onnx:opset 16 版本
  • silero_vad_16k_op15.onnx:兼容 opset 15 的旧版 onnxruntime(仅 16k)
  • silero_vad_half.onnx:半精度,更小更快,但只支持 16k

ONNX 后端跑在 onnxruntime 上,不依赖 PyTorch,条件允许时比 JIT 版本还快。C++、Go、Rust 等语言没有 Python 包,思路都一样:直接把这些 onnx 文件交给对应语言的 ONNX Runtime 推理,examples/cpp/ 里有一份完整 C++ 参考实现。

💣 高频坑

现象read_audio报缺依赖错误。原因:它底层走 torchaudio 的 I/O,需要 FFmpeg、sox 或 soundfile 中至少一个后端。解决pip install soundfile是最省事的选择;同时确认torch>=1.12.0torchaudio>=0.12.0已安装。

现象:44.1kHz 或 48kHz 音频检测结果不对。原因:模型只接受 8000、16000(或 16000 的整数倍),不会自动重采样。解决:喂入前自己重采样到 16k 再传sampling_rate=16000

现象:流式模式下end事件总要拖很久才出现,甚至不出现。原因:模型需要确认一段"安静窗口"才判定语音结束,流结束时状态还悬在半空。解决:音频结束后补喂若干全零块,直到事件吐出或调用vad.reset_states()

下一步选什么

  • 想搞懂原理:从 tests/test_basic.py 读起,再看src/silero_vad/utils_vad.pyget_speech_timestamps的滑窗逻辑,代码量不大。
  • 要上生产:Python 用 ONNX 后端;呼叫中心 8k 音频记得核对sampling_rate;自有领域数据噪声明显不同,再用 tuning/ 做阈值搜索或微调。
  • 要嵌进非 Python 系统:直接抄 examples/cpp/ 的 ONNX Runtime 写法,同一套 onnx 文件 C++、Go、Rust、Java、C# 示例都有。

【免费下载链接】silero-vadSilero VAD: pre-trained enterprise-grade Voice Activity Detector项目地址: https://gitcode.com/GitHub_Trending/si/silero-vad

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询