ten-vad:低延迟、轻量化且高性能的流式语音活动检测系统
TEN VAD:低延迟、轻量化且高性能的流式语音活动检测系统
1. 概述
TEN VAD 是一款面向企业级应用的实时语音活动检测系统,能够提供精准的帧级语音活动检测。与行业内常用的 WebRTC VAD 和 Silero VAD 相比,TEN VAD 展现出了更优越的精度。同时,相较于 Silero VAD,TEN VAD 具备更低的计算复杂度和更少的内存占用。其架构的时间效率优势使得语音活动检测速度极快,大幅降低了对话式 AI 系统中的端到端响应延迟和轮次检测延迟。
2. 核心特性
2.1 高精度表现
下图展示了 WebRTC VAD(基于音高检测)、Silero VAD 和 TEN VAD 的精度-召回率曲线对比。此次评估基于一套精确手动标注的测试集展开,音频文件源自 librispeech、gigaspeech、DNS 挑战赛等多个来源。结果显示,TEN VAD 的性能最为出色。此外,在大型内部真实世界数据集上进行的交叉验证实验也证明了该成果的可重复性。带有标注标签的测试集已发布在该仓库的 “testset” 目录下。
需注意,默认使用 0.5 的阈值来生成二进制语音指示信号(非语音信号为 0,语音信号为 1)。根据不同领域的具体任务需求,该阈值需要进行调整。通过在 Linux x64 系统上执行以下脚本,可生成精度-召回率曲线,输出图像将保存在脚本所在的同一目录中。
cd ./examples
python plot_pr_curves.py
2.2 适合代理交互
如下图所示,TEN VAD 能够快速检测语音与非语音转换,而 Silero VAD 则存在几百毫秒的延迟,导致人机交互系统中的端到端延迟增加。此外,在 6.5 秒至 7.0 秒的音频片段中,Silero VAD 未能识别相邻语音片段之间的短暂静音时段。
2.3 轻量化设计
针对五个不同平台(配备多种 CPU)的实时因子(RTF)评估结果显示,TEN VAD 相较于 Silero VAD 具有显著较低的计算复杂度和更小的库体积。
2.4 支持多种编程语言和平台
TEN VAD 提供了跨五个操作系统(Linux x64、Windows、macOS、Android、iOS)的 C 语言兼容性,并针对 Linux x64 优化了 Python 绑定。
2.5 支持的采样率和跳帧大小
TEN VAD 处理 16kHz 的音频输入,支持可配置的跳帧大小(优化的帧配置:160/256 采样点 = 10/16 毫秒)。其他采样率需重采样至 16kHz。
3. 安装
git clone https://huggingface.co/TEN-framework/ten-vad
4. 快速上手
该项目支持五大主流平台的动态链接库。
平台 | 动态链接库支持情况 | 支持架构 | 接口 |
---|---|---|---|
Linux | libten_vad.so | x64 | Python、C |
Windows | ten_vad.dll | x64、x86 | C |
macOS | ten_vad.framework | arm64、x86_64 | C |
Android | libten_vad.so | arm64-v8a、armeabi-v7a | C |
iOS | ten_vad.framework | arm64 | C |
5. Python 使用方法
5.1 依赖项
-
numpy(已验证版本 1.17.4/1.26.4)
-
scipy(版本需 >= 1.5.0)
-
scikit-learn(已验证版本 1.2.2/1.5.0,用于绘制 PR 曲线)
-
matplotlib(已验证版本 3.1.3/3.10.0,用于绘制 PR 曲线)
-
torchaudio(已验证版本 2.2.2,用于绘制 PR 曲线)
-
Python 版本 3.8.19/3.10.14 已验证
请注意:您可以使用上述软件包的其他版本,但我们并未对其他版本进行测试。
该库仅依赖于 numpy。您需要通过 requirements.txt 文件安装相关依赖项:
pip install -r requirements.txt
若要运行演示或绘制 PR 曲线,则需要安装以下依赖项:
pip install -r ./examples/requirements.txt
请注意,如果您尚未安装 libc++1,则需要运行以下命令进行安装:
sudo apt update
sudo apt install libc++1
5.2 使用方法
请注意:在 Python 中使用时,您可以通过 git 克隆或 pip 两种方式进行安装。
使用 git 克隆:
- 克隆仓库
git clone https://huggingface.co/TEN-framework/ten-vad
- 进入 examples 目录
cd ./examples
- 运行测试
python test.py s0724-s0730.wav out.txt
使用 pip 安装:
- 通过 pip 安装
pip install -U --force-reinstall -v git+https://huggingface.co/TEN-framework/ten-vad
- 编写您自己的使用案例并导入该类。有关 TenVAD 类的属性,请参阅 ten_vad.py 文件。
from ten_vad import TenVad
6. C 语言使用方法
6.1 构建脚本
位于 examples/ 目录下:
-
Linux:build-and-deploy-linux.sh
-
Windows:build-and-deploy-windows.bat
-
macOS:build-and-deploy-mac.sh
-
Android:build-and-deploy-android.sh
-
iOS:build-and-deploy-ios.sh
6.2 动态链接库配置
运行时库路径配置:
-
Linux/Android:LD_LIBRARY_PATH
-
macOS:DYLD_FRAMEWORK_PATH
-
Windows:可执行文件目录或系统 PATH 中的 DLL
6.3 定制化
-
修改特定平台的构建脚本
-
调整 CMakeLists.txt 文件
-
配置工具链和架构设置
6.4 使用概览
-
进入 examples/ 目录
-
执行特定平台的构建脚本
-
配置动态链接库路径
-
使用示例音频 s0724-s0730.wav 运行演示
-
处理结果将保存到 out.txt 文件中
以下是各平台详细的使用方法:
6.5 Linux 平台
依赖项
-
Clang(例如已验证版本 6.0.0-1ubuntu2)
-
CMake
-
终端
请注意,如果您尚未安装 libc++1,则需要运行以下命令进行安装:
sudo apt update
sudo apt install libc++1
使用步骤
-
cd ./examples
-
./build-and-deploy-linux.sh
6.6 Windows 平台
依赖项
-
Visual Studio(已验证版本 2017、2019、2022)
-
CMake(已验证版本 3.26.0-rc6)
-
终端(MINGW64 或 powershell)
使用步骤
-
cd ./examples
-
根据需要配置 “build-and-deploy-windows.bat” 文件中的以下内容:
-
架构(默认为 x64)
-
Visual Studio 版本(默认为 2019)
-
-
./build-and-deploy-windows.bat
6.7 macOS 平台
依赖项
-
Xcode(已验证版本 15.2)
-
CMake(已验证版本 3.19.2)
使用步骤
-
cd ./examples
-
根据目标架构配置 “build-and-deploy-mac.sh” 文件:
-
默认为 arm64(Apple 芯片)
-
备选为 x86_64(Intel 芯片)
-
-
./build-and-deploy-mac.sh
6.8 Android 平台
依赖项
-
NDK(已验证版本 r25b,适用于 macOS)
-
CMake(已验证版本 3.19.2,适用于 macOS)
-
adb(已验证版本 1.0.41,适用于 macOS)
使用步骤
-
cd ./examples
-
export ANDROID_NDK=/path/to/android-ndk # 替换为您的 NDK 安装路径
-
根据构建需求配置 “build-and-deploy-android.sh” 文件:
-
架构:arm64-v8a(默认值)或 armeabi-v7a
-
工具链:aarch64-linux-android-clang(默认值)或自定义 NDK 工具链
-
-
./build-and-deploy-android.sh
6.9 iOS 平台
依赖项
-
Xcode(已验证版本 15.2)
-
CMake(已验证版本 3.19.2)
使用步骤
- 进入 examples 目录
cd ./examples
- 创建 iOS 构建的 Xcode 项目文件
./build-and-deploy-ios.sh
-
按照以下步骤在 iOS 设备上进行构建和测试:
-
使用 Xcode 打开 .xcodeproj 文件:a) cd ./build-ios,b) 打开 ./ten_vad_demo.xcodeproj
-
在 Xcode IDE 中,选择 ten_vad_demo 目标(应检查:编辑方案 → 运行 → 发布),然后选择您的 iOS 设备(而非模拟器)。
-
将 ten_vad/lib/iOS/ten_vad.framework 拖到 “框架、库和嵌入内容” 中(在 TARGETS → ten_vad_demo → ten_vad_demo → 通用设置中,应将嵌入设置为 “嵌入并签名”)。或者通过以下方式直接添加: “框架、库和嵌入内容” → “+” → 添加其他… → 添加文件 →…
注意:如果未完成此步骤,可能会遇到以下运行时错误:“dyld: Library not loaded: @rpath/ten_vad.framework/ten_vad”。
-
配置 iOS 设备签名
在 TARGETS → ten_vad_demo → 签名与功能 → 签名
修改包标识符:将 “com.yourcompany” 修改为您自己的标识符;
指定预置配置文件
在 TARGETS → ten\_vad\_demo → 构建设置 → 签名 → 代码签名身份:
指定您的证书
-
在 Xcode 中构建项目,并在您的设备上运行演示。