Sherpa-onnx NodeJS 原生扩展使用指南
Sherpa-onnx NodeJS 原生扩展使用指南
前言
Sherpa-onnx 是一个基于 ONNX 运行时的高性能语音处理工具包,提供了丰富的语音处理功能。本文将重点介绍如何在 NodeJS 环境中通过原生扩展(Native Addon)方式使用 Sherpa-onnx 的各项功能。
环境准备
使用 Sherpa-onnx 的 NodeJS 原生扩展需要满足以下条件:
- NodeJS 版本 >= 16
- 安装必要的依赖包
安装依赖命令:
npm install
根据不同的操作系统和架构,还需要设置相应的库路径:
macOS 系统
# x64 架构
export DYLD_LIBRARY_PATH=$PWD/node_modules/sherpa-onnx-darwin-x64:$DYLD_LIBRARY_PATH
# arm64 架构
export DYLD_LIBRARY_PATH=$PWD/node_modules/sherpa-onnx-darwin-arm64:$DYLD_LIBRARY_PATH
Linux 系统
# x64 架构
export LD_LIBRARY_PATH=$PWD/node_modules/sherpa-onnx-linux-x64:$LD_LIBRARY_PATH
# arm64 架构(如树莓派 4)
export LD_LIBRARY_PATH=$PWD/node_modules/sherpa-onnx-linux-arm64:$LD_LIBRARY_PATH
功能模块详解
1. 语音增强/降噪
语音增强功能可以提升语音信号的质量,去除背景噪声。示例脚本 test_offline_speech_enhancement_gtcrn.js 展示了如何使用 GTCRN 模型进行离线语音增强。
使用步骤:
- 下载模型和测试音频
- 运行示例脚本
2. 说话人分离
说话人分离(Diarization)功能可以识别音频中不同说话人的片段。示例脚本 test_offline_speaker_diarization.js 使用了 pyannote-audio 的说话人分割模型。
典型应用场景:
- 会议记录
- 访谈录音分析
- 多说话人语音识别预处理
3. 文本标点恢复
test_punctuation.js 展示了如何使用 CT transformer 模型为无标点的文本添加标点符号,支持中英文混合文本。
4. 语音活动检测(VAD)
VAD 功能可以检测音频中是否有语音活动。test_vad_microphone.js 示例使用麦克风实时检测语音活动,基于 silero-vad 模型。
5. 说话人识别
test_speaker_identification.js 可以从音频文件中识别说话人身份,适用于身份验证等场景。
6. 语种识别
test_vad_spoken_language_identification_microphone.js 使用多语言 Whisper 模型,通过麦克风实时识别当前说话的语种。
7. 音频标签识别
提供两种模型实现:
- Zipformer 模型 (
test_audio_tagging_zipformer.js) - CED 模型 (
test_audio_tagging_ced.js)
可以识别音频中的环境音、音乐类型等各种声音标签。
8. 关键词检测
支持从文件或麦克风实时检测关键词:
test_keyword_spotter_transducer.js(文件)test_keyword_spotter_transducer_microphone.js(麦克风)
语音识别功能
流式语音识别
支持多种模型架构的流式识别:
-
Zipformer Transducer 模型
- 基础版本 (
test_asr_streaming_transducer.js) - 支持同音词替换版本 (
test_asr_streaming_transducer_with_hr.js)
- 基础版本 (
-
Zipformer CTC 模型
- 贪心搜索 (
test_asr_streaming_ctc.js) - HLG 解码 (
test_asr_streaming_ctc_hlg.js)
- 贪心搜索 (
-
Paraformer 模型 (
test_asr_streaming_paraformer.js)
每种模型都提供从文件或麦克风输入的版本。
非流式语音识别
支持更多模型架构的非流式识别:
- Zipformer Transducer (
test_asr_non_streaming_transducer.js) - FireRedAsr (
test_asr_non_streaming_fire_red_asr.js) - Whisper (
test_asr_non_streaming_whisper.js) - Moonshine (
test_asr_non_streaming_moonshine.js) - NeMo CTC (
test_asr_non_streaming_nemo_ctc.js) - Paraformer (
test_asr_non_streaming_paraformer.js) - SenseVoice (
test_asr_non_streaming_sense_voice.js)
同样支持与 VAD 结合使用麦克风输入的版本。
文本转语音(TTS)
支持多种语言的 TTS 模型:
- Kokoro 英文模型 (
test_tts_non_streaming_kokoro_en.js) - Kokoro 中英双语模型 (
test_tts_non_streaming_kokoro_zh_en.js) - MatchaTTS 英文模型 (
test_tts_non_streaming_matcha_icefall_en.js) - MatchaTTS 中文模型 (
test_tts_non_streaming_matcha_icefall_zh.js) - Piper 英文模型 (
test_tts_non_streaming_vits_piper_en.js) - Coqui 德文模型 (
test_tts_non_streaming_vits_coqui_de.js) - 中文模型 (使用 cppjieba 分词,
test_tts_non_streaming_vits_zh_ll.js) - AISHELL3 中文模型 (
test_tts_non_streaming_vits_zh_aishell3.js)
性能特点
- 原生扩展相比 WASM 版本具有更好的性能
- 支持多线程处理
- 低延迟,适合实时应用
- 跨平台支持 (Linux/macOS, x64/arm64)
总结
Sherpa-onnx 的 NodeJS 原生扩展提供了完整的语音处理解决方案,从基础的语音识别到高级的说话人分离、语种识别等功能一应俱全。开发者可以根据自己的需求选择合适的模型和接口,快速构建语音相关的应用程序。
更多推荐



所有评论(0)