還記得我們之前介紹過「【Google Colab Python系列】 初探Whisper: 來一段Youtube影片進行語音辨識吧!」這套語音辨識引擎, 那為什麼我們又要教這一套? 因為我們也可以將whisper的模型轉換成onnx的格式, 輕鬆移植到各種平台, 且效能更佳。
語音辨識的熱門組件之一kaldi, 相信大部分接觸語音辨識的朋友都應該聽過, 而k2顧名思義就是第二代的全新組件, 在接觸kaldi 1的時期時, 許多的腳本搞的烏煙瘴氣, 而k2大部分都使用python程式語言來撰寫, 程式運作起來更有效率也非常有彈性。
而sherpa則是扮演著辨識引擎的角色, 後來主力都著重於發展sherpa-onnx, 因此我們決定來研究一下sherpa-onnx可以怎麼用。
對了, 讓我們架設的如此順利又讓您一鍵啟動的最大功臣莫過於「【Docker 容器化】初探微服務時代的虛擬化技術」, 如果您還不知道Docker, 真心建議您好好的學習一番, 它會讓我們減少許多環境建置上的時間成本。
本章我們會以Python為主要的程式語言進行示範, 我們會使用Docker來封裝讓各位的環境盡量一致, 避免外部因素干擾學習, 章節重點如下:
這邊我們會用pip直接進行安裝, 至於環境的部份請下載我們的「🎁 懶人包」, 裡面會有相關的docker compose配置檔, 讓您一鍵啟動服務, 並透過簡易的幾行指令就能夠完成整個Demo, 非常適合初入語音辨識朋友!
# 安裝套件
pip install sherpa-onnx
# 檢查是否安裝成功
python3 -c "import sherpa_onnx; print(sherpa_onnx.__file__)"
🔥 因此Dockerfile可以這樣撰寫:
❗ 在這邊您必須決定好要使用offline還是online的模型, 根據您選用的模型搭配相對應的腳本運行, 這邊我們會選用offline模型並示範檔案上傳語音辨識的過程。
預編譯模型可以來這裡找: https://k2-fsa.github.io/sherpa/onnx/pretrained_models/index.html#sherpa-onnx-pre-trained-models
今天我們選用的是: zrjin/sherpa-onnx-zipformer-multi-zh-hans-2023-9-2 (Chinese), 這個版本的模型相對較小, 因此辨識效果可能不佳, 我們僅拿來Demo使用。
cd models
wget <https://github.com/k2-fsa/sherpa-onnx/releases/download/asr-models/sherpa-onnx-zipformer-multi-zh-hans-2023-9-2.tar.bz2>
tar xvf sherpa-onnx-zipformer-multi-zh-hans-2023-9-2.tar.bz2
rm sherpa-onnx-zipformer-multi-zh-hans-2023-9-2.tar.bz2
這一步是要讓我們使用該專案內的範例程式碼來架設Web頁面。
git clone <https://github.com/k2-fsa/sherpa-onnx.git>
python sherpa-onnx/python-api-examples/non_streaming_server.py \\
--tokens models/sherpa-onnx-zipformer-multi-zh-hans-2023-9-2/tokens.txt \\
--encoder models/sherpa-onnx-zipformer-multi-zh-hans-2023-9-2/encoder-epoch-20-avg-1.onnx \\
--decoder models/sherpa-onnx-zipformer-multi-zh-hans-2023-9-2/decoder-epoch-20-avg-1.onnx \\
--joiner models/sherpa-onnx-zipformer-multi-zh-hans-2023-9-2/joiner-epoch-20-avg-1.onnx \\
--doc-root sherpa-onnx/python-api-examples/web
打開你的瀏覽器並輸入: http://localhost:6006, 試著切換到「Upload」頁籤, 連線後上傳音檔。
P.S 如果覺得操作起來太過於繁瑣的話, 也歡迎直接下載我們的🎁 懶人包, 讓您省去環境的繁雜安裝過程。
這邊的核心程式碼在「NonStreamingServer」這個類別, 接收、辨識、回傳三大功能皆在此完成, 因此我們針對這裡的程式碼進行解析。
我們的懶人包裡面包含了sherpa-onnx CPU版本的架設, 概念展示的範例程式,請您配合本章節的說明一步步的親自操演過一次, 如此一來才能夠更加明確的熟悉整體流程, 進一步掌握sherpa-onnx語音辨識的使用方法。
本章節教您輕鬆開箱語音辨識組件, 而網路上也提供了各式各樣的預訓練模型, 假設我們只想要使用, 那麼我們可以去下載這些模型來掛載, 那如果我們想要自行訓練或者微調, 接下來的篇章我們也會教您如何去進行這些過程, 當我們學會使用也會訓練模型之後, 最重要的就是資料了, 就像我們把飲水器接好, 也會使用冷水熱水之後, 最重要的還是「水」, 它的重要程度就像我們的「資料」, 要如何大量的蒐集這些資料及管控品質就是另外一門學問了, 關於資料處理, 我們也推薦您閱讀以下幾個篇章: