王明峰
(廣州航海學(xué)院,廣東廣州 510725)
在觸摸操控、手勢識別方式和姿態(tài)識別方式等人機(jī)交互方式迅速發(fā)展的今天,輪機(jī)模擬器仍采取傳統(tǒng)的鍵鼠控制方式,存在訓(xùn)練效率不高和操作方式單一的問題,深入研究輪機(jī)模擬器交互方式不但能提高訓(xùn)練效率,還能推動輪機(jī)模擬器發(fā)展。目前,部分方案采用嵌入式設(shè)備本地化語音識別的措施以解決該問題,但這種方案存在語音識別不準(zhǔn)確和時延高的問題。本文基于語音云識別技術(shù)和嵌入式設(shè)備提出一種輪機(jī)模擬器人機(jī)交互方案,結(jié)合語音云識別的準(zhǔn)確性、低時延及嵌入式設(shè)備體積小、功能強(qiáng)的優(yōu)點,提高輪機(jī)模擬器利用率和操作便捷性。
傳統(tǒng)的人機(jī)交互方式強(qiáng)調(diào)視覺而弱邏輯,也稱作GUI(Graphic User Interface),而語音交互則強(qiáng)邏輯無視覺或者強(qiáng)邏輯弱視覺,也稱作VUI(Voice User Interface)[1]。VUI可以通過語言傳遞很多信息,包括認(rèn)知、邏輯甚至是情緒等。輪機(jī)模擬器人機(jī)交互不需要對語音進(jìn)行更深層次分析,僅需要識別出用戶所說的話,并執(zhí)行相關(guān)動作。
此過程大致可以分為五個環(huán)節(jié):一是語音采集環(huán)節(jié),該過程中采集用戶語音并編碼;二是語音識別環(huán)節(jié),該過程中上傳編碼后語音到云端識別并回傳;三是語音處理環(huán)節(jié),該過程中將回傳信息轉(zhuǎn)換為機(jī)器可識別的文本信息;四是語音執(zhí)行環(huán)節(jié),該過程中通過對文本識別做出相應(yīng)動作;五是語音反饋環(huán)節(jié),該過程中做完上述動作后將結(jié)果反饋給用戶。系統(tǒng)框圖如圖1所示。
圖1 輪機(jī)模擬器語音交互系統(tǒng)整體設(shè)計
在硬件方面,使用適用于單片機(jī)的Python解釋器和庫均可。本文選用支持MicroPython的STM32F103-ZET6作為主控芯片,支持MicroPython是為了使用Python進(jìn)行軟件部分開發(fā)。結(jié)合ESP8266 Wi-Fi模塊通信,ISD4004系列完成語音采集與編碼,OLED顯示屏完成語音反饋。硬件總體設(shè)計框圖如圖2所示。
圖2 硬件總體設(shè)計框圖
其中,為了簡化供電線路,本文采用USB進(jìn)行5 V供電,并通過降壓芯片轉(zhuǎn)換為MCU供電電壓,具體電路圖如圖3所示。
圖3 USB供電并轉(zhuǎn)為MCU電壓
此外,該系統(tǒng)還設(shè)計了一塊拓展底板,包括用于連接各個模塊的排母、LED狀態(tài)指示燈,目的是保證各模塊之間數(shù)據(jù)穩(wěn)定交互及未來系統(tǒng)拓展。其原理圖如圖4所示,完整系統(tǒng)實物圖如圖5所示。
圖4 拓展底板原理圖
圖5 整個系統(tǒng)實物圖
軟件設(shè)計的總體思路如下:
第一,設(shè)備上電后完成系統(tǒng)自檢,確保設(shè)備正常工作。
第二,完成系統(tǒng)自檢后進(jìn)行系統(tǒng)的初始化,包括各個模塊所需功能的初始化,如STM32的GPIO的初始化、SPI通信和IIC通信的初始化、串口通信的初始化等。
第三,完成各個模塊的初始化后,根據(jù)嵌入式軟件開發(fā)常用的幾種框架以及該設(shè)計的任務(wù)需求,選擇使用實時操作系統(tǒng)FreeRTOS(Free Real Time Operating System)。
第四,若采集到語音信號,并收集到語音識別得到的數(shù)據(jù),將得到的結(jié)果顯示在OLED屏幕上,并通過Wi-Fi模塊將控制指令發(fā)送給上位機(jī)進(jìn)行控制。
軟件設(shè)計的總體流程如圖6所示。
圖6 軟件設(shè)計的總體流程
軟件設(shè)計可以分為三個部分,一是核心控制模塊的程序設(shè)計,二是各個從設(shè)備模塊的驅(qū)動程序設(shè)計,三是調(diào)用云識別的程序設(shè)計。在核心控制程序設(shè)計過程中,由于該系統(tǒng)預(yù)裝了FreeRTOS,更加方便為STM32 芯片做各個任務(wù)的控制和資源調(diào)度。當(dāng)ISD4004錄制并存儲后,由STM32通過Python程序調(diào)用云端識別并返回給STM32處理后,由OLED屏幕顯示,通過ESP8266實現(xiàn)輪機(jī)模擬器中的上位機(jī)與語音識別系統(tǒng)之間的交互。在驅(qū)動程序設(shè)計中,選擇合適的OLED顯示內(nèi)容和調(diào)用ESP8266即可。在調(diào)用云識別的程序設(shè)計中,經(jīng)對比,由于科大訊飛并不免費,騰訊云審批煩瑣,在阿里云和百度云中,阿里云相對易用[2],因此,云端識別采用阿里云智能語音服務(wù),其具有識別準(zhǔn)、處理快及模型可定制的優(yōu)點,可以解決普通話不標(biāo)準(zhǔn)、船舶場景下中英混合交流等難題。
在板卡上編寫Python程序,實現(xiàn)輪機(jī)模擬器的云識別語音交互與控制,具體操作如下:
第一步,使用以下命令安裝Python SDK:
pip install aliyun-python-sdk-core==2.13.3
第二步,配置環(huán)境變量、編碼格式和采樣率。
通過環(huán)境變量讀取訪問憑證,智能語音交互的AccessKey ID、AccessKey Secret和AppKey的環(huán)境變量名:ALIYUN_AK_ID、ALIYUN_AK_SECRET、NLS_APP_KEY。
發(fā)出聲音: “查看發(fā)電機(jī)運行狀態(tài)” ,此時,系統(tǒng)會生成一個PCM編碼格式16 000 Hz采樣率的錄音文件,等待系統(tǒng)返回代碼并在OLED屏幕上顯示。當(dāng)系統(tǒng)在OLED屏幕上顯示 “錄音文件識別請求成功” 即表示錄音文件已經(jīng)傳到阿里云識別,當(dāng)系統(tǒng)在OLED屏幕上顯示 “錄音文件識別成功” ,即表示阿里云已經(jīng)識別完成錄音文件,并回傳到嵌入式設(shè)備。輪機(jī)模擬器的機(jī)艙監(jiān)測與報警系統(tǒng)能夠發(fā)出聲光報警信號[3]。模擬器系統(tǒng)會顯示當(dāng)前發(fā)電機(jī)運行狀態(tài),OLED屏幕同步顯示發(fā)電機(jī)狀態(tài)。
圖7為輪機(jī)模擬器屏幕狀態(tài),圖8為當(dāng)前狀態(tài)下OLED屏幕同步顯示狀態(tài)。
圖7 當(dāng)前狀態(tài)下輪機(jī)模擬器顯示狀態(tài)
圖8 OLED顯示狀態(tài)
本文設(shè)計的基于語音云識別的輪機(jī)模擬器交互系統(tǒng),具有良好的語音交互功能,能夠順暢地同輪機(jī)模擬器使用者交互,并根據(jù)交互者語音指令完成響應(yīng)任務(wù)。利用該系統(tǒng)可以方便快捷地進(jìn)行模擬器使用,也可以推廣到其他復(fù)雜項目中,具有一定的參考價值。