齊勝旺 王華畢 章可嘉 陳思 衛穎 范家新



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