作者:周施樂
遠(yuǎn)場(chǎng)語音識(shí)別套件之開箱
很榮幸,在2019年我依舊在百度AI平臺(tái)下茁壯成長(zhǎng),這次收到了來自百度的測(cè)試邀請(qǐng),我將有機(jī)會(huì)拿到最新的前沿產(chǎn)品~為各位獻(xiàn)上來自前線的戰(zhàn)況~
我在過去和百度語音打交道的這些日子,曾遇到過很多問題,比如識(shí)別慢、精度差。自身原因和設(shè)備原因太多,舉步艱難。我覺得一個(gè)非音頻內(nèi)行的人很難進(jìn)一步提升在這一塊的性能與質(zhì)量。
但現(xiàn)在,百度語音正不斷地完善,已經(jīng)推出多種我非常適用的新東西,例如:
上個(gè)月剛上線的 百度語音識(shí)別極速版
該項(xiàng)能力經(jīng)我自己特定樣本測(cè)試,可以提高識(shí)別速度約3~9倍,在上側(cè)傳送門的測(cè)試樣例中,最慢的普通版和最快的極速版耗時(shí)甚至相差24倍,可見該極速版,可謂是目前普通版的最佳替代方案了!
這次我將為各位帶來的百度開發(fā)套件的新星啦
遠(yuǎn)場(chǎng)語音開發(fā)套件!
這是一款很不錯(cuò)的產(chǎn)品,就像之前的人臉開發(fā)套件一樣,他能有效幫助想要落地語音識(shí)別的企業(yè)和個(gè)人開發(fā)者們快速開發(fā)出屬于自己的業(yè)務(wù)產(chǎn)品。
在本次產(chǎn)品的規(guī)格中,有三種配置可選,依次是:
6+1環(huán)形麥陣列
4mic線性陣列
3mic三角陣列
他們各有各的應(yīng)用場(chǎng)景,為了更好地提升各位未來的產(chǎn)品,一定要聽我說完他們的優(yōu)點(diǎn)喔!
6+1環(huán)麥陣列
6+1環(huán)形陣列由6顆麥克風(fēng)圍繞一圈,中間分布一顆組成,可實(shí)現(xiàn):
360°零死角環(huán)繞聲場(chǎng)
增強(qiáng)GSC聲源定位及波束形成效果
基于非線性消除的AEC技術(shù)
像現(xiàn)在主流的天貓精靈、小米音箱,都是采用的環(huán)形6麥陣列喔!
還有像國(guó)外的amazon echo 采用了類似解決方案
他可以做到無死角的識(shí)別和聲源定位喔!這還是值得玩一玩的~
線性4麥陣列
4mic陣列由4顆麥克風(fēng)橫向排列
陣型狹長(zhǎng)占用空間小,可適配各種硬件結(jié)構(gòu)設(shè)計(jì)。
推薦應(yīng)用于智能電視、平板、以及空調(diào)、冰箱等傳統(tǒng)白電產(chǎn)品。
三角麥克陣列
3mic陣列是由3顆麥克風(fēng)三角形方式排列
支持雙音區(qū),兼顧主/副駕的語音交互需求
增強(qiáng)GSC聲源定位及波束形成效果
基于非線性消除的AEC技術(shù)
3mic也支持聲源定位喔
本次我所收到的是4mic陣列套件呢。他也是帶有聲源定位的哦~
廢話不多說,開箱開始!
首先這次開發(fā)套件的外包裝精致小巧,方方正正的外包裝有種撲面而來的低調(diào)奢華與神秘感,不知道各位有沒有看過四驅(qū)兄弟呢?
真是側(cè)漏著一股神秘的氣息呢!揭開它的面紗,看看里面吧
包裝盒內(nèi)非常簡(jiǎn)單明了,一張3折頁,簡(jiǎn)單的說明書,開發(fā)套件本尊及數(shù)據(jù)線和電源線。
說明書簡(jiǎn)單介紹了包裝內(nèi)容清單、開發(fā)板的接口示意圖、硬件連接指南、測(cè)試方式和軟件開發(fā)環(huán)境搭建引導(dǎo),比較簡(jiǎn)單。
我們來看一下開發(fā)套件本身吧,本套件使用的開發(fā)板是來自深圳市百能達(dá)電子有限公司和百度聯(lián)手打造的RK3308開發(fā)板,擁有128M的ram和128M的flash。cpu采用的是微芯瑞的rk3308,4核ARM Cortex-A35。
wifi方面僅支持2.4g頻段,藍(lán)牙支持到4.0。
在本套件上額外有一片wifi天線,所以wifi質(zhì)量杠杠的。
麥克風(fēng)可兼容上方的3種陣列。
數(shù)據(jù)線是usb-micro,主要用于adb調(diào)試。
所配套的是輸出為12V2A的電源。
遠(yuǎn)場(chǎng)語音識(shí)別套件之hello world(mac篇)
點(diǎn)亮設(shè)備,插上usb線,我們即將進(jìn)入環(huán)境配置階段。
本篇使用macOS majave 10.14.4做演示。
插入設(shè)備前,應(yīng)當(dāng)保證自己的系統(tǒng)內(nèi)具備adb環(huán)境。在terminal內(nèi)確認(rèn)一下
至于如何安裝,可參考百度搜索下的各種adb部署文章~
然后我們第一步首先要幫助開發(fā)套件連接到我們的wifi中來。
根據(jù)《百度大腦-遠(yuǎn)場(chǎng)語音開發(fā)套件-RK3308開發(fā)平臺(tái)使用說明.pdf》中所提到的wifi配置,可以順利完成入網(wǎng)。這里我做一遍操作
使用數(shù)據(jù)線連接設(shè)備后,我們可以用
adb devices命令查詢到開發(fā)套件
隨后鍵入 adb shell,使用命令行調(diào)試設(shè)備
cd /data/cfg 進(jìn)入到wifi配置文件的目錄下
通過vi命令打開配置文件
默認(rèn)情況下家用路由器的話,只需要修改ssid(wifi名稱)和psk(password key)即可。
若wifi有特殊情況,自行添加
key_mgmt=WPA-PSK // 加密方式
# key_mgmt=NONE // 不加密
修改完成后保存配置
隨后輸入
wpa_cli reconfigure
wpa_cli reconnect
指令激活重新聯(lián)網(wǎng)
此時(shí)此刻,我們就完成了設(shè)備入網(wǎng)了。
語音識(shí)別、合成都需要用到網(wǎng)絡(luò),所以一定要正確入網(wǎng)喔!
(藍(lán)牙我目前用不到,所以暫時(shí)沒有繼續(xù)去配置)
接著我們來嘗試啟動(dòng)語音識(shí)別的demo程序,來看一看環(huán)境是否正常
所有sdk資源及相關(guān)文件都在根目錄oem文件夾內(nèi)
根據(jù)產(chǎn)品說明書,我們需要先啟動(dòng) alsa_audio_main_service服務(wù)。
啟動(dòng)它之前,我們需要對(duì)目錄權(quán)限進(jìn)行相關(guān)修改賦予權(quán)限后進(jìn)行啟動(dòng)
multi_4_2 指的是使用4陣列板聲卡2。&后臺(tái)啟動(dòng)
然后使用 ps -A檢查一下服務(wù)是否正確啟動(dòng)在后臺(tái)中
啟動(dòng)了alsa服務(wù)后,我們就可以去前往中啟動(dòng)demo了
樣例程序文件位于/oem/BDSpeechSDK/sample目錄中, 運(yùn)行時(shí)依賴lib、resources、extern目錄中的庫(kù)及資源文件。
所以我們需要在啟動(dòng)時(shí)共享庫(kù)
關(guān)于共享庫(kù)可以看這里
我們運(yùn)行指令
cd /oem/BDSpeechSDK/sample/wakeup
LD_LIBRARY_PATH=/oem ./e2e_wp_asr_test
試著喊一下”小度小度,今天天氣怎么樣”試試?
可以發(fā)現(xiàn),這次套件采用了流式識(shí)別喔!附帶中間結(jié)果的!
并且在3米遠(yuǎn)的位置,使用悄悄話的方式呼喚小度小度,也能成功喚醒!
可能在英語方面還有待加強(qiáng)吧~
(也許是我的英語太散裝了)
關(guān)于語音合成
示例程序會(huì)將文本“456hello你好今天天氣不錯(cuò)”傳送給服務(wù)器,由服務(wù)器生成對(duì)應(yīng)的語音,保存為pcm文件,用戶可以進(jìn)行播放體驗(yàn)。
在終端啟動(dòng)語音合成功能,生成文本“456hello你好今天天氣不錯(cuò)”對(duì)應(yīng)的語音。
cd /oem/BDSpeechSDK/sample/tts
LD_LIBRARY_PATH=/oem ./online_test
測(cè)試程序暫未提供用戶傳入合成文本生成語音的功能,用戶可以參照樣例程序自行開發(fā)。
運(yùn)行結(jié)束后,會(huì)在當(dāng)前目錄下生成一個(gè)xxx.pcm,其中xxx是一個(gè)測(cè)試時(shí)的時(shí)間戳.在終端執(zhí)行如下命令體驗(yàn)語音合成效果
aplay -t raw -c 1 -f S16_LE -r 16000 xxx.pcm
遠(yuǎn)場(chǎng)語音識(shí)別套件之交叉編譯SampleCode
經(jīng)過了近一周的努力,總算能夠成功地將sample程序成功的交叉編譯出來了。
本篇只針對(duì)如何成功交叉編譯,解決我遇到的問題而設(shè)立的。重點(diǎn)是交叉編譯的流程
這邊我在mac上利用parallel部署了ubuntu虛擬機(jī)。為了重新確認(rèn)一遍步驟,我重新裝了一臺(tái)機(jī)器并重頭進(jìn)行了一遍步驟。并故意重現(xiàn)了我這幾天碰到過的錯(cuò)誤及解決辦法,可能可以幫助到各位。
這邊需要以下內(nèi)容:
下載SDK
將rk3308板子內(nèi)的oem內(nèi)BDSpeechSDK目錄復(fù)制到虛擬機(jī)內(nèi)。可以進(jìn)行adb pull /oem/BDSpeechSDK指令download下來
隨后將sdk放到虛擬機(jī)。我這里就直接放在了home根目錄
rk3308的編譯在標(biāo)準(zhǔn)linux上是編不出來的。我們這里需要用到交叉編譯工具鏈,這是一個(gè)特殊的編譯器,可以認(rèn)為是在A平臺(tái)編譯出B平臺(tái)才能運(yùn)行的工具包。
然后將交叉編譯鏈也復(fù)制到虛擬機(jī)里
按要求構(gòu)建項(xiàng)目工程目錄結(jié)構(gòu)
基于目前創(chuàng)建日期為4月23日的quick_start.md中所述
mkdir my_specch_project
cd my_speech_projects
touch Makefile
mkdir src
touch src/main.cpp
創(chuàng)建如下的目錄結(jié)構(gòu):
my_speech_project/
├── Makefile
└── src
└── main.cpp
我們到sample目錄下,創(chuàng)建project文件夾并創(chuàng)建src目錄,創(chuàng)建指定的文件
編寫(copy) sample代碼
sample/asr/wakeup/src中的e2e_wp_asr_test.cpp和在quick_start.md中都有相應(yīng)的demo代碼,這里我就直接將wakeup/src中的sample代碼拷貝到這里替換main.cpp
這里先不做任何改動(dòng),就照搬就行。目前的第一目的是盡快正確交叉編譯并成功在板子上跑起來
編寫(copy) Makefile代碼
makefile可以幫助工程快速連接編譯,他能省掉很多功夫。由于本人不是純正的c++開發(fā)工程師,所以這里copy了quick_start.md中的makefile代碼
這里容易出現(xiàn)的第一個(gè)問題:
照搬后由于縮進(jìn),當(dāng)你ctrlCV時(shí),極有可能將縮進(jìn)一起復(fù)制過來,所以這里需要將代碼縮進(jìn)都去除,保持整潔。在后面編譯時(shí)我會(huì)演示出現(xiàn)縮進(jìn)的錯(cuò)誤提示,這里我繼續(xù)保持原有的格式。
嘗試編譯
在quick_start.md中編譯部分,要求我們配置完成后,在Makefile所在的目錄執(zhí)行
這里 path-to-cross-compiler-root需要替換成我們工具鏈的根目錄/bin即可
/host其實(shí)就是我們工具鏈的根目錄
那在我這樣的目錄環(huán)境,等效替換成了
這里會(huì)出現(xiàn)很多問題。如果上方的操作跟我一樣,那你也很有可能碰到這些問題!
錯(cuò)誤1. Makefile:18
由于特殊縮進(jìn)導(dǎo)致的makefile編譯錯(cuò)誤
錯(cuò)誤具體提示如下
經(jīng)過我多次測(cè)試,我打了很多空行也會(huì)錯(cuò)在第18行這里。后來解決的方法就是將縮進(jìn)全部去除就可以了!
錯(cuò)誤2.undefined reference
消除了上方的縮進(jìn)后再次進(jìn)行編譯,會(huì)出現(xiàn)新的提示:
這個(gè)錯(cuò)誤是因?yàn)槿鄙賏lsa的so庫(kù)導(dǎo)致的。這個(gè)錯(cuò)誤也被寫在了quick_start.md中
如果遇到類似 ld: 找不到 -lbd_alsa_audio_client的錯(cuò)誤,請(qǐng)開發(fā)者自行從官網(wǎng)下載alsa服務(wù)包或自行從開發(fā)套件中/ome/目錄下提取相關(guān)庫(kù)放到工程下參與鏈接即可。
這邊我們從oem目錄中pull一個(gè)文件下來。他在/oem目錄下,名為libbd_alsa_audio_client.so。將它復(fù)制到BDSpeechSDK/lib下,這個(gè)目錄專門放外部依賴的庫(kù)文件,這個(gè)也放這里吧。
然后再次嘗試編譯,沒有任何錯(cuò)誤提示了,編譯通過
然后在Makefile的同目錄上就可以看到一個(gè)main的可執(zhí)行程序了。這個(gè)程序是可以在rk3308的環(huán)境下執(zhí)行的。將它通過adb放到板子里。這里提醒下,tmp目錄在斷電后會(huì)清洗。
(這里省略adb push ./main /tmp的過程)
嘗試adb下打開main
我們的main也依賴于alsa的服務(wù),所以在這里直接將alsa設(shè)置成開機(jī)啟動(dòng)得了。
/oem/Rklunch.sh這個(gè)文件就是rk3308板子開機(jī)后會(huì)跑的一個(gè)執(zhí)行文件,我們可以把所有需要在開機(jī)時(shí)啟動(dòng)的東西,都寫在這個(gè)文件里,這樣板子下次就會(huì)幫我們自動(dòng)啟動(dòng)alsa了。
這里新增了幾行代碼,主要是改一下目錄權(quán)限,然后運(yùn)行alsa服務(wù)。
但是這一次還是沒有啟動(dòng)的,需要自己手動(dòng)啟動(dòng)一下alsa。啟動(dòng)方式就是上面5句話。
這里也可以通過reboot指令重啟板子,但是tmp剛放進(jìn)來的main文件就被洗掉了,但可以檢驗(yàn)開機(jī)啟動(dòng)是否正常,這個(gè)自行權(quán)衡吧~
啟動(dòng)alsa后我們?nèi)?dòng)main
如果看到這個(gè)輸出,那么我們離成功不遠(yuǎn)了。但是其中有一句輸出影響了整個(gè)程序。這不是編譯問題!
錯(cuò)誤3. dat file invalid
error:5, domain:38, desc:Wakeup: dat file invalid., sn:
這里意思是沒成功載入dat文件。
我們看一下代碼。在wakeup_config函數(shù)中,可以看到它配置dat文件的路徑,是../../resources/esis_resource.pkg
只要把這個(gè)層級(jí)改成絕對(duì)路徑,或者把路徑改短 ./esis_resource.pkg,并把pkg文件拷貝過來即可
然后重新編譯,adb push到tmp下,這里省略
記得把dat文件也push到tmp下,如果跟我的改法一樣的話
然后再次執(zhí)行main
可以發(fā)現(xiàn)喚醒進(jìn)入回調(diào)激活了引擎加載和啟動(dòng)喚醒。
我們這時(shí)候可以嘗試使用了.
小度小度,今天上海天氣如何?
至此已經(jīng)完成了demo項(xiàng)目工程的交叉編譯工作。
這只是默認(rèn)sample程序編譯出來的效果喔,還有很多隱藏功能帶解鎖。
這是我7天來的努力成果,如果這篇文章對(duì)你有所幫助,請(qǐng)給一個(gè)贊吧~
評(píng)論
查看更多