本篇為「Homemade version of “AI in a Box”」專案的系列文章,關於該專案的整體描述請參閱這篇內容。
接著實作「AI in a Box」中的自動語音辨識(ASR)部分。在這邊使用whisper.cpp專案以及其附帶之已轉換的Whisper模型。因此無需進行模型轉換程序,只要將whisper.cpp程序建置起來即可進行相關應用。
就如專案整體描述文章中所說明的會使用whisper.cpp專案,所以從GitHub下載whisper.cpp程式碼檔案並解壓縮。
接著參照「以原生方式建置llama.cpp for Windows」,將CMake與Visual Studio Community安裝起來。
由於whisper.cpp實際使用需要使用到對外介面(麥克風),因此需先建置SDL2;詳細請參考GitHub上的這篇討論,SDL2的預先編譯的版本可由此處下載。
最後下載所需的模型。開啟「Windows PowerShell」,然後切換至whisper.cpp目錄之下一層models子目錄;執行download-ggml-model.cmd批次腳本以取得模型,用以下命令下載多國語言Base模型:
PS > download-ggml-model.cmd base
開啟「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識別後將會聲音轉換成文字;執行結果如下所示:
whisper.cpp的程序看起來可以執行中文語音辨識,但有點吃CPU資源(我已經用了Base模型,規模已經相對較小)。想當然爾英文的識別精準度最佳,中文的錯誤率(Word Error Rate, WER)約 14.7%;且中文還有同音異字的問題,以上面的執行案例來看「基隆」有時候就會被識別為「雞籠」。
接著會嘗試使用OpenVINO來改善執行效率。最後則會將llama.cpp與whisper.cpp兩個專案之程序進行整合,以達成用語音方式還與AI對話的目標。