作者:讓天涯
近年來,人工智能話題越來越熱,受到了更多人的關注。我也是大概在18年末開始接觸到百度AI社區,通過使用文字識別、圖像識別等百度AI技術,逐步感受到了AI技術的強大,同時也感覺到了百度AI技術的進步:AI技術領域范圍越來越廣泛,識別速度越來越快,識別準確度越來越高。這次,有幸收到百度遠場語音開發套件的測評邀請,作為一個非測試專業人員,這里我就自己的百度遠場語音開發套件使用過程及在使用過程中遇到的問題和大家分享一下,如有錯誤,請多多指教。
一、開箱
整個包裝很簡潔,就是一個白色的長方形盒子,正上方印著“百度大腦”標識。
打開盒子后,首先映入眼球的是一份“百度語音遠場開發套件說明書”,里面介紹了硬件購成、開發資料等信息。
拿出說明書,看到的是一個長方形的盒子,里面放著電源適配器、USB線。
拿出盒子后,便看到了百度遠場語音開發板主體了,被白色泡沫保護的很好。
接下來,一起具體看看遠場開發板的一些細節:
最后,看看百度遠場語音開發套件全家福:
百度大腦遠場語音開發套件,基于 RK3308 開發平臺打造,提供的麥克風選型適用于智能音箱、智能 家電、車載設備場景,整個開發套件包含麥克風陣列板、開發板、喇叭以及符合聲學要求的腔體, 支持聲源定位、噪聲消除等信號處理算法,5 米內有效拾音,支持遠場喚醒、遠場識別、語音合成能 力,使語音開發評估更簡便、更高效。
RK3308 開發平臺,采用 64 位 4 核 ARMCortex-A35 處理器 RK3308 系列,整合了高性能 CODEC(8 通 道 ADC + 2 通道 DAC),直接支持最大 8 通道數字 MIC 陣列+回采,實現高精度聲音采集及分析,是 一款集多種功能為一體針對音頻類應用的 AI+IoT 開發平臺。 豐富的操作系統/服務支持,助力方便快速進行 AIOT 開發和產品應用。
關于百度遠場語音開發套件的更多介紹,可以到百度AI市場了解詳情,我在這里就不在做贅述。
二、開發測試
本次測試環境為Ubuntu 16.04 64ibt 虛擬機,開發平臺是RK3308。
登陸開發板后,可以進入/oem 目錄,里面有開發相關說明以及一些測試示例。
(一)連接設備
1、安置在 adb 環境:sudo apt install adb
snow@snow-machine:~$ sudo apt install adb
正在讀取軟件包列表... 完成
正在分析軟件包的依賴關系樹
正在讀取狀態信息... 完成
下列軟件包是自動安裝的并且現在不需要了:
snapd-login-service xdg-desktop-portal xdg-desktop-portal-gtk
使用'sudo apt autoremove'來卸載它(它們)。
將會同時安裝下列軟件:
android-libadb android-libbase android-libcutils android-liblog
下列【新】軟件包將被安裝:
adb android-libadb android-libbase android-libcutils android-liblog
升級了 0 個軟件包,新安裝了 5 個軟件包,要卸載 0 個軟件包,有 6 個軟件包未被升級。
需要下載 141 kB 的歸檔。
解壓縮后會消耗 428 kB 的額外空間。
您希望繼續執行嗎? [Y/n] y
獲取:1 http://cn.archive.ubuntu.com/ubuntu xenial/universe amd64 android-liblog amd64 1:6.0.1+r16-3 [16.6 kB]
獲取:2 http://cn.archive.ubuntu.com/ubuntu xenial/universe amd64 android-libbase amd64 1:6.0.1+r16-3 [9,014 B]
獲取:3 http://cn.archive.ubuntu.com/ubuntu xenial/universe amd64 android-libcutils amd64 1:6.0.1+r16-3 [18.7 kB]
獲取:4 http://cn.archive.ubuntu.com/ubuntu xenial/universe amd64 android-libadb amd64 1:6.0.1+r16-3 [53.2 kB]
獲取:5 http://cn.archive.ubuntu.com/ubuntu xenial/universe amd64 adb amd64 1:6.0.1+r16-3 [44.0 kB]
已下載 141 kB,耗時 2秒 (48.3 kB/s)
正在選中未選擇的軟件包 android-liblog。
(正在讀取數據庫 ... 系統當前共安裝有 215288 個文件和目錄。)
正準備解包 .../android-liblog_1%3a6.0.1+r16-3_amd64.deb ?...
正在解包 android-liblog (1:6.0.1+r16-3) ...
正在選中未選擇的軟件包 android-libbase。
正準備解包 .../android-libbase_1%3a6.0.1+r16-3_amd64.deb ?...
正在解包 android-libbase (1:6.0.1+r16-3) ...
正在選中未選擇的軟件包 android-libcutils。
正準備解包 .../android-libcutils_1%3a6.0.1+r16-3_amd64.deb ?...
正在解包 android-libcutils (1:6.0.1+r16-3) ...
正在選中未選擇的軟件包 android-libadb。
正準備解包 .../android-libadb_1%3a6.0.1+r16-3_amd64.deb ?...
正在解包 android-libadb (1:6.0.1+r16-3) ...
正在選中未選擇的軟件包 adb。
正準備解包 .../adb_1%3a6.0.1+r16-3_amd64.deb ?...
正在解包 adb (1:6.0.1+r16-3) ...
正在處理用于 libc-bin (2.23-0ubuntu11) 的觸發器 ...
正在處理用于 man-db (2.7.5-1) 的觸發器 ...
正在設置 android-liblog (1:6.0.1+r16-3) ...
正在設置 android-libbase (1:6.0.1+r16-3) ...
正在設置 android-libcutils (1:6.0.1+r16-3) ...
正在設置 android-libadb (1:6.0.1+r16-3) ...
正在設置 adb (1:6.0.1+r16-3) ...
正在處理用于 libc-bin (2.23-0ubuntu11) 的觸發器 ...
2、查看安裝結果:adb version
3、查看硬件是否連接:adb devices
4、連接硬件:adb shell
(二)WIFI連接
1、進入/data/cfg 進行wifi配置:cd /data/cfg
使用 vi 編輯 wpa_supplicant.conf:vi wpa_supplicant.conf
在設置好 wpa_supplicant.conf 后,可以通過如下命令來重新聯網:
注意:第一次操作,調用 wpa_cli reconfigure 命令出錯:
切換聯網命令:wpa_supplicant -B -i wlan0 -c
雖然顯示操作成功,但是查看網絡連接,發現還是未成功連接(可以看到wlan0并未顯示IP地址):
重啟系統(如果一次不行,可以進行多次重啟),最后成功了(可以看到wlan0顯示了分配的IP地址-192.168.1.110):
(三)運行語音識別示例
進入/oem目錄,查看語音能力相關文件: cd oem
查看文檔說明:cat readme.txt
根據文檔,相關文件應該在data目錄下,但是實際操作發現,相關文件在oem目錄下,故進入oem目錄,執行操作:
主要是運行以下四個命令(該命令是修改權限,啟動 alsa_audio_main_service服務,根據說明書,使用語音識別功能需要先啟動alsa服務):
執行上述命令后,可使用ps命令檢測alsa服務是否正確啟動:ps –A|grep alsa
根據說明書,BDSpeechSDK 目錄下的sample目錄中包含語音識別示例,由于語音識別運行時依賴lib、resources、extern目錄中的庫及資源文件,所以我們需要在啟動時共享庫。
進入目錄,運行語音識別示例:
喊“小度小度,今天天氣怎么樣”的識別結果:
可以發現,本開發套件采用了流式識別,附帶中間結果!
(四)語音識別效果測試
通過距離遠近,語速快慢,中間是否有隔離物(隔離物為電腦桌,顯示屏)等方式,對本開發套件進行了一次粗略的測試:
一米處:
有隔離:“一米一次喚醒測試”
有隔離,語速較快:“一米二次喚醒測試”
有隔離,語速較快:“今天天氣怎么樣”
無隔離,正常語速:“一米三次喚醒測試”
無隔離,語速較快:“今天天氣怎么樣”
2米處:(無隔離,正常語速)
“兩米一次喚醒測試"
“兩米二次喚醒測試”
“天天氣比較涼爽”
3米處:(無隔離,正常語速)
“三米一次喚醒測試”
“三米二次喚醒測試”
“聽說明天有臺風”
5米處:(無隔離,正常語速)
“五米一次喚醒”
“五米二次喚醒”
“臺風來了怎么辦”
6米處:(無隔離,正常語速)
注:首先需要較大聲喚醒小度,喚醒后,可識別正常音量的聲音:
“六米一次喚醒”
“六米二次喚醒”
“今天天氣好晴朗”
測試結果:
經過上述的語音識別測試,可以發現,本套件在5米內可以達到比較良好的喚醒、識別效果,超過5米后,喚醒、識別效果下降比較明顯。
另外,對于一般性的用語,識別相當準確(即使達到6米,也能比較準確的識別),但是對于讀音相近的詞語(“一米”-“玉米”,“兩米”-“楊冪”等),識別準確性就有點差了(也可能跟發音有關)。
發音源跟套件之間是否有隔離物(非完全隔離),對識別的影響不是很大(沒有讀音的影響大)。
語速不是很快的情況下,一般也能正常識別。
總體而言,對識別結果影響較大的,除了距離外,就是讀音相近的詞語(發音)了。
(五)藍牙連接
輸入命令 :bt_realtek_start?即可啟動藍牙:
打開電腦的藍牙,可以發現名為realtek_bt的藍牙設備,嘗試進行配對:
配對成功:
配對成功后,就可以用藍牙進行音樂播放等操作了。斷開藍牙連接:
測試發現的問題:
1、初次打開藍牙播放音頻時,聲音過大,調整聲音后,又發現最大聲音音量有的小了。
2、雖然本套件藍牙可以一次性連接多個藍牙(我嘗試了連接兩個藍牙設備),但是,兩個連接成功后,當用一個藍牙設備播放音樂,然后停止,再用另一個藍牙設備播放音樂時,發現播放失敗,只能用之前的那個藍牙設備播放音樂。
(六)錄音、播放音頻測試
查看tmp目錄內容:cd tmp
進行錄音:arecord -D hw:2,0 -c 8 -r 16000 -f S16_LE ?/tmp/test.wav
結束錄音后,查看目錄文件信息:
使用 aplay 命令就可以播放錄音文件:aplay test.wav
錄音效果還是不錯的。
(七)語音合成測試
示例程序會將文本“456hello你好今天天氣不錯”傳送給服務器,由服務器生成對應的語音,保存為pcm文件,用戶可以進行播放體驗。進入語音合成示例目錄:cd /oem/BDSpeechSDK/sample/tts
執行語音合成操作:LD_LIBRARY_PATH=/oem ./online-test:
運行結束后,會在當前目錄下生成一個xxx.pcm,其中xxx是一個測試時的時間戳.在終端執行如下命令體驗語音合成效果:aplay -t raw -c 1 -f S16_LE -r 16000 xxx.pcm
(八)交叉編譯
1、下載SDK
將rk3308板子內的oem內的BDSpeechSDK目錄復制到虛擬機內。可以進行adb pull /oem/BDSpeechSDK指令download下來,隨后將sdk放到虛擬機。
我這里就直接將整個/oem?目錄下載放到了“下載”目錄。
2、交叉工具鏈:
rk3308的編譯在標準linux上是編不出來的。我們這里需要用到交叉編譯工具鏈,這是一個特殊的編譯器,可以認為是在A平臺編譯出B平臺才能運行的工具包。
我這里將交叉編譯鏈復制到虛擬機的桌面上了。
3、按要求構建項目工程目錄結構
創建如下的目錄結構:
編寫(copy) sample代碼
目錄sample/wakeup/src中的e2e_wp_asr_test.cpp中有相應的demo代碼,這里我就直接將wakeup/src中的sample代碼拷貝到這里替換main.cpp
這里先不做任何改動,就照搬就行。目前的第一目的是盡快正確交叉編譯并成功在板子上跑起來。
編寫(copy) Makefile代碼
makefile可以幫助工程快速連接編譯,它能省掉很多功夫。由于本人不是純正的c++開發工程師,所以這里copy了 sample/wakeup/ 中的Makefile代碼:
嘗試編譯:
配置完成后,需要在Makefile所在的目錄執行:
上述語句中的?/home/snow/桌面1/rk3308_arm_tool_chain?代表著工具鏈rk3308_arm_tool_chain的根目錄/bin,如果路徑填寫錯誤,會出現如下錯誤:
make: arm-rockchip-linux-gnueabihf-g++:命令未找到
可以進入rk3308_arm_tool_chain 目錄 ,使用pwd命令獲取rk3308_arm_tool_chain 的路徑:
使用正確的路徑,重新編譯:
如果出現上述錯誤,說明缺少alsa的so庫,我們可以從oem目錄中pull一個文件下來。他在/oem目錄下,名為libbd_alsa_audio_client.so。將它復制到BDSpeechSDK/lib下,這個目錄專門放外部依賴的庫文件,這個也放這里吧。
然后再次嘗試編譯,沒有任何錯誤提示了,編譯通過。
編譯成功,發現工程目錄下多了一個main文件,這就是我們編譯好的可執行程序了。
將main可執行程序復制到/tmp目錄(tmp目錄在斷電后會清空)下:adb push ./main /tmp
運行程序:
LD_LIBRARY_PATH=/oem:/oem/BDSpeechSDK/lib:/oem/BDSpeechSDK/extern/lib ./main
出現錯誤:
error:5, domain:38, desc:Wakeup: dat file invalid., sn:
這里意思是沒成功載入dat文件。我們看一下代碼。在wakeup_config函數中,可以看到它配置dat文件的路徑,是../../resources/asr_resource/esis_resource.pkg只要把這個層級改成絕對路徑,或者把路徑改短 ./esis_resource.pkg,并把pkg文件拷貝過來即可。
然后重新編譯,adb push到tmp下,
還是這個錯誤,那是因為雖然改了文件路徑,但是我們還沒有把 esis_resource.pkg 也push到tmp文件夾里,進入 /home/snow/下載/oem/BDSpeechSDK/resources/asr_resource 文件夾,執行 adb push ./esis_resource.pkg /tmp:
再次執行,出現錯誤:error:-1, domain:10, desc:alsa_audio_client_open failed, sn: ,
因為我們的main也依賴于alsa的服務,所以需要開啟alsa服務:
或者可以將上述語句寫入 /oem/Rklunch.sh 文件,這個文件是rk3308板子開機后會跑的一個執行文件,我們可以把所有需要在開機時啟動的東西,都寫在這個文件里,這樣板子下次就會幫我們自動啟動alsa了。
執行成功后,再次運行main程序:
cd /tmpLD_LIBRARY_PATH=/oem:/oem/BDSpeechSDK/lib:/oem/BDSpeechSDK/extern/lib ./main
執行成功。
(九)交叉編譯-語音合成
按照上面的方法,我們可以編譯一下語音合成示例(可以把合成的文字改為自己喜歡的,我這里就改成了“Hello World,今天時七夕情人節,中國的傳統節日!”,有條件的,可以嘗試輸入文本,再合成語音)。
編譯程序:
上述警告可以忽略。把編譯完成的可執行文件下載到開發板并運行:
出現錯誤,仔細查看源代碼,發現main 函數中需要引用配置文件speech_sdk_log.conf,但路徑為 ../../resources/speech_sdk_log.conf:
并將speech_sdk_log.conf文件push到/tmp路徑下:
重新執行:
LD_LIBRARY_PATH=/oem:/oem/BDSpeechSDK/lib:/oem/BDSpeechSDK/extern/lib ./main
執行成功,可以看到/tmp目錄多了一個6832.pcm文件,運行命令 aplay -t raw -c 1 -f S16_LE -r 16000 6832.pcm,執行后,就能播放女生版的語音內容了。
三、產品建議
經過一個星期的測試,發現百度遠場語音開發套件在語音喚醒、語音識別方面比較出色,識別率整體上準確很高,如果在發音相似的詞語方面多加訓練,效果會更好。此外根據個人的使用感受在產品的功能上提一些建議:
1、 提升音質,語音多樣化
未來提供更多不同風格的發音人,并可以讓用戶自主選擇,分別在進行購物、查詢信息、播放音頻資源等不同場景下有更多的音色供選擇適配。讓“小度”逐漸人性化、個性化。
2、 完善語音交互功能
提供更高質量的語音交互功能,加強對話理解和對話管理技術以及只是建設能力。通過不斷的練習,讓音箱能夠更加“理解”用戶的話語意思, 給用戶提供更加準確的結果,輕松定制專業、可控、穩定的完整語音交互能力。
3、 音色識別
在語音交互中,通過聲紋識別不同用戶音色,根據音色判斷交互內容并理解,可以將此功能利用在聲紋解鎖以及語音交互理解中,包括多人說話時執行命令的優先級。
語音交互未來可發揮的空間很大,但是現在的語音交互功能還不那么廣泛的,不過相信只要堅持發展,保持數據收集、場景優化,未來一定會在各個領域有更深度的拓展。
評論
查看更多