這一章將進入機器人語音交互的學習,讓機器人能跟人進行語音對話交流。這是一件很酷的事情,本章將涉及到語音識別、語音合成、自然語言處理方面的知識。本章內容:

1.語音交互相關技術

2.機器人語音交互實現

3.自然語言處理雲計算引擎


2.機器人語音交互實現

其實要自己做一款語音對話機器人還是很容易的,我們只需要選擇好語音識別、語音合成、自然語言處理的技術,就可以在一款樹莓派3開發板上實現了。由於語音交互系統的核心技術是雲端自然語言處理技術,所以我們可以選擇網上免費提供的語音識別、語音合成等現有方案,將主要精力用在雲端自然語言處理技術的研發上。語音識別與語音合成SDK有:科大訊飛、百度語音、Google…,對於我們牆內玩家…(Google頭疼)。經過我自己的實測,發現比較好用的免費SDK是科大訊飛家的,所以強烈推薦。為了測試方便,我先推薦圖靈機器人API作為雲端自然語言處理技術。等大家將整個語音交互系統的工作原理學會後,隨時可以將圖靈機器人API替換成自己的雲端伺服器,從而將主要精力轉移到雲端自然語言處理技術的研發上。說了這麼多,我們先來看看咱們的機器人語音交互軟硬體實現的真容吧,如圖5。

(圖5)機器人語音交互軟硬體實現

USB麥克風拾取聲音,USB音效卡和音響播放聲音,樹莓派3開發板上運行語音識別、語音合成、QA及NLP請求。其中,語音識別和語音合成採用科大訊飛的SDK,QA及NLP請求調用圖靈機器人的API介面。

這裡特別說明一下,為什麼選用USB音效卡而不用樹莓派自帶AV音效卡的原因。你可以直接將耳機插口插入樹莓派的AV介面試試,肯定很酸爽!雜音太大。這裡就需要硬體支持。雜音原因: 因為樹莓派3的AV介面是音頻和視頻合併輸出的,這個介面是美標介面,而在中國是國標的,介面的接地和音頻是相反的,這就導致根本不能用了。另外對播放器的支持並不完善。

2.1.獲取科大訊飛的SDK

科大訊飛提供用於研究用途的語音識別、語音合成的免費SDK,科大訊飛分發該SDK的形式是庫文件(libmsc.so)+庫授權碼(APPID),庫文件libmsc.so與庫授權碼APPID是綁定在一起的,這也是大多說商業軟體分發的方式。

註冊科大訊飛賬號:

首先,前往訊飛開放平臺(https://www.xfyun.cn),註冊科大訊飛賬號,註冊好後,就可以進入自己的控制檯進行設置了,如圖6。

(圖6)註冊科大訊飛賬號及登錄

創建應用:

我們要在科大訊飛的開放平臺創建我們需要的應用,這樣訊飛就根據應用類型給我們生成對應的SDK庫。

進入訊飛開放平臺的控制檯後,找到左側欄的[創建應用],按要求填寫各個選項,注意[應用平臺]一欄填Linux,因為我們用的樹莓派3開發板裝的是Linux系統,如圖7。

(圖7)創建應用

創建應用完成後,就要給該應用添加相應的AI技能了,由於我們需要訊飛的在線語音合成、在線語音識別(也就是語音聽寫),所以添加這兩個服務就行了。如圖8。

(圖8)添加語音合成與識別服務

申請樹莓派3平臺對應的Linux SDK庫:

由於科大訊飛開放平臺默認只提供PC端x86架構的Linux庫,所以如果我們想在樹莓派3(樹莓派3為ARM架構)上使用科大訊飛的Linux SDK庫,就需要另外申請。其實申請方法也很簡單,進入科大訊飛中我的語音雲頁面:

xfyun.cn/index.php/mycl

進行樹莓派Linux平臺庫文件交叉編譯申請,選擇應用(必須是linux平臺的應用),按照默認勾選全部在線服務,平臺架構ARM硬體型號Broadcom BCM2837(樹莓派3代b型,即樹莓派3的SOC,其餘版本樹莓派,樹莓派2為BroadcomBCM2836,更早的版本為BroadcomBCM2835),處理器位數32,運行內存填了1GB。最後記得填上自己的郵箱,提交後,如填寫無誤正確,你的郵箱將收到可下載庫的鏈接,下載解壓後得到libmsc.so,這個庫文件就是我們申請的樹莓派3平臺對應的Linux SDK庫了。如圖9。關於交叉編譯器和編譯腳本,從這裡pan.baidu.com/s/1pLFPTY下載,具體交叉可以參考這一篇

【經驗分享】樹莓派3交叉編譯和SDK配置流... - Linux/win/winphone 訊飛開放平臺社區

(圖9)申請樹莓派3平臺對應的Linux SDK庫

關於這個庫文件對應的庫授權碼APPID,可以在[我的應用]界面查看,如圖10。

(圖10)查看庫文件對應的庫授權碼APPID

2.2.編譯安裝訊飛語音交互實例ROS版DEMO

利用科大訊飛提供的SDK庫文件和官方API說明文檔,我們就可以開發出自己的語音交互實常式序,當然也可以開發對應的ROS程序。在我們的miiboo機器人上開發的語音交互ROS功能包叫miiboo_asr。miiboo_asr功能包文件組織結構,如圖11。其中lib文件夾下存放科大訊飛提供的libmsc.so庫文件,iat.cpp是語音識別節點源文件,tts.cpp是語音合成節點源文件,qa_nlp.cpp是QA&NLP邏輯處理節點源文件,其他的文件我們可以不用關心。

(圖11)miiboo_asr功能包文件組織結構

瞭解了miiboo_asr功能包的基本情況後,我們就開始編譯安裝吧。首先,將miiboo_asr包拷貝到~/catkin_ws_apps/src/目錄下。然後將上面申請到的樹莓派3平臺對應的Linux SDK庫libmsc.so文件拷貝到miiboo_asr/lib/中,並將miiboo_asr/CMakeLists.txt文件中有關libmsc.so的路徑替換為你存放該libmsc.so的實際路徑。如圖12。

(圖12)CMakeLists.txt文件中有關libmsc.so的路徑修改

接著我們需要將miiboo_asr/launch/xf.launch文件中的各個appid、音效卡硬體地址、麥克風硬體地址設置成自己實際的值。關於與libmsc.so庫綁定的appid上面已經介紹了查看方法,而音效卡硬體地址、麥克風硬體地址的查詢也很簡單。

麥克風硬體地址的查詢直接使用命令arecord -l,如圖13。

(圖13)麥克風硬體地址的查詢

在這裡麥克風錄製設備處於卡1,設備0,於是我們的麥克風硬體地址就是「plughw::CameraB409241」。

音效卡硬體地址的查詢直接使用命令aplay -l,如圖14。

(圖14)音效卡硬體地址的查詢

在這裡音效卡播放設備有三個,卡0中的設備0為3.5音頻輸出,卡0設備1為HDMI音頻輸出,卡2設備0為USB音效卡輸出。這裡我推薦使用USB音效卡輸出,所以我們的音效卡硬體地址就是「plughw:DAC」。

在編譯miiboo_asr前,我們還需要安裝一些依賴項,其實就是麥克風錄音和音樂播放工具,安裝命令如下:

sudo apt-get update

sudo apt-get install libasound2-dev

sudo apt-get install mplayer

現在可以編譯miiboo_asr了,編譯命令如下:

cd ~/catkin_ws_apps/

catkin_make -DCATKIN_WHITELIST_PACKAGES=」miiboo_asr」

編譯完成後,就可以運行語音交互節點來實現語音對話了,溫馨提醒,請確保樹莓派已連接網路,因為語音交互節點運行時需要訪問網路。啟動語音交互各個節點很簡單,直接一條命令:

roslaunch miiboo_asr xf.launch

節點都運行起來後,會聽到歡迎語句「你好,歡迎使用miiboo機器人語音控制系統」,之後就可以對著麥克風說出自己的指令,經語音識別被轉換為文本,文本經圖靈機器人得到應答,並通過語音合成使我們能聽到回答的聲音。這樣一個語音交互的聊天機器人就誕生了,盡情享受和機器人聊天的樂趣吧^_^

這裡說明一下,如果你使用我們的miiboo機器人,那麼miiboo機器人上已經安裝編譯好了miiboo_asr功能包,所以只需要上面roslaunch miiboo_asr xf.launch這條啟動命令,就可以開始機器人聊天之旅。但是,miiboo機器人上安裝的miiboo_asr功能包的libmsc.so的訪問次數和頻率是有限制的,只能供學習使用。如果大家需要將miiboo_asr功能包用來二次開發或實際應用,就需要按照上面的步驟去科大訊飛官網申請自己的SDK庫了。

推薦閱讀:

相關文章