王紅全 淮永建
(北京林業(yè)大學(xué)信息學(xué)院 北京 100083)
近年來,隨著科技的發(fā)展,虛擬現(xiàn)實(shí)技術(shù)和人工智能技術(shù)成為了當(dāng)前研究領(lǐng)域的熱門問題。虛擬現(xiàn)實(shí)技術(shù)利用計(jì)算機(jī)技術(shù)和三維建模技術(shù),使得用戶可以通過各種傳感設(shè)備從參與者的角度感受更加真實(shí)的虛擬世界,并且可以對(duì)虛擬環(huán)境中的物體進(jìn)行多種方式交互。一些新型的3D體感設(shè)備推出后,比如Kinect和Leap Motion等,使人機(jī)交互技術(shù)有新的發(fā)展。手勢(shì)可以為人機(jī)交互提供高效和自然的方式,手勢(shì)識(shí)別對(duì)于實(shí)現(xiàn)更精確的人機(jī)交互效果來說是至關(guān)重要的。其中Leap Motion是一款小型手部運(yùn)動(dòng)追蹤設(shè)備,具有高精度和快速響應(yīng)能力,可以在手語(yǔ)識(shí)別、虛擬現(xiàn)實(shí)交互、醫(yī)療和娛樂等不同領(lǐng)域產(chǎn)生許多實(shí)時(shí)應(yīng)用。
在國(guó)內(nèi),李浩等[1]使用Leap Motion設(shè)備,實(shí)時(shí)捕捉手部動(dòng)作,研發(fā)小鼠卵巢切割可視化模擬算法,較為真實(shí)地實(shí)現(xiàn)了對(duì)小鼠卵巢的切割模擬。寧亞楠等[2]使用Leap Motion跟蹤手部運(yùn)動(dòng)并根據(jù)自定義的沙畫手勢(shì)語(yǔ)義在Unity平臺(tái)設(shè)計(jì)實(shí)現(xiàn)了虛擬沙畫創(chuàng)作。錢露等[3]用通過Leap Motion獲得的數(shù)據(jù)模擬手的運(yùn)動(dòng)信息,實(shí)時(shí)地反映到瀏覽器上,實(shí)現(xiàn)草圖的繪制和模型的檢索。吳福理等[4]通過Leap Motion體感控制器采集用戶手部信息數(shù)據(jù),通過本地計(jì)算機(jī)對(duì)數(shù)據(jù)進(jìn)行處理,識(shí)別出多種的手勢(shì),再與瀏覽器上WebGL繪制成的虛擬植物進(jìn)行實(shí)時(shí)交互,從而實(shí)現(xiàn)更便捷的植物三維模型的變化、更新等操作。嚴(yán)利民等[5]提出了一種基于Leap Motion的三維空間內(nèi)的手指姿勢(shì)關(guān)鍵特征點(diǎn)軌跡識(shí)別的方法,利用Leap Motion獲取手部骨架的信息并經(jīng)過手部骨架算法提取手指姿勢(shì)關(guān)鍵特征點(diǎn)及運(yùn)動(dòng)軌跡。通過使用該方法能夠在復(fù)雜的三維空間內(nèi)實(shí)現(xiàn)對(duì)動(dòng)態(tài)手指姿勢(shì)的具有較高準(zhǔn)確率的識(shí)別。Wei等[6]利用Leap Motion和Unity游戲引擎開發(fā)了虛擬鋼琴系統(tǒng),該系統(tǒng)可以讓用戶通過Leap Motion跟蹤手的運(yùn)動(dòng)來實(shí)時(shí)地彈奏鋼琴。對(duì)于手勢(shì)識(shí)別來說,一種高效的方法是使用可記錄每個(gè)手指運(yùn)動(dòng)的數(shù)據(jù)手套,呂蕾等[7]通過利用數(shù)據(jù)手套來采集手部運(yùn)動(dòng)的數(shù)據(jù),運(yùn)用模版匹配的方法實(shí)現(xiàn)對(duì)靜態(tài)手勢(shì)的識(shí)別。通過該方法在手勢(shì)類別數(shù)目較大的情況下,識(shí)別正確率能夠達(dá)到98.9%。但是,數(shù)據(jù)手套成本相對(duì)較高,缺乏追蹤手部位置的跟蹤能力,不適用于動(dòng)態(tài)手勢(shì)識(shí)別。
在國(guó)外,Manawadu等[8]使用Leap Motion作為手勢(shì)識(shí)別平臺(tái),開發(fā)了一種基于手勢(shì)的駕駛員車輛界面,通過利用手勢(shì)對(duì)汽車發(fā)送指令以實(shí)現(xiàn)自動(dòng)駕駛。文獻(xiàn)[9]利用Leap Motion開發(fā)了一款應(yīng)用軟件,使得在不接觸手的情況下測(cè)量帕金森氏病病人的震顫,有助于病人的康復(fù)治療。文獻(xiàn)[10]提出使用樸素貝葉斯對(duì)印尼手語(yǔ)系統(tǒng)中Leap Motion捕獲的手勢(shì)進(jìn)行分類,理想環(huán)境的訓(xùn)練數(shù)據(jù)的準(zhǔn)確率為80.5%,對(duì)未經(jīng)訓(xùn)練的數(shù)據(jù)的準(zhǔn)確率為70.7%。文獻(xiàn)[11]提出了一種使用Leap Motion的阿拉伯語(yǔ)的手語(yǔ)識(shí)別模型,并將其應(yīng)用到動(dòng)態(tài)和靜態(tài)手勢(shì)中,利用KNN模型對(duì)和DTW模型分別對(duì)靜態(tài)手勢(shì)和動(dòng)態(tài)手勢(shì)進(jìn)行識(shí)別,具有較好的識(shí)別效果。
本文提出利用Leap Motion設(shè)計(jì)和實(shí)現(xiàn)樹木交互系統(tǒng),重點(diǎn)是利用Leap Motion對(duì)手勢(shì)識(shí)別進(jìn)行研究,首先采用Leap Motion采集靜態(tài)手勢(shì)和動(dòng)態(tài)手勢(shì)序列幀,提取手指和掌心的位置,手勢(shì)運(yùn)動(dòng)軌跡的位置、方位等特征。然后利用長(zhǎng)短期記憶循環(huán)神經(jīng)網(wǎng)絡(luò)(LSTM)和SVM分別對(duì)動(dòng)態(tài)手勢(shì)和靜態(tài)手勢(shì)進(jìn)行訓(xùn)練和分類,以實(shí)現(xiàn)手勢(shì)識(shí)別。最終將手勢(shì)識(shí)別結(jié)果應(yīng)用到樹木交互虛擬現(xiàn)實(shí)場(chǎng)景中,使用戶能夠高效、準(zhǔn)確地對(duì)樹木進(jìn)行交互。
本文中應(yīng)用到手勢(shì)有兩種:靜態(tài)手勢(shì)和動(dòng)態(tài)手勢(shì)。靜態(tài)手勢(shì)是指固定的手勢(shì),沒有考慮到時(shí)間的變化。動(dòng)態(tài)手勢(shì)在執(zhí)行期間包含動(dòng)作和運(yùn)動(dòng)軌跡。手勢(shì)識(shí)別的機(jī)器學(xué)習(xí)主要包括四個(gè)步驟:(1) 選擇合適的傳感器采集手勢(shì);(2) 從數(shù)據(jù)中分析和提取特征,即與描述手勢(shì)相關(guān)的值;(3) 使用一種或多種算法識(shí)別和解釋手勢(shì),對(duì)數(shù)據(jù)進(jìn)行分類;(4) 輸出識(shí)別的手勢(shì)名稱。
在本系統(tǒng)中,為了獲取手勢(shì)的數(shù)據(jù),相比較其他設(shè)備我們選擇的是Leap Motion。Leap Motion(圖1(a))使用紅外相機(jī)和LED測(cè)量手掌和手指的各種參數(shù),包括它們的位置、速度、方向和幾何形狀(圖1(b))[12]。操作范圍從控制器上方25毫米到650毫米不等。Leap Motion傳感器軟件能夠獨(dú)立識(shí)別手掌手勢(shì),而無需使用外部算法,識(shí)別的手勢(shì)包括圓形、輕掃和按鍵[13]。然而由于缺乏定制能力和相對(duì)較高的計(jì)算成本,我們決定不使用此功能而采用定制的識(shí)別算法。
(a) Leap Motion (b) 手掌骨架圖1 數(shù)據(jù)采集描述
在本模塊中,數(shù)據(jù)采集是通過Leap Motion設(shè)備的應(yīng)用程序編程接口(API)完成的。Leap Motion的API為開發(fā)者的程序開發(fā)提供了一系列追蹤手部運(yùn)動(dòng)的快照數(shù)據(jù),Leap Motion官方文檔中稱這些快照數(shù)據(jù)為幀。追蹤數(shù)據(jù)的每一幀中都包含了在快照中采集到的手勢(shì)位置信息。我們可以提取三維坐標(biāo)中的指尖位置和掌心位置。獲取到指尖位置坐標(biāo)后,就可以跟蹤手勢(shì)軌跡了。采集的過程中Leap Motion可能會(huì)出現(xiàn)數(shù)據(jù)丟失或者采樣數(shù)據(jù)異常的情況,為了避免無效數(shù)據(jù)對(duì)采樣結(jié)果造成的干擾,在采集過程中只采集顯示正確幀的手指的信息。
根據(jù)上面步驟從Leap Motion獲得的數(shù)據(jù),進(jìn)行分析提取可用于識(shí)別手勢(shì)的魯棒特性。首先得到每個(gè)手指指尖的三維坐標(biāo)位置向量,由此在單手手勢(shì)中可以得到5個(gè)特征(f1,f2,…,f5)如圖2(a)所示,特征中的每個(gè)點(diǎn)由三維空間中的〈xi,yi,zi〉向量組成。一個(gè)正常的手掌(位于它的中心)的掌心坐標(biāo)位置向量設(shè)定為〈xc,yc,zc〉,可以將其作為特征f6。因此,對(duì)于一個(gè)幀中的每個(gè)手勢(shì),我們可以從設(shè)備讀取到6個(gè)三維點(diǎn)。圖2(b)給出了一個(gè)手勢(shì)例子,其中沒有伸出的兩個(gè)手指的指尖位置與手掌中心位置近似。
(a) 指尖與掌心3D坐標(biāo) (b) 指尖坐標(biāo)與掌心近似圖2 特征提取描述
除了指尖位置外還需要指尖的方向,可以根據(jù)手的方向來計(jì)算三維坐標(biāo)中的指尖方向。圖3給出了從右向左進(jìn)行一個(gè)手勢(shì)的指尖運(yùn)動(dòng),序列中同一個(gè)指尖的兩個(gè)相鄰點(diǎn)即P1(x1,y1,z1)和P2(x2,y2,z2)形成向量P1P2并且得到其與X、Y、Z坐標(biāo)軸的夾角為α、β、γ。這些角度可以使用公式來計(jì)算,如下所示:
v=OR=〈vx,vy,vz〉
(1)
(2)
(3)
計(jì)算由f7到f11表示的五個(gè)指尖的方向特征后,中點(diǎn)P(x,y,z)的方向可以由一個(gè)序列的兩個(gè)相鄰點(diǎn)P1、P2來估算出來。
故在單手手勢(shì)中提取了11個(gè)動(dòng)態(tài)特征,即(f1,…,f5,f6,f7,…,f11)。
圖3 手勢(shì)序列中的兩個(gè)相鄰點(diǎn)的指尖方向計(jì)算
本文使用支持向量機(jī)SVM[14]作為靜態(tài)手勢(shì)分類模型。之所以選擇這個(gè)方法,是因?yàn)樗钱?dāng)今最常用的機(jī)器學(xué)習(xí)分類器之一,已經(jīng)廣泛應(yīng)用于目標(biāo)檢測(cè)和識(shí)別、文本識(shí)別、生物識(shí)別和語(yǔ)音識(shí)別等領(lǐng)域。最重要的是用SVM分類器完全能滿足該系統(tǒng)的需求。SVM中常用的核函數(shù)主要有線性核函數(shù)、多項(xiàng)式核函數(shù)、徑向基函數(shù)、sigmoid,分類之前我們需要選擇適當(dāng)?shù)暮撕瘮?shù)。本文中選用RBF核函數(shù),公式如下:
K(xi,xj)=exp(-γ‖xi-xj‖2)γ>0
(4)
通過Leap Motion采集獲取到一個(gè)動(dòng)態(tài)手勢(shì)的幀數(shù)和時(shí)間序列以及每幀的手指位置,可以計(jì)算出每一部分手位置和速度。三維位置和速度的時(shí)間序列可以作為輸入直接提供給一個(gè)長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM),使用長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)來對(duì)動(dòng)態(tài)手勢(shì)進(jìn)行訓(xùn)練和分類。
LSTM是一種循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的特殊類型,該模型可以有效地避免梯度消失的問題[15]。LSTM的網(wǎng)絡(luò)如圖4所示。
圖4 LSTM神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)圖
LSTM在手勢(shì)識(shí)別模塊中保存若干狀態(tài)向量來保存序列中的每個(gè)時(shí)刻信息。這些狀態(tài)向量包含:輸入門it、遺忘門ft輸出門ot記憶狀態(tài)ct以及隱藏狀態(tài)ht。LSTM單元中的狀態(tài)向量轉(zhuǎn)換如下[16]:
it=σ(xtWxi+ht-1Whi+ct-1Wci+bi)
(5)
ft=σ(xtWxf+ht-1Whf+ct-1Wcf+bf)
(6)
ot=σ(xtWxo+ht-1Who+ctWco+bo)
(7)
ct=ft°ct-1+it° tanh(xtWxc+ht-1Whc+bc)
(8)
ht=ot° tanh(ct)
(9)
式中:xt是時(shí)刻t的輸入;Wxi、Wxf、Wxo分別是輸入層與輸入門、遺忘門和輸出門之間的權(quán)重;Whf、Whi、Who分別是隱藏的重復(fù)層與遺忘門、輸入門和內(nèi)存塊的輸出門之間的權(quán)重;Wci,Wcf,Wco分別是單元狀態(tài)和輸入門、遺忘門和輸出門之間的權(quán)重;bi、bf、bo分別是輸入門、遺忘門和輸出門的附加偏差;σ是sigmoid函數(shù)。該模型通過使用各種門限改變每個(gè)向量的狀態(tài)來處理各種時(shí)間尺度的問題。
由于利用LSTM對(duì)動(dòng)態(tài)手勢(shì)數(shù)據(jù)進(jìn)行建??梢詫?duì)手勢(shì)數(shù)據(jù)進(jìn)行端到端的訓(xùn)練,相比較使用人工制作特征的傳統(tǒng)軌跡方法和使用隱馬爾可夫模型(HMM)模型,不需要在訓(xùn)練過程中人為地定制規(guī)則,可以有效規(guī)避人工特征選取等問題。由于每個(gè)動(dòng)態(tài)手勢(shì)的數(shù)據(jù)時(shí)間長(zhǎng)短并不一致,但LSTM的輸入并不需要限定在固定的長(zhǎng)度,因此可以利用LSTM對(duì)手勢(shì)數(shù)據(jù)在時(shí)間域上很好地建模。
本文使用LSTM對(duì)手勢(shì)進(jìn)行分類的結(jié)構(gòu)圖如圖5所示,第一層為輸入層,傳送的是一個(gè)動(dòng)態(tài)手勢(shì)的幀序列;第二層是LSTM層,包含50個(gè)神經(jīng)元;然后設(shè)置了一個(gè)平均值池化層和一個(gè)Softmax層[17];最后是分類輸出層。
圖5 LSTM手勢(shì)分類結(jié)構(gòu)圖
本文提出的系統(tǒng)結(jié)構(gòu)如圖6所示,主要分為三大模塊:數(shù)據(jù)采集模塊、離線模型訓(xùn)練與識(shí)別模塊、樹木場(chǎng)景應(yīng)用模塊。
圖6 系統(tǒng)框架圖
數(shù)據(jù)采集過程首先是利用Leap Motion 獲取靜態(tài)手勢(shì)和動(dòng)態(tài)手勢(shì)的數(shù)據(jù),然后對(duì)手勢(shì)數(shù)據(jù)進(jìn)行預(yù)處理。訓(xùn)練與識(shí)別過程首先對(duì)采集的數(shù)據(jù)進(jìn)行特征提取,然后訓(xùn)練分類進(jìn)行手勢(shì)識(shí)別。場(chǎng)景應(yīng)用過程首先建立場(chǎng)景,然后設(shè)計(jì)與手勢(shì)識(shí)別的正確性交互。實(shí)驗(yàn)主要包括兩個(gè)模塊:手勢(shì)識(shí)別以及場(chǎng)景中樹木交互。
首先,本文設(shè)計(jì)了5種靜態(tài)手勢(shì),如圖7所示,每個(gè)手勢(shì)采集200組,總共1 000個(gè)不同的數(shù)據(jù)樣本。每個(gè)手勢(shì)的語(yǔ)義表示Leap Motion捕獲的幀的描述符。
圖7 五種靜態(tài)手勢(shì)
本文中靜態(tài)手勢(shì)識(shí)別實(shí)驗(yàn)SVM分類器。其中經(jīng)過多次調(diào)試,SVM選取默認(rèn)參數(shù)C=3,γ=0.038 461 54。識(shí)別結(jié)果如表1所示。
表1 靜態(tài)手勢(shì)識(shí)別結(jié)果
通過實(shí)驗(yàn)結(jié)果可以得出,用于SVM分類器對(duì)以上5種靜態(tài)手勢(shì)的平均識(shí)別正確率為96.3%。
本文設(shè)計(jì)了5種動(dòng)態(tài)手勢(shì):圓、對(duì)號(hào)、三角形、左滑和右滑,如圖8所示。然后利用Leap Motion錄制動(dòng)態(tài)手勢(shì)序列數(shù)據(jù),保存到數(shù)據(jù)庫(kù)中。
圖8 五種動(dòng)態(tài)手勢(shì)
本文創(chuàng)建了一個(gè)動(dòng)態(tài)手勢(shì)的數(shù)據(jù)集,表示為一個(gè)Leap Motion記錄的幀數(shù)時(shí)間序列。針對(duì)這5種不同動(dòng)態(tài)手勢(shì)各采集400個(gè)動(dòng)態(tài)數(shù)據(jù),在每個(gè)動(dòng)態(tài)數(shù)據(jù)中提取200幀數(shù)據(jù)信息,總共采集2 000組樣本。然后通過LSTM模型進(jìn)行訓(xùn)練,樣本集隨機(jī)分為訓(xùn)練和交叉測(cè)試數(shù)據(jù)。每種動(dòng)態(tài)數(shù)據(jù)訓(xùn)練和測(cè)試數(shù)據(jù)集的分配比例是一樣的,訓(xùn)練樣本個(gè)數(shù)為200,測(cè)試樣本個(gè)數(shù)為200。實(shí)驗(yàn)得到的動(dòng)態(tài)手勢(shì)識(shí)別結(jié)果如表2所示,動(dòng)態(tài)手勢(shì)識(shí)別的平均正確率為92.6%,由實(shí)驗(yàn)結(jié)果可以得知LSTM模型的性能達(dá)到了較高的識(shí)別率。
表2 動(dòng)態(tài)手勢(shì)識(shí)別結(jié)果
本文使用Unity3D游戲開發(fā)引擎創(chuàng)建的樹木交互場(chǎng)景,場(chǎng)景目前是利用3dmax創(chuàng)建的一個(gè)玉蘭花樹的三維模型作為樹木三維模型的實(shí)例,如圖9所示。
圖9 樹木交互場(chǎng)景
從本文手勢(shì)識(shí)別實(shí)驗(yàn)中定義的靜態(tài)手勢(shì)和動(dòng)態(tài)手勢(shì)中分別選取三種,對(duì)場(chǎng)景中樹木進(jìn)行交互,使樹木產(chǎn)生不同的變化。手勢(shì)語(yǔ)義見表3。
表3 手勢(shì)語(yǔ)義
樹木場(chǎng)景交互的過程是:首先用戶將手放在Leap motion的工作區(qū)做出相應(yīng)的手勢(shì),可以是靜態(tài)的,也可以是動(dòng)態(tài)的。然后樹木場(chǎng)景交互系統(tǒng)會(huì)調(diào)用Leap Motion的API及時(shí)地采集用戶的靜態(tài)或者動(dòng)態(tài)手勢(shì)相關(guān)信息,然后將這些數(shù)據(jù)發(fā)送到訓(xùn)練好的手勢(shì)模塊庫(kù)中進(jìn)行匹配手勢(shì),并獲得手勢(shì)匹配的結(jié)果。最后場(chǎng)景中的樹木根據(jù)表中的手勢(shì)語(yǔ)義(表3)做出旋轉(zhuǎn)、縮小、放大等變化。靜態(tài)手勢(shì)交互效果和動(dòng)態(tài)手勢(shì)交互效果分別如圖10和圖11所示,當(dāng)伸出五指的時(shí)候,樹木模型恢復(fù)到初始狀態(tài)。
圖10 靜態(tài)手勢(shì)樹木交互效果
圖11 動(dòng)態(tài)手勢(shì)樹木交互效果
為了方便用戶體驗(yàn)場(chǎng)景中與樹木交互,本文設(shè)計(jì)交互的手勢(shì)不是太復(fù)雜,并且體檢交互準(zhǔn)確性比較高,用時(shí)比較短。
本文實(shí)現(xiàn)了利用Leap Motion手勢(shì)識(shí)別方法對(duì)樹木系統(tǒng)進(jìn)行交互。首先利用Leap Motion采集靜態(tài)手勢(shì)和動(dòng)態(tài)手勢(shì)數(shù)據(jù),并對(duì)其每幀數(shù)據(jù)的特征進(jìn)行了探討。針對(duì)靜態(tài)手勢(shì)識(shí)別本文提出利用支持向量機(jī)(SVM)分類模型,實(shí)驗(yàn)證明該模型對(duì)靜態(tài)手勢(shì)識(shí)別具有很好的分類效果。針對(duì)動(dòng)態(tài)手勢(shì)識(shí)別提出一種基于長(zhǎng)短期記憶神經(jīng)網(wǎng)絡(luò)(LSTM)手勢(shì)識(shí)別模型,該模型通過LSTM自動(dòng)地學(xué)習(xí)動(dòng)態(tài)手勢(shì)的時(shí)序信息,從而避免需要人工來設(shè)計(jì)特征。從實(shí)驗(yàn)結(jié)果可以看到該方法使得動(dòng)態(tài)手勢(shì)識(shí)別具有較高的準(zhǔn)確率。最后將手勢(shì)識(shí)別結(jié)果應(yīng)用到樹木交互場(chǎng)景中,該場(chǎng)景中的樹木以玉蘭花為例,實(shí)現(xiàn)了用戶通過在Leap Motion工作區(qū)做出相應(yīng)的靜態(tài)手勢(shì)或者動(dòng)態(tài)手勢(shì),對(duì)玉蘭花進(jìn)行高效直觀自然地交互。
本文需要完善和改進(jìn)的地方具體表現(xiàn)在以下兩個(gè)方面:第一,自定義的手勢(shì)識(shí)別樣本訓(xùn)練數(shù)量需要增加,手勢(shì)種類需要增多,能識(shí)別出更多的手勢(shì),目前系統(tǒng)只能識(shí)別單手手勢(shì),可以增加雙手的手勢(shì)。第二,樹木交互場(chǎng)景需要完善,增加更多的植物模型,增加更多的交互方式,使用戶獲得更美、更自然的體驗(yàn)。