齊勝旺 王華畢 章可嘉 陳思 衛(wèi)穎 范家新
摘要 本文提出了一種基于九軸加速度傳感器JY-901和Cocos-2dx的游戲健身方案,通過(guò)藍(lán)牙將JY-901采集的人體行為數(shù)據(jù)傳送到Android端,并在Android端進(jìn)行人體行為識(shí)別、處理,從而控制游戲進(jìn)行。本方案將人體運(yùn)動(dòng)與游戲相結(jié)合,以游戲的方式幫助人們健身,解決了常規(guī)運(yùn)動(dòng)枯燥的問(wèn)題,有助于對(duì)推動(dòng)全民健身。
【關(guān)鍵詞】游戲健身 加速度傳感器 Android游戲 Cocos2d-x 人體行為識(shí)別 機(jī)器學(xué)習(xí) JNI技術(shù) LIBSVM
現(xiàn)代社會(huì)生活節(jié)奏加快、運(yùn)動(dòng)成本增加,使得增強(qiáng)運(yùn)動(dòng)的趣味性成為了促進(jìn)全民健身的重要課題。體感技術(shù)也稱人體動(dòng)作感應(yīng)控制技術(shù),是由機(jī)器通過(guò)感應(yīng)器對(duì)用戶的動(dòng)作進(jìn)行辨識(shí)、解析,并按照預(yù)定感測(cè)模式作出反饋的人機(jī)交互技術(shù)。體感游戲使用戶擺脫鼠標(biāo)和鍵盤等傳統(tǒng)媒介,可簡(jiǎn)化計(jì)算機(jī)復(fù)雜操作,增強(qiáng)人機(jī)互動(dòng)性,有效提升個(gè)體在游戲中的置入感和沉浸感,能夠幫助用戶達(dá)到最優(yōu)化的健身效果。本文實(shí)現(xiàn)了一種基于JY-901和Cocos2d-x的游戲健身方案,可以根據(jù)JY-901獲取的人體數(shù)據(jù)進(jìn)行人體行為識(shí)別從而實(shí)現(xiàn)游戲交互,以達(dá)到游戲健身的目的。
1 系統(tǒng)設(shè)計(jì)
系統(tǒng)由下位機(jī)和上位機(jī)組成,使用時(shí)打開(kāi)下位機(jī)電源并將其放置于人體的某一位置,如手腕,然后打開(kāi)安裝了配套游戲軟件的Android設(shè)備的藍(lán)牙開(kāi)關(guān),接下來(lái)打開(kāi)游戲軟件并連接下位機(jī)。游戲過(guò)程中只要通過(guò)運(yùn)動(dòng)放置了下位機(jī)的肢體即可完成游戲。下位機(jī)主要由人體動(dòng)作數(shù)據(jù)獲取模塊和數(shù)據(jù)傳輸模塊兩部分組成,負(fù)責(zé)人體數(shù)據(jù)的獲取和發(fā)送。上位機(jī)主要由人體行為識(shí)別模塊和游戲模塊兩部分組成,用于識(shí)別人體動(dòng)作并實(shí)現(xiàn)游戲交互。系統(tǒng)框圖如圖l所示。
1.1 下位機(jī)設(shè)計(jì)
下位機(jī)主要分為人體動(dòng)作數(shù)據(jù)獲取模塊和數(shù)據(jù)傳輸模塊兩大模塊。人體動(dòng)作數(shù)據(jù)獲取模塊用于獲得運(yùn)動(dòng)肢體的加速度數(shù)據(jù);數(shù)據(jù)傳輸模塊可以將數(shù)據(jù)獲取模塊獲取到的數(shù)據(jù)通過(guò)藍(lán)牙傳輸給上位機(jī)。
1.1.1 人體動(dòng)作數(shù)據(jù)獲取模塊
人體動(dòng)作數(shù)據(jù)獲取模塊采用了高精度九軸加速度傳感器模塊JY-901。該模塊基于Cortex-M內(nèi)核處理器,采用高精度MEMS傳感器,加速度的最大量程遠(yuǎn)遠(yuǎn)高于人體動(dòng)作水平,可達(dá)士1 6g,最低可識(shí)別6.le-5g,保證了人體動(dòng)作識(shí)別的精度。其內(nèi)部還實(shí)現(xiàn)了姿態(tài)解算器和卡爾曼濾波算法,很好地解決了Z軸漂移問(wèn)題,在運(yùn)動(dòng)時(shí)能夠準(zhǔn)確地直接輸出加速度、角速度、角度等數(shù)據(jù)的數(shù)字信號(hào)?;貍魉俾士筛模疚脑O(shè)置為200Hz。該模塊還具備超低功耗的特點(diǎn),工作電流約為20mA,供電電壓為3-6V,可直接使用3.7V鋰電池供電,足以滿足要求。
1.1.2 數(shù)據(jù)傳輸模塊
數(shù)據(jù)傳輸模塊采用HC-08來(lái)實(shí)現(xiàn)將JY901的數(shù)據(jù)發(fā)送給上位機(jī)。該模塊基于藍(lán)牙4.0協(xié)議,可根據(jù)需求利用AT指令進(jìn)行串口波特率等參數(shù)的更改。在空曠環(huán)境下,該模塊可以和配備了藍(lán)牙模塊的設(shè)備實(shí)現(xiàn)80米遠(yuǎn)距離通訊,完全滿足需求。
JY-901獲取到的數(shù)據(jù)通過(guò)TTL發(fā)送給HC-08,HC-08通過(guò)藍(lán)牙發(fā)送給上位機(jī),以便上位機(jī)處理。
1.2 上位機(jī)設(shè)計(jì)
上位機(jī)即Android設(shè)備,該部分主要分為人體行為識(shí)別模塊和游戲模塊兩大模塊。人體行為識(shí)別模塊可以通過(guò)藍(lán)牙獲取到下位機(jī)的人體行為數(shù)據(jù),然后通過(guò)處理這些人體行為數(shù)據(jù)來(lái)識(shí)別出人體行為。游戲模塊可以根據(jù)識(shí)別到的人體動(dòng)作觸發(fā)游戲,實(shí)現(xiàn)人機(jī)交互,達(dá)到游戲健身的效果。
1.2.1 人體行為識(shí)別模塊
人體行為識(shí)別部分采用Java編寫(xiě),在軟件被打開(kāi)后請(qǐng)求用戶打開(kāi)設(shè)備藍(lán)牙并配對(duì)下位機(jī),配對(duì)完成后創(chuàng)建一個(gè)藍(lán)牙服務(wù)以實(shí)時(shí)獲取來(lái)自下位機(jī)的加速度等數(shù)據(jù)。在游戲過(guò)程中,人體行為識(shí)別模塊根據(jù)獲得的模型對(duì)實(shí)時(shí)人體行為數(shù)據(jù)進(jìn)行識(shí)別,當(dāng)識(shí)別到特定的人體行為時(shí)通知游戲主進(jìn)程,發(fā)送識(shí)別到的人體行為,觸發(fā)特定的游戲交互。
由于對(duì)于線性不可分的情況,支持向量機(jī)通過(guò)使用非線性映射算法,將低維輸入空間特性不可分的樣本轉(zhuǎn)化為高維特征空間使其線性可分,從而使得高維特征空間采用線性算法對(duì)樣本的非線性特征進(jìn)行線性分析成為了可能。故而本文采用LIBSVM作為分類器。所以人體行為識(shí)別的主要步驟為訓(xùn)練集數(shù)據(jù)構(gòu)建,訓(xùn)練人體行為識(shí)別模型,獲取實(shí)時(shí)人體行為數(shù)據(jù),使用訓(xùn)練出來(lái)的模型來(lái)識(shí)別人體行為。為了方便繪圖,本文人體行為識(shí)別算法使用MATLAB進(jìn)行說(shuō)明,原理與Java相同。
本文使用的傳感器回傳頻率為200Hz,實(shí)測(cè)每秒鐘可獲得180-190條數(shù)據(jù),為了計(jì)算方便,本文以數(shù)據(jù)行數(shù)作為時(shí)間單位。本文以擺臂動(dòng)作和打拳動(dòng)作的識(shí)別為例。經(jīng)過(guò)測(cè)量,打拳(圖2)和擺臂(圖3)完整動(dòng)作時(shí)間基本為40行數(shù)據(jù)和120行數(shù)據(jù)。又因?yàn)閱螚l數(shù)據(jù)在人體動(dòng)作識(shí)別中的作用有限,且受限于上位機(jī)性能、電源,難以實(shí)現(xiàn)對(duì)每條數(shù)據(jù)的實(shí)時(shí)處理,所以本文在特征提取過(guò)程中截取每40條數(shù)據(jù)作為一個(gè)整體進(jìn)行處理,并設(shè)置每個(gè)相鄰整體按50%重疊。在采用了該技術(shù)后人體行為的周期約為O.lls,即動(dòng)作發(fā)生后最多O.lls,系統(tǒng)就能夠進(jìn)行識(shí)別,完全滿足本文需求。
1.2.1.1 構(gòu)建訓(xùn)練集數(shù)據(jù)和標(biāo)簽
(1)數(shù)據(jù)采集:因?yàn)镴Y-901內(nèi)部已經(jīng)實(shí)現(xiàn)了姿態(tài)解算器和卡爾曼濾波算法,所以不必進(jìn)行濾波,可以直接進(jìn)行信號(hào)特征的提取。獲取擺臂和打拳等肢體動(dòng)作數(shù)據(jù)時(shí),可以將加速度傳感器置于手腕背部,手心朝下手背朝上時(shí)傳感器的Z軸負(fù)方向與重力方向相同,Y軸方向與手臂保持平行。獲取到的每行數(shù)據(jù)格式為ax,ay,az,wx,wy,wz,部分?jǐn)?shù)據(jù)如下圖4,左邊7個(gè)為打拳動(dòng)作,右邊8個(gè)位擺臂動(dòng)作。
(2)構(gòu)建訓(xùn)練集數(shù)據(jù):將步驟(1)獲取到的數(shù)據(jù)按照每40條數(shù)據(jù)一個(gè)整體,每個(gè)相鄰整體按50%重疊進(jìn)行處理。將每個(gè)整體按照ax,ay,az,wa,wy,wz的順序分別求均值、標(biāo)準(zhǔn)差、偏度、峰度,并將求得的值存放于大小為24X1的矩陣中作為一條數(shù)據(jù)。將步驟(1)獲得的所有數(shù)據(jù)進(jìn)行如上處理,即可完成訓(xùn)練集數(shù)據(jù)的構(gòu)建。
(3)構(gòu)建訓(xùn)練集標(biāo)簽:由于人體行為識(shí)別使用監(jiān)督式學(xué)習(xí)算法,所以需要人工給數(shù)據(jù)加入標(biāo)簽。本文將所有行為區(qū)分為打拳、無(wú)動(dòng)作和擺臂,分別用.5、O和5來(lái)表示。由于訓(xùn)練集大部分?jǐn)?shù)據(jù)為無(wú)動(dòng)作,故而可以初始化所有標(biāo)簽為O,并根據(jù)訓(xùn)練集數(shù)據(jù)實(shí)際情況調(diào)整數(shù)據(jù)標(biāo)簽。在調(diào)整好標(biāo)簽后,將包含標(biāo)簽的數(shù)據(jù)也繪制出來(lái),如圖5所示。
1.2.1.2 訓(xùn)練人體行為識(shí)別模型
LIB SVM提供了一個(gè)訓(xùn)練模型的函數(shù):svmtrain。該函數(shù)前兩個(gè)參數(shù)分別為上邊獲取到的訓(xùn)練集數(shù)據(jù)和標(biāo)簽,在第三個(gè)參數(shù)中設(shè)置SVM類型為C-SVC,核函數(shù)類型為RBF函數(shù)。另外,還需要設(shè)置當(dāng)前訓(xùn)練集的最佳參數(shù)C和g以提高識(shí)別率。通過(guò)使用GirdSearch可以獲得本文最佳參數(shù)C為1.7411,最佳參數(shù)g為0.0039。
構(gòu)建完人體行為識(shí)別模型后可以采用交叉驗(yàn)證等方式來(lái)測(cè)試模型準(zhǔn)確度。本文選用最佳C和g后,在交叉驗(yàn)證參數(shù)為3時(shí),準(zhǔn)確度約為83%,可以滿足本文需要。
1.2.1.3 構(gòu)建實(shí)時(shí)人體行為數(shù)據(jù)
構(gòu)建實(shí)時(shí)人體行為數(shù)據(jù)矩陣與構(gòu)建訓(xùn)練集數(shù)據(jù)時(shí)類似,將實(shí)時(shí)獲取的人體數(shù)據(jù)每40條數(shù)據(jù)按照ax,ay,az,wa,wy,wz的順序分別求均值、標(biāo)準(zhǔn)差、偏度、峰度,并將求得的值存放于24X1的矩陣中作為一條數(shù)據(jù),并將其用于識(shí)別動(dòng)作。每獲得一次矩陣就進(jìn)行一次識(shí)別。
1.2.1.4 識(shí)別人體行為
在獲得模型后,只需要將每一條24X1的人體行為數(shù)據(jù)矩陣使用svmpredict函數(shù)來(lái)預(yù)測(cè)即可判斷其分類。測(cè)試識(shí)別效果如下圖6,前六個(gè)為打拳,后四個(gè)為擺臂,可見(jiàn)此模型能夠很好地識(shí)別人體行為。
1.2.2 游戲模塊
游戲部分主要通過(guò)修改基于開(kāi)源游戲引擎Cocos2d-x的開(kāi)源游戲《Flappy Bird》(下墜的小鳥(niǎo))來(lái)實(shí)現(xiàn)。Cocos2d-x是一款基于MIT開(kāi)源協(xié)議的跨平臺(tái)游戲引擎,支持Lua、Javascript和C++語(yǔ)言開(kāi)發(fā)。游戲部分主要使用C++來(lái)實(shí)現(xiàn)。但是因?yàn)橛螒蛐枰褂孟到y(tǒng)藍(lán)牙來(lái)獲取人體行為識(shí)別部分?jǐn)?shù)據(jù),所以在Android平臺(tái)下的人體行為識(shí)別模塊可以使用Java來(lái)實(shí)現(xiàn),并且可以通過(guò)運(yùn)用JNI技術(shù)(即Java Native Interface)來(lái)完成函數(shù)互調(diào)。實(shí)現(xiàn)在人體行為識(shí)別模塊識(shí)別到打拳或擺臂動(dòng)作時(shí)觸發(fā)游戲中角色跳躍動(dòng)作。
2 游戲運(yùn)行測(cè)試
游戲測(cè)試采用黑盒測(cè)試,測(cè)試環(huán)境為Android M,主要進(jìn)行功能和性能兩方面的測(cè)試。首先,打開(kāi)游戲進(jìn)行藍(lán)牙設(shè)備的配對(duì).然后,進(jìn)入游戲界面點(diǎn)擊開(kāi)始游戲,通過(guò)運(yùn)動(dòng)肢體來(lái)實(shí)現(xiàn)控制游戲進(jìn)行;最后,查看游戲得分并選擇繼續(xù)或退出。測(cè)試過(guò)程中,游戲各項(xiàng)指標(biāo)均為正常,運(yùn)行效果良好。部分運(yùn)行圖如圖7-12。
3 結(jié)論
本文實(shí)現(xiàn)了一種基于JY-901和Cocos2d-x的游戲健身方案。本方案利用九軸加速度傳感器JY-901獲取人體行為數(shù)據(jù),對(duì)數(shù)據(jù)進(jìn)行處理后,使用LIB SVM識(shí)別出人體行為,并根據(jù)人體行為觸發(fā)游戲交互,實(shí)現(xiàn)了通過(guò)運(yùn)動(dòng)來(lái)控制游戲的目標(biāo)。本方案不但提高了游戲的娛樂(lè)性,而且可以在游戲的同時(shí)實(shí)現(xiàn)健身,增強(qiáng)了運(yùn)動(dòng)的趣味性,有利于促進(jìn)全民健身,具有一定的實(shí)用價(jià)值。
(通訊作者:王華畢)
參考文獻(xiàn)
[1]徐云,季靈芝,體感游戲在孤獨(dú)癥兒童干預(yù)中的效用[J].中國(guó)臨床心理學(xué)雜志,2016 (04): 762-765+761.
[2]衡霞,王忠民,基于手機(jī)加速度傳感器的人體行為識(shí)別[J].西安郵電大學(xué)學(xué)報(bào),2014 (06):76-79.
[3]Hsu C-W, Chang C-C, Lin C-J.Apractical guide to support vectorclassification[R]. 2013.
[4] Chang C-C,Lin C-J. LIBSVM:A libraryfor support vector machines [R]. 2013.
[5] cocos2dx實(shí)例開(kāi)發(fā)之flappybird [EB/OL],ht tps: //blog. csdn. net /u0122 34115/article/details/40487557.
[6]沈晨,謝璨,基于Cocos2d-x引擎的跨平臺(tái)跑酷類手游的設(shè)計(jì)與實(shí)現(xiàn)[J].電腦知識(shí)與技術(shù),2017 (29): 46-47+57.
[7]許曉寧.Java Native Interface應(yīng)用研究[J].計(jì)算機(jī)科學(xué),2006 (10): 291-292+295.
[8]張海藩軟件工程導(dǎo)論[M].北京:清華大學(xué)出版社,2008:152-179.