三行代码从音频流里切出语音段:Silero VAD 快速上手
【免费下载链接】silero-vadSilero VAD: pre-trained enterprise-grade Voice Activity Detector项目地址: https://gitcode.com/GitHub_Trending/si/silero-vad
你的音频流里混着大段静音,下游 ASR 一直在空跑。Silero VAD 是一个语音活动检测模型,把"哪里有声音"变成一串时间戳,几行 Python 就能跑通。做语音流、离线录音处理、语音机器人前端的开发者,花 10 分钟确认它能不能干活就够。
参数一屏看:Silero VAD 语音活动检测的硬指标
| 项 | 值 |
|---|---|
| 采样率 | 8000 / 16000 Hz(16000 整数倍自动降采样) |
| 模型体积 | 约 2 MB(JIT 模型) |
| 单帧推理 | 不到 1 ms / 单 CPU 线程 |
| 许可证 | MIT,无注册、无遥测 |
| 部署形式 | PyTorch(JIT)/ ONNX,examples 覆盖 C++、Rust、Go、Java、C# |
2 MB 意味着它塞进树莓派、车机、边缘盒子都不占地方;MIT 协议意味着你商用不用回头问任何人。
装完就能切语音段:pip 一条命令 + 三行调用
装:pip install silero-vad一条命令,装好 torch 和 torchaudio,模型文件也随包一起带进来,不用再下载。
from silero_vad import load_silero_vad, read_audio, get_speech_timestamps model = load_silero_vad() # 加载包内自带的 JIT 模型,不联网 wav = read_audio('a.wav') # 读取并按 16 kHz 重采样,返回 1D tensor ts = get_speech_timestamps( wav, model, return_seconds=True, # 返回秒;不传则是采样点 ) print(ts) # [(开始, 结束), ...] 按时间排的语音段载:load_silero_vad()直接加载 pip 包里预置的模型,省掉下载和 torch.hub 那套。调:read_audio统一重采样到 16 kHz,源文件是 44.1 kHz 也没关系;get_speech_timestamps把连续概率归并成离散语音段。看结果:每段是"起、止"两个坐标,按采样点或秒都能拿。原理一句话:16 kHz 下模型每帧吃 512 个采样点(32 ms),吐一个语音概率,get_speech_timestamps负责把逐帧概率归并成段。想先跑通验证环境,仓库里tests/data/test.wav就是现成的测试音频。
threshold 调到多少才不漏报?
| 参数 | 默认 | 调大 | 调小 | 一句话场景 |
|---|---|---|---|---|
threshold | 0.5 | 误报少,噪声里的假语音段被滤掉,但小声话可能漏 | 召回高,轻声音也能抓到,背景噪声会混进来 | 安静房间用默认;嘈杂环境调小 |
min_speech_duration_ms | 250 | 短促应答("嗯""好")被整体丢弃 | 短语音保留,咳嗽、敲桌等杂音也会进结果 | ASR 前端一般保持 250 |
min_silence_duration_ms | 100 | 停顿容忍度更高,说话中间停一下不算断句 | 稍一停顿就切断,片段更碎 | 口语化对话调大,新闻播报保持 |
speech_pad_ms | 30 | 每段前后多留空气音,ASR 不易截掉首尾字 | 片段更紧凑,省算力 | 喂给 ASR 前建议保留默认 |
四个参数之外别急着动。项目还带了 tuning/ 目录,里面有在你自己的标注数据上自动搜索 threshold 的脚本,先拿一段典型音频把默认值跑通,再决定要不要调。
不想用 PyTorch?silero vad onnx 部署直接换条路
- ONNX Runtime:
load_silero_vad(onnx=True)就换到 ONNX 推理路径,官方口径是特定条件下比 PyTorch 快 4-5 倍,适合不想在服务器里装 torch 的场景,装onnxruntime>=1.16.1即可。 - 其他语言:仓库 examples/ 下有 C++、Rust、Go、Java、C# 的完整示例,选你技术栈对应目录照抄,不用自己研究 ONNX 输入输出。
- 流式麦克风:包里自带
VADIterator,按块喂数据、内部维护状态,examples/pyaudio-streaming/ 有接麦克风的完整 demo。
遇到 X 怎么办
- 遇到"Supported sampling rates"报错:采样率不在 8000/16000(或 16000 的整数倍)。一行修复:喂模型前重采样,
read_audio已经帮你做了,手动拼管道就补这一步。 - 遇到音频读不进来(No backend / torchaudio 报错):torchaudio 需要 FFmpeg、sox 或 soundfile 三选一做后端。一行修复:
pip install soundfile最省事。 - 遇到 CPU 推理莫名变慢:torch 默认开多核,小模型上反而互相抢。一行修复:
torch.set_num_threads(1),或者干脆切 ONNX Runtime 路径。
核心用法就三句话:load_silero_vad加载、read_audio读入、get_speech_timestamps切段。建议先拿tests/data/test.wav跑通验证环境,然后去 examples/pyaudio-streaming/ 抄一个流式 demo,接上麦克风,10 分钟内你会对 Silero VAD 语音活动检测在实时场景里的表现有数。
【免费下载链接】silero-vadSilero VAD: pre-trained enterprise-grade Voice Activity Detector项目地址: https://gitcode.com/GitHub_Trending/si/silero-vad
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考