牟云環(huán)
(陜西國防工業(yè)職業(yè)技術學院陜西西安710300)
近年來,針對傳統繪畫技藝存在操作過程復雜、設備繁多和無法撤銷的問題,國內外學者研究了如何將這些繪畫技藝數字化的方法[1-3]。
沙畫創(chuàng)作作為一種新的藝術創(chuàng)作方式,各種背景音樂與沙子動畫的結合給觀眾帶來了全新的視聽感受[3-6]。然而,沙畫演示過程需要演出者攜帶沙畫方桌、細沙和投影設備。且對現場光線和環(huán)境有較高的要求,給沙畫演出帶來了不便[7-9]。因此,本文使用虛擬現實技術模擬了沙畫展示的過程,不僅能方便沙畫的表演,且還能產生逼真的視覺效果。虛擬現實即使用計算機技術模擬真實世界的各種場景,使人在該種虛幻場景中產生觸覺、視覺和聽覺等身臨其境的感受。
文中使用Leap Motion設備[10]、3Ds Max和Unity 3D等軟件,設計與實現了基于手勢識別的虛擬沙畫展示系統。首先,使用Leap Motion設備獲取的手勢及其運動信息[11],并提取基于角域劃分的特征向量[12-14],再使用該特征向量進行手勢識別[15-16]與跟蹤;然后使用3Ds Max技術建立虛擬手模型,并使用粒子運動系統模擬落沙效果。測試結果表明,該系統能正確的識別出各種手勢,并能滿足基本的沙畫繪制過程,得到了較為滿意的結果。
Leap Motion是一款由兩個攝像頭和3個紅外LED組成的、支持多種操作系統的手勢控制電腦體感控制設備。其使用兩個攝像頭的視覺差和三角測量法來檢測手、手指的3D坐標信息,且其精度能達到0.01 mm。文中使用Leap Motion采集手指和手勢信息,并使用TBD技術跟蹤實現手指骨骼跟蹤,整體流程如圖1所示。
圖1 手勢識別與跟蹤流程
使用Leap Motion Controller提供的API接口,可以獲取Finger、Hand和Tool等數據。當采集到手勢數據后,使用Leap Motion Controller對象的Listen子類觸發(fā)onFrame()函數[17],即可獲取幀數據,并傳遞給手勢識別模塊進行識別。
Leap Motion檢測到人手后,會給其設置一個身份ID,故采集到的數據不僅包括手勢坐標和運動數據,且還包括人手ID。當該人手離開Leap Motion的視野范圍時,系統會立即注銷該ID。文中采集的手勢信息,如圖2所示。
圖2 Leap Motion采集的數據
使用Leap Motion設備可以識別出5只手指,但當手指出現重疊或緊挨時,容易丟失手指信息;再者,識別結果也容易受袖子邊緣和手鐲等物件影響。導致設備在不同的執(zhí)行狀態(tài)下,對相同手勢的識別結果可能并不相同。這將嚴重影響虛擬沙畫繪制的精度,故本文使用了一種基于角域劃分的特征提取方法。
該特征提取方法先根據手掌方向向量和指尖方向將手掌所在的平面劃分為5個角域,每個角域恰好分配一支手指。針對實際情況中某些角域可能含有多只手指,而某些角域不含有手指的問題。該方法將兩個在同一個角域的手指中的一個分配給距離該角域最近的空角域內。使用該方法提取的特征向量,如表1所示。
表1 特征向量提取
Leap Motion設備自帶了揮手、花圈和點擊等手勢,但這幾種手勢無法實現沙畫演示的目的。因此,本文重新設計了如圖3所示的幾種沙畫表演中常用的手勢。從左到右依次為:撒、劃、抹、擦和點。使用Leap MotionVisualizer可分別得到,如圖4所示的手勢效果。
文中使用tracking-by-detection技術實現手指跟蹤,該方法主要用于跟蹤手指尖端的3D坐標信息,具有較高的精度與靈敏度。
假設傳感器的成像平面為 Δx×Δy,并用ζt表示t時刻是否存在目標,ζt=1即存在人手;否則,不存在人手,前t幀獲取的數據可表示為:k1:t={k1,k2,…,kt},并可用式(1)表示傳感器單元(i,j)的量測。
將檢測到人手且其基本保持靜止的時刻作為運動的開始狀態(tài),將人手由運動狀態(tài)變化至速度為0的時刻作為結束狀態(tài)。則沙畫繪制過程中手指的坐標與時間關系為:
圖3 本文設計的手勢
圖4 Leap MotionVisualizer手勢效果展示
又由于Leap Motion設備采集的數據信息為離散數據,故可用式(3)表示手指的運動方向:
由此可得到,手指運動素的方向變化率為:
同理,可得到手指的運動速度為:
由該方法得到的手指運動軌跡,如圖5所示。
圖5 手指運動軌跡示意
文中使用Leap Motion設備獲取的手勢及其運動信息,并提取基于角域劃分的特征向量,再使用該特征向量進行手勢識別與跟蹤完成虛擬沙畫展示系統。系統整體工作流程,如圖6所示。從圖中可知,為了實現更真實的沙畫展示功能,本系統使用3Ds Max技術建立虛擬手模型,并使用粒子運動系統模擬落沙效果。
圖6 虛擬沙畫演示系統整體流程
文中使用3Ds Max軟件和紋理貼圖法建立手模型的具體步驟為:
1)構建手的外觀模型:首先構建一個多邊形box,并調整各條邊直至形成手掌輪廓結構;然后,切割出各手指并調整指節(jié)長度;最后,細化切分后的多邊形網格,增強虛擬手的逼真度[18]。
2)問題貼圖:首先對虛擬手的多邊形網格進行UV處理;然后,使用Photoshop繪制紋理貼圖。
3)使用3Ds Max軟件添加骨骼參數,并綁定骨骼與蒙皮。
使用上述流程即可實現仿真手的構建,圖7為本文實現的仿真手效果及貼圖前后的對比。
圖7 仿真手模型及貼圖前后效果
文中使用粒子系統實現沙畫演示過程中的落沙效果,粒子系統是使用計算機圖形學技術模擬現實生活中的火焰、云朵和落葉等一系列無規(guī)則景物的視覺效果技術。其基本思想是:使用微小的具有顏色、大小和形狀的粒子表示無規(guī)則物體,并使用大量的此種粒子構成粒子團,從而使用粒子的產生和凋零過程來模擬景物的運動。
Unity 3D采用模塊化管理方法集成了功能強大的粒子系統,故本文使用該軟件并配合粒子曲線編輯器實現復雜粒子運動的效果。具體實現步驟為:
1)使用“Particle System”子菜單欄創(chuàng)建粒子系統;
2)根據需要選擇Inspector視圖中“Particle System”組件的模塊控制粒子的行為特征。如本系統使用初始化、Emission、Shape、Rendere和Size over Lifetime等模塊實現落沙效果;
3)設置各粒子的生命周期和運動狀態(tài)等基本屬性以滿足預期效果,如圖8所示分別模擬了沙子落下和堆積的效果。
圖8 沙子落下(上)及堆積(下)效果模擬
4)當系統識別出“撒沙”的手勢時,啟動粒子系統并使用SandPainting腳本文件切換觀看視角以得到更好的落沙效果。本文實現的落沙效果圖,如圖9所示。
圖9 落沙效果圖
使用上文提出的系統與Leap Motion設備、3Ds Max以及Unity 3D等軟件,本文實現了如圖10所示的虛擬沙畫演示過程。
圖10 系統實現效果展示
該演示過程經過了數據的預處理、基于角域劃分特征向量的提取、手勢設計、識別與跟蹤過程及粒子系統模擬落沙效果等。從圖10可看出,所提出的系統能正確的識別出各種手勢,并能滿足基本的沙畫繪制過程,得到了較為滿意的結果。
傳統沙畫演示過程中存在操作過程復雜、設備繁多和無法撤銷的問題。本文設計實現了一種基于手勢識別的虛擬沙畫展示系統,以方便沙畫的表演與創(chuàng)作。該系統使用Leap Motion設備獲取的手勢及其運動信息,并提取基于角域劃分的特征向量,再使用該特征向量進行手勢識別與跟蹤;同時,使用粒子運動系統模擬落沙效果。實現與結果表明,所提出的系統能正確的識別出各種手勢,并能滿足基本的沙畫繪制過程。