当前位置: 首页 > news >正文

VAD入门(基于Python)

主要参考资料:
在电脑上如何实现AEC回声消除,做个播放时,可以通过说话打断: https://blog.csdn.net/qq_41126242/article/details/145799439

目录

  • Silero VAD
    • 1.核心优势
    • 2.安装与依赖
    • 3.核心功能
    • 4. 基础使用
    • 5. 高级功能
    • 6. 与 WebRTC VAD 的对比

Silero VAD

Silero VAD 是 Silero 语音模型系列中的语音活动检测(VAD)工具,基于深度学习实现,相比传统 VAD(如 WebRTC VAD),它在复杂噪声环境下的检测效果更好,且支持更灵活的输入格式。

1.核心优势

  • 基于深度学习:适应复杂噪声环境,检测更精准。
  • 灵活输入:支持任意采样率(自动重采样)和音频长度。
  • 多语言支持:适用于多种语言的语音检测。
  • 轻量高效:模型文件小(约 1MB),适合实时场景。

2.安装与依赖

(1)安装

pip install -q torch torchaudio  # 需先安装 PyTorch
pip install -q silero-vad

(2)依赖
Python 3.7+
PyTorch 1.10+
TorchAudio 0.10+

3.核心功能

(1) 语音段检测
输入音频波形,返回语音段的起止时间(单位:毫秒)。
(2) 实时语音检测
支持流式音频输入,逐帧判断是否包含语音。

4. 基础使用

(1) 加载模型

import torch
from silero_vad import utils, Vad

# 加载模型
model, utils = torch.hub.load(
    repo_or_dir='snakers4/silero-vad',
    model='silero_vad',
    force_reload=True  # 强制更新模型
)

# 工具函数
(get_speech_timestamps, _, read_audio, *_) = utils

(2)检测语音段

# 读取音频(自动处理格式)
audio = read_audio('audio.wav', sampling_rate=16000)  # 支持任意采样率

# 检测语音段
speech_timestamps = get_speech_timestamps(
    audio, 
    model, 
    threshold=0.5,  # 置信度阈值(0~1,越高越严格)
    sampling_rate=16000
)

print("检测到的语音段(毫秒):", speech_timestamps)

输出示例:

[
    {'start': 1000, 'end': 3500},  # 第1段语音:1s~3.5s
    {'start': 5000, 'end': 8000}   # 第2段语音:5s~8s
]

(3) 提取语音段

from pydub import AudioSegment

# 加载原始音频
full_audio = AudioSegment.from_file("audio.wav")

# 根据时间戳切割语音段
for segment in speech_timestamps:
    start = segment['start']  # 毫秒
    end = segment['end']
    speech_part = full_audio[start:end]
    speech_part.export(f"speech_{start}_{end}.wav", format="wav")

5. 高级功能

(1) 实时流式检测

# 初始化 VAD 工具
vad = Vad(model)

# 模拟实时音频流(每次输入一帧)
sampling_rate = 16000
frame_duration_ms = 100  # 每帧100ms
frame_size = int(sampling_rate * frame_duration_ms / 1000)

# 假设 audio_stream 是实时音频流(如麦克风输入)
for frame in audio_stream:
    # 转换为 Tensor
    audio_tensor = torch.from_numpy(frame).float()
    
    # 检测当前帧是否有语音
    is_speech = vad(audio_tensor, sampling_rate, threshold=0.5)
    
    print("Real-time Speech" if is_speech else "Silence")

(2) 调整检测敏感度
threshold 参数:范围 0.0~1.0,值越高检测越严格(减少误报)。

min_speech_duration_ms:设置最短语音段(默认 250ms),过滤短噪声。

6. 与 WebRTC VAD 的对比

在这里插入图片描述

相关文章:

  • 提升数据库性能与可靠性:深入解析MySQL主从复制
  • 使用 Prim 算法生成了最小生成树, 使用 Fleury 算法生成了欧拉回路,尝试找到了一个简单的哈密尔顿圈。
  • 用友 U8出入库查询SQL 连接UNION ALL
  • 1.12.信息系统的分类【ES】
  • C#编译自动增加文件的版本号
  • Ubuntu 下 nginx-1.24.0 源码分析 - conf_ctx
  • NO.24十六届蓝桥杯备战|二维数组八道练习|杨辉三角|矩阵(C++)
  • IDEA 的 EasyCode 插件使用指南:从入门到自定义模板
  • Docker基础篇——Ubuntu下Docker安装
  • 多条件查询--java算法
  • OkHttp:工作原理 拦截器链深度解析
  • 垂直领域大模型优化:从“通用”到“专精”——打造医疗、金融、法律领域的AI专家
  • 解决stylelint对deep报错
  • C++:string容器(下篇)
  • Qt常用控件之树形QTreeWidget
  • 系统架构设计师—系统架构设计篇—基于体系结构的软件开发方法
  • 可变参数与递归
  • R软件线性模型与lmer混合效应模型对生态学龙类智力测试数据层级结构应用
  • OmniDrive(2):环境搭建
  • 视觉在协作机器人上的场景应用
  • 做网站推广的好处/seo自动刷外链工具
  • 怎么做日本网站的推广/杭州seo关键词优化公司
  • 上海装修公司排行榜/汕头seo优化
  • 网站建设公司怎么盈/网站搜索优化技巧
  • 人力资源网站建设/广东seo推广外包
  • 中国扬州 政府门户网站建设方案/快速优化官网