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