sherpa-onnx:跨平臺、多語言的語音處理工具包

张善友發表於2024-11-13

Sherpa-onnx 是一個基於 ONNX 執行時的開源語音處理庫,支援多種語音相關任務,包括語音識別、語音合成、說話人識別、語言識別等。它不僅支援多種程式語言(如 C++、C、Python、JavaScript、Java、C# 等),還支援多種作業系統和硬體平臺(如 Windows、macOS、Linux、Android、iOS 等)。sherpa-onnx的設計理念是提供一個靈活、易用且高效能的語音處理解決方案,可以在各種裝置和場景中部署使用。

主要特性
  1. 多功能支援:sherpa-onnx不僅支援語音識別和語音合成這兩大核心功能,還支援說話人識別、語言識別、音訊標籤、語音活動檢測(VAD)和關鍵詞檢測等多種語音處理任務。這使得它成為一個全面的語音處理工具包。

  2. 跨平臺相容:sherpa-onnx可以在多種作業系統和硬體平臺上執行,包括Windows、macOS、Linux以及Android和iOS移動平臺。它還支援各種嵌入式系統,如Raspberry Pi、RISC-V架構裝置等。

  3. 多語言API:為了方便不同背景的開發者使用,sherpa-onnx提供了豐富的程式語言介面,包括C++、C、Python、Go、C#、Java、Kotlin、JavaScript、Swift、Rust、Dart和Object Pascal等。這大大增加了工具包的適用範圍和開發靈活性。

  4. 離線執行:sherpa-onnx的一大特點是可以完全離線執行,不需要網路連線。這對於注重隱私和安全性的應用場景非常重要。

  5. 高效能:基於ONNX執行時,sherpa-onnx能夠提供高效的推理效能,適合在各種計算能力的裝置上部署。

從實際應用的角度來看,Sherpa-onnx 已經被用於離線語音識別與聲紋識別技術的實踐。透過使用 PaddleSpeech 進行聲紋識別 embedding 向量提取,並利用 Sherpa-onnx 對預訓練的說話人識別模型進行最佳化和部署,可以顯著提高模型的推理速度和效能。這種最佳化過程包括模型剪枝和量化等操作,以降低模型大小並提高推理速度。Sherpa-onnx 在說話人識別功能方面表現出色,具備強大的硬體相容性、靈活的程式語言支援以及高效的模型最佳化能力。

在 C# 中使用 Sherpa-onnx,可以透過 NuGet 包管理器引入依賴,並使用提供的 C# API 進行語音識別等操作。例如,可以透過以下程式碼片段來解碼一個檔案:

public class RecognizerExample
{
public void RecognizeSpeech()
{
// 建立 OfflineTtsConfig 物件並設定模型路徑等引數
OfflineTtsConfig config = new OfflineTtsConfig();
config.Model.Vits.Model = Path.Combine("path/to/your/model", "vits-aishell3.onnx ");
config.Model.Vits.Lexicon = Path.Combine("path/to/your/model", "lexicon.txt ");
config.Model.Vits.Tokens = Path.Combine("path/to/your/model", "tokens.txt ");
config.Model.Vits.DataDir = Path.Combine("path/to/your/model", "data");
config.Model.Vits.DictDir = Path.Combine("path/to/your/model", "dict");
config.Model.Vits.NoiseScale = 0.667f;
config.Model.Vits.NoiseScaleW = 0.8f;
config.Model.Vits.LengthScale = 1f;
config.Model.NumThreads = 1;
config.Model.Debug = 0;
config.Model.Provider = "cpu";

// 使用配置物件進行語音識別或合成
using (var synthesizer = new OfflineTts(config))
{
string textToSynthesize = "你好,世界!";
byte[]合成的音訊資料 = synthesizer.Synthesize(textToSynthesize);
// 處理合成的音訊資料,例如儲存到檔案或播放
File.WriteAllBytes("output.wav ", 合成的音訊資料);
}
}
}

有一篇Java的文章《基於sherpa的本地智慧語音助手入門-Java Api版》供參考,裡面提到的很多知識值得借鑑。

相關文章