王 濤
(西安航空學(xué)院 教務(wù)處,西安 710077)
新一代Kinect2.0體感設(shè)備的測(cè)量范圍為0.5米至4.5米,可以同時(shí)追蹤6個(gè)人,采集到每一個(gè)人25 個(gè)關(guān)節(jié)點(diǎn),并存儲(chǔ)這些點(diǎn)3D位置和方向,幀的采樣頻率為30fps,其感應(yīng)器的彩色相機(jī)的增強(qiáng)特性包括1920×1080 高分辨率視頻和更寬廣的視野。本軟件是在該設(shè)備的基礎(chǔ)上結(jié)合微軟MFC基類來(lái)開發(fā),通過(guò)現(xiàn)場(chǎng)部署,使用效果非常完美[1]。
圖1 系統(tǒng)的布置結(jié)構(gòu)
運(yùn)用投影儀將園林場(chǎng)景和人物摳像投射到墻面,使用kinect2.0傳感器來(lái)采集人物的骨骼、彩色圖像和深度圖像的數(shù)據(jù),并傳送給C#程序,程序根據(jù)這些數(shù)據(jù)來(lái)判斷是否存在游戲中設(shè)置的人物動(dòng)作。當(dāng)人物動(dòng)作相符時(shí),將人物動(dòng)作和園林場(chǎng)景播放相關(guān)聯(lián),達(dá)到人和園林的體感交互,整個(gè)系統(tǒng)的布置結(jié)構(gòu)如圖1所示。
十九世紀(jì)近代園林體感互動(dòng)分鏡頭分為三個(gè)版塊:邱園、巴加特爾公園、紐約中央公園。游戲首先進(jìn)入主題界面,在界面上會(huì)對(duì)三種園林和體感動(dòng)作的操作展現(xiàn)說(shuō)明。
當(dāng)人們進(jìn)入邱園,會(huì)出現(xiàn)以下場(chǎng)景:樹葉搖動(dòng)與光影變化;觀眾可以撥開樹葉前行;觀眾可以給屏幕中的植物虛擬澆水。
當(dāng)人們進(jìn)入巴加特爾公園時(shí),出現(xiàn)的場(chǎng)景有:花朵顫動(dòng),蝴蝶飛舞,道路多分岔形似迷宮;觀眾可以選擇左中右三條不同的路線行走,觀看不同的公園風(fēng)貌。
當(dāng)人們進(jìn)入紐約中央公園時(shí),有如下場(chǎng)景:樹葉搖動(dòng),各種紐約中央公園的特色動(dòng)物,例如雪豹在樹林中跑跳;觀眾可以和公園里的小動(dòng)物進(jìn)行互動(dòng),如觀眾伸出手,雪豹就會(huì)慢慢走過(guò)來(lái),擺擺頭打招呼[2-3]。
本游戲主流程是其主線,啟動(dòng)游戲后,進(jìn)入十九世紀(jì)近代園林主界面,當(dāng)kinect檢測(cè)到無(wú)人存在時(shí)(無(wú)人的條件為1分鐘未檢測(cè)到人),程序會(huì)隨機(jī)切入三種園林其中一個(gè)進(jìn)行漫游;當(dāng)kinect檢測(cè)到有人存在時(shí)(如果有人停留8秒以上就代表有人存在,最多同時(shí)識(shí)別6個(gè)人),程序返回園林主題界面。若人物做動(dòng)作1(舉起左手),可以選擇任意主題園林;若人物做動(dòng)作2(舉起右手),可以進(jìn)入當(dāng)前選擇的主題園林;若人物做動(dòng)作3(抬起右手由胸前劃過(guò)頭頂,做撥開樹葉動(dòng)作),此時(shí)場(chǎng)景中的樹枝被撥開;若人物做動(dòng)作4(雙手抬起做拿水壺澆水動(dòng)作),出現(xiàn)水壺給植物澆水場(chǎng)景;若人物做動(dòng)作5(招左手或右手),小動(dòng)物會(huì)由遠(yuǎn)處跑到屏幕前并做各種親昵的動(dòng)作。整個(gè)游戲流程如圖2所示。
圖2游戲的流程圖
本游戲開發(fā)中關(guān)鍵技術(shù)有:kinect2.0對(duì)人物5種動(dòng)作的識(shí)別; WPF框架下對(duì)高清圖片幀的播放(特別是如何實(shí)現(xiàn)大量的,且每張都在3M以上圖片的流暢播放);如何實(shí)現(xiàn)前背景圖片的播放問(wèn)題。文中基于kinect2.0寫的動(dòng)作代碼程序可以單獨(dú)成為一個(gè)萬(wàn)能的模塊,只需要增加新的動(dòng)作識(shí)別函數(shù)和模擬鍵盤消息就可以體感控制windows上的所有應(yīng)用程序[4]。
本程序?yàn)榱送婕見蕵返捏w驗(yàn)度,在kinect 2.0識(shí)別方面,僅識(shí)別離kinect在空間位置上最近的一個(gè)。算法的邏輯為:kinect用一個(gè)字節(jié)表示當(dāng)前深度坐標(biāo)下該像素的人體編號(hào),可同時(shí)識(shí)別6個(gè)人,每個(gè)人會(huì)給一個(gè)索引,在本程序中用UserId來(lái)表示每個(gè)人的索引,程序?qū)崟r(shí)動(dòng)態(tài)檢測(cè)kinect識(shí)別所有人的骨骼數(shù)據(jù),以脊柱中心spine_mid離kinect的遠(yuǎn)近作為衡量距離,程序會(huì)在首次找到離kinect最近的一個(gè)人,將其一直標(biāo)記為唯一識(shí)別的人物,后續(xù)即使該人的坐標(biāo)不是離kinect最近,其也是唯一識(shí)別的人,直到該人物的骨骼和紅外數(shù)據(jù)在kinect檢測(cè)中消失8秒,此時(shí),kinect會(huì)重新由當(dāng)前識(shí)別的人中找到離其最近的一個(gè),然后進(jìn)行標(biāo)識(shí)。該功能的代碼為: if (ThespecifiedIDdisappear==false){ float temp=10;for (int i=0;i float dis=body.Joints[JointType.SpineShoulder].Position.Z; if (dis>0){string sss=dis.ToString(); } if (dis 程序中先定義了一個(gè)枚舉類型Gestures來(lái)表示所有的動(dòng)作。 public enum Gestures{RaiseRightHand,RaiseL-eftHand,StretchedLeftHand,StretchedRightHand,StretchedBothHand,WaveLeftHand,WaveRightHand,ZhaoshouRight,Error,} 。用dosomthing(Body s)函數(shù)來(lái)實(shí)時(shí)檢測(cè)人物所做的動(dòng)作,由于kinect對(duì)人物數(shù)據(jù)的檢測(cè)在每一個(gè)周期中實(shí)時(shí)進(jìn)行,具體為30fps,為控制采樣頻率,后臺(tái)開啟一個(gè)進(jìn)程private void openTmeWork(),用函數(shù)System.Threading.Thread.Sleep(10);//停毫秒調(diào)節(jié)動(dòng)作識(shí)別的頻率。由于動(dòng)作較多,此處以給花澆水動(dòng)作為例子,其代碼為 :if ((leftshoulder.Z-leftHand.Z)>0.25 &&(rightshoulder.Z-rightHand.Z)>0.35 && (rightHand.Y-leftHand.Y)>0.25f){mygest=Gestures.StretchedLeftHand; System.Windows.Forms.SendKeys.SendWait(“{DOWN}”); } ,以上代碼中的數(shù)據(jù)10,0.25和0.35等都是經(jīng)過(guò)多次測(cè)試得到的最佳值。 本游戲所提供的高清圖片可體驗(yàn)真實(shí)園林場(chǎng)景,其分辨率為3072×768,每張圖片大小為3.2M左右,并且圖片渲染時(shí)需要含有3D效果,每個(gè)園林漫游時(shí)間為3分鐘,每分鐘30幀,所有園林共15000多張圖片。數(shù)量多和尺寸大的圖片如何在電腦CPU和顯卡不是很高的情況下流暢運(yùn)行,本文采用一種優(yōu)化機(jī)制,即在內(nèi)存中僅放一張圖片,當(dāng)調(diào)用下一張圖片時(shí)清空當(dāng)前圖片,然后載入下一張圖片。為快速載入圖片,本程序建立一個(gè)bmList001鏈表來(lái)加載圖片的名稱,實(shí)現(xiàn)為:bmList001=new ObservableCollection BitmapImage bmImg=new BitmapImage(new Uri(bmList00[index001])); this.img1.Source=bmImg;this.img1.Width=3072;this.img1.Height=768;GC.Collect(); index001++;} isRendering=false;} } } 程序中為模仿園林中撥動(dòng)樹葉,小松鼠的移動(dòng),澆水等逼真的效果,專門定義了一個(gè)卡通類SpiritGame,用來(lái)實(shí)現(xiàn)卡通的顯示、消失、移動(dòng)、調(diào)用、坐標(biāo)位置,快慢播放的控制等[5],其功能函數(shù)有: SpiritGameX(), SpiritGameY(),SpiritWindowX(), SpiritWindowY(),void InitPlayer(), diaoyongplayer(),xiaoshiplayer(),dispatcherTimer_Tick(object sender,EventArgs e)//卡通幀的顯示等。 該游戲運(yùn)行的設(shè)備配置和參數(shù)如下:①計(jì)算機(jī):win10,64位處理器,i7 6700k以上,USB 3.0總線,8GB 內(nèi)存以上,DX11圖形適配器,320G硬盤;②投影機(jī):4500流明,標(biāo)準(zhǔn)分辨率:1920X1080dpi,投影畫面尺寸:80-300英寸,色彩:1670萬(wàn)色;③二代Kinect for Windows v2和 Kinect SDK 2.0;④其他:包括USB 3.0信號(hào)放大器、室外屏蔽線等。 表1 測(cè)試結(jié)果統(tǒng)計(jì) 對(duì)該游戲進(jìn)行24小時(shí)運(yùn)行測(cè)試,功能正常無(wú)宕機(jī)。 游戲由主題界面(見圖3)和三個(gè)園林組成,三個(gè)園林分別是“邱園” “巴加特爾公園” “紐約中央公園”,效果如圖4、圖5、圖6所示。 圖3十九世紀(jì)近代園林體感游戲主題界面 圖4 邱園 圖5 巴加特爾公園 圖6 紐約中央公園 現(xiàn)場(chǎng)如何部署“近代園林體感”游戲?具體分為四個(gè)步驟:①安裝VS2012環(huán)境,目的是方便調(diào)試;②安裝Kinect for Windows SDK v2.0,該安裝包可以到微軟官網(wǎng)下載,網(wǎng)址為http://www.microsoft.com/en-us/download/details.aspx?id=44561;③安裝SDK Browser v2.0,Visual Gesture builder-PREIEW,kinect for windows Documentation;④安裝時(shí)間延時(shí)應(yīng)用startup-delayer-v3.0b363.exe,放置該游戲“DiscreteGestureBasics-WPF.exe” 到硬盤任意位置,生成快捷方式,并將其添加到startup-delayer中設(shè)置延時(shí)為20秒。 目前,除了體感設(shè)備外,以虛擬現(xiàn)實(shí)Virtual Reality眼鏡(HTC Vive)為代表的Virtual Reality已經(jīng)興起,它和U3D結(jié)合開發(fā)虛擬現(xiàn)實(shí)的游戲,或者由VR眼鏡、U3D和kinect 三者相結(jié)合開發(fā)的虛擬現(xiàn)實(shí)游戲是未來(lái)幾年的重頭戲,由于目前技術(shù)和硬件成本方面的原因?qū)е麓祟愑螒蜻€不是很普及。對(duì)于迫切想開發(fā)和體驗(yàn)Virtual Reality的人們,可購(gòu)買比較便宜的暴風(fēng)魔鏡,在其基礎(chǔ)上進(jìn)行二次開發(fā)Virtual Reality游戲是一種簡(jiǎn)單、便利的探索。 [1] 王濤.人機(jī)交互多媒體教學(xué)系統(tǒng)淺析[J].西安航空學(xué)院學(xué)報(bào),2015,33(1):43-44. [2] 王濤,高賢強(qiáng).基于U3D和kinect1.0月光下舞蹈互動(dòng)游戲的設(shè)計(jì)與實(shí)現(xiàn)[J].西安航空學(xué)院學(xué)報(bào),2017,35(1):68-72. [3] 劉佳,鄭勇,張小瑞,等.基于Kinect的手勢(shì)跟蹤概述[J].計(jì)算機(jī)應(yīng)用研究,2015,32(7):1921-1925. [4] 王康.融合深度傳感數(shù)據(jù)體感交互建模與算法實(shí)現(xiàn)[D].濟(jì)南:山東大學(xué),2016. [5] 李建微,陳新,黃調(diào)祥,等.可擴(kuò)展的MMORPC游戲框架的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)技術(shù)與發(fā)展,2012,22(2):1-5.3.2 基于WPF的kinect2.0體感識(shí)別程序
3.3 WPF框架下處理高清圖片幀流暢播放技術(shù)
3.4 卡通幀移動(dòng)相關(guān)技術(shù)
4 搭建環(huán)境所需設(shè)備和游戲測(cè)試結(jié)果
4.1 游戲運(yùn)行的設(shè)備配置和技術(shù)參數(shù)
4.2 游戲測(cè)試的結(jié)果
4.3 游戲的相關(guān)截圖
4.4 項(xiàng)目現(xiàn)場(chǎng)實(shí)施
5 結(jié)語(yǔ)