項(xiàng)融融,李 博,趙 橋
(中北大學(xué)儀器科學(xué)與動(dòng)態(tài)測(cè)試教育部重點(diǎn)實(shí)驗(yàn)室,山西太原 030051)
目前,人機(jī)交互方式[1]多以鼠標(biāo)和鍵盤為主,形式單一,因此人們對(duì)人機(jī)交互提出了更高的需求,從“以機(jī)器為中心”轉(zhuǎn)變成“以人為中心”,隨著社會(huì)經(jīng)濟(jì)形態(tài)的發(fā)展,人們逐漸邁入了“體驗(yàn)經(jīng)濟(jì)時(shí)代”,消費(fèi)者越來越關(guān)注個(gè)性化體驗(yàn),人們對(duì)這種新型的體驗(yàn)式消費(fèi)充滿了興趣。
人機(jī)交互中的手勢(shì)識(shí)別技術(shù)[3]被廣泛應(yīng)用在各個(gè)領(lǐng)域。在醫(yī)學(xué)領(lǐng)域,文獻(xiàn)[4]使用Kinect 硬件設(shè)備遠(yuǎn)程傳輸信息,為那些需要承受周期性物理治療的人們提供便利,患者身材和運(yùn)動(dòng)數(shù)據(jù)通過硬件設(shè)備傳輸給遠(yuǎn)端醫(yī)院的醫(yī)生并進(jìn)行分析,這項(xiàng)發(fā)明為病人創(chuàng)造了更完整的、參與式的、舒適的體驗(yàn);文獻(xiàn)[5]研究出了一個(gè)虛擬圖形模型制作系統(tǒng),用戶使用一個(gè)頭戴式的VR 設(shè)備就可以在此系統(tǒng)中制作手工,基于動(dòng)作語(yǔ)法的手勢(shì)輸入和跳躍動(dòng)作為用戶提供了更真實(shí)的體驗(yàn)。國(guó)內(nèi)各大高校以及科研所也都對(duì)手勢(shì)識(shí)別技術(shù)進(jìn)行了深入的研究,文獻(xiàn)[6]將手勢(shì)識(shí)別與VR 技術(shù)相結(jié)合,利用Leap Motion 設(shè)備識(shí)別手勢(shì),將其運(yùn)用到測(cè)量、拆裝等工程教育領(lǐng)域;文獻(xiàn)[7]將手勢(shì)交互方式應(yīng)用到了傳統(tǒng)偶戲中,形成了新型方式的表演與操作形式,讓更多人了解中華傳統(tǒng)文化的內(nèi)涵。
近年來,針對(duì)室內(nèi)設(shè)計(jì)[8]過程中存在的操作復(fù)雜、用戶不滿意時(shí)修改麻煩等問題,設(shè)計(jì)了一種基于Leap Motion 手勢(shì)識(shí)別設(shè)備[9]的三維交互系統(tǒng),首先根據(jù)用戶需求使用3ds Max 建立室內(nèi)的三維模型,Unity3D 工具將所有組件整合,接著設(shè)計(jì)了七種常用手勢(shì),通過Leap Motion 硬件設(shè)備進(jìn)行手勢(shì)識(shí)別并對(duì)場(chǎng)景內(nèi)物體進(jìn)行相應(yīng)操作。經(jīng)過試驗(yàn)表明,該系統(tǒng)能正確識(shí)別出設(shè)計(jì)好的各類手勢(shì),用戶可以更加直觀地參與到室內(nèi)的三維場(chǎng)景虛擬交互中,增加體驗(yàn)感與趣味性。
Unity3D[10]簡(jiǎn)稱U3D 或者Unity,是當(dāng)今世界范圍內(nèi)主流的3D 游戲開發(fā)引擎,其游戲開發(fā)引擎可跨平臺(tái),用Unity3D 開發(fā)的游戲可以在電腦、手機(jī)、游戲機(jī)、瀏覽器等幾乎所有常見平臺(tái)上運(yùn)行。
選用Unity3D 游戲引擎開發(fā)的優(yōu)勢(shì)主要有以下幾點(diǎn):
1)部署簡(jiǎn)單
相對(duì)OGRE 等其他游戲引擎,Unity3D 游戲引擎部署更為簡(jiǎn)單,其自身攜帶了一個(gè)可跨平臺(tái)的集成開發(fā)環(huán)境;另外,Unity 中其他插件的部署也是非常簡(jiǎn)便的,只需要以u(píng)nitypackage 后綴進(jìn)行發(fā)布即可。
2)具有完整的技術(shù)棧
Unity 具有一個(gè)非常大規(guī)模的插件市場(chǎng)。
3)C#作為腳本支持
Unity 應(yīng)用以C#為腳本,平衡了編程和運(yùn)行之間的效率,在游戲開發(fā)引擎中有很好的配合度。
Leap Motion[11]外形小巧,攜帶便利,使用方便,其尺寸約為80 mm×30 mm×11 mm,重量約為32 g。Leap Motion 頂部為黑色半透明玻璃,用于采集手勢(shì),側(cè)面為鋁合金材質(zhì)的外殼,底部是橡膠墊腳。
Leap Motion 采用雙目攝像頭[12],在進(jìn)行手勢(shì)識(shí)別時(shí)需要對(duì)兩個(gè)攝像頭進(jìn)行標(biāo)定,計(jì)算兩臺(tái)攝像機(jī)在其空間中的幾何角度和位置。首先,需要先標(biāo)定其中一個(gè)攝像機(jī),計(jì)算其投影變換矩陣、透鏡畸變的參數(shù)和世界坐標(biāo)系中攝像機(jī)的旋轉(zhuǎn)矩陣和平移向量;其次,對(duì)這兩臺(tái)攝像機(jī)同時(shí)進(jìn)行標(biāo)定,與上面步驟一樣,計(jì)算出同一水平線上的兩臺(tái)機(jī)器在空間中的相對(duì)幾何關(guān)系;然后,通過手勢(shì)分割算法對(duì)剛才呈現(xiàn)出來的視覺圖像進(jìn)行分割,標(biāo)定出最初人手的位置,并將其設(shè)置為手勢(shì)跟蹤算法的初始位置,再利用跟蹤算法追蹤人手的動(dòng)作,依據(jù)最后跟蹤得到的結(jié)果即可對(duì)手勢(shì)進(jìn)行識(shí)別。若在跟蹤過程中人手突然消失則需要重新對(duì)這個(gè)手勢(shì)進(jìn)行識(shí)別與分割,并重復(fù)上述步驟。
雙目手勢(shì)識(shí)別[13]流程圖如圖1 所示。

圖1 雙目手勢(shì)識(shí)別流程圖
除此之外,由于Unity3D 平臺(tái)[13]和Leap Motion 體感控制器分別應(yīng)用了不同的坐標(biāo)系,因此在開發(fā)過程中需要對(duì)Leap Motion 數(shù)據(jù)進(jìn)行轉(zhuǎn)化,統(tǒng)一標(biāo)準(zhǔn)。對(duì)于右手坐標(biāo)系中的坐標(biāo)(x,y,-z),根據(jù)式(1)將其轉(zhuǎn)化為左手坐標(biāo)系中的坐標(biāo)(x,y,z)。
該系統(tǒng)利用Leap Motion 硬件設(shè)備來獲取用戶手部姿勢(shì)以及手的運(yùn)動(dòng)軌跡,通過定義好的手勢(shì)[14]對(duì)計(jì)算機(jī)中的三維物體進(jìn)行相應(yīng)操作,結(jié)合3ds Max軟件搭建整體框架,最后采用Unity3D 工具對(duì)其進(jìn)行整合,進(jìn)而搭建出三維場(chǎng)景,并運(yùn)用C#語(yǔ)言進(jìn)行編譯。
該文選用Unity2019 作為開發(fā)平臺(tái),Leap Motion硬件設(shè)備的SDK 選擇Leap_Motion_Developer_Kit_4.0.0,開發(fā)者工具包為L(zhǎng)eap_Motion_Core_Assets_4.4.0。
打開Unity3D 軟件,將開發(fā)者工具包全部導(dǎo)入,如圖2 所示,可以看到Assets 下多了一個(gè)名為L(zhǎng)eap Motion 的文件。

圖2 導(dǎo)入開發(fā)者工具包
在開發(fā)者工具包中找到Examples 文件夾,選擇支持Desktop 版本的Capsule Hands,打開后可以看到游戲畫面中出現(xiàn)了一對(duì)膠囊手,調(diào)整main camera 的位置,使視角變?yōu)閺纳现料驴梢钥吹侥z囊手的位置,如圖3 所示。

圖3 膠囊手展示
該系統(tǒng)以客廳為室內(nèi)三維建模背景,Leap Motion 硬件設(shè)備用于手勢(shì)識(shí)別與跟蹤,Unity3D 軟件進(jìn)行人機(jī)交互,圖4 為基于Unity3D 虛擬交互系統(tǒng)的框架[16]。

圖4 基于Unity3D虛擬交互系統(tǒng)的框架
該系統(tǒng)框架流程介紹如下:
1)利用3ds Max 軟件進(jìn)行客廳框架的構(gòu)建,并利用該軟件制作出客廳內(nèi)的各種家具,最后以.fbx 格式導(dǎo)出。
2)將Leap Motion 連接到電腦上,觀察其上面的指示燈是否亮起,若亮起則表示連接成功,并通過Leap Motion 官網(wǎng)下載開發(fā)者工具包。
3)在Unity3D 官網(wǎng)上下載相關(guān)開發(fā)包,進(jìn)行環(huán)境配置,將Leap Motion 開發(fā)者工具包導(dǎo)入U(xiǎn)nity3D 中。
4)將虛擬客廳及其家具導(dǎo)入U(xiǎn)nity3D 中,并打開Examples 文件夾下Desktop 版的Capsule Hands,調(diào)整好主相機(jī)位置即可通過Leap Motion 硬件設(shè)備進(jìn)行虛擬交互。
客廳場(chǎng)景以及場(chǎng)景內(nèi)的三維物體均由3ds Max軟件進(jìn)行構(gòu)造,構(gòu)造方法為在基本體建模的基礎(chǔ)上,利用延伸功能伸展出物體的立體模型,以下是以客廳場(chǎng)景為實(shí)例的建模過程:
1)利用客廳的CAD 圖進(jìn)行主體框架的構(gòu)造,對(duì)CAD 圖進(jìn)行描邊,描繪出其外部輪廓。
2)選中列表里的擠出功能,構(gòu)建出客廳的墻壁、門框、窗戶等平面。
3)選擇捕捉功能,捕捉各個(gè)頂點(diǎn)并創(chuàng)建矩形,將其轉(zhuǎn)換成可編輯模式,并增加其厚度。
客廳主體框架模型效果如圖5 所示。

圖5 客廳主體框架
客廳中的家具以及擺件則按照上述描述,通過擠出、捕捉等功能創(chuàng)建模型,將所有模型導(dǎo)入U(xiǎn)nity3D 中,在進(jìn)行導(dǎo)入時(shí)應(yīng)注意以下幾項(xiàng):
1)導(dǎo)入前應(yīng)該統(tǒng)一物體的比例和單位,調(diào)整好物體的尺寸,確保導(dǎo)入U(xiǎn)nity3D 后物體的大小適中。
2)從3ds Max 導(dǎo)出時(shí)應(yīng)注意保存為.fbx 格式,保證所有三維物體可以在Unity3D 中正常顯示。
3)導(dǎo)入U(xiǎn)nity3D 后可能會(huì)出現(xiàn)材質(zhì)丟失的現(xiàn)象,只需要對(duì)丟失紋理的物體進(jìn)行重新貼圖即可。
2.2.1 手勢(shì)設(shè)計(jì)
該系統(tǒng)主要定義了七種手勢(shì),分別為選中手勢(shì),可通過食指進(jìn)行物體的選中;復(fù)制手勢(shì),選中物體后,食指和中指同時(shí)張開,可復(fù)制出原先選中的物體;移動(dòng)手勢(shì),選中物體后,手指全部張開,可實(shí)現(xiàn)移動(dòng)選中的物體;放大手勢(shì),在選中某個(gè)物體后,大拇指和食指同時(shí)伸直可以放大選中的物體;貼紋理手勢(shì),選中物體后,通過比劃“ok”手勢(shì)給選定物體張貼紋理;旋轉(zhuǎn)手勢(shì),手握拳,伸出大拇指和小拇指可以實(shí)現(xiàn)將選中物體進(jìn)行旋轉(zhuǎn)操作;刪除手勢(shì),選中物體后進(jìn)行握拳即可刪除該物體,各種手勢(shì)定義如圖6所示。

圖6 手勢(shì)定義
2.2.2 手勢(shì)特征提取
Leap Motion 體感控制器采用紅外成像原理,對(duì)手的三維空間運(yùn)動(dòng)進(jìn)行重建,是一種檢測(cè)并且跟蹤人手和手指的硬件設(shè)備,通過獲取手的位置、方向、向量等關(guān)鍵信息對(duì)人手的手勢(shì)進(jìn)行判斷和操作。
Leap Motion 會(huì)根據(jù)手勢(shì)特征,從人手的骨骼模型出發(fā),建立手指的關(guān)鍵點(diǎn)信息并進(jìn)行建模和手勢(shì)特征提取。基于人手的骨骼模型可看到手勢(shì)結(jié)構(gòu)生成的幾個(gè)關(guān)鍵點(diǎn)并顯示所有手指,通過建立的平面五邊形手勢(shì)模型可以構(gòu)造出手骨架的關(guān)鍵點(diǎn)信息,以此來獲取手勢(shì)特征,如圖7 中手骨架的關(guān)鍵點(diǎn)信息所示,大拇指為Thumb,食指為Index,中指為Middle,無(wú)名指為Ring,小拇指為Pinky,依據(jù)關(guān)鍵點(diǎn)信息可建立出所需要的手勢(shì)。根據(jù)手部的屬性定義手指方向、手指長(zhǎng)度、手掌速度、手指離手掌心距離等信息,根據(jù)算法判斷出手勢(shì)的動(dòng)作狀態(tài)以及手勢(shì)的操作過程。

圖7 手骨架關(guān)鍵點(diǎn)信息
該系統(tǒng)基于Leap Motion 手勢(shì)識(shí)別硬件設(shè)備,以客廳為室內(nèi)設(shè)計(jì)的場(chǎng)景,通過定義七種不同的手勢(shì)來實(shí)現(xiàn)與客廳場(chǎng)景內(nèi)陳列物品之間的虛擬交互操作,七種手勢(shì)效果展示如圖8 所示。

圖8 手勢(shì)效果展示圖
由圖8 可見,選中手勢(shì)通過食指對(duì)物體進(jìn)行選中操作,界面左上角提示選中物體的名稱;刪除手勢(shì),選中該物體后握拳,即可使該物體消失;移動(dòng)手勢(shì)為五指全部打開,選中的物體進(jìn)行移位;放大手勢(shì)通過大拇指和食指張開,其他手指彎曲的手勢(shì)對(duì)已經(jīng)選中的物體進(jìn)行放大操作;旋轉(zhuǎn)手勢(shì)通過比劃數(shù)字6 對(duì)物體進(jìn)行旋轉(zhuǎn);復(fù)制手勢(shì)為食指和中指伸直,其余手指握拳,實(shí)現(xiàn)對(duì)物體的復(fù)制,可以看出圖中復(fù)制物體的名稱后面加了Clone 的字樣,該物體即為復(fù)制后的物品;貼紋理手勢(shì)通過“ok”手勢(shì)對(duì)場(chǎng)景中選中的物體進(jìn)行張貼紋理的操作。
該演示過程經(jīng)過了手勢(shì)設(shè)計(jì)、手勢(shì)識(shí)別與跟蹤過程,所提出的系統(tǒng)可以正確地識(shí)別并展示各種設(shè)計(jì)好的手勢(shì),滿足了系統(tǒng)要求,并獲得了較為滿意的結(jié)果。
該文設(shè)計(jì)了一種基于手勢(shì)識(shí)別的室內(nèi)設(shè)計(jì)虛擬交互系統(tǒng),通過3ds Max 和Unity3D 軟件根據(jù)需求搭建室內(nèi)的整體樣式,設(shè)計(jì)了七種常用手勢(shì),利用Leap Motion 硬件設(shè)備對(duì)其進(jìn)行識(shí)別與跟蹤,用戶可以對(duì)客廳中的家居進(jìn)行設(shè)計(jì)和布局,使其在現(xiàn)場(chǎng)能夠更加直觀、方便地感受室內(nèi)設(shè)計(jì)的過程以及裝修的結(jié)果和樂趣。試驗(yàn)結(jié)果表明,該系統(tǒng)能夠正確地識(shí)別各種手勢(shì),操作簡(jiǎn)單方便、直觀自然,大大增強(qiáng)了人機(jī)交互的樂趣。