周 君,劉 璟
(東南大學 儀器科學與工程學院,南京 210096)
移動互聯(lián)網(wǎng)、云計算以及人工智能的飛速發(fā)展為酒店智能化服務(wù)提供了軟硬件基礎(chǔ)支持,酒店服務(wù)機器人的發(fā)展和應(yīng)用為傳統(tǒng)酒店服務(wù)行業(yè)實現(xiàn)轉(zhuǎn)型提供了契機[1]。服務(wù)型機器人按照用途可分為娛樂服務(wù)機器人、家庭服務(wù)機器人和專業(yè)服務(wù)機器人[2]。專業(yè)服務(wù)機器人主要用于特定場所,代替人完成特殊任務(wù),酒店服務(wù)機器人屬于其中一種。目前針對酒店服務(wù)機器人的研究相對較少,與其它服務(wù)機器人相比,酒店服務(wù)機器人應(yīng)用前景廣闊,同樣具備實際應(yīng)用開發(fā)與研究價值[3]。目前市場上酒店服務(wù)機器人與用戶之間的交互,仍然通過鍵盤—界面的方式,或者只是簡單地將語音輸出,并沒有真正解放用戶、實現(xiàn)智能化交互。本文設(shè)計的面向酒店服務(wù)機器人的智能語音交互系統(tǒng),可以通過語音輸入命令,結(jié)果可通過語音輸出或由機器人直接執(zhí)行相應(yīng)動作,且創(chuàng)新性地在語音交互之前添加了人臉檢測功能。系統(tǒng)只有檢測到人臉才進行語音交互,減少了周圍噪聲的影響,提高了語音識別率,可給客人提供良好的語音交互體驗。
硬件平臺使用廣州友善之臂Tiny4412,采用基于三星Cortex-A9架構(gòu)的Exynos 4412四核處理器,內(nèi)部集成了圖像處理器GPU,使用兩級緩存機制。板子上集成載有1GB的DDR3內(nèi)存、4GB的高速eMMC閃存、TTL串口、LCD接口、SD卡座等[4]。S702是友善的7吋電容屏,通過LCD排線與開發(fā)板LCD接口連接。友善之臂的CAM500A攝像頭模塊通過FPC排線與開發(fā)板的DVP CAMERA攝像頭接口連接。友善之臂的YS6010無線模塊主要采用AP6210無線模組,內(nèi)部集成 SDIO 接口的 WiFi 芯片和 UART 接口的低功耗藍牙4.0,直接與底板WiFi&Bluetooth插座連接。整個硬件框架如圖1所示。
圖1 系統(tǒng)硬件框架
在開發(fā)板tiny4412上燒入Android5.0.2系統(tǒng),在電腦端進行軟件開發(fā)環(huán)境搭建工作:安裝JDK、 Android studio及SDK包。系統(tǒng)最后以語音交互的應(yīng)用程序?qū)崿F(xiàn),打開APP即處于人臉檢測中。一旦檢測到人臉就進入語音交互Acitivity,首先打開語義理解接口,讓服務(wù)機器人能夠聽懂客人的話語。從科大訊飛的AIUI開放平臺上返回結(jié)果后,打開語音合成接口,將結(jié)果以語音形式反饋給客人。系統(tǒng)處于語義理解和語音合成循環(huán)中,一旦語義理解的返回結(jié)果為 “語法識別”或者在點擊界面上的語法識別按鈕后即開始語法識別,根據(jù)構(gòu)建的語法文件開始識別客人的命令。如果構(gòu)建的語法中有相應(yīng)規(guī)則,則可得到識別結(jié)果并執(zhí)行相應(yīng)動作。如果沒有得到相應(yīng)結(jié)果,則再次回到語義理解,與客戶重新交流。整個系統(tǒng)軟件流程如圖2所示。
圖2 系統(tǒng)軟件流程
本文利用OpenCV庫中的AdaBoost算法API實現(xiàn) Android 平臺中的人臉檢測。AdaBoost人臉檢測算法由 P Viola等[5]提出,作為一種迭代算法,其核心思想是:從人臉圖像中抽取大量簡單特征,有些特征具有一定的人臉和非人臉區(qū)分能力,隨后通過從眾多特征中選出分類能力較強的特征作為弱分類器,并將弱分類器進行有效組合從而構(gòu)成強分類器[6]。
從OpenCV的官網(wǎng)下載最新的OpenCV-3-4-0android-sdk,其包含了OpenCV庫函數(shù)和訓練好的模型等。OpenCV庫提供了兩種已經(jīng)訓練好的 AdaBoost人臉分類器,一種是Haar級聯(lián)分類器,保存于haarcascade_frontalface_alt2.xml 描述文件中;另一種是LBP級聯(lián)分類器,保存于 lbpcascade_frontalface.xml描述文件中。與Haar級聯(lián)分類器分類器相比,局部二值模式(Local Binary Patterns,LBP)級聯(lián)分類器處理的是整型值,而不是雙精度值,因此檢測速率更快[7]。為了達到較好的實時性,讓酒店客戶有更好的服務(wù)體驗,本文選用基于LBP 特征的人臉分類器進行人臉檢測。人臉檢測流程如圖3所示。
圖3 人臉檢測流程
本文利用訊飛開放平臺實現(xiàn)Android 平臺語音交互。訊飛開放平臺以“云+端”的形式向開發(fā)者提供語音合成、語音識別、語音喚醒、語義理解、人臉識別、個性化彩鈴和移動應(yīng)用分析等多項服務(wù)[8-9]。
首先,在科大訊飛官網(wǎng)申請訊飛開發(fā)賬號,創(chuàng)建一個名為 “酒店服務(wù)機器人語音交互-Android”的應(yīng)用,開通在線語音合成、在線命令詞識別、語音聽寫和AIUI平臺的服務(wù),下載相應(yīng)服務(wù)組合的Android版SDK[10-11]。在Android項目中導入SDK中的 libms.cso、libaiui.cso[12-13],再添加用戶權(quán)限,新建一個Application類,在其中初始化語音配置對象,寫入在官網(wǎng)申請的APPID,然后即可在Activity中使用語音功能函數(shù),實現(xiàn)所需的功能。整個語音界面如圖4所示,用EditText顯示語義理解和語法識別的返回結(jié)果,用戶可以直接點擊下欄4個按鈕。
圖4 語音交互界面
2.2.1 語音合成
語音合成,又稱文語轉(zhuǎn)換技術(shù),能將任意文字信息實時轉(zhuǎn)化為標準流暢的自然語音并朗讀出來[14]。系統(tǒng)檢測到人臉后,進入語音交互Activity,以語音形式歡迎客人入住酒店,首先必須調(diào)用語音合成接口,還需設(shè)置發(fā)音種類、發(fā)音人、語速、音量等,一般已經(jīng)有默認值,客人也可點擊菜單欄設(shè)置和發(fā)音人按鈕重新選擇。參數(shù)設(shè)置和發(fā)音人選擇界面如圖5、圖6所示。
圖5 語音合成參數(shù)設(shè)置
圖6 發(fā)音人選擇設(shè)置
整個語音合成流程如圖7所示。
圖7 語音合成流程
2.2.2 語義理解
語義理解主要是把自然語言內(nèi)容轉(zhuǎn)換為有一定結(jié)構(gòu)的文本數(shù)據(jù),使應(yīng)用能夠抓取其中重點數(shù)據(jù),理解用戶使用意圖。本文通過在科大訊飛官網(wǎng)上自定義的語義理解庫,在本文Android項目中調(diào)用科大訊飛的AIUI接口實現(xiàn)語義理解。AIUIAgent是與AIUI交互的橋梁,提供有創(chuàng)建AIUIAgent實例接口,發(fā)送AIUIMessage控制AIUI運行接口、銷毀AIUIAgent實例接口以及監(jiān)聽AIUI服務(wù)拋出AIUIEvent的監(jiān)聽器AIUIListener。AIUI內(nèi)部具有3種工作狀態(tài):STATE_IDLE(空閑)、STATE_READY(就緒)和STATE_WORKING(工作),AIUI只有在工作狀態(tài)時才能進行錄音交互。整個語義理解AIUI流程如圖8所示。
圖8 AIUI流程
AIUI進入工作狀態(tài)后,通過監(jiān)聽器AIUIListener監(jiān)聽各種 AIUIEvent。該系統(tǒng)主要對結(jié)果事件AIUIConstant.EVENT_RESULT和服務(wù)狀態(tài)事件AIUIConstant.EVENT_STATE進行處理。
AIUI進入工作狀態(tài)后,默認的交互模式為持續(xù)交互模式,即“一次喚醒,多次交互”,但長時間沒有交互將再次進入空閑狀態(tài),拋出AIUIConstant.EVENT_STATE事件。若檢測到進入空閑狀態(tài),表示AIUI服務(wù)沒有停止,但已經(jīng)長時間不需要AIUI服務(wù),將關(guān)閉AIUI服務(wù),重新回到人臉檢測Activity中,檢測客人是否還在。
結(jié)果事件AIUIConstant.EVENT_RESULT主要針對科大訊飛AIUI開放平臺返回的數(shù)據(jù)進行處理。在AIUI開放平臺上可以自定義問答,添加開放問答和開放技能。定義一個語法識別的自定義問答,問題是要進行語法識別和命令詞識別的不同說法,回答只有語法識別。當解析的結(jié)果為“語法識別”時,將關(guān)閉AIUI服務(wù),開始語法識別。對于其它解析結(jié)果,都將調(diào)用語音合成接口,以語音形式回答客戶的問題。
2.2.3 語法識別
語法識別是基于語法規(guī)則,將與語法一致的自然語言音頻轉(zhuǎn)換為文本輸出的技術(shù)[15-17]。語法識別的結(jié)果值域只在語法文件列出的規(guī)則里有很好的匹配率,多用于要求結(jié)果更準確且說法有限的語音控制中,本文將語法識別用于下位機機器人的運動控制模塊。
ABNF范式,即擴展的增強型巴克斯范式,主要用于文本編碼,具有合理的表達能力、簡單明了的編寫規(guī)范和高效的壓縮效率[18]。本文采取ABNF格式構(gòu)建云端語法文件,代碼如下:
String mCloudGrammar = "JHJABNF 1.0 UTF-8; " +
" language zh-CN; " +
" mode voice; " +
" root MYMmain; " +
" MYMmain =[我] [想] [MYMgo] ( MYMopera1 | MYMlocation) ; " +
" MYMgo = 去 | 要 | 到 | 向 ; " +
" MYMopera1 = 前進 | 后退 | 原地左轉(zhuǎn) | 原地右轉(zhuǎn) |前進左轉(zhuǎn) |前進右轉(zhuǎn); " +
" MYMlocation = 電梯 |會議室 | 圖書館 |東南大學;";
文法等同于正則表達式,定義了一個句子集合。用root指定規(guī)則,可選部分用中括號[ ]標記,幾個輸入路徑里選擇一個時并用 | 分隔[19]。當表示“去電梯”時:“想去電梯”、“去電梯”、“我想去電梯”等說法都可被系統(tǒng)匹配。
整個語法識別流程如圖9所示。
圖9 語法識別流程
語法識別開始后,語法識別監(jiān)聽器開始監(jiān)聽“開始說話”、“結(jié)束說話”、“音量變化”、“返回結(jié)果”等事件。在結(jié)果事件中,主要解析和處理語法識別的結(jié)果。對于無法匹配語法規(guī)則的語音都返回“沒有匹配結(jié)果”字符串,并停止語法識別,重新開始語義理解。對于匹配語法規(guī)則的語音則返回相應(yīng)結(jié)果,并進入結(jié)果處理函數(shù)。在結(jié)果處理函數(shù)中,提取語音命令的主要部分,即MYMopera1 或MYMlocation 中的字,使多種表達對應(yīng)同一意思的命令得到統(tǒng)一處理。
對前進、后退、原地左轉(zhuǎn)、原地右轉(zhuǎn)、前進左轉(zhuǎn)、前進右轉(zhuǎn)6個命令除了前期命令的處理外,還可向下位機發(fā)送不同的串口數(shù)據(jù),控制下位機運動。串口通信協(xié)議統(tǒng)一規(guī)定波特率為9 600bps,8位數(shù)據(jù)位,1位停止位,無奇偶校驗位[20]。整個串口的數(shù)據(jù)格式為。
<數(shù)據(jù)起始頭部><指令類型><數(shù)據(jù)值><校驗部分><數(shù)據(jù)終止尾部>
數(shù)據(jù)起始頭部:7E;數(shù)據(jù)終止尾部:0D 0A。指令類型長度為一個字節(jié),數(shù)據(jù)值長度為4個字節(jié),校驗部分為1個字節(jié)[21]。數(shù)據(jù)值表明相應(yīng)距離和角度,指令與指令類型如表1所示。在Android項目中,通過加載友善之臂提供的函數(shù)庫libfriendlyarm-hardware.so文件直接操作串口發(fā)送數(shù)據(jù)。
表1 發(fā)送指令與指令類型對應(yīng)結(jié)果
在開發(fā)板Tiny4412上安裝“語音交互”應(yīng)用程序,對應(yīng)用程序進行測試,結(jié)果如表2所示。
表2 應(yīng)用程序測試結(jié)果
本文設(shè)計的酒店服務(wù)機器人智能語音交互系統(tǒng),融合了視覺、語音、智能人機交互和網(wǎng)絡(luò)等核心技術(shù),良好地處理了人臉檢測、語音合成、語義理解與語法識別間的邏輯關(guān)系。測試結(jié)果表明,系統(tǒng)人臉檢測和語音合成十分完好,語義理解準確,語法識別率較高,做到了聽懂客人問題、正確回答客人問題和響應(yīng)語音命令,能夠直接運用于實際。