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