新一代 Kaldi: 支援 JavaScript 進行本地語音識別和語音合成啦!

China Soft發表於2024-03-17

簡介

新一代 Kaldi 部署框架 sherpa-onnx 支援的程式語言 API 大家庭中, 最近增加了一個新成員: JavaScript

為了方便大家檢視,我們把目前所有支援的程式語言彙總成如下一張圖。

新一代 Kaldi: 支援 JavaScript 進行本地語音識別和語音合成啦!
注: 這個家庭還在不斷的擴充,總有一款適合你!
後續我們會增加 DartRustWebAssembly 等支援。
如果你想貢獻其他的語言,歡迎參與。

增加了對 JavaScript 的支援,意味著我們可以在 JavaScript 中使用 sherpa-onnx 提供的各種功能,比如

  • 語音識別 (支援流式和非流式)
    • 支援 Zipformer
    • 支援 Paraformer
    • 支援 Whisper
  • 語音合成
    • 支援 VITS
  • VAD
    • 支援 Silero VAD

下圖總結了所有的功能。

新一代 Kaldi: 支援 JavaScript 進行本地語音識別和語音合成啦!

本文介紹如何在 JavaScript 中使用這些功能。

注:我們目前支援的是 NodeJS。 還不支援在瀏覽器中執行 sherpa-onnx。 請關注後續我們對 WebAssembly 的支援。

安裝

我們已經把 sherpa-onnx 封裝成 npm 包。如下圖所示:

新一代 Kaldi: 支援 JavaScript 進行本地語音識別和語音合成啦!

你只需要下面一條語句,就可以安裝 sherpa-onnx:

npm install sherpa-onnx

本文使用 naudiodon2 讀取麥克風。為了完成本文的測試, 你需要額外安裝如下依賴:

npm install naudiodon2

下面的影片記錄了完整的安裝過程:

新一代 Kaldi: 支援 JavaScript 進行本地語音識別和語音合成啦!
01:55
注: 請使用 node v13.14.0 版本進行測試。
當下面這個 issue 解決後,你可以使用新版本的 node. node-ffi-napi/node-ffi-napi#97

(請看 )

使用

安裝完 sherpa-onnx 後,我們就可以開始使用它啦!

下面我們介紹如何使用 sherpa-onnxJavaScript API 進行

  • 語音端點檢測 (VAD)
  • 語音識別
  • 語音合成

本文用到的所有示例程式碼,都可以從下面的連結中找到。

新一代 Kaldi: 支援 JavaScript 進行本地語音識別和語音合成啦!

本文的所有演示,都在 nodejs-examples 目錄進行。

語音端點檢測 (VAD)

本例子演示如何使用 Silero VADJavaScript 中進行語音端點檢測。

我們使用如下檔案進行測試:

測試命令如下:

cd nodejs-examples
wget -q https://github.com/k2-fsa/sherpa-onnx/releases/download/asr-models/silero_vad.onnx
node ./test-vad-microphone.js

演示影片如下。

新一代 Kaldi: 支援 JavaScript 進行本地語音識別和語音合成啦!
02:23

語音合成 (TTS)

我們使用下述檔案進行測試

為了給大家演示語音合成的 JavaScript API 有多麼簡單,我們把所有的程式碼截圖如下:

新一代 Kaldi: 支援 JavaScript 進行本地語音識別和語音合成啦!

測試命令為:

cd nodejs-examples
wget -q https://github.com/k2-fsa/sherpa-onnx/releases/download/tts-models/vits-zh-aishell3.tar.bz2
tar xvf vits-zh-aishell3.tar.bz2
node ./test-offline-tts-zh.js

演示影片如下:

新一代 Kaldi: 支援 JavaScript 進行本地語音識別和語音合成啦!
01:06

語音識別

我們給大家展示兩個例子:

  • 流式 VAD + 非流式 Whisper 英文語音識別
  • 流式 Zipformer 中英文語音識別

更多的例子,請參考下面的文件

流式 VAD + 非流式 Whisper 英文語音識別

我們使用 Whisper tiny.en 這個模型進行測試。測試檔案為

測試命令為:

cd nodejs-examples
wget -q https://github.com/k2-fsa/sherpa-onnx/releases/download/asr-models/silero_vad.onnx
wget -q https://github.com/k2-fsa/sherpa-onnx/releases/download/asr-models/sherpa-onnx-whisper-tiny.en.tar.bz2
tar xvf sherpa-onnx-whisper-tiny.en.tar.bz2
node ./test-vad-microphone-offline-whisper.js

演示影片如下:

新一代 Kaldi: 支援 JavaScript 進行本地語音識別和語音合成啦!
03:35

流式 Zipformer 中英文語音識別

我們使用一箇中英文的流式 Zipformer 模型進行測試。

測試檔案為

測試命令為:

cd nodejs-examples
wget -q https://github.com/k2-fsa/sherpa-onnx/releases/download/asr-models/sherpa-onnx-streaming-zipformer-bilingual-zh-en-2023-02-20.tar.bz2
tar xvf sherpa-onnx-streaming-zipformer-bilingual-zh-en-2023-02-20.tar.bz2
node ./test-online-transducer-microphone.js

演示影片如下:

新一代 Kaldi: 支援 JavaScript 進行本地語音識別和語音合成啦!
01:44

總結

本文向大家介紹瞭如何使用 sherpa-onnxJavaScript API 進行語音識別、語音合成和語音端點檢測 (VAD)。所有的計算 都在本地進行,不需要訪問網路。

如果你對新一代 Kaldi 感興趣或者有任何的問題,請透過下面的二維碼聯絡我們。

相關文章