## 使用whisper.cpp進行語音辨識 ### 前言 本篇為「Homemade version of “AI in a Box”」專案的系列文章,關於該專案的整體描述請參閱這篇[內容](https://hackmd.io/@ai-in-a-box/rJtjUU3Sp)。 接著實作「AI in a Box」中的自動語音辨識(ASR)部分。在這邊使用[whisper.cpp](https://github.com/ggerganov/whisper.cpp)專案以及其附帶之[已轉換的Whisper模型](https://huggingface.co/ggerganov/whisper.cpp/tree/main)。因此無需進行模型轉換程序,只要將whisper.cpp程序建置起來即可進行相關應用。 ### 準備工作 就如專案整體描述文章中所說明的會使用whisper.cpp專案,所以從GitHub下載[whisper.cpp](https://github.com/ggerganov/whisper.cpp/archive/refs/heads/master.zip)程式碼檔案並解壓縮。 接著參照「[以原生方式建置llama.cpp for Windows](https://hackmd.io/@ai-in-a-box/r1C5UleUp)」,將CMake與Visual Studio Community安裝起來。 由於whisper.cpp實際使用需要使用到對外介面(麥克風),因此需先建置[SDL2](https://github.com/libsdl-org/SDL/tree/SDL2);詳細請參考GitHub上的這篇[討論](https://github.com/ggerganov/whisper.cpp/issues/792),SDL2的預先編譯的版本可由[此處](https://mega.nz/file/GNtBxCLK#9zLSpr4sKtRLL1LC12Tgtwl2tTIZlvmeDrXC5lZi8TA)下載。 最後下載所需的模型。開啟「Windows PowerShell」,然後切換至whisper.cpp目錄之下一層models子目錄;執行download-ggml-model.cmd批次腳本以取得模型,用以下命令下載多國語言Base模型: PS \> `download-ggml-model.cmd base` ### 建置whisper.cpp 開啟「x64 Native Tools Command Prompt for VS 2022」,並用以下命令切換至whisper.cpp目錄: \> `cd whisper.cpp` 然後用以下命令進行專案建置: \> `mkdir build` \> `cd build` \> `cmake .. -DWHISPER_SDL2=1 -DSDL2_DIR=C:\Projects\SDL2 -DCMAKE_PREFIX_PATH=C:\Projects\SDL2\cmake` \> `cmake --build . --config Release` ### 執行自動語音辨識程序 執行以下命令: \> `chcp 65001` \> `.\bin\Release\stream.exe -m ..\models\ggml-base.bin -l zh -t 2` 然後對著麥克風說話,在whisper.cpp識別後將會聲音轉換成文字;執行結果如下所示: ![231214](https://hackmd.io/_uploads/B1frpztLT.gif) ### 結語 whisper.cpp的程序看起來可以執行中文語音辨識,但有點吃CPU資源(我已經用了Base模型,規模已經相對較小)。想當然爾英文的識別精準度最佳,中文的錯誤率(Word Error Rate, WER)約 14.7%;且中文還有同音異字的問題,以上面的執行案例來看「基隆」有時候就會被識別為「雞籠」。 接著會嘗試使用[OpenVINO](https://github.com/ggerganov/whisper.cpp/blob/master/README.md#openvino-support)來改善執行效率。最後則會將llama.cpp與whisper.cpp兩個專案之程序進行整合,以達成用語音方式還與AI對話的目標。