張玉軍 ,孟曉軍 ,白漫濤
(1.解放軍69079部隊新疆烏魯木齊830013;2.解放軍69240部隊新疆烏魯木齊830011)
虛擬現(xiàn)實(VR)是一種可以創(chuàng)建和體驗虛擬世界的計算機系統(tǒng),它由計算機生成,通過視、聽、觸、嗅覺等作用于用戶,為用戶產(chǎn)生身臨其境的感覺的交互式視景仿真[1]。人機交互是實現(xiàn)虛擬現(xiàn)實系統(tǒng)的關(guān)鍵技術(shù)之一,通過人機交互,人與虛擬環(huán)境可以建立起雙向感知機制,增加了虛擬仿真維度,提高用戶的沉浸感。人機交互應(yīng)該以人為核心,在沒有鍵盤、鼠標等傳統(tǒng)交互設(shè)備的情況下,通過語言、姿態(tài)、手勢等自然表達方式實現(xiàn)人與虛擬世界的自然融合。
手勢交互是目前較為流行的交互方式,通過預(yù)先定義的手勢模型,可實現(xiàn)對虛擬場景的有效控制,如菜單選擇、音視頻播放以及移動控制等,其核心任務(wù)是動態(tài)手勢識別,主要工作有兩項:分割與識別。分割的任務(wù)是獲取手勢數(shù)據(jù),從一個連續(xù)的動作序列中提取有意義的手勢動作序列,即確定手勢的起始點和終止點,可通過固定閾值(速度、角度等)的方法確定,也可通過閾值模型自動分割[2]。識別的任務(wù)是獲取手勢標識,根據(jù)手勢動作序列數(shù)據(jù),判斷出對應(yīng)的手勢標識,從而確定是何種手勢。本文主要討論識別問題,其難度在于手勢尺度的多樣性,即對于同一標記手勢,即使是相同人,也存在形狀、時長、軌跡等不同,隱馬爾可夫模型(Hidden Markov Model,HMM)具有很強的時序數(shù)據(jù)建模能力,可有效解決這一難題[3]。
20世紀60年代左右,L.E.Baum等人在發(fā)表的論文中首次提出了隱馬爾科夫模型(Hidden Markov Model,HMM),它是一種基于統(tǒng)計的模型,隨后經(jīng)過發(fā)展與改進,被廣泛運用于語音識別、自然語言處理、生物信息和故障診斷等領(lǐng)域[4]。HMM是一個雙重隨機過程,即狀態(tài)間的隨機轉(zhuǎn)移過程和觀測的隨機輸出過程,其中,狀態(tài)轉(zhuǎn)移過程是隱藏的,通過觀測序列的觀測值表現(xiàn)。
隱馬爾科夫模型通常由一組包含有5個基本要素的五元組λ=(S,V,A,B,π )表示,五元組中各要素的定義為[5]:
1)隱狀態(tài)集S={S1,S2,...,SN},N為隱狀態(tài)數(shù)量,不同時刻的狀態(tài)可以相互轉(zhuǎn)換,在t時刻HMM的狀態(tài)為qt,qt∈S。
2)觀測值集V={V1,V2,...,VM},M為可能的觀測數(shù),在t時刻狀態(tài)的輸出為ot,ot∈V。O=(o1,o2,...,oT) 為一個HMM的觀測序列,其長度為T。
其中,1≤i,j≤N,且滿足:
其中,1≤j≤N,1≤k≤M,且滿足狀態(tài)Sj所有觀測值概率相加為1,即:
5)初始狀態(tài)分布 π=(πi),其中 πi表示在起始時刻模型處于狀態(tài)Si的概率,即:
其中,1≤j≤N
HMM工作時,模型的一般運行過程如下:系統(tǒng)根據(jù)初始分布隨機生成一個狀態(tài),而后根據(jù)狀態(tài)轉(zhuǎn)移矩陣依次從一個狀態(tài)轉(zhuǎn)移到另一個狀態(tài),并且在每個狀態(tài)輸出觀測值,通過這種方式,HMM將狀態(tài)序列與觀測序列構(gòu)成統(tǒng)一系統(tǒng)進行分析[6]。
HMM有三類基本問題:評價問題、解碼問題和學(xué)習(xí)問題,各問題的經(jīng)典算法可見文獻[7]。對于手勢識別應(yīng)用而言,最關(guān)心的是學(xué)習(xí)問題和解碼問題,即模型的訓(xùn)練和手勢的識別,其中:模型訓(xùn)練常用Baum-Welch算法實現(xiàn),這是一種非監(jiān)督學(xué)習(xí)方法,在給定觀測序列O和初始化參數(shù)λ后,通過極大似然法調(diào)整參數(shù)獲得最優(yōu)λ*=(A,B,π),使得在該模型下輸出的觀測序列概率P(O|λ)最大;手勢識別常用Viterbi算法預(yù)測,即在最優(yōu)λ*=(A,B,π)和觀測序列O已知的情況下,通過動態(tài)規(guī)劃法計算最可能的狀態(tài)序列,從而求得手勢標識。
根據(jù)HMM輸出觀測值概率密度的連續(xù)性可以把HMM劃分為離散型HMM(DHMM)和連續(xù)型HMM(CHMM)兩種類型[8]。上述由五元組表示的一般型HMM即為DHMM,其隨機過程為離散的觀測序列,如果應(yīng)用在手勢識別中,建模時需要把連續(xù)的數(shù)據(jù)進行離散化,處理過程中會丟失部分特征信息,從而影響識別效果。為此,論文采取連續(xù)型CHMM進行手勢識別建模。
CHMM建模時,可以用概率密度函數(shù)來描述狀態(tài)輸出的觀測值。對于多維特征,可以考慮使用混合高斯概率密度函數(shù),記為CGHMM。CGHMM與普通HMM類似,只是觀測輸出概率矩陣B由離散形式改為概率密度函數(shù),根據(jù)上述HMM定義,一個CGHMM由下列參數(shù)組成[9]:
1)模型拓撲結(jié)構(gòu)及隱狀態(tài)數(shù)量N,每個狀態(tài)可能輸出的觀測值數(shù)量M。
4)觀測輸出概率矩陣B是一組觀測概率密度函數(shù),即[10]:
為了將CGHMM更好的應(yīng)用到手勢識別中,需要解決評價、訓(xùn)練、解碼3個基本問題,詳見文獻[11]。
使用CGHMM進行手勢識別,需要確定模型的拓撲結(jié)構(gòu)、隱狀態(tài)數(shù)量等參數(shù)設(shè)置問題。
1.3.1 拓撲結(jié)構(gòu)選擇
根據(jù)隱狀態(tài)之間的轉(zhuǎn)換連接,HMM具有幾種典型的拓撲結(jié)構(gòu),包括全連接型(Fully Connected)遍歷型(Ergodic model)和左右型(Left-Right)。根據(jù)手勢運動的特點,希望模型可以描述出狀態(tài)轉(zhuǎn)移在時間上的先后關(guān)系,以便于識別計算,為此選擇左右型帶狀拓撲結(jié)構(gòu),如圖1所示。模型中的狀態(tài)只能在它本身或下一個相鄰狀態(tài)間轉(zhuǎn)換,不能返回上一個狀態(tài)。
圖1 模型拓撲圖
1.3.2 隱狀態(tài)數(shù)量優(yōu)選
在實際應(yīng)用中,一般而言,一個HMM的性能與隱狀態(tài)的數(shù)量呈正比,隱狀態(tài)數(shù)量越多,性能越好,但會降低識別速度。為此,要平衡HMM識別率和識別速度的矛盾,需要合理選擇隱狀態(tài)數(shù)量。在隱狀態(tài)數(shù)量選擇上,有啟發(fā)式選擇方法,如交叉驗證(cross validation);模型選擇方法,主要有AIC準則(Akaike’s Information Criterion)、BIC 準則(Bayesian Information Criterion)等方法[12]。文中采用BIC準則,通過引入模型復(fù)雜度的懲罰項,來確定狀態(tài)數(shù)量。
假設(shè)Θ為觀測序列集,L為觀測序列個數(shù),為Θ中所有觀測的總量,則某一HMM狀態(tài)數(shù)量為k時的BIC(k)基本形式為[8]:
在 BIC準則中,最優(yōu)的狀態(tài)數(shù)是k*=argmaxkBIC(k)。在實際應(yīng)用中,可先根據(jù)經(jīng)驗,設(shè)定狀態(tài)數(shù)目范圍,而后通過比較獲得最佳數(shù)量,文中手勢的狀態(tài)數(shù)目范圍選擇2個至8個。
手勢識別系統(tǒng)在實際應(yīng)用時主要有兩種方式,一種是借助于數(shù)據(jù)手套實現(xiàn),通過手套內(nèi)置傳感器反饋手指各關(guān)節(jié)的狀態(tài),并將數(shù)據(jù)發(fā)送至處理系統(tǒng)進行手勢識別[13];另一種是基于計算機視覺技術(shù),通過光學(xué)攝像頭采集手部圖像,對圖像進行處理后獲得手指及各關(guān)節(jié)信息[14]。單從手勢識別而言,基于計算機視覺的實現(xiàn)方式不會對用戶產(chǎn)生束縛和干擾,交互更加自然,而且成本低廉,適合于推廣。
目前可用于捕捉手部信息的成熟設(shè)備主要有Kinect和Leap Motion[15],其中Kinect主要用于整個身體的捕獲,而Leap Motion則完全是針對手部設(shè)計的設(shè)備,其低成本和小體積的優(yōu)勢,有利于在手勢交互系統(tǒng)中的封裝與二次開發(fā)。
Leap Motion傳感器內(nèi)置3個紅外LED和2個紅外攝像頭,采用紅外成像技術(shù)從不同角度捕獲傳感器上方錐型體內(nèi)的手部信息,形成三維數(shù)據(jù),有效識別范圍在25~600 mm之間,識別信息主要有手部和關(guān)節(jié)的位置、姿態(tài)、速度等參數(shù),識別精度為0.01 mm,精確、高效的數(shù)據(jù)獲取能力為手勢識別研究提供了基礎(chǔ)支持[16]。在使用過程中,用戶將手置于傳感器上方后,Leap Motion會自動捕獲手部信息,并以115 fps的幀速率刷新信息,以供用戶使用。Leap Motion傳感器的工作方式如圖2所示。
圖2 Leap Motion工作示意圖
課題選取手勢的位置作為特征值,以固定速度閾值的方式分割有效識別手勢,即確定手勢的起始點和終止點位置,考慮到手部的抖動及拐點的停頓,假設(shè)當(dāng)速度連續(xù)n次大于或小于某一閾值時[17],手勢開始或結(jié)束。以手勢開始為例:假設(shè)計數(shù)器n初始為 0,如果獲取的手勢速度vt大于閾值vΘ,則n++;否則n重置為0,重新計數(shù)。當(dāng)n大于計數(shù)閾值nΘ,則手勢開始;否則繼續(xù)計數(shù)。如圖3所示。手勢結(jié)束的判定流程與開始類似,改為手勢速度vt小于閾值vΘ即可。
圖3 手勢開始判定流程
經(jīng)過測試分析,手勢開始判定的速度閾值可設(shè)為200 mm/s,計數(shù)閾值為2;手勢結(jié)束判定的速度閾值可設(shè)為100 mm/s,為了防止手勢在轉(zhuǎn)折、拐點等位置過早終止,終止計數(shù)閾值設(shè)定為5較為合適。
在具體應(yīng)用中,開發(fā)者可通過LeapSDK對Leap Motion進行二次開發(fā)[18]與集成,目前主要有Orion和V2兩個系列的開發(fā)工具包。二次開發(fā)的核心是異步調(diào)用Leap.dll服務(wù)以獲取Leap Motion提供的數(shù)據(jù),以實現(xiàn)各種預(yù)定功能。手勢識別系統(tǒng)技術(shù)框架如圖4所示。
圖4 技術(shù)框架
手勢識別系統(tǒng)中主要模塊的功能如下:
1)Leap服務(wù)模塊。Leap動態(tài)庫通過USB接口獲取Leap Motion傳感器的實時跟蹤數(shù)據(jù),并對原始數(shù)據(jù)進行處理后以推送至其它應(yīng)用,可通過Leap Motion設(shè)置面板對服務(wù)進行設(shè)置和狀態(tài)檢測。
2)手勢訓(xùn)練模塊。通過Leap服務(wù)采集訓(xùn)練數(shù)據(jù),提取特征向量并進行手勢標記,而后進行訓(xùn)練與測試,將訓(xùn)練好的模型存入手勢識別模型庫,每種手勢對應(yīng)1個HMM模型。
3)手勢識別模塊。應(yīng)用時,通過Leap服務(wù)實時接收手勢數(shù)據(jù),而后通過識別模型庫中的模型[19]進行計算,輸出識別結(jié)果。
假設(shè)虛擬場景中有控制手勢7種,如表1所示。其中圖標所示圓點表示手勢軌跡的起點,箭頭為手勢軌跡的走向。
利用Leap Motion對這7種手勢特征數(shù)據(jù)進行采集,每種手勢分別采集50組訓(xùn)練數(shù)據(jù)和20組測試數(shù)據(jù)。在實際訓(xùn)練時,為了得到較好的訓(xùn)練效果,需要將數(shù)據(jù)進行正則化處理,使得訓(xùn)練好的模型有較強的普適性。
表1 控制手勢
在上述準備的基礎(chǔ)上,選取訓(xùn)練數(shù)據(jù)[20],對模型進行訓(xùn)練,首先將隱狀態(tài)數(shù)量從2~8進行遍歷,選擇最佳的數(shù)量,結(jié)果如圖5所示。
圖5 隱狀態(tài)數(shù)量與BIC關(guān)系
由圖5可知各HMM模型應(yīng)該設(shè)定的隱狀態(tài)數(shù)量,將表中確定的隱狀態(tài)數(shù)量代入模型中,對手勢識別模型進行訓(xùn)練與測試,其結(jié)果如表2所示。
表2 模型訓(xùn)練結(jié)果
由表2的結(jié)果可知,對于前4個簡單的手勢識別率基本可滿足百分百,對于后3個較為復(fù)雜的手勢也可滿足場景控制需要。
基于手勢的人機交互方式,可使用戶以較為自然的方式與虛擬環(huán)境進行交流,增加了用戶的參與感和沉浸感,有利于提升用戶在虛擬場景中的整體體驗效果。文章討論了連續(xù)隱馬爾科夫模型在單個動態(tài)手勢識別中的應(yīng)用問題,對模型的拓撲結(jié)構(gòu)和隱狀態(tài)數(shù)量的設(shè)置進行了分析,最后基于Leap Motion傳感器設(shè)計了手勢識別系統(tǒng)對模型進行仿真分析,結(jié)果表明模型基本可滿足單個手勢的識別要求,下一步,將深入研究自適應(yīng)手勢分割和連續(xù)動態(tài)手勢識別等問題。