教你如何在樹莓派上搭建語音識別服務

會飛行的小蝸牛發表於2016-11-06

最近專案原因需要我完成一個在樹莓派上的離線語音識別,忙活了近一週,起初用了開源的PocketSphinx,但是不得不說,識別率低的驚人,甚至可以說有些字詞根本沒法識別,除非你自己製作聲學模型,不然這玩意兒就是個擺設。

百度目前對像樹莓派這種裝置只支援線上識別,不能用。

最後,萬幸,科大訊飛提供了離線版本,而且還免費,還支援樹莓派!

接下來,根據我的摸索,教大家如何在樹莓派上搭建語音識別模組。

首先,前往訊飛開放平臺下載SDK,平臺選擇Linux。你需要註冊相關資訊,最後你所下載的SDK中會自動填入你的key。

因為科大訊飛官方在新版本SDK移除了樹莓派的支援,我把以前的版本上傳了,供大家使用: 
http://download.csdn.net/detail/yanghuan313/9616763

解壓後如圖 
這裡寫圖片描述 
進入目錄,裡面有如下的檔案: 
這裡寫圖片描述 
我們這裡直接選擇進入官方所給的例子進行執行: 
這裡寫圖片描述

關鍵點,因為這個是Linux系統的版本,和樹莓派不一樣,我們需要修改一下庫檔案的引用路徑: 
首先,編輯32bit_make.sh:

sudo vim 32bit_make.sh,將內容修改為以下: 
這裡寫圖片描述

儲存退出後,繼續,sudo vim Makefile,修改下面劃紅線的位置為如圖: 
這裡寫圖片描述

好了,接下來執行source 32bit_make.sh 
有可能會出現許可權相關的問題,建議直接從主檔案遞迴給許可權: 
sudo chmod -R 774 Linux_voice_1.109

如果出現下面的內容,那就說明沒什麼問題了 
這裡寫圖片描述

接著,在Linux_voice_1.109/bin目錄下會生成一個可執行檔案: 
這裡寫圖片描述

我們執行它,./iat_sample 正常情況下會顯示 
這裡寫圖片描述

這裡選0會直接識別,識別的語音為官方所給的測試語音檔案,儲存在當前目錄的wav資料夾下,識別結果為中美數控。選1則會使用使用者詞表,檔案為當前目錄下的userwords.txt,識別結果為中美速控,原因大家自己思考。 
這裡寫圖片描述

好了,現在識別解決了,我們來解決錄音的問題

我試過很多在linux下的錄音軟體,不是不能設定詳細的引數,就是無法控制錄音時間。比如sox,這個軟體很好,但是我看了幫助文件發現,要停止錄音必須手動Ctrl+C!

不過問題還是被我解決了: 
sudo apt-get install alsa-oss

安裝完以後,執行: 
arecord -d 3 -r 16000 -c 1 -t wav -f S16_LE test.wav

-d : 錄音時間(s)
-r : 頻率
-c : 音軌
-t : 檔案型別
-f : 格式

因為科大訊飛要求單音軌,16000HZ,16bit的取樣,支援wav或者pcm

錄音結束後,檔案儲存在當前目錄,將它移動到bin/wav/下,並且修改檔名替換掉以前的檔案,或者你直接可以在sample/iat_sample/下修改C檔案原始碼。

我們再次執行bin/iat_sample,成功識別。

在這裡我只是講述瞭如何實現語音識別的功能,更多的改善大家可以自己解決。 
有錯誤的地方還望大家指正。

相關文章