陳嘉偉,韓 晶,郝瑞玲,胡 迪
(1. 中北大學 機電工程學院,山西 太原 030051; 2. 中國人民解放軍32382部隊,北京 100072)
手勢是最常用到的交流和操控方式,在日常生活中作用很大. 隨著傳感器技術(shù)的發(fā)展,手勢識別成為了可能. 近年來,越來越多的研究者將微型傳感器應(yīng)用于人體動作的識別[1],人們通過手勢傳感器獲取手部動作數(shù)據(jù),達到了人機交互的目的.
一直以來,手勢識別的算法都是人們研究的重點. Mantyjarvi[2]提出了一種利用小波變換的計算機視覺人體動作識別的方法. 徐賢[3]等應(yīng)用傳統(tǒng)K最近鄰(KNN: K-Nearest Neighbor)算法和電容式傳感器實現(xiàn)了手勢識別,相比普通的閾值識別方式,有效提高了識別成功率; 呂蕾[4]等利用數(shù)據(jù)手套實現(xiàn)了靜態(tài)手勢識別方法,通過靜態(tài)手勢特征以及相應(yīng)的手勢特征點集的提取來實現(xiàn)手勢識別; 孫榮宗[5]等提出了一種基于粗糙集的KNN算法,將粗糙集與傳統(tǒng)KNN算法結(jié)合,有效提高了KNN算法的識別效率. Xu Ruize[6]等通過定義多個手勢信號的特征值并對其符號進行編碼,結(jié)合Hopfield算法實現(xiàn)了手勢識別. 本文結(jié)合上述研究,提出一種改進的KNN算法來對ADXL335傳感器的手勢動作識別,改進KNN算法對手勢動作信號中提取的特征量進行編碼,并將KNN算法的訓練組數(shù)據(jù)進行了優(yōu)化處理,從而提高手勢識別結(jié)果的準確率,為了驗證試驗效果,本文在LabVIEW平臺設(shè)計了一款體感俄羅斯方塊[7]游戲.
KNN算法[8]是目前常用的一種數(shù)據(jù)挖掘算法,廣泛用于數(shù)據(jù)分析、 圖像處理、 文本分類等領(lǐng)域[9-10]. KNN算法的基本思想是: 給定一個訓練數(shù)據(jù)集,對新的輸入實例,選定一個適當?shù)木嚯x機制,在訓練數(shù)據(jù)集中找到與該實例最鄰近的K個實例, 這K個實例的多數(shù)屬于某個類,就把該輸入實例分類到此類中.
KNN算法步驟:
1) 處理數(shù)據(jù),對數(shù)據(jù)進行降噪處理;
2) 輸入已分類的訓練組向量以及測試組向量數(shù)據(jù);
3) 根據(jù)距離機制計算訓練組與測試組間的距離,多數(shù)采用歐式距離;
(1)
式中:Di,Dj分別為測試組向量與訓練組向量;di,dj分別為測試組向量與訓練組向量中的元素.
4) 根據(jù)計算出的距離大小,在訓練組中選出K個與測試組數(shù)據(jù)Di距離最小的訓練組數(shù)據(jù),計算出測試組數(shù)據(jù)Di屬于每個分類的權(quán)重Y,Di屬于分類Xl的權(quán)重公式為
(2)
其中
(3)
5) 輸出訓練樣本中權(quán)重最大的樣本所屬的分類標簽.
傳統(tǒng)KNN算法的不足[11]之處是當測試組分類不均衡時,會導致分類出的結(jié)果誤差較大; 當傳統(tǒng)KNN算法面對大樣本數(shù)據(jù)集時,計算成本消耗較大.
在手勢識別過程中,如果需要識別的手勢數(shù)量較多,將會導致傳統(tǒng)的KNN算法訓練組數(shù)據(jù)過于龐大,從而影響識別效率. 改進KNN算法對手勢識別中需要識別的手勢進行特征提取,根據(jù)提取的特征值對手勢進行編碼,使得每個手勢都有唯一的編碼,這樣有效減少了訓練組的數(shù)據(jù)量,進而提高了手勢識別的成功率. 目前,對于特征提取沒有固定的規(guī)則,應(yīng)用在動作識別中的特征主要有靜態(tài)特征,動態(tài)特征以及時空特征[12]. 為了保證手勢識別的準確,優(yōu)化KNN算法中手勢特征的選擇應(yīng)保證同類的特征量較為穩(wěn)定且不同類的特征量的差異明顯大于同類特征量[13]. 靜態(tài)特征可以更好地反映出動作細節(jié),因此本文對手勢信號進行靜態(tài)特征提取,加速度傳感器采集到的信號為三維信號,可以將采集到的信號看作三維空間的向量從而方便特征提取,分別采集手勢動作各軸向的幅值、 向量歸一化值以及距原點的距離.
加速度傳感器的信號經(jīng)濾波器處理后較為穩(wěn)定,記手背向上時的動作為初始動作,采集到的加速度信號為
GA=(xa,ya,za).
(4)
手掌右翻,左翻以及上抬時采集到的加速度信號為
Gi=(xi,yi,zi),i=1,2,3.
(5)
基于加速度傳感器手勢靜態(tài)特征量提取的公式為
1)手勢動作的幅值
GAGi=(ki,li,mi)=(xa-xi,ya-yi,za-zi),
i=1,2,3,
(6)
式中:k,l,m為做出手勢動作后傳感器產(chǎn)生的三軸信號的幅值.
2) 向量歸一化
(7)
式中:Y代表輸出的歸一化向量;X代表長度為的向量.
(8)
(9)
式中:xi是X的第i個元素.
3) 距原點距離差
(10)
根據(jù)改進KNN算法特征量提取方法,圖1 手勢信號所提出的特征量為
T1=(0.01,-0.18,0.16,1.32,-1.10,
-0.22,-1.25).
(11)
為了對提出的特征量進一步簡化,分別檢查提取特征量的符號,并將其儲存為手勢代碼,若特征量的數(shù)值小于0.1,則將該特征量簡化為0. 因此,圖1 手勢信號所提出的符號序列代碼為
M1=(0,-1,1,1,-1,-1,-1).
(12)
改進KNN算法手勢特征量的提取大大減少了數(shù)據(jù)量,從而降低了算法的復雜程度. 圖1 手勢信號的符號序列的提取如圖2 所示.
圖1 隨機手勢信號Fig.1 Random gesture signal
圖2 隨機手勢信號特征量Fig.2 Characteristic quantities of random gesture signals
在LabVIEW平臺搭建的手勢操作俄羅斯方塊系統(tǒng)中,利用ADXL335三軸加速度傳感器實時采集動態(tài)手勢信號,再通過美國國家儀器NI公司的USB-6002數(shù)據(jù)采集卡將信號輸入LabVIEW程序中. 信號將在程序中經(jīng)過二階貝塞爾濾波器處理后,利用改進KNN算法對手勢進行識別,從而對游戲進行手勢操作. 系統(tǒng)框圖如圖3 所示.
圖3 系統(tǒng)框圖Fig.3 System block diagram
手勢識別實驗流程如圖4 所示. 在手勢識別實驗開始后,測試組數(shù)據(jù)將會以與訓練組相同的方式進行手勢特征量的提取.
圖4 手勢識別實驗流程Fig.4 Experimental flow of gesture recognition
本文設(shè)計的是一款體感俄羅斯方塊游戲,根據(jù)該游戲的基本原理[14],需要對下落的模型進行右移,左移以及旋轉(zhuǎn)三種控制操作,本文采用手掌右翻,左翻以及上抬三種手勢動作與這三種操作對應(yīng),圖5(a)中為手勢的初始狀態(tài); (b)為右翻手勢; (c)為左翻手勢; (d)為上抬手勢. 每次游戲控制都是從手勢初始狀態(tài)開始,完成控制操作后返回手勢初始狀態(tài).
本文對操作者在坐姿和站姿兩種情況下的手腕部右翻、 左翻、 上翻三種動作進行識別,實驗中,實驗人員對三種動態(tài)手勢各做 100次,觀察閾值判別法與改進KNN算法的識別成功率.
閾值判別法作為一種簡單直觀的判別方法,常被用于傳感器信號識別中. 在本文的手勢識別中,以手腕右翻為例,實驗者做出100次右翻動作以確定閾值,X軸信號如圖6 所示,采集到右翻手勢的三軸信號初始值、 峰峰值均值及閾值如表1 所示.
圖6 峰峰值的分布Fig.6 Distribution of peak-to-peak values
表1 右翻動態(tài)手勢參數(shù)
經(jīng)過計算,右翻動作X軸信號峰峰值均值為
EXi=μ=1.601.
(13)
方差為
DXi=σ2=0.039.
(14)
根據(jù)本文選取閾值的方法,右翻手勢X軸的峰峰值滿足中心極限定理
(15)
右翻手勢X軸的閾值為
Fi=μ-1.96σ=1.526(V).
(16)
根據(jù)改進KNN算法的特征量提取方法,實驗開始前,令實驗者多次做出三種手勢動作,將三種手勢信號進行特征量提取并對符號序列編碼記錄,結(jié)果如表2 所示.
表2 訓練組手勢編碼
實驗中,實驗者將傳感器穿戴好后隨機做出三個手勢動作各50次,記錄兩種算法的識別成功率.
本文采用識別成功率M衡量手勢識別結(jié)果的準確率.
(17)
式中:Na為手勢識別正確結(jié)果的個數(shù);N為手勢動作的總次數(shù).
兩種識別方法的識別結(jié)果如表3 所示.
表3 改進KNN算法識別成功率對比
由識別結(jié)果可以看出,改進KNN算法在手勢識別成功率上有一定的提升,約為10%. 閾值判別法在前30次的動態(tài)手勢識別率較高,在后70次的動態(tài)手勢識別中識別成功率明顯下降,主要原因是在實驗過程中,人手的疲勞導致做出的動態(tài)手勢動作不標準,并且在動作過程中細微的動作也會對閾值判別法的識別造成干擾. 相比閾值判別法,改進KNN算法在動態(tài)手勢識別當中不易受操作者自身的影響,并且能保證較高的識別成功率.
將改進KNN算法與傳統(tǒng)KNN算法相比較,100次隨機手勢的識別成功率如表4 所示.
表4 傳統(tǒng)KNN算法與改進KNN算法識別結(jié)果對比
與傳統(tǒng)KNN算法相比,改進KNN算法的識別成功率提升在5%左右,主要原因在于傳統(tǒng)KNN算法的訓練組數(shù)據(jù)量過于龐大,而且K值的選取會影響傳統(tǒng)KNN算法的識別結(jié)果. 而本文的改進KNN算法,不但訓練樣本較少而且選取K=1即可保證識別率.
本文利用傳統(tǒng)KNN算法易實現(xiàn)且無需估計參數(shù)的特點,提出了一種優(yōu)化KNN手勢識別算法,實現(xiàn)了對三種手勢動作的識別,實驗結(jié)果證明,在LabVIEW平臺搭建的ADXL335體感游戲中,相比閾值判別法,改進KNN算法可以有效提高手勢識別成功率. 考慮到動態(tài)手勢種類眾多,未來的研究中將會在保證識別率的情況下進行更多動態(tài)手勢的識別.