劉晉鋼 韓燮 侯歡歡 周曉青



摘 要:為了在虛擬環境中實現風箏放飛效果,采用Kinect作為輸入設備,利用體感設備的骨骼跟蹤技術,定義手臂上舉、振臂和雙手交叉模擬放風箏的常用姿勢,設計了虛擬放風箏系統,讓用戶通過手臂動作在虛擬環境中放飛風箏。在WPF平臺上實現風箏場景設計和風箏運動時的動畫設計。通過單元測試和集成測試,表明系統使用骨骼數據跟蹤技術結合用戶自定義手勢,操作合理,WPF動畫實現場景及風箏運動突破了傳統動畫限制,用戶能在虛擬場景中體驗到放風箏的樂趣。
關鍵詞:體感設備;虛擬放風箏;骨骼跟蹤;WPF
DOI:10. 11907/rjdk. 182715 開放科學(資源服務)標識碼(OSID):
中圖分類號:TP319文獻標識碼:A 文章編號:1672-7800(2019)007-0100-04
Design of Virtual Kite Flying System Based on Kinect
LIU Jin-gang1,HAN Xie2,HOU Huan-huan1,ZHOU Xiao-qin1
(1. Computer Engineering Department, Taiyuan Institute of Technology, Taiyuan 030008, China;
2. Data Science and Technology, North University of China, Taiyuan 030051, China)
Abstract: In order to achieve the effect of kite flying in virtual environment, Kinect is used as a data input device in the system. Developers simulate gestures of flying a kite by means of arm lifting, arm swing and arms crossing, based on bone tracking technology of Kinect. The system realizes the design of the kite scene and the animation design of the kite movement. Users fly kites in the virtual environment by arm movements. Unit test and integrated test show it is reasonable to use bone data tracking technology and combine user defined gestures. WPF animation of scene and kite movement break through the restriction of traditional animation, which makes users experience the fun of flying kites in virtual scene.
Key Words: Kinect; virtual kite flying; bone binding; WPF
基金項目:國家自然科學基金項目(61672473);山西省回國留學人員科研項目(2015-079)
作者簡介:劉晉鋼(1975-),女,太原工業學院計算機工程系副教授,研究方向為人機交互;韓燮(1964-),女,博士,中北大學大數據學院教授、博士生導師,研究方向為虛擬現實、計算機仿真。
0 引言
風箏在中國有著十分悠久的歷史,與民俗、民風及精神文化生活密切相關,放風箏是一種深受民眾喜愛的游戲和體育項目。關于風箏的起源,世界上有很多不同的說法,其中相當一部分人認為風箏起源于中國,大約在公元8 世紀時由中國傳到世界各地[1]。然而常規的放風箏活動都在室外進行,易受場地、天氣、季節等諸多復雜因素的影響。隨著計算機游戲系統的發展,在室內基于虛擬環境放飛風箏成為可能。
于澤升等[2]提出采用基于加權動態時間規整模板匹配手勢識別算法,結合Kinect的手勢識別,實現了家居設備的智能控制;劉小建等[3]提出使用深度信息進行多特征提取的手勢識別算法,結合Kinect深度信息定位人手;華中師范大學田元等[4]提出用人物進行實時手勢識別方法,平均識別率可達97%;鄧瑾雯[5]結合Kinect人物和姿勢識別技術實現智能家居系統;內蒙古大學錢錕[6]用Kinect攝像機作為數據采集設備,結合彩色圖像及骨骼數據信息,對靜態手語和動態孤立詞手語實現識別,取得較好效果;張冕等[7]采用支持向量機SVM的機器學習方法分類識別操作人員的手勢,將手勢映射為機器人的運動,通過手勢對機器人進行運動控制。實驗表明配電作業機器人智能人機交互方法可行;哈爾濱工業大學雷程等[8]針對移動機器人的交互控制,給出了基于Kinect全向移動平臺構型,并推導出正逆運動學模型。
Kinect應用廣泛,文獻[9]將Kinect用于模擬訓練人員高浸潤定位,文獻[10]將其用于虛擬試衣,文獻[11]將其用于深度數據指尖檢測,文獻[12]將其用于智能小車控制系統,文獻[13]對Kinect采集的三維數據進行修復和融合,文獻[14]對Kinect點云數據超限補償信息融合,文獻[15]使用Kinect對坐姿意圖進行判斷研究。這些研究成果表明Kinect在虛擬仿真方面有良好的應用前景。
本文以放風箏為例,提出基于Kinect的虛擬放風箏系統設計。該系統使用Kinect設備采集放風箏的常用姿態,將手勢識別擴充到手臂的實時姿態識別,借助WPF的動畫模擬放風箏畫面。
1 關鍵技術
本系統結合Kinect骨骼綁定技術,利用Microsoft Visual Studio 2010開發工具在WPF平臺下進行開發。
1.1 Kinect
Kinect是一種3D體感攝影機,包含即時語音辨識、影像辨識、動態捕捉、麥克風輸入、社群互動等功能。微軟Kinect依靠相機捕捉三維空間中的用戶運動,無需使用任何控制器。該系統還能辨識人臉,可以使用戶自動連上游戲,可辨認不同的聲音并接受命令,使系統操作更加簡易 [16]。
1.2 WPF
1.2.1 WPF簡介
Windows Presentation Foundation(WPF)是微軟新一代圖形展示系統。WPF提供了統一的編程模型、語言和框架,還有全新的多媒體交互用戶圖形界面[17]。
1.2.2 WPF圖形基礎
WPF集成了2D矢量圖、光柵圖片、文本、音頻、視頻、動畫、3D圖形,所有這些特性都構建在DirectX之上。
WPF的基本設計原則是元素合成思想,將元素合成思想融入到WPF的圖形系統中。
1.2.3 WPF坐標系
當使用WPF創建圖形時,應該知道圖形顯示在什么地方,需要對WPF中的坐標系統有一定的認識。
在WPF二維坐標系中,左上角是坐標原點,向右為X軸正方向,向下為Y軸正方向, WPF默認二維坐標系如圖1所示。
在WPF的三維坐標系中,原點一般位于在WPF中創建的三維對象中心。三維坐標的X 軸正方向朝右,Y軸正方向朝上,Z軸正方向從原點向外朝向觀察者。WPF三維空間坐標系如圖2所示。
圖1 WPF默認二維坐標系? ? ? ? ? ? ? ? 圖2 WPF三維坐標系統
1.3 骨骼綁定
在Kinect中,20個關節點可以表示一個骨架,如圖3所示。當用戶進入Kinect的視野范圍時,Kinect可自動把用戶20個關節點的位置找到,并且通過(x,y,z)坐標表示[18]。當用戶在Kinect面前做很多復雜的動作時,客戶端可通過關節點的位置變化執行操作。獲取Kinect數據流有PM(Polling Model)模型和EM(Event Model)模型[19]。
圖3 骨骼綁定
使用NUI(Natural User Interface)操縱計算機。NUI指一類自然用戶界面,需要人們以最自然的方式(如語言和文字)與機器互動。此外,需要一種應用程序編程接口API(Application Programming Interface),它可提供應用程序與開發人員基于某軟件或硬件得以訪問一組例程的能力,但不需要訪問源碼,也不用理解內部工作機制。
對于所有獲取的骨骼數據至少應包含3類信息:①相關骨骼跟蹤狀態。骨骼跟蹤狀態可分為被動模式和主動模式。被動模式僅包括位置數據,主動模式包括完整的骨骼數據,即20個關節點的空間位置信息;②唯一的骨骼跟蹤ID,用于分配給視野中的用戶,也稱為深度數據中的ID;③用戶質心位置,該值僅在被動模式下可用。
1.3.1 骨骼數據獲取方式
NUI骨骼API提供了兩種應用模型:輪詢模型和時間模型[20]。
輪詢模型是讀取骨骼事件最簡單的方式。通過調用SkeletonStream類的OpenNextFrame()函數實現。該函數可指定下一幀骨骼數據的等待時間,當數據已經準備好或超出等待時間時,此函數便會返回Kinect的下一幀骨骼數據。
時間模型以事件驅動方式獲取骨骼數據,這種方式更加準確、靈活。應用程序給SkeletonFrameReady事件傳遞一個事件處理函數。如果下一幀骨骼數據已經準備好,就會立即調用該事件的回調函數。因而Kinect應用要實時獲取骨骼數據,通過調用OpenSkeletonFrame()函數實現。
本系統需要實時采集用戶動作,故選擇時間模型獲取骨骼數據。
1.3.2 骨骼對象模型
Kinect For Windows SDK中,骨骼追蹤有4個重要對象,它們是SkeletonStream、SkeletonFrame、Skeleton和Joint。骨骼對象模型如圖4所示。
圖4 骨骼對象模型
下面針對骨骼對象模型中的對象作簡要說明。
(1)SkeletonStream對象。SkeletonStream通過注冊SkeletonFrameReady事件或AllFramesReady事件的方式獲取骨骼幀數據,即通過事件模型獲取數據。同時也可調用OpenNextFrame方法,通過輪詢模型獲取數據。
(2)SkeletonFrame對象。該對象通過SkeletonStream產生,使用時間模型從事件的參數中調用OpenSkeletonFrame。
(3)Skeleton對象。Skeleton對象所屬類定義了一系列字段描述骨骼信息,這些骨骼信息包括描述骨骼的位置以及骨骼中關節點可能的位置信息。
(4)Joint對象。Joint用來定義追蹤關節點數據,圖4描述了可追蹤的所有關節點,每個關節點都有JointTrackingState(關節點的跟蹤狀態及方式)、JointType(關節點類型)和Position(關節點位置)3個屬性。
2 系統分析與設計
2.1 系統分析
系統采用WPF相關技術,結合Kinect的骨骼綁定,重點是虛擬放風箏系統中玩家的姿勢識別。系統UI設計包含登錄頁面,場景頁面、風箏頁面和游戲頁面,這些頁面采用WPF動畫實現,系統功能如圖5所示。
圖5 系統功能結構
本設計關鍵在于姿勢識別和風箏動畫。
2.2 姿勢識別
玩家姿勢設計從3個關鍵動作模擬放飛風箏的真實體驗。圖6給出了系統用到的3種姿勢:①左手高舉過頭,風箏待飛,姿勢如圖6(a)所示;②右手高舉過肩,風箏起飛,振臂,風箏飛高、飛遠。振臂姿勢如圖6(b)中的箭頭所示;③雙手在身前交叉轉動,風箏飛低,收線,風箏落地,姿勢如圖6(c)所示。
(a) 左手舉過頭? ? ? ?(b)右手過肩、振臂? ? ?(c)雙手交叉
圖6 系統3種姿勢
2.3 風箏動畫
風箏放飛場景使用WPF動畫進行繪圖。通過動畫可以創建真實的動態用戶界面,實現風箏的待飛、起飛、飛高、飛遠和收線畫面。
2.3.1 WPF動畫
WPF動畫與傳統動畫相比實現方式更簡潔,可以與XAML無縫集成,運行起來比傳統動畫更流暢。這是因為傳統動畫在UI線程上需要修改UI控件的屬性(按鈕寬度),因此DispatcherTimer操作與其它操作一樣,需要放置到 Dispatcher 隊列中,但它并不能保證恰好在該時間間隔內。從某種意義上講,它不適合動畫這種間隔很短的計時。
動畫流暢性取決于每秒更新的幀數,也就是常說的幀率。人眼睛上限是70幀,而傳統動畫代碼是每秒20幀的幀率,所以精度不夠高、幀率受限制。而WPF動畫是根據計算機性能和當前進程的繁忙程度盡可能增大幀率,WPF的動畫遠大于20幀,因此要流暢很多。
2.3.2 路徑動畫
WPF包含了線性插值動畫、關鍵幀動畫和路徑動畫3種類型,這3種動畫都位于System.Windows.Media.Animation命名空間里,本系統使用最多的是路徑動畫。
(a) 風箏初始狀態? ? ? ? ? ? ? ? ? (b)風箏起飛路徑
圖7 蝴蝶風箏起飛路徑動畫頁面
路徑動畫表現方式是修改數值使其符合PathGeometry對象描述的形狀,并且讓元素沿著路徑移動。雖然可通過控制動畫旋轉和偏移實現對象的移動,但路徑動畫更專業,實現更加簡潔明了。WPF中有3種路徑動畫類,其中使用最多的是MatrixAnimationUsingPath路徑動畫,它用來控制對象的MatrixTransform。本系統起飛動畫如圖7所示。
3 測試
本系統對Kinect硬件有依賴性,故需對系統進行單元測試和集成測試。在單元測試中選取風箏動畫與骨骼追蹤測試,風箏動畫測試用例如表1所示。
表1 風箏動畫測試用例
表1中,3個輸入函數是StarAnimate、HighFarAnimate和FlyDownAnimate。3個函數的功能分別是起飛、飛高飛遠和收線。測試結果與期望結果完全吻合,功能實現正常。
利用Kinect骨骼綁定,對準確標定人體的20個關鍵點位置進行追蹤并進行姿勢識別,測試結果與預期一致。表2是集成測試用例。
表2 集成測試用例
集成測試選擇春天場景下的蝴蝶風箏,如圖8、圖9所示。通過左手高舉過頭手勢,風箏處于待飛狀態,見圖9(a);右手過肩,風箏起飛,見圖9(b),與圖7頁面相一致。
(a) 場景? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(b)風箏圖案
圖8 風箏場景
(a) 風箏待飛? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(b)風箏起飛
圖9 風箏待飛、起飛
振臂實現風箏高飛,如圖10(a)所示;雙手胸前交叉,收線,風箏落地如圖10(b)所示。
(a) 風箏高飛? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (b)收線
圖10 風箏高飛、收線
4 結語
本文將Kinect與WPF動畫技術相結合,讓用戶通過手臂動作在虛擬環境中放飛風箏,單元測試和集成測試表明設計達到預期效果。Kinect是一種更自然的人機交互方式,用戶在虛擬環境下放飛風箏,不受惡劣天氣影響,提高了Kinect體感交互產品的用戶體驗,可享受放風箏的樂趣。把Kinect作為輸入設備用于體感游戲開發具有一定的推廣價值。
參考文獻:
[1] 陸詩晴. 馬來西亞的風箏文化[J]. 世界文化,2017(2):61-63.
[2] 于澤升,崔文化,史添瑋. 基于Kinect手勢識別的應用與研究[J]. 計算機科學,2016,43(11):568-571.
[3] 劉小建,張元. 基于多特征提取和SVM分類的手勢識別[J]. 計算機工程和設計,2017,38(4):953-958.
[4] 田元,王學璠,王志鋒,等. 基于Kinect的實時手勢識別方法[J]. 計算機工程與設計,2018,39(6):1721-1726.
[5] 鄧瑾雯. Kinect人物和姿勢識別技術在智能家居系統中的應用研究[D]. 南寧:廣西大學,2018.
[6] 錢錕. 手語識別系統設計[D]. 呼和浩特:內蒙古大學,2018.
[7] 張冕,黃穎,梅海藝,等. 基于Kinect的配電作業機器人智能人機交互方法[J]. 山東大學學報,2018,48(5):103-108.
[8] 雷程,孫立寧,陳國棟. 基于Kinect的全向移動平臺視覺伺服控制研究[J]. 機械與電子,2018,36(8):61-65.
[9] 王洪源,劉佳寧,陳鵬艷,等. 基于Kinect的模擬訓練人員高浸潤定位與數據接口[J]. 科技創新導報,2018(16):136-137.
[10] 萬燕,陳林下. 基于Kinect的虛擬試衣相關技術的研究[J]. 智能計算機與應用,2018,8(4):63-68.
[11] 徐春鳳,王蒙蒙,翟宏宇,等. 基于Kinect深度信息的指尖檢測[J]. 長春理工大學學報:自然科學版,2017,40(6):115-118.
[12] 楊瓊楠,張苗苗,楊聰錕,等. 基于Kinect手勢識別的智能小車控制系統設計[J]. 國外電子測量技術,2018,37(9):85-89.
[13] 韓紫婷,崔志玲. 基于Kinect的三維數據修復和融合算法[J]. 電子世界,2018(9):19-21.
[14] 劉慧,潘成凱,沈躍,等. 基于SICK和Kinect的植株點云超限補償信息融合[J]. 農業機械學報,2018,49(10):284-291.
[15] 吳劍鋒,馬夢鑫,蔣濛婷,等. 基于Kinect的坐姿意圖判斷及其應用研究[J]. 計算機應用與軟件,2018,35(10)194-199.
[16] JOHN DARBY, MARIA B.SANCHEZ, PENELOPE B,et al. An evaluation of 3d head pose estimation using the microsoft kinect v2 [J].? Gait & Posture,2016(2):1841-1850.
[17] 劉晉鋼,熊風光,況立群. WPF編程基礎[M]. 北京:清華大學出版社,2018.
[18] 蒲興成. 基于改進Hu矩算法的Kinect手勢識別[J]. 計算機工程,2016,42(7):165-172.
[19] 范美常. 基于骨骼跟蹤的虛擬裝配技術[D]. 秦皇島:燕山大學,2016.
[20] 劉晉鋼,劉衛斌,劉晉霞.? Kinect與Unity3D數據整合技術在體感游戲中的應用研究[J]. 電腦開發與應用,2014,27(11):7-11.
(責任編輯:杜能鋼)