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