這一章將進入機器人語音交互的學習,讓機器人能跟人進行語音對話交流。這是一件很酷的事情,本章將涉及到語音識別、語音合成、天然語言處理方面的知識。本章內容:php
1.語音交互相關技術html
2.機器人語音交互實現python
3.天然語言處理雲計算引擎linux
其實要本身作一款語音對話機器人仍是很容易的,咱們只須要選擇好語音識別、語音合成、天然語言處理的技術,就能夠在一款樹莓派3開發板上實現了。因爲語音交互系統的核心技術是雲端天然語言處理技術,因此咱們能夠選擇網上免費提供的語音識別、語音合成等現有方案,將主要精力用在雲端天然語言處理技術的研發上。語音識別與語音合成SDK有:科大訊飛、百度語音、Google…,對於咱們牆內玩家…(Google頭疼)。通過我本身的實測,發現比較好用的免費SDK是科大訊飛家的,因此強烈推薦。爲了測試方便,我先推薦圖靈機器人API做爲雲端天然語言處理技術。等你們將整個語音交互系統的工做原理學會後,隨時能夠將圖靈機器人API替換成本身的雲端服務器,從而將主要精力轉移到雲端天然語言處理技術的研發上。說了這麼多,咱們先來看看我們的機器人語音交互軟硬件實現的真容吧,如圖5。nginx
(圖5)機器人語音交互軟硬件實現django
USB麥克風拾取聲音,USB聲卡和音響播放聲音,樹莓派3開發板上運行語音識別、語音合成、QA及NLP請求。其中,語音識別和語音合成採用科大訊飛的SDK,QA及NLP請求調用圖靈機器人的API接口。ubuntu
這裏特別說明一下,爲何選用USB聲卡而不用樹莓派自帶AV聲卡的緣由。你能夠直接將耳機插口插入樹莓派的AV接口試試,確定很酸爽!雜音太大。這裏就須要硬件支持。雜音緣由: 由於樹莓派3的AV接口是音頻和視頻合併輸出的,這個接口是美標接口,而在中國是國標的,接口的接地和音頻是相反的,這就致使根本不能用了。另外對播放器的支持並不完善。centos
科大訊飛提供用於研究用途的語音識別、語音合成的免費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
利用科大訊飛提供的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技術交流羣,一塊兒討論學習^_^
關於咱們:
視頻教程: