徐濤 黃賢立 嚴霞 林瓅

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