徐濤 黃賢立 嚴霞 林瓅
摘 要:隨著計算機的飛速發(fā)展,自然的圖形用戶界面應(yīng)運而生,結(jié)合微軟推出的體感設(shè)備Kinect,以及游戲引擎Unity3D,可以快速搭建實驗環(huán)境。通過腳本定義投籃手勢識別算法,完成投籃手勢的識別,并利用算法算出籃球拋出時的初速度,交給Unity3D的物理引擎計算出籃球的運動軌跡,從而完成整個虛擬的投籃過程。
關(guān)鍵詞:Kinect;體感;手勢識別;Unity3D;投籃系統(tǒng)
DOI:10.16640/j.cnki.37-1222/t.2016.08.266
0 引言
根據(jù)馮·諾依曼(John von Neumann,1903~1957)的計算機體系結(jié)構(gòu),計算機分為五大部分——運算器、控制器、存儲器、輸入設(shè)備、輸出設(shè)備。現(xiàn)在大多數(shù)計算機仍是馮·諾依曼計算機的組織結(jié)構(gòu),只是做了一些改進而已,并沒有從根本上突破馮·諾依曼體系結(jié)構(gòu)的束縛。對于計算機的研究和使用人員來說,計算機的發(fā)展最終需要解決的問題就是輸入和輸出的問題。如何對計算機進行高效準確的輸入,以及如何讓計算機通過算法,進行準確的計算,輸出人們想要的結(jié)果,一直是計算機研究的一個重要課題。
隨著計算機的發(fā)展,自然的用戶界面(NUI) 隨之出現(xiàn)。相對于傳統(tǒng)的用戶輸入方式——鼠標鍵盤,自然的用戶界面顯得更加人性化。比如語音輸入,手勢識別等。顯然,自然的用戶界面更加符合人們的行為習(xí)慣。自然的用戶界面更加健康,它可以讓對計算機的輸入變成與一個人的交流,讓用戶可以有更加身臨其境的感覺。
1 現(xiàn)實生活中體感手勢的運用
人們在日常的交際中,經(jīng)常會用到一些手勢,來使得對問題的表述更加具有表現(xiàn)力。這些手勢不僅僅只是手指的動作,也不能理解為手部的動作。手勢是一個廣泛的概念,它包含了有含義、有意義的肢體動作。這也就是說,一個踢腿的動作,也可以被定義為手勢。敲擊鍵盤不是一個手勢,因為手指快速的按下某一個按鍵既不容易被觀察到,也不能直觀地表達其含義。
然而,手勢不只是用在交際表達中,人們在日常的生活中,也無處不用到手勢。例如,在擰開飲料瓶蓋的時候,需要用手握緊瓶蓋,另一只抓緊瓶身,通過手腕、手臂的共同協(xié)作,完成擰下瓶蓋的動作。擰下瓶蓋的動作,就是一個手勢。我們可以忽略在完成這些動作過程中所使用到、接觸到的實際存在的物體,而把注意力轉(zhuǎn)移到肢體本身。假設(shè)物體并不存在的,讓你筆畫著空氣來完成一個擰瓶蓋的動作,讓另外一個人去猜你現(xiàn)在正在做的動作,是否他一眼就能看出你正在演示擰瓶蓋的動作呢?
2 基于Kinect體感設(shè)備的籃球系統(tǒng)
2.1 手勢的識別
如果“猜”出你所做手勢的是一臺計算機,那么就涉及到計算機的手勢識別技術(shù)。讓計算機去完成一個手勢的識別、判斷是非常困難的。首先,我們要設(shè)法獲取人體的相關(guān)信息,這涉及到圖形、圖像識別技術(shù)、深度數(shù)據(jù)挖掘技術(shù)。通過微軟研制的Kinect,其攝像頭在收集了人體的視頻信息之后,通過算法的處理,可以把人的肢體信息凝練為20個骨骼節(jié)點。它可以準確標定人體的這20個關(guān)鍵點,并對這20個點的位置進行實時追蹤。在程序及算法設(shè)計中,人的肢體運動,會使得身體各個骨骼節(jié)點的三維坐標值發(fā)生改變。通過設(shè)置合理的數(shù)值,當骨骼節(jié)點的坐標差值超過某個設(shè)定值的時候,觸發(fā)某一個狀態(tài)位或一系列狀態(tài)位的改變,從而完成一個手勢或者一系列手勢的判定。例如,完成一個完整的投籃手勢,需要先抬起手臂。以右手為例,抬起右手意味著右手腕節(jié)點的y坐標值超過了右肩膀節(jié)點的y坐標值,也就是實際空間中的右手高度,高于右肩膀高度。此時,應(yīng)該觸發(fā)抬手狀態(tài)位的改變,告訴系統(tǒng),投擲者的手臂已經(jīng)抬起,準備進行下一步的判斷與計算。
當然,在手臂放下之后,要把抬手狀態(tài)位還原,告訴系統(tǒng),投擲者的手臂已經(jīng)放下,不能繼續(xù)進行投擲算法,不然系統(tǒng)會出現(xiàn)錯誤投擲判斷。由此,抬手狀態(tài)的觸發(fā)就相當于投擲算法的第一個開關(guān),整個投籃手勢也是由一系列手勢構(gòu)成的。
2.2 運動軌跡的計算
籃球在空間中的運動,是一個球體的物理運動,需要物理引擎來提供物理算法,通常的游戲引擎都會帶有物理引擎,我們使用Unity3D游戲引擎中的物理引擎,來完成籃球運動軌跡的計算。這樣,我們只需要把籃球被拋出時的方向和速度提供給物理引擎,就可以完成籃球運動軌跡的計算了。
現(xiàn)實中,人完成投籃動作,就是給籃球一個加速度。通過手部用力,讓籃球和手擁有相同的速度。當手部停止加速,開始減速,籃球也就不再加速,并且脫離手部,不再和手有接觸?;@球擁有了初始速度,就開始拋物運動。這里我們忽略空氣阻力的作用。在三維空間中,需要把加速度及速度分解到相互垂直的三個方向上,也就是三維坐標系中,計算三個方向上的加速度,最終提交給Unity3D的物理引擎,形成一個和速度進行計算。手部三個方向上的加速度,可以通過速度計算公式獲得。Kinect提供給我們每秒30幀的骨骼節(jié)點三維坐標位置變化,一個方向上坐標的差值除以時間,就可以得到此方向上的速度,進一步就可以得到此方向上的加速度。
2.3 模型的構(gòu)建
最后,我們在Unity3D中創(chuàng)建場景,添加籃球架的模型,并添加腳本判斷籃球是否投進,進行計分,并給籃球和籃框添加碰撞器,當籃球碰觸籃框時,進行碰撞的檢測和碰撞結(jié)果的計算,模擬真實的投籃環(huán)境,構(gòu)成一個完整的投籃系統(tǒng)。
參考文獻:
[1]沈緒榜,劉澤響,王茹.計算機體系結(jié)構(gòu)的統(tǒng)一模型[J].計算機學(xué)報,2007,30(05):731-736.
[2]張茫茫,傅紅.基于實體用戶界面與自然用戶界面結(jié)合的產(chǎn)品設(shè)計[J].研究論文,2013,31(28):99-102.
[3]曹雛清,李瑞峰,趙立軍.基于深度圖像技術(shù)的手勢識別方法[J].計算機工程,2012,38(08):16-21.
[4]朱惠娟.基于Unity3D的虛擬漫游系統(tǒng)[J].計算機系統(tǒng)應(yīng)用,2012,21(10):36-40.
作者簡介:徐濤(1993-),男,江蘇人,本科,研究方向:物聯(lián)網(wǎng)。