国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Kinect的游戲控制系統(tǒng)研究與實(shí)現(xiàn)

2017-07-26 23:48:37賈騁王卓李妍李依明
新媒體研究 2017年9期
關(guān)鍵詞:控制系統(tǒng)游戲

賈騁+王卓+李妍+李依明

吉林動(dòng)畫學(xué)院,吉林長(zhǎng)春 132000

摘 要 隨著虛擬現(xiàn)實(shí)技術(shù)的快速發(fā)展,越來越多的游戲采用虛擬現(xiàn)實(shí)設(shè)備進(jìn)行游戲的控制。而目前虛擬現(xiàn)實(shí)游戲的控制更多采用基于手柄識(shí)別的體感方法,Kinect則很好地解決了這樣的問題,其獨(dú)特的識(shí)別技術(shù)可以直接識(shí)別人體動(dòng)作,擺脫了游戲人員需要手持設(shè)備的缺點(diǎn)。文章通過對(duì)Kinect進(jìn)行研究,最終完成游戲控制系統(tǒng)研究與實(shí)現(xiàn)。

關(guān)鍵詞 Kinect;游戲;控制系統(tǒng)

中圖分類號(hào) G2 文獻(xiàn)標(biāo)識(shí)碼 A 文章編號(hào) 2096-0360(2017)09-0042-03

體感技術(shù),即通過計(jì)算機(jī)軟件及硬件技術(shù),采用特殊設(shè)備識(shí)別或感應(yīng)人體動(dòng)作的技術(shù)。此項(xiàng)技術(shù)的發(fā)明除了使人類與計(jì)算機(jī)的互動(dòng)擺脫了傳統(tǒng)手持硬件設(shè)備的束縛,更加增強(qiáng)了身臨其境的體驗(yàn)。目前大多的體感技術(shù)都采用手持識(shí)別設(shè)備,由體感識(shí)別攝像機(jī)識(shí)別設(shè)備的距離和移動(dòng)。而Kinect則完全擺脫了手持設(shè)備的使用,完全基于體感攝像頭來識(shí)別人體動(dòng)作。尤其隨著虛擬現(xiàn)實(shí)技術(shù)的發(fā)展,越來越多的虛擬現(xiàn)實(shí)頭盔設(shè)備出現(xiàn),虛擬現(xiàn)實(shí)游戲逐漸開始走入人們的生活。目前虛擬現(xiàn)實(shí)設(shè)備主要有HTC Vive、Oculus Rift、Gear等,雖然設(shè)備技術(shù)先進(jìn),但仍然未能擺脫手持設(shè)備的使用,這造成了虛擬現(xiàn)實(shí)的體驗(yàn)感不強(qiáng)、感受不深刻等問題。尤其在游戲體驗(yàn)中更加會(huì)出現(xiàn)操作復(fù)雜、控制不便等問題。因此,采用Kinect開發(fā)一款游戲控制系統(tǒng)具有相當(dāng)重要的價(jià)值。

1 動(dòng)作識(shí)別

1.1 Kinect骨骼識(shí)別原理

Kinect體感攝像頭是由微軟公司對(duì)出的一款體感識(shí)別器,其采用光編碼技術(shù)進(jìn)行連續(xù)的照明,也即是結(jié)構(gòu)光技術(shù)的一種。但區(qū)別于一般的結(jié)構(gòu)光方式,Kinect光源發(fā)射的并非是一組周期變化的平面編碼,而是具有一定縱深的三維格式編碼。當(dāng)這種光源照射到物體表面后會(huì)形成激光色斑。當(dāng)光源發(fā)射到空間中進(jìn)而照射到不同的物體時(shí),就會(huì)形成不同的色斑圖案,通過判斷色斑圖案即可以判斷物體的位置。而識(shí)別人體動(dòng)作也采用此種技術(shù),基于事先完成的存儲(chǔ)的人體數(shù)據(jù),通過判斷光源照射到人體形成的色斑進(jìn)行特征提取和比對(duì),根據(jù)色斑的運(yùn)動(dòng)識(shí)別人體關(guān)節(jié)并最終生成骨骼和結(jié)點(diǎn)數(shù)據(jù),如圖1。

通過Kinect識(shí)別人體將人體進(jìn)行特征提取的骨骼系統(tǒng)和關(guān)節(jié)結(jié)點(diǎn)數(shù)據(jù)包括頭部、左右肩、左右手等20個(gè)結(jié)點(diǎn),這些結(jié)點(diǎn)能有效跟隨人體的移動(dòng)而在三維空間中移動(dòng),因此在判斷一個(gè)人體動(dòng)作時(shí),可以通關(guān)判斷各個(gè)關(guān)節(jié)結(jié)點(diǎn)的相對(duì)位置、速度等變量,與編輯好的動(dòng)作集進(jìn)行數(shù)據(jù)比對(duì),就可以進(jìn)行動(dòng)作的識(shí)別。

1.2 動(dòng)作識(shí)別方法

人體做出的所有動(dòng)作都是通過各個(gè)關(guān)節(jié)組合完成,因此識(shí)別動(dòng)作可以直接識(shí)別關(guān)節(jié)數(shù)據(jù)及其他相關(guān)信息即可,因此可以將人體的多有動(dòng)作進(jìn)行特征提取。通過將人體動(dòng)作簡(jiǎn)化,直接提取動(dòng)作的關(guān)鍵特征進(jìn)行判斷,再進(jìn)行與結(jié)點(diǎn)數(shù)據(jù)的結(jié)合最終形成動(dòng)作的識(shí)別方法。例如,通過特征提取方法可以發(fā)現(xiàn),完成左手舉手動(dòng)作時(shí),左手結(jié)點(diǎn)平行或高于左肘結(jié)點(diǎn),且高于左肩結(jié)點(diǎn)。此時(shí),當(dāng)一個(gè)動(dòng)作滿足上述條件時(shí)就可以認(rèn)定為完成了左手舉手的靜態(tài)動(dòng)作。同理,當(dāng)識(shí)別左腳抬起時(shí),可以進(jìn)行特征提取,當(dāng)左腳結(jié)點(diǎn)位置高于右腳結(jié)點(diǎn)位置,且左膝結(jié)點(diǎn)位置高于右膝結(jié)點(diǎn)位置,即可認(rèn)定為左腳抬起動(dòng)作完成。因此,將所有結(jié)點(diǎn)通過三維空間坐標(biāo)記性標(biāo)記,獲取position.x,position.y,position.z位置參數(shù),并通過結(jié)點(diǎn)特征以三維參數(shù)為基礎(chǔ)作為判斷結(jié)果。以左手抬起為例,當(dāng)LH.position.y>=LE.position.y&&LH.position.y>LS.LH.position.y時(shí),即認(rèn)定為左手抬起動(dòng)作完成。當(dāng)LF.position.y>RF.position.y&&LK.position.y>RK.position.y時(shí),即認(rèn)定為左腳抬起動(dòng)作完成。

基于Kinect的動(dòng)作識(shí)別除了可以識(shí)別靜態(tài)動(dòng)作以外,還可以進(jìn)行動(dòng)態(tài)動(dòng)作的識(shí)別。結(jié)合靜態(tài)動(dòng)作識(shí)別的基礎(chǔ),即可完成動(dòng)作識(shí)別動(dòng)作的特征提取。通過特征提取可以發(fā)現(xiàn),動(dòng)態(tài)動(dòng)作可歸納為多個(gè)關(guān)節(jié)結(jié)點(diǎn)的動(dòng)作組合,以右手揮手為例,當(dāng)右手從后向前揮手時(shí),可視為右手結(jié)點(diǎn)位置高于右肩及右肘位置,且右手位置有從后向前的變化,采用特征提取可以認(rèn)為,當(dāng)RH.position.y>RE.position.y>RH.position.y時(shí),右手舉起,且隨著時(shí)間推移RH.position.z1(揮手前右手坐標(biāo)深度)>RH.position.z2(揮手后右手坐標(biāo)深度),此時(shí)可以認(rèn)定為右手揮手的動(dòng)態(tài)動(dòng)作完成。由此為基礎(chǔ)可以進(jìn)行基于Kinect的動(dòng)態(tài)動(dòng)作識(shí)別。

2 游戲控制系統(tǒng)實(shí)現(xiàn)

根據(jù)動(dòng)作識(shí)別方法,本文采用Unity結(jié)合Kinect進(jìn)行游戲控制系統(tǒng)的研究與實(shí)現(xiàn)。Unity是一款集二維游戲、三維游戲、虛擬現(xiàn)實(shí)開發(fā)功能為一體的專業(yè)游戲引擎,是目前游戲行業(yè)內(nèi)非常流行的一款軟件。由于其對(duì)于物理系統(tǒng)、UI系統(tǒng)、地形系統(tǒng)等優(yōu)秀的封裝,以及對(duì)包括PC端、PlayStation、IOS、等多平臺(tái)支持,以及對(duì)目前虛擬現(xiàn)實(shí)插件的兼容性而廣受專業(yè)開發(fā)者好評(píng)。采用Unity結(jié)合Kinect開發(fā)的游戲控制系統(tǒng)可以有效的支持多平臺(tái)研發(fā)。

為了游戲控制系統(tǒng)實(shí)現(xiàn),首先進(jìn)行Unity與Kinect連接環(huán)境配置。需要安裝Kinect SDK以使Unity能正確識(shí)別Kinect,然后導(dǎo)入kinectWrapper.unitypackage并在Unity中打開,此時(shí)可以開始進(jìn)行游戲控制系統(tǒng)實(shí)現(xiàn)。打開工程文件可以發(fā)現(xiàn)其中存在多個(gè)腳本,DisplayDepth可以識(shí)別深度圖像,SkeletonWrapper可以獲取骨骼結(jié)點(diǎn)的數(shù)據(jù)等,Kinect KinectModelControllerV2腳本需要將其拖放到你需要應(yīng)用kinect控制的模型上。為了使模型可以與操作人員的動(dòng)作同步,要將模型上與模型動(dòng)作相關(guān)聯(lián)的關(guān)鍵骨骼拖放到這個(gè)腳本現(xiàn)實(shí)出來的的相匹配的變量中,即模型中的骨骼與Kincet識(shí)別到的人的骨骼結(jié)點(diǎn)進(jìn)行綁定。這個(gè)腳本現(xiàn)實(shí)的變量中,有變量用來標(biāo)識(shí)模型是受哪個(gè)人物控制,因此可以將需要控制的模型拖入此變量?jī)?nèi)使用。之后可以發(fā)現(xiàn)在Unity中已經(jīng)可以看到對(duì)于連接Kinect后可識(shí)別的多個(gè)骨骼結(jié)點(diǎn),如圖2。

最后,對(duì)于關(guān)鍵游戲控制系統(tǒng)的實(shí)現(xiàn)使用KinectPointController腳本進(jìn)行編寫。

打開KinectPointController腳本,可以發(fā)現(xiàn)在腳本中存在20個(gè)骨骼結(jié)點(diǎn)的GameObject,如圖3。采用動(dòng)作識(shí)別方法進(jìn)行代碼編寫,以右手揮動(dòng)為例聲明動(dòng)作識(shí)別方法public void RightHandWave();在方法中識(shí)別肘結(jié)點(diǎn)和肩部結(jié)點(diǎn)的相對(duì)位置,if(Elbow_Right.transform.position.y>Shoulder_Right.transform.position.y)則認(rèn)為有肘結(jié)點(diǎn)位置高于右肩結(jié)點(diǎn)位置,此時(shí)認(rèn)為舉手動(dòng)作完成。然后識(shí)別揮手動(dòng)作,判定右手位置隨時(shí)間改變的Z軸坐標(biāo)。首先記錄原始坐標(biāo)former,和隨時(shí)間改變的動(dòng)態(tài)右手坐標(biāo)now,并進(jìn)行變量賦值former = now,now = Hand_Right.transform.position.z。根據(jù)特征提取方法,右手揮手可以視為右手結(jié)點(diǎn)z坐標(biāo)深度隨時(shí)間改變而變大,因此if (former < now)可以認(rèn)為揮動(dòng)動(dòng)作完成。為了防止人員在操作時(shí)出現(xiàn)抖動(dòng)導(dǎo)致識(shí)別失敗,需要編寫防抖動(dòng)代碼,即if(former - now<0.05)認(rèn)為人員只是無意識(shí)抖動(dòng)手臂而執(zhí)行非揮手動(dòng)作。在人員執(zhí)行揮手動(dòng)作時(shí),需要識(shí)別揮手動(dòng)作的快慢,因此添加時(shí)間變量來進(jìn)行識(shí)別,分別記錄揮手動(dòng)作的起始時(shí)間TS和TE終止時(shí)間,并記錄起始位置PS和PE并計(jì)算相對(duì)位移D,即可采用公式F=D/(TE-TS)進(jìn)行力量大小F的識(shí)別。完成識(shí)別后,進(jìn)行數(shù)據(jù)反饋return F即可將數(shù)據(jù)返回到方法中進(jìn)行游戲的控制。以此為基礎(chǔ),編寫游戲控制代碼方法RightHandWave、LeftHandWave、RightFootUp、LeftFootUp等動(dòng)作識(shí)別方法。

在Unity中創(chuàng)建場(chǎng)景,并將制作好的任務(wù)模型放入場(chǎng)景中創(chuàng)建游戲人物。創(chuàng)建Animator Controller,在其中使用動(dòng)畫片段制作任務(wù)動(dòng)作樹,并放置入游戲人物中,編寫代碼繼承RightHandWave、LeftHandWave、RightFootUp、LeftFootUp方法,編寫代碼使人物進(jìn)行投籃動(dòng)作if(F>0){ this.transform.GetComponent().wave=true},即可看到人物執(zhí)行投籃動(dòng)作,可以知道游戲控制系統(tǒng)制作正確。以此為基礎(chǔ)可以進(jìn)行各種游戲控系統(tǒng)的設(shè)計(jì)及研究。

3 結(jié)論

本文通過基于Kinect的動(dòng)作識(shí)別方法,集成Unity的關(guān)鍵技術(shù),采用特征提取手段,最終完成游戲控制系統(tǒng)的研究與實(shí)現(xiàn)。該系統(tǒng)可以有效識(shí)別人物的基礎(chǔ)動(dòng)作,包括舉手、揮手、抬腳、踢腿等動(dòng)作,以此作為基礎(chǔ)控制Unity中的游戲人物進(jìn)行各種操作。此游戲控制系統(tǒng)將所有可識(shí)別的動(dòng)作編寫成方法并進(jìn)行封裝,具有一定的重用性和靈活性,可以為其他開發(fā)人員提供一定的參考和幫助,并減少了重復(fù)開發(fā)的工作開銷,具有一定的實(shí)踐價(jià)值。同時(shí),本系統(tǒng)也并不完善,對(duì)于更加細(xì)致的動(dòng)作和組合動(dòng)作不能較好的識(shí)別,今后也將繼續(xù)研究,強(qiáng)化動(dòng)作識(shí)別和游戲系統(tǒng)的結(jié)合,完成更加精細(xì)的游戲控制系統(tǒng)。

猜你喜歡
控制系統(tǒng)游戲
游戲
數(shù)獨(dú)游戲
基于PLC的自動(dòng)切蛋糕機(jī)的控制方案
考試周刊(2016年88期)2016-11-24 15:25:36
Ka頻段衛(wèi)星通信自適應(yīng)抗雨衰控制系統(tǒng)設(shè)計(jì)
瘋狂的游戲
飛碟探索(2016年11期)2016-11-14 19:34:47
基于單片機(jī)的LED路燈控制系統(tǒng)設(shè)計(jì)
基于PLC的鋼廠熱連軋感應(yīng)加熱爐控制系統(tǒng)實(shí)現(xiàn)
礦井提升機(jī)控制系統(tǒng)發(fā)展的研究
爆笑游戲
風(fēng)力發(fā)電機(jī)組電氣與控制系統(tǒng)快速檢修思路探索
科技視界(2015年25期)2015-09-01 17:45:39
工布江达县| 梅州市| 黄大仙区| 安义县| 社旗县| 廉江市| 吉安市| 怀远县| 溧阳市| 长武县| 九江县| 怀来县| 台东市| 揭阳市| 辉南县| 平南县| 明水县| 兴国县| 武宣县| 长白| 大宁县| 大足县| 任丘市| 铁力市| 富裕县| 梅河口市| 拜城县| 双江| 紫云| 杭锦后旗| 石泉县| 大关县| 永修县| 甘德县| 岳阳县| 依安县| 揭西县| 阿坝县| 遵化市| 中西区| 山东|