Sherpa-onnx NodeJS 原生扩展使用指南

【免费下载链接】sherpa-onnx k2-fsa/sherpa-onnx: Sherpa-ONNX 项目与 ONNX 格式模型的处理有关,可能涉及将语音识别或者其他领域的模型转换为 ONNX 格式,并进行优化和部署。 【免费下载链接】sherpa-onnx 项目地址: https://gitcode.com/GitHub_Trending/sh/sherpa-onnx

前言

Sherpa-onnx 是一个基于 ONNX 运行时的高性能语音处理工具包,提供了丰富的语音处理功能。本文将重点介绍如何在 NodeJS 环境中通过原生扩展(Native Addon)方式使用 Sherpa-onnx 的各项功能。

环境准备

使用 Sherpa-onnx 的 NodeJS 原生扩展需要满足以下条件:

  1. NodeJS 版本 >= 16
  2. 安装必要的依赖包

安装依赖命令:

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 模型进行离线语音增强。

使用步骤:

  1. 下载模型和测试音频
  2. 运行示例脚本

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 (麦克风)

语音识别功能

流式语音识别

支持多种模型架构的流式识别:

  1. Zipformer Transducer 模型

    • 基础版本 (test_asr_streaming_transducer.js)
    • 支持同音词替换版本 (test_asr_streaming_transducer_with_hr.js)
  2. Zipformer CTC 模型

    • 贪心搜索 (test_asr_streaming_ctc.js)
    • HLG 解码 (test_asr_streaming_ctc_hlg.js)
  3. Paraformer 模型 (test_asr_streaming_paraformer.js)

每种模型都提供从文件或麦克风输入的版本。

非流式语音识别

支持更多模型架构的非流式识别:

  1. Zipformer Transducer (test_asr_non_streaming_transducer.js)
  2. FireRedAsr (test_asr_non_streaming_fire_red_asr.js)
  3. Whisper (test_asr_non_streaming_whisper.js)
  4. Moonshine (test_asr_non_streaming_moonshine.js)
  5. NeMo CTC (test_asr_non_streaming_nemo_ctc.js)
  6. Paraformer (test_asr_non_streaming_paraformer.js)
  7. SenseVoice (test_asr_non_streaming_sense_voice.js)

同样支持与 VAD 结合使用麦克风输入的版本。

文本转语音(TTS)

支持多种语言的 TTS 模型:

  1. Kokoro 英文模型 (test_tts_non_streaming_kokoro_en.js)
  2. Kokoro 中英双语模型 (test_tts_non_streaming_kokoro_zh_en.js)
  3. MatchaTTS 英文模型 (test_tts_non_streaming_matcha_icefall_en.js)
  4. MatchaTTS 中文模型 (test_tts_non_streaming_matcha_icefall_zh.js)
  5. Piper 英文模型 (test_tts_non_streaming_vits_piper_en.js)
  6. Coqui 德文模型 (test_tts_non_streaming_vits_coqui_de.js)
  7. 中文模型 (使用 cppjieba 分词,test_tts_non_streaming_vits_zh_ll.js)
  8. AISHELL3 中文模型 (test_tts_non_streaming_vits_zh_aishell3.js)

性能特点

  1. 原生扩展相比 WASM 版本具有更好的性能
  2. 支持多线程处理
  3. 低延迟,适合实时应用
  4. 跨平台支持 (Linux/macOS, x64/arm64)

总结

Sherpa-onnx 的 NodeJS 原生扩展提供了完整的语音处理解决方案,从基础的语音识别到高级的说话人分离、语种识别等功能一应俱全。开发者可以根据自己的需求选择合适的模型和接口,快速构建语音相关的应用程序。

【免费下载链接】sherpa-onnx k2-fsa/sherpa-onnx: Sherpa-ONNX 项目与 ONNX 格式模型的处理有关,可能涉及将语音识别或者其他领域的模型转换为 ONNX 格式,并进行优化和部署。 【免费下载链接】sherpa-onnx 项目地址: https://gitcode.com/GitHub_Trending/sh/sherpa-onnx

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐