摘要
這一章將進入機器人語音交互的學習,讓機器人能跟人進行語音對話交流。這是一件很酷的事情,本章將涉及到語音識別、語音合成、自然語言處理方面的知識。本章內容:
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庫,就需要另外申請。其實申請方法也很簡單,進入科大訊飛中我的語音雲頁面:
http://www.xfyun.cn/index.php/mycloud/app/linuxCrossCompile
進行樹莓派Linux平台庫文件交叉編譯申請,選擇應用(必須是linux平台的應用),按照默認勾選全部在線服務,平台架構ARM硬件型號Broadcom BCM2837(樹莓派3代b型,即樹莓派3的SOC,其余版本樹莓派,樹莓派2為BroadcomBCM2836,更早的版本為BroadcomBCM2835),處理器位數32,運行內存填了1GB。最后記得填上自己的郵箱,提交后,如填寫無誤正確,你的郵箱將收到可下載庫的鏈接,下載解壓后得到libmsc.so,這個庫文件就是我們申請的樹莓派3平台對應的Linux SDK庫了。如圖9。關於交叉編譯器和編譯腳本,從這里http://pan.baidu.com/s/1pLFPTYr下載,具體交叉可以參考這一篇
http://bbs.xfyun.cn/forum.php?mod=viewthread&tid=32028&highlight=

(圖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庫了。
后記
------SLAM+語音機器人DIY系列【目錄】快速導覽------
第1章:Linux基礎
第2章:ROS入門
第3章:感知與大腦
第4章:差分底盤設計
第5章:樹莓派3開發環境搭建
第6章:SLAM建圖與自主避障導航
2.google-cartographer機器人SLAM建圖
第7章:語音交互與自然語言處理
第8章:高階拓展
2.centos7下部署Django(nginx+uwsgi+django+python3)
----------------文章將持續更新,敬請關注-----------------
如果大家對博文的相關類容感興趣,或有什么技術疑問,歡迎加入下面的《SLAM+語音機器人DIY》QQ技術交流群,一起討論學習^_^

關於我們:
視頻教程:

https://www.bilibili.com/video/av61448040
