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