## 使用OpenVINO加速語音辨識 ### 前言 本篇為「Homemade version of “AI in a Box”」專案的系列文章,關於該專案的整體描述請參閱這篇[內容](https://hackmd.io/@ai-in-a-box/rJtjUU3Sp)。 本篇為「[使用whisper.cpp進行語音辨識](https://hackmd.io/@ai-in-a-box/S11DsfFUT)」文章的延續,將會使用whisper.cpp專案的「[OpenVINO support](https://github.com/ggerganov/whisper.cpp#openvino-support)」機制來加速語音辨識程序。用以改善前一篇文章所實作之「[語音對談](https://hackmd.io/@ai-in-a-box/Hkyrrb-vp)」功能運作起來並不是很順暢的問題。 ### 先前準備 基本的環境都跟「[使用whisper.cpp進行語音辨識](https://hackmd.io/@ai-in-a-box/S11DsfFUT)」文章相同。由於接下來要重新進行whisper.cpp專案的組態與建構,因此請先刪除whisper.cpp目錄下的build子目錄。 接下來下載[OpenVINO toolkit](https://storage.openvinotoolkit.org/repositories/openvino/packages/2023.0/windows/w_openvino_toolkit_windows_2023.0.0.10926.b4452d56304_x86_64.zip)檔案,解壓縮後放在專案目錄以便後續使用。 ### 下載與轉換模型 開啟「Anaconda prompt」,在該命令提示視窗執行以下命令建立虛擬環境: (base) \> `conda create --name openvino_conv_env python=3.10` 完成後切換至whisper.cpp目錄下的models子目錄: (base) \> `cd whisper.cpp\models` 進入剛剛建立好的虛擬環境: (base) \> `conda activate openvino_conv_env` 接著安裝必要套件: (openvino_conv_env) \> `pip install -r openvino-conversion-requirements.txt` 完成後就可以進行模型下載與轉換,在此使用Base模型: (openvino_conv_env) \> `python convert-whisper-to-openvino.py --model base` ### 程式修改 在建置專案前,還需要修改[stream](https://github.com/ggerganov/whisper.cpp/tree/master/examples/stream)範例的程式碼加入對OpenVINO的支援,下載修改後的程式碼[stream.cpp](https://mega.nz/file/7cVlUDqY#0bkcBO602OpTLHbk6lFcKf6qk9EMpuWYmxCEAicB5DU)並覆蓋原有範例的程式碼。 ### 專案建置 開啟Visual Studio 2022之「x64 Native Tools Command Prompt for VS 2022」,在該命令提示視窗執行以下命令設定OpenVINO toolkit環境: \> `w_openvino_toolkit_windows_2023.0.0.10926.b4452d56304_x86_64\setupvars.bat` 用以下命令切換至whisper.cpp目錄: \> `cd whisper.cpp` 然後用以下命令進行專案組態與建置: \> `mkdir build` \> `cd build` \> `cmake .. -DWHISPER_OPENVINO=1 -DWHISPER_SDL2=1 -DSDL2_DIR=C:\Projects\SDL2 -DCMAKE_PREFIX_PATH=C:\Projects\SDL2\cmake` \> `cmake --build . --config Release` ### 執行自動語音辨識程序 完成專案建置後所有範例的執行方式都跟先前一樣。以自動語音辨識程序來說可使用以下命令: \> `.\bin\Release\stream.exe -m ..\models\ggml-base.bin -l zh -t 2` ### 執行語音對談功能 先執行llama.cpp專案之main範例程式: \> `main.exe -m ..\models\Taiwan-LLM-7B\ggml-model-q4_0.gguf -n -1 --repeat_penalty 1.0 --color --interactive-first -r "User:" -f ..\chat-with-ai.txt` 之後再執行whisper.cpp之stream範例程式: \> `stream.exe -m ..\models\ggml-base.bin -l zh -t 2` 執行結果如下所示: ![231222](https://hackmd.io/_uploads/Bk6Eq9MwT.gif) ### 結語 讓whisper.cpp專案使用「OpenVINO support」機制確實可以使語音對談功能在運作時更為順暢,不過這僅僅是最佳化的第一步而已;進一步改善執行效能與增進語音識別正確率等課題仍有待持續努力。