[張作運 劉科征 王向強]
基于Kinect V2 動作捕捉系統(tǒng)的設(shè)計與實現(xiàn)
[張作運 劉科征 王向強]
目前成熟的光學動作捕捉設(shè)備,要求演員穿戴各種設(shè)備,這會對演員運動造成不便而導致動作失真,同時由于場地要求和價格等因素,導致該方法無法推廣。因此,提出使用Kinect V2和Unity3D,再結(jié)合泰勒平滑算法和運動重定向技術(shù),設(shè)計一個基于Unity3D的動作捕捉插件,該插件使用Kinect捕獲的真人動作數(shù)據(jù)實時地驅(qū)動3D模型運動。本系統(tǒng)能夠進行實時預(yù)覽,其硬件外觀簡單,價格便宜。在低成本動畫制作,游戲制作和虛擬現(xiàn)實等領(lǐng)域有較強的實用價值。
Kinect V2 動作捕捉系統(tǒng) Unity3D 插件 運動重定向技術(shù)
張作運
重慶郵電大學,信號與信息處理重慶市重點實驗室,碩士生,主要研究方向:嵌入式技術(shù)、虛擬現(xiàn)實與多媒體技術(shù)。
劉科征
重慶郵電大學,信號與信息處理重慶市重點實驗室,講師,主要研究方向:嵌入式系統(tǒng)設(shè)計、計算機機器視覺、計算機圖形圖像處理等。
王向強
重慶郵電大學,信號與信息處理重慶市重點實驗室,碩士生,主要研究方向:物聯(lián)網(wǎng)關(guān)鍵技術(shù)、嵌入式技術(shù)、虛擬與增強現(xiàn)實技術(shù)。
隨著計算機圖形學技術(shù)和計算機視覺的發(fā)展,動作捕捉技術(shù)廣泛地應(yīng)用于電影、卡通、廣告和電子游戲等。動作捕捉技術(shù)通過捕獲真人的運動數(shù)據(jù)來驅(qū)動虛擬人運動,使得虛擬人物的動作更逼真,增強了視覺效果[1]。
目前,傳統(tǒng)的動作捕捉設(shè)備價格昂貴、操作復(fù)雜、后期處理工作量大,對操作場地有較高的要求,裝置校準也較為繁瑣。而現(xiàn)有的基于Kinect的動作捕捉系統(tǒng)還不夠成熟。這體現(xiàn)在:
(1)系統(tǒng)封閉,擴展性不好。系統(tǒng)捕捉的運動數(shù)據(jù),只能在自己的平臺使用,不能應(yīng)用到第三方平臺中。
(2)系統(tǒng)在骨骼追蹤時,在肢體有重合的情況下(尤其和身體軀干),會出現(xiàn)肢體末端抖動。
(3)在運動重定向時,由于真人骨骼和3D人體模型骨骼存在差異,會導致人體模型肢體相互穿透或者陷入地面等失真現(xiàn)象。
針對以上問題,本文設(shè)計一個搭載在Unity3D平臺上的動作捕捉系統(tǒng)。該系統(tǒng)采用Unity3D插件開發(fā)技術(shù),并使用Kinect for Windows SDK2.0來驅(qū)動Kinect捕獲人體動作數(shù)據(jù),使用運動重定向技術(shù)實時驅(qū)動模型進行運動。本文設(shè)計的動作捕捉系統(tǒng)基于擴展性和跨平臺性較好的Unity3D,這有效地解決了動作捕捉系統(tǒng)的封閉性問題。本文提出并使用了泰勒平滑算法,解決了人體模型肢體末端抖動的問題。另外本文研究了運動重定向技術(shù),并將其應(yīng)用到本系統(tǒng)中,以解決模型肢體穿透等失真問題
本文設(shè)計的動作捕捉系統(tǒng)架構(gòu)如圖1所示,采用Kinect v2 和unity 3D搭建而成,使用Kinect V2獲取的運動數(shù)據(jù)來合成人體實時動畫:先通過Kinect的深度傳感模塊,獲取深度數(shù)據(jù)流,然后對獲取的深度數(shù)據(jù)進行人體識別和部位識別來提取人體骨骼關(guān)節(jié)點數(shù)據(jù),接著對人體骨骼運動數(shù)據(jù)做平滑處理,然后與帶骨骼的3D人體模型的關(guān)節(jié)點進行一對一匹配,最終實現(xiàn)利用捕獲到的Kinect運動數(shù)據(jù)實時驅(qū)動人體模型運動。
圖1 基于Kinect v2的動作捕捉系統(tǒng)架構(gòu)圖
如圖1所示,將人體直接作為控制器輸入,實現(xiàn)對Unity 3D虛擬場景中角色模型的實時運動控制。系統(tǒng)主要包含3個模塊:三維深度數(shù)據(jù)獲取模塊、人體識別和骨骼提取模塊、運動數(shù)據(jù)處理和數(shù)據(jù)重定向模塊。本系統(tǒng)在unity3D平臺下,完成了這3個模塊的開發(fā)。
3.1 三維深度數(shù)據(jù)獲取模塊
Kinect V2解構(gòu)如圖2所示,主要組件有RGB彩色攝像頭,紅外發(fā)射器和嘗試傳感器組成。新增紅外線傳感器在賦予了黑暗中識別動作能力的同時,降低了操作環(huán)境的要求[2]。
圖2 Kinect V2硬件解構(gòu)圖
Kinect v2的深度傳感模塊屬于主動式TOF(time of flight)深度傳感器,通過測量光脈沖之間的傳輸延遲時間來測量深度,TOF在一定程度上可以做到逐個pixel的計算,與第一代相比,在相同的傳感器分辨率的情況下得到更高的精度[3]。這里使用的TOF技術(shù),是通過發(fā)射一個強度隨時間周期變化的正弦信號,利用發(fā)射、接受信號的相位差來計算深度,精度比傳統(tǒng)TOF高。
Windows Kinect SDK2.0中彩色數(shù)據(jù)和深度數(shù)據(jù)的請求方法均通過OpenNextFrame。彩色圖像幀的讀取方法:ColorImageStream.OpenNextFrame (T);獲取之后需要判斷DepthImageFrame 對象是否為空,因為有可能事件觸發(fā)了,但是沒有產(chǎn)生數(shù)據(jù)幀。在使用事件模型時3種數(shù)據(jù)幀的獲取方式:
sensor_ColorFrameReady
(object sender,ColorImageFrameReadyEventArgs I)
sensor_DepthFrameReady
(object sender,DepthImageFrameReadyEventArgs I)
sensor_AllFramesReady
(object sender,AllFramesReadyEventArgs I)
由Kinect V2獲取的圖像信息如圖3所示。
圖3 Kinect圖像信息
3.2 人體識別和骨骼提取模塊
獲得三維深度圖像數(shù)據(jù)無法直接用來驅(qū)動三維人體模型,這里需要對其進行處理,包括人體識別,背景分離、骨骼提取等操作。本模塊的主要目標就是從深度圖像中將人體從圖像背景中分離出來。Kinect SDK中的API囊括了背景分離、骨骼提取等操作。
目前,Kinect for Windows SDK2.0中的骨骼API可以提供位于Kinect前方至多6個人的位置信息,包括詳細的姿勢和骨骼點的三維坐標信息。
在SDK中每個骨骼點都是用Joint類型來表示的,每一幀的25個骨骼點組成基于Joint類型的集合[4],如圖4所示。
圖4 25個骨骼點示意圖
此類型包含4個屬性,具體內(nèi)容如下。
JointType:骨骼點的類型,這是一種枚舉類型,列舉出了25個骨骼點的特定名稱,比如“HandTipLeft”表示該骨骼點是左手指尖點。
Position:SkeletonPoint類型表示骨骼點的位置信息。SkeletonPoint是一個結(jié)構(gòu)體,包含X、Y、Z三個數(shù)據(jù)成員,用以存儲骨骼點的三維坐標。
TrackingState:JointTrackingState類型也是一種枚舉類型,表示該骨骼點的追蹤狀態(tài)。其中,Tracked表示正確捕捉到該骨骼點,NotTracked表示沒有捕捉到骨骼點,Inferred表示狀態(tài)不確定。
HandState:leftHandState和 rightHandState,這個類有5種狀態(tài):open,closed,lasso,not tracked,unknown。分別用來表示手掌張開,合攏,剪刀手,未追蹤到和未知狀態(tài)。
3.3 運動數(shù)據(jù)處理和數(shù)據(jù)重定向模塊
3.3.1運動數(shù)據(jù)處理
Kinect V2的誤差和肢體形態(tài)有關(guān),在肢體有重合的時候(尤其和身體軀干),會造成骨骼的肢體末端抖動,這是由于兩幀之間的數(shù)據(jù)相差很大,就會造成動作不平滑而出現(xiàn)抖動,這就需要對骨骼數(shù)據(jù)幀進行平滑處理[5],為了解決這一問題,本文提出了使用泰勒濾波來進行骨骼運動平滑處理。
泰勒公式,如下所示,該函數(shù)用是某點的信息描述其附近取值的公式,它將一個連續(xù)的函數(shù)近似地表示為若干項之和(此式省略了余項)。
泰勒公式在這里用來預(yù)測joint(骨骼關(guān)節(jié)點位置)數(shù)據(jù)。在這里假設(shè)骨骼的運動近似看作一個N次多項式與時間的關(guān)系。這里用N項多項式來代表過去的N次輸入,利用這個多項式來預(yù)測下一幀的joint數(shù)據(jù)??紤]到 joint數(shù)據(jù)都是離散的,因此公式用中系數(shù)可以用n階導數(shù)的后向差分來確定,具體如下:
由上可知,下一幀的輸入數(shù)據(jù)可以用多項式擬合。
將估算表達式的項數(shù)設(shè)為N,并令α=n,然后將f(n+1)用泰勒公式代入可以得下第n+1次輸入的估計,公式如下。
例如,當N=3時,可以得到預(yù)測表達式如下所示。
通過上面的推導,我們只能預(yù)測到未來骨骼的位置數(shù)據(jù),并沒有對數(shù)據(jù)進行平滑或去噪處理,接下來,我們將第n次實際輸入的數(shù)據(jù)與預(yù)測的數(shù)據(jù)進行權(quán)植平衡處理。其中α代表權(quán)值取值范圍(0,1)。當α較大時,得到的目標數(shù)據(jù)比較接近真實數(shù)據(jù),α較小時,目標數(shù)據(jù)更接近預(yù)測數(shù)據(jù)。
取一段時間的某個關(guān)節(jié)點,本文選擇的是手指尖這個關(guān)節(jié)點來進行仿真。記錄一段時間內(nèi)該關(guān)節(jié)點的x坐標的變化,可以得到圖4(a),然后再利用上述的泰勒平滑處理算法進行處理濾波,可以得到圖5(a),圖中可以看到濾波后兩者的對比效果。相關(guān)項數(shù)值N取5,α取值0.6,仿真結(jié)果基本符合預(yù)期要求。
圖5 泰勒濾波效果圖
本文將彩色圖像與骨骼系統(tǒng)合并得到圖5(b),使用泰勒平滑處理之后,肢體末端抖動明顯減小。
3.3.2 數(shù)據(jù)重定向
三維虛擬角色模型一般由骨骼模型和蒙皮兩部分組成。骨骼一般是按照人體各節(jié)點之間的連接關(guān)系形成的一個樹狀模型結(jié)構(gòu),如圖6所示。
圖6 帶骨骼的人體模型原理圖
蒙皮是一種皮膚網(wǎng)格,包括皮膚網(wǎng)格的各頂點坐標信息、紋理坐標信息等。一般來說人體的骨骼模型運動能準確反映人體的運動信息[6]。因此,可以將運動捕捉設(shè)備捕捉到的運動數(shù)據(jù),經(jīng)處理后作用于骨骼模型上,通過每一幀的骨骼運動數(shù)據(jù)來實現(xiàn)模型驅(qū)動。通過驅(qū)動骨骼模型并使用蒙皮綁定技術(shù)就能重現(xiàn)復(fù)雜的人體運動。本文在unity 3D平臺上來實現(xiàn)3D模型的重定向,將3D模型導入到unity3D場景中。然后通過獲取經(jīng)過平滑處理的骨骼數(shù)據(jù),來驅(qū)動3D模型的骨骼,然后通過蒙皮綁定技術(shù)來帶動其它部位的運動。
由于虛擬角色的大小比例可能和被捕捉實體的比例不完全一致,甚至骨架結(jié)構(gòu)不同的情況下,使得動作會失去原始的特性,比如出現(xiàn)滑步和地面穿透等現(xiàn)象。
通過“表演者”與“3D人體模型”的骨干長度比例,計算出“動畫角色”的末端效應(yīng)器的位置,然后通過逆向運動學求得各個關(guān)節(jié)的旋轉(zhuǎn)角度,這樣就可以消除動畫角色在運動過程中的滑步現(xiàn)象[7];本文為了可以消除運動過程中的懸空以及穿透地面的現(xiàn)象,在unity3D中將人與地面的接觸設(shè)為一個強制條件。
4.1 軟件界面
本文設(shè)計的動作捕捉系統(tǒng)是搭載在unity3D平臺上的插件。本系統(tǒng)界面如圖7所示。該界面分5塊:第一部分,初始化Kinect的開關(guān);第二部分,在unity3D場景中添加人物模型;第三部分:“Kinect V2”圖標處是用于顯示“表演者”彩色圖像的區(qū)域;第四部分:“雷達圖標”是顯示人體在Kinect范圍內(nèi)的相對位置信息;最后一部分是腳本錄制功能,該部分還處在開發(fā)中。
圖7 動作捕捉系統(tǒng)插件界面
4.2 系統(tǒng)功能展示
為了驗證上述工作的正確性和有效性,本文使用系統(tǒng)捕獲了行走和跳躍兩組圖片,如圖8所示。本文在實驗室中完成了三維深度數(shù)據(jù)獲取,骨骼數(shù)據(jù)提取和平滑處理,以及利用重定向技術(shù)實時驅(qū)動三維模型。
本文針對高速公路二次事故可能會給駕乘人員或者救援人員帶來嚴重的人身傷害的問題,設(shè)計了基于SX1278擴頻組網(wǎng)技術(shù)、MEMS姿態(tài)測量技術(shù)的高速公路防撞系統(tǒng)。論文提出了用加速度傳感器來對交通錐的振動信號進行檢測,通過對振動加速度變化信號進行標準差分析,對撞擊事件進行有效判斷的方法。論文給出了整體的系統(tǒng)設(shè)計和系統(tǒng)架構(gòu)。實驗測試顯示,雖然在個別特殊情況下會出現(xiàn)誤報的情況,但也是為了防止漏報的情況,因此可以對撞擊事件做出有效的檢測,當發(fā)生報警后,人員可以第一時間進行躲避,盡量減少人員傷亡和財產(chǎn)損失。
1林謀有,劉國滿,盛敬,等.高速公路二次交通事故預(yù)警指標研究[J].公路與汽運,2015(6):53-56
2李世光,王文文,申夢茜,等.基于STM32的姿態(tài)測量系統(tǒng)設(shè)計[J].現(xiàn)代電子技術(shù),2016(9)
3劉函林,黃華.基于ZigBee的高速公路防相撞系統(tǒng)設(shè)計與實現(xiàn)[J].微計算機信息,2009(23):8-9
4Semtech.SX1278 Reference Rev.4,2015
5卓從彬,楊龍頻,周林,等.基于MPU6050加速度傳感器的跌倒檢測與報警系統(tǒng)設(shè)計[J].電子器件,2015(4):821-825
6Chen D,F(xiàn)eng W,Zhang Y,et al.A wearable wireless fall detection system with accelerators[C]// Robotics and Biomimetics (ROBIO),2011 IEEE International Conference on.IEEE,2011:2259-2263
7王可之,梁山,劉飛,等.基于加速度傳感器的建筑工地廣域無線防盜系統(tǒng)[J].傳感技術(shù)學報,2010,23(4):602-606
8Ruhhammer J,Zens M,Goldschmidtboeing F,et al.Highly elastic conductive polymeric MEMS[J].Science & Technology of Advanced Materials,2015,16(1)
9Ruiz-Garcia L,Barreiro P,Robla J I.Performance of ZigBee-Based wireless sensor nodes for real-time monitoring of fruit logistics[J].Journal of Food Engineering,2008,87(3):405-415
10康海,趙坤,劉書林.基于MPU6050模塊的飛行姿態(tài)記錄系統(tǒng)設(shè)計[J].電子設(shè)計工程,2015,23(10):188-190
11曹玉珍,蔡偉超,程旸.基于MEMS加速度傳感器的人體姿態(tài)檢測技術(shù)[J].納米技術(shù)與精密工程,2010,8(1):37-41
12閆俊嶺,張郭.基于MEMS慣性傳感器的兩輪自平衡小車設(shè)
13計[J].電子產(chǎn)品世界,2016(2)呂一磊,何小剛.基于ZigBee技術(shù)的煤礦巷道安全監(jiān)測系統(tǒng)設(shè)計[J].工礦自動化,2015,41(4):115-118
10.3969/j.issn.1006-6403.2016.10.017
(2016-09-13)