馬力馮瑾
(西安郵電大學 西安 710061)
隨著計算機科學的迅速發(fā)展,人機交互技術(shù)已成為計算機技術(shù)領(lǐng)域中的重要研究課題[1]。手勢識別作為人機交互中重要的技術(shù)之一,有其現(xiàn)實的研究意義。Leap Motion是一款基于USB接口的體感控制器設(shè)備,它可檢測其視野區(qū)域內(nèi)的手、手指以及類似于手指的其他物體[2],并給出這些物體的實時位置坐標和一些運動信息。Leap Motion控制器的應(yīng)用將會使人機交互達到一個新的高度[3],本文中利用Leap Motion控制器開發(fā)了一個Gestures Visualizer系統(tǒng),用于提供動態(tài)手勢數(shù)據(jù),且基于HMM算法對動態(tài)手勢進行識別[4]研究,并對實驗結(jié)果進行分析。
隱馬爾科夫模型(HMM)是一種有著馬爾科夫?qū)傩缘南到y(tǒng)[5],其中的馬爾科夫?qū)傩灾傅氖撬南乱粋€狀態(tài)依賴于前一個狀態(tài),并且每個狀態(tài)之間的轉(zhuǎn)移是有概率的。一個典型的HMM的模型結(jié)構(gòu)可以表示為λ=( )N,M,A,B,π,各參數(shù)定義如下:
1)N代表模型所隱狀態(tài)的數(shù)量,用qt表示t時刻的狀態(tài),Q={q1,q2,…,qt,…,qT}表示隱狀態(tài)序列,而 qt取{s1,s2,…,sN}。
2)M 代表模型觀察值的數(shù)量,用ot表示t時刻的觀察值,O={o1,o2,…,ot,…,oT}表示觀察序列,而 ot取{v1,v2,…,vM}。
3)A={aij}表示 N×N狀態(tài)轉(zhuǎn)移矩陣,用aij=P(qt=sj|qt-1=si)表示隱狀態(tài) si轉(zhuǎn)向 sj的概率。
4)B={bj(k)}表 示 N×M 觀 察 矩 陣 ,用bj(k)=P(ot=vk|qt=sj)表示t時刻隱狀態(tài)為sj時觀察值vk的概率。
5) π={π1,π2,…,πN} 表 示 初 始 狀 態(tài) ,用πi=P(q1=si)表示初始狀態(tài)q1為si的概率。
1)若給定模型λ和觀察狀態(tài)序列O,求解每個模型的輸出概率P(O |λ),分別比較每個模型的P(O |λ),P(O |λ)最大的模型就是最終的識別結(jié)果[6]。給定HMM的模型 λ和隱狀態(tài)序列Q={q1,q2,…,qT},則 P(Q |λ)定義如下:
采用前向-后向(Forward-Backward)算法求解P(O |λ)的計算過程如下:
(1)初始化 α1(i)=πibi(o1) ?,?i=1?,?2?,…,N ;
(2)αt+1(j)=[αt(i) aij]bj(ot+1),t=1,2,…,??T-1?,j=1,2,…,N ;
2)定義后向變量,表示給定 λ,t時刻所對應(yīng)的狀態(tài)為si,則t+1到T時刻所產(chǎn)生觀察序列ot+1ot+2...oT的概率。后向算法的計算過程如下:
(1)初始化 βT(i)=1?,?i=1?,?2?,…,?N ;
(2)βt( i)=aijbj(ot+1)βt+1(j) ?, ?t=T-1?,?…,1?,i=1?, ?2?,?…?,?N
學習問題即對HMM模型進行不斷地訓練,為每個模型找出最佳的參數(shù)λ,該參數(shù)λ可使 p(O |λ)取得最大值。采用Baum-Welch算法求解最優(yōu)模型[7]參數(shù)λ。在給定λ和觀察序列O時,定義后驗概 率 函 數(shù) γt(i)=P(qt=si|O,λ) , 且 符 合γt(i)=1;在給定模型 λ和觀察序列O時,t時刻為si狀態(tài),t+1時刻為sj狀態(tài),用ξ(i , j)表示概率函數(shù),則 γt(i)和 ξ(i,j)可分別表示如下:
則相關(guān)參數(shù)估計公式如下:
2.2.1 求解最佳模型參數(shù)λ
1)初始化 λ;
2)由現(xiàn)有的λ和觀察序列O,根據(jù)以上參數(shù)估計公式對相關(guān)參數(shù)進行估計,得出新的模型參數(shù)λˉ=(πˉ ,Aˉ,Bˉ);
3)根據(jù)Forward-Backward算法計算 P(O |λ)和P(O |,若符合 |logP(O-logP(O |λ)|< ε,則說明P(O |λˉ)收斂,其 λˉ即為最優(yōu)模型參數(shù)。
本文結(jié)合Leap Motion控制器和HMM對動態(tài)手勢進行識別[8]。該手勢識別過程實現(xiàn)了動態(tài)手勢數(shù)據(jù)的錄制,以及對錄制好的手勢序列進行學習,然后進行分類識別[9]。動態(tài)手勢識別的處理流程如圖1所示。
圖1 動態(tài)手勢識別流程圖
手勢錄制界面Gestures Visualizer由以下幾部分組成(見圖2)。
1)按空格鍵開啟或是關(guān)閉錄制;
2)彈出錄制界面后,可以選擇保存文件的路徑;
3)錄制的過程中,手勢也將相應(yīng)的可視化在界面里;
4)選擇按鈕進入可視化模式。
實驗中利用Gestures Visualizer錄制動態(tài)手勢數(shù)據(jù),并將其保存為。lmr文件格式,為后續(xù)的識別過程提供數(shù)據(jù)。本文選用了6個動態(tài)手勢。對于每一種手勢,我們記錄了120個樣本(每個實驗者記錄30個樣本),這些數(shù)據(jù)記錄了手勢在不同時間和不同位置上的坐標信息。實驗中所選的動態(tài)手勢有“Count the number 1、2、3”、“open the door”、“circle”、“scissors”、“gun”和“moving the object”。
圖2 手勢數(shù)據(jù)錄制界面Gestures Visualizer
1)給定觀測序列即輸入手勢軌跡的特征向量,不斷更新估算出新的模型參數(shù)(ˉ ,ˉ,),直至|logP(Oˉ)-logP(O |λ)|< ε,則說明 P(Oλˉ)收斂 ,λˉ即為最優(yōu)模型參數(shù)。模型在訓練時使用Baum-Welch算法。通過訓練可以得到多個HMM模型,根據(jù)已知的模型參數(shù),輸入樣本的觀察序列,可求出樣本在對應(yīng)的模型中出現(xiàn)的概率,這里的觀察序列即為手勢特征向量。手勢建模[14]的處理過程如圖3所示。
2)手勢識別過程主要是對所建立的手勢模型進行評估。通過在給定輸入手勢特征向量條件下,計算每個HMM的輸出概率,找出輸出概率值最大
實驗使用上述6種手勢,每種手勢有120個樣本,由4個人進行錄制,每人每種手勢錄制30個,共720個樣本,這些樣本中的66.7%被劃分為訓練集,剩余的240個記錄數(shù)據(jù)作為測試集,該數(shù)據(jù)集稱為dynamic-6數(shù)據(jù)集。每種手勢的訓練集被用來單獨訓練相應(yīng)的HMM模型[10]。每次訓練過程執(zhí)行10次,最后使用交叉驗證的方法使模型達到一個好的識別率[11]。定義學習速率μ為0.1,HMM模型的狀態(tài)數(shù)設(shè)置為10。
利用Leap Motion控制器采集的數(shù)據(jù)信息包括手指在三維空間里的坐標信息以及速度等信息[12],在使用采集到的手勢進行手勢建模前,需要對采集到的手勢數(shù)據(jù)信息進行預(yù)處理,然后使用k-means算法[13]將給定的觀察序列分成不同的簇。
的模型,即已知觀察序列的最優(yōu)匹配模型。通常系統(tǒng)中每一種手勢類別都對應(yīng)著一個HMM,需利用已知的觀察序列對每個模型進行評估。其所求解的概率值最大的HMM就是和已知觀察序列的最優(yōu)匹配模型。該過程采用Forward-Backward算法進行求解的,動態(tài)手勢的識別過程如圖4所示。
圖3 手勢建模過程
圖4 手勢識別過程
為了評估所提出的方法對動態(tài)手勢的識別質(zhì)量,可通過以下實驗選取HMM的最優(yōu)參數(shù)值。
實驗首先是要找到一個用于描述手勢的特征集,它包含有動態(tài)手勢相關(guān)的數(shù)據(jù)信息。實驗中的數(shù)據(jù)集選用上述所介紹的dynamic-6數(shù)據(jù)集進行評估。
1)第一個特征集(feature set 1)包含的信息主要是關(guān)于手的運動速度的信息,由以下幾個特征組成:
(1)在第i個位置時手指的數(shù)量;
(2)在第(i-10)個位置時手指的數(shù)量;
(3)在某一個位置時X軸上的位移;
(4)在某一個位置時Y軸上的位移;
(5)在某一個位置時Z軸上的位移。
feature set 1中所獲取的特征信息是參照Leap Motion控制器的坐標系統(tǒng),但是執(zhí)行手勢時相對于Leap Motion控制器的角度不同,會使得特征集信息發(fā)生變化,甚至會產(chǎn)生錯誤的結(jié)果,因此,將Leap Motion控制器坐標系統(tǒng)換成本地坐標系統(tǒng)。并且在第二個特征集(feature set 2)中增加了計算手的位移大小和運動的方向信息。feature set 2共增加了以下三個特征信息:
(1)手的位移值;
(2)歸一化位移矢量和手掌法向量在第(i-10)位置時的點積;
(3)歸一化位移矢量和手掌方向向量第(i-10)位置時的點積。
2)觀察數(shù)據(jù)庫中的手勢樣本可以看出,有的樣本僅僅是手指的運動產(chǎn)生了位移,而手并未運動,而在feature set 2中沒有考慮這些信息。因此,在第三個特征集(feature set 3)中我們增加了計算手指的位移大小,考慮到減小特征集的大小,這里只計算位移的幅度大小,同時,鑒于Leap Motion控制器對手指編號的不穩(wěn)定性,也需要對手指進行排序。故feature set 3中增加的特征信息如下:
(1)4個最大的手指的位移幅度值。
3)通過feature set 3的實驗結(jié)果發(fā)現(xiàn),增加手指的位移信息會降低識別率,因此,我們決定剔除手指的位移信息這一特征。在第四個特征集(feature set 4)中我們增加了靜態(tài)手勢識別的特征信息[15],具體如下:
(1)在第i個位置時,所有組合中手指指尖之間的4個最大的歐氏距離;
(2)在第i個位置時,所有組合中手指向量之間的4個最大的絕對角度;
(3)在第i個位置時,手指指尖和手掌之間的4個最大的歐氏距離;
(4)在第i個位置時,手指向量和手掌法向量之間的4個最大的絕對角度。
由表1的實驗結(jié)果可知,增加靜態(tài)信息能夠提高識別率,因此,選擇保留靜態(tài)信息特征。第五個特征集(feature set 5)就是由feature set 3的(1)和(2)組成,但是得到的結(jié)果相比之前的實驗結(jié)果沒有取得顯著的提高。實驗所得到的結(jié)果如表1所示。
表1 所有特征集上的實驗結(jié)果
由表1可以看出,取得最好效果的是feature set 4,這說明在動態(tài)手勢特征中增加靜態(tài)信息特征利于對動態(tài)手勢進行分類,因此實驗選用feature set 4。
通過實驗測試觀察序列的數(shù)目對總識別率的影響,并確定觀察序列的數(shù)目。實驗中使用feature set 4,學習速率設(shè)置為μ=0.05。
表2 不同觀察序列數(shù)目所得到的實驗結(jié)果
實驗結(jié)果如表2所示,當觀察序列數(shù)目為k=6時,識別率相比于之前取得了較好的結(jié)果。使用交叉驗證時識別率為79.6%,而使用整個數(shù)據(jù)集時的識別率為77.6%。
實驗中,選擇一個穩(wěn)定的學習速率在整個訓練過程可以最小化參數(shù)的數(shù)目。實驗中使用feature set 4,觀察序列數(shù)目為k=6,分別選取學習速率為0.01、0.05、0.1和0.2進行測試。實驗結(jié)果如表3所示,學習速率的值在μ=0.05時取得最佳識別效果。
表3 不同的學習速率所得到的實驗結(jié)果
上面的實驗都為假定HMM的狀態(tài)數(shù)為10,所以實驗最后測試HMM的狀態(tài)數(shù)對識別結(jié)果的影響,選取5,10,20,30這四個值分別進行實驗。實驗結(jié)果如表4所示,當HMM的狀態(tài)數(shù)為5時,HMM模型太簡單而導致識別率較低。而當狀態(tài)數(shù)高于10時,識別率降低,故HMM的最佳狀態(tài)數(shù)選10最為合適。
表4 不同HMM狀態(tài)數(shù)所得到的實驗結(jié)果
本文對動態(tài)手勢識別方法問題進行了研究,通過Leap Motion控制器開發(fā)Gestures Visualizer系統(tǒng)錄制實驗數(shù)據(jù),構(gòu)建手勢數(shù)據(jù)庫,引入HMM對手勢模型進行訓練和識別,然后通過實驗選取最優(yōu)的特征集和參數(shù),以提高最終的手勢識別率。