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