摘 要:文章介紹了Kinect結(jié)合Unity的交互方法,以及利用手勢移動場景、控制人物動作以及控制模型的開發(fā)實(shí)例,為Kinect與Unity的程序開發(fā)提供一個參考。
中國論文網(wǎng) http://www.xzbu.com/8/view-6157728.htm
關(guān)鍵詞:Kinect;Unity;手勢識別
中圖分類號:TP391.41
Kinect是一種功能強(qiáng)大的3D體感攝像機(jī),是微軟公司于2009年公布的XBOX360的體感周邊外設(shè),它導(dǎo)入了即時動態(tài)捕捉、影像辨識、麥克風(fēng)輸入、語音辨識、社群互動等功能,給人耳目一新的感覺。玩家可以通過手勢或語言指令來操作Xbox 360的系統(tǒng)界面,也能通過全身上下的動作,用身體來玩游戲,而不是傳統(tǒng)的手持或腳踏控制器。它的出現(xiàn),開創(chuàng)了互動娛樂的新紀(jì)元,帶給玩家“免控制器的游戲與娛樂體驗(yàn)”。
圖1 Kinect實(shí)物圖
Kinect一共有三個鏡頭:RGB彩色攝影機(jī),紅外線發(fā)射器和紅外線 CMOS 攝影機(jī)所構(gòu)成的3D結(jié)構(gòu)光深度感應(yīng)器,同時還具備有追焦功能。Kinect還內(nèi)建了陣列式麥克風(fēng),可以在嘈雜的環(huán)境下,由多組麥克風(fēng)同時收音,通過比對消除雜音。它可以同時獲取彩色影像、3D深度影像、以及聲音訊號。
目前,Kinect已不僅局限于游戲控制當(dāng)中,而在機(jī)器人視覺與控制,醫(yī)療領(lǐng)域,計算機(jī)應(yīng)用,電子商務(wù)領(lǐng)域及教育領(lǐng)域都有其應(yīng)用。例如,Kinect試衣鏡,運(yùn)動捕捉,3D建模,機(jī)械控制,虛擬樂器,外科手術(shù)應(yīng)用等。同時,Kinect應(yīng)用技術(shù)的開發(fā)還只是初步的發(fā)展,但它已表現(xiàn)出廣闊的發(fā)展空間和強(qiáng)大的生命力。
1 Kinect相關(guān)應(yīng)用
Kinect主要是以識別功能為主,它既可以識別人體骨架,又同時具備語音識別功能。正是由于其具有成本低、重量輕、精度高以及功能強(qiáng)等優(yōu)點(diǎn),當(dāng)今社會人們更多的將其與虛擬現(xiàn)實(shí)技術(shù)或是增強(qiáng)現(xiàn)實(shí)技術(shù)結(jié)合在一起,從而使其可以在軍事、醫(yī)療、娛樂以及教育等各個領(lǐng)域中充分的發(fā)揮作用。
Kinect在娛樂領(lǐng)域的應(yīng)用最為廣泛,微軟在Xbox上推出的Kinect Sports,Kinect Adventures,Kinect Joy Ride等,以及結(jié)合Kinect的水果忍者,超級瑪麗等。Kinect不僅增加了游戲者在游戲過程中的帶入感,同時也可以鍛煉身體。
魏尚基于kinect深度攝像頭對三維人臉識別技術(shù)進(jìn)行了研究。他認(rèn)為二維圖像人臉識別技術(shù)由于受到各種條件的限制,無法滿足當(dāng)前人們的需求。因此三維人臉識別技術(shù)具有非常大的發(fā)展空間。通過使用價格低廉的kinect并使用和主成分分析方法可以起到降低成本且提高質(zhì)量的效果。
Kinect的識別技術(shù)也可以被應(yīng)用于機(jī)器人身上。用kinect作為機(jī)器人的頭部,從而降低機(jī)器人的制作成本同時提高其識別精度。甚至在不久的將來,該項(xiàng)技術(shù)也可以被廣泛應(yīng)用于無人駕駛領(lǐng)域。
況鷹研究了三維虛擬試衣,實(shí)現(xiàn)了讓消費(fèi)者不需試衣就能見到真實(shí)的試衣效果,消費(fèi)者甚至可以通過手勢選擇不同的衣服試穿。該項(xiàng)虛擬技術(shù)也可以被應(yīng)用于視頻會議。
Kinect在醫(yī)學(xué)方面實(shí)現(xiàn)了代替醫(yī)生做尸檢的工作,例如瑞士Bern大學(xué)的Virtopsy項(xiàng)目。該項(xiàng)目通過開發(fā)ofxKinect系統(tǒng),制作體感軟件。從而使尸檢工作更加衛(wèi)生、省時。而華盛頓大學(xué)的學(xué)生們通過對Kinect的改造,實(shí)現(xiàn)了醫(yī)生遠(yuǎn)程遙控手術(shù)技術(shù)。但是為了精確治療,避免醫(yī)療事故的發(fā)生,該項(xiàng)技術(shù)仍在改進(jìn)。而目前為止應(yīng)用較為廣泛的則是通過Kinect體感控制查看患者的影像資料,這樣可以降低手術(shù)室的人員流動,提高工作的準(zhǔn)確性和效率。
王康將Kinect與電子白板結(jié)合使用,研究出了體感交互式電子白板,極大的提高了教學(xué)質(zhì)量和效率。錢鶴慶將Kinect與教學(xué)輔助工具相結(jié)合,通過真實(shí)的演示如化學(xué)分子結(jié)構(gòu)等,提高學(xué)生的學(xué)習(xí)興趣。而目前已經(jīng)投入使用的Kinect技術(shù)則是將其與投影儀相結(jié)合,實(shí)現(xiàn)用手勢或語音控制投影內(nèi)容。
目前,Kinect技術(shù)本身仍有待改進(jìn),而基于其的應(yīng)用更只是冰山一角。盡管如此,Kinect也已經(jīng)向我們展示出了其廣泛的應(yīng)用范圍。隨著人們需求的不斷改變以及Kinect技術(shù)的不斷完善,Kinect在各個領(lǐng)域的應(yīng)用都會向前邁出一大步,并且在人機(jī)交互領(lǐng)域?qū)玫礁鼮閺V泛的應(yīng)用。
2 Kinect在Unity平臺上的開發(fā)實(shí)例
2.1 Unity
Unity是一個多平臺綜合型的游戲開發(fā)工具,可用于創(chuàng)建三維視頻游戲、建筑可視化、實(shí)時三維動畫等,是一個全面整合的專業(yè)游戲引擎。編輯器可以運(yùn)行在Windows或Mac OS X環(huán)境下,并且可以將游戲發(fā)布至Windows、Mac、Wii、iPhone、Windows Phone 8和Android等平臺,也可以通過Unity Web Player插件來發(fā)布網(wǎng)頁游戲。
Unity的腳本可由C#或JavaScript語言編寫。
目前,Kinect結(jié)合Unity的相關(guān)技術(shù)已經(jīng)取得了一些初步成果,例如卡耐基梅隆的KinectWrapper,以及OpenNI提供的OpenNIUinityToolkit等一些Kinect與Unity交互的中間件,以及發(fā)布在AssetStore上的應(yīng)用Kinected,Kinect Hand Game Starter Kit等。
2.2 Kinect結(jié)合Unity角色控制器
Unity中的Character Controller角色控制器包括第一人稱控制器(First Person Controller)和第三人稱控制器(3rd Person Controller)。角色控制器主要用于第三人稱或第一人稱的游戲主角控制,Kinect結(jié)合Unity角色控制器的目的是讓用戶能通過簡單的手勢及動作來控制人物角色,代替鍵盤,鼠標(biāo)等設(shè)備。
在Unity的角色控制器中,與用戶的交互主要使用GetAxisRaw方法,它獲取水平軸和垂直軸以控制角色前進(jìn),后退以及左轉(zhuǎn)和右轉(zhuǎn)的動作,對于鍵盤和控制器它的取值范圍在-1到1之間。當(dāng)輸入不平滑,鍵盤輸入必是-1,0或1。通過獲取空格按鈕,跳使用GetButton方法。本實(shí)例的主要思想是根據(jù)Kinect獲取到的骨骼數(shù)據(jù)以及手勢和動作的設(shè)計,編寫腳本代替這兩個方法實(shí)現(xiàn)對人物的控制和場景轉(zhuǎn)換。使用的素材有Andrew DeVine的KinectSDK / Unity3D Interface中間件,Geartech Games的Demo Industrial Arena環(huán)境場景,以及Unity的Character Controller角色控制器。以第三人稱控制器為例,步驟如下: 首先,打開Demo Industrial Arena的場景Scene,導(dǎo)入Character Controller,在Scene中加入人物(3rd Person Controller的Prefab預(yù)制件),并對人物添加ThirdPersonCamera(攝像頭)和ThirdPersonController(角色控制)這兩個腳本,并在Inspector中設(shè)置相應(yīng)的動作及數(shù)值。
對人物添加KUInterface腳本,并在腳本中定義flaot型變量v(Vertical)和h(Horizontal),及bool型變量j(Jump),分別代表前進(jìn)后退以及左轉(zhuǎn)右轉(zhuǎn)和跳躍。
public float h=0.0f;
public float v=0.0f;
public bool j=false;
定義需要的骨骼以及參數(shù)。
private bool LastFrameHandRightUp=false;
private Vector3 HandRight=new Vector3(0,0,0);
private Vector3 ShoulderRight=new Vector3(0,0,0);
private Vector3 Head=new Vector3(0,0,0);
在Unity中,每一幀都會執(zhí)行一次Update函數(shù)中的內(nèi)容,當(dāng)Update函數(shù)第一次被執(zhí)行前會執(zhí)行Start函數(shù)。因此,在Actions函數(shù)中編寫相應(yīng)的動作,并且在Upate中調(diào)用Actions中的內(nèi)容。
在Actions中,對h,v,j數(shù)值初始化,即分別將h,v賦值為0,j為false。
v=0.0f;
h=0.0f;
j=false;
通過GetJointPos方法來獲取Head,HandRight及ShoulderRight這三個骨骼位置。
HandRight=GetJointPos(KinectWrapper.Joints.HAND_RIGHT);
ShoulderRight=GetJointPos(KinectWrapper.Joints.SHOULDER_RIGHT);
Head=GetJointPos(KinectWrapper.Joints.HEAD);
定義了4個動作,分別是前進(jìn),左轉(zhuǎn),右轉(zhuǎn),跳躍,需要用到頭部,右手,右肩這三個骨骼數(shù)據(jù)。將右手伸出并與肩部保持相應(yīng)的高度,人物前進(jìn),同時賦值v為1;在前進(jìn)狀態(tài)下,若將右手向左揮動,人物向左轉(zhuǎn),同時賦值h為-1;若將右手向右揮動,則人物向右轉(zhuǎn),同時賦值h為1;若右手向上揮動,人物跳躍,賦值j為true。
if(HandRight.y-ShoulderRight.y>-10){
v=1.0f;
if(HandRight.x-ShoulderRight.x > 200)
h=1.0f;
if(HandRight.x-ShoulderRight.x < -200)
h=-1.0f;
if(HandRight.y-Head.y > 150){
if (!LastFrameHandRightUp)
j=true;
LastFrameHandRightUp = true;}}
最后,在ThirdPersonController腳本中,通過GetComponent方法訪問KUInterface中變量h,v及j。將腳本中GetAxisRaw,GetButton方法進(jìn)行替換。
程序開發(fā)完成后經(jīng)過測試,效果令人滿意,通過右手的各種手勢分別控制了人物的4個動作,操作起來自然協(xié)調(diào),無生疏感,表現(xiàn)出Kinect的實(shí)用性。
圖2 Kinect結(jié)合Unity角色控制器
2.3 Kinect Wrapper的人物模型控制
Kinect Wrapper的人物模型控制基于卡耐基梅隆的Kinect Wrapper中間件,使用了Mixamo的Male Character Pack人物模型包。
卡耐基梅隆的KinectWrapper是一個非常實(shí)用的Kinect與Unity交互中間件,它包含以下一些腳本和示例:
KinectExample這是一個示例場景。
Kinect_Prefab這個預(yù)制件包含了所有必需的腳本,但不包括控制器。
KinectModelControllerV2這個腳本將操縱模型中的骨骼,實(shí)現(xiàn)人物模型控制。
DisplayDepth獲取深度圖像。
DisplayColor 獲取RGB圖像。
以及KinectPointMan,KinectPointController,KinectRecorder,KinectEmulator,KinectSensor,DeviceOrEmulator,SkeletonWrapper,DepthWrapper和KinectInterop等腳本。
本實(shí)例的目的是對模型骨骼和Kinect獲取的骨骼數(shù)據(jù)進(jìn)行對應(yīng),使模型能模仿用戶的動作,實(shí)現(xiàn)人物模型控制。其步驟如下:
在場景中加入Kinect_Prefab和人物模型,對模型添加模型控制腳本,即KinectModelControllerV2,在Inspector中將Kinect獲取到的骨骼與模型的骨骼數(shù)據(jù)對應(yīng),其中的Sw(Skeleton Wrapper)選擇Kinect_Prefab。
在程序測試中,人物模型能夠非常相似的模仿出用戶的動作,具有很強(qiáng)的娛樂性。
圖3 Kinect Wrapper的人物模型控制
3 結(jié)束語
本文介紹了Kinect與Unity結(jié)合的開發(fā)實(shí)例,利用Kinect通過手勢和動作進(jìn)行人機(jī)交互以及游戲的開發(fā),為Kinect和Unity的開發(fā)者提供一個參考。同時也說明Kinect具有很大的發(fā)展前景以及在各個領(lǐng)域都能廣泛應(yīng)用。
參考文獻(xiàn):
[1]魏尚.基于Kinect深度圖像的三維人臉識別技術(shù)研究[D].天津師范大學(xué),2012.
[2]況鷹.基于Kinect運(yùn)動捕獲的三維虛擬試衣[D].華南理工大學(xué),2012.
[3]王康.基于Kinect的體感交互式電子白板初探[J].中國現(xiàn)代教育裝備,2012(06):29-30.
[4]錢鶴慶.應(yīng)用Kinect與手勢識別的增強(qiáng)現(xiàn)實(shí)教育輔助系統(tǒng)[D].上海交通大學(xué),2011.
作者簡介:姚翠莉(1984-),女,河南西華人,工程師,博士研究生,研究方向:圖像處理與模式識別;袁?(1993-),男,廣西靈川人,本科,研究方向:圖像處理與模式識別;彭飛翔(1993-),男,安徽界首人,本科,研究方向:圖像處理與模式識別;羅會哲(1993-),男,廣東深圳人,本科,研究方向:圖像處理與模式識別;鄧亞仙(1992-),女,遼寧沈陽人,本科,研究方向:圖像處理與模式識別;蔡群(1993-),女,朝鮮族,吉林長春人,本科,研究方向:圖像處理與模式識別。
作者單位:大連理工大學(xué)創(chuàng)新實(shí)驗(yàn)學(xué)院,遼寧大連 116023
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點(diǎn)擊舉報。