韓彥鵬,秦飛舟
(寧夏大學(xué)物理與電子電氣工程學(xué)院,寧夏銀川 750021)
隨著科學(xué)技術(shù)的不斷進(jìn)步,人機(jī)交互向著越來(lái)越便捷的方向發(fā)展,各種體感設(shè)備都對(duì)人機(jī)交互方式產(chǎn)生了巨大影響,人們的生活方式也因人機(jī)交互而發(fā)生改變[1]。在人機(jī)交互技術(shù)領(lǐng)域中,手勢(shì)交互正在成為行業(yè)的熱點(diǎn)之一。在手勢(shì)交互技術(shù)中,手勢(shì)識(shí)別算法是最為關(guān)鍵的內(nèi)容。
目前,手勢(shì)采集的方式主要有數(shù)據(jù)傳感手套和視覺(jué)信息采集兩種。數(shù)據(jù)傳感手套的采集方式為通過(guò)在手指、指尖和手背等部位佩戴傳感器,采集手部動(dòng)作數(shù)據(jù)發(fā)送到電腦端;視覺(jué)信息的采集方式為通過(guò)攝像頭采集規(guī)定空間領(lǐng)域內(nèi)的信息圖像,發(fā)送到電腦端。
常用的視覺(jué)信息采集設(shè)備有Kinect[2]和Leap-Motion[3]兩種。LeapMotion 具有的紅外濾光膜能消除特定場(chǎng)景下光線明暗變化帶來(lái)的準(zhǔn)確性偏差問(wèn)題,對(duì)環(huán)境依賴性更小,手部識(shí)別的準(zhǔn)確性更高,它的工作距離的范圍為25~600 mm,掃描頻率為每秒200 幀,150°的大視野范圍使其捕捉系統(tǒng)更具有準(zhǔn)確性和應(yīng)用性[4]。文中采用LeapMotion 作為采集工具,圖1 為L(zhǎng)eapMotion 拆分結(jié)構(gòu),圖2為L(zhǎng)eapMotion工作范圍。
圖1 LeapMotion拆分結(jié)構(gòu)
圖2 LeapMotion工作范圍
LeapMotion 通過(guò)對(duì)手部節(jié)點(diǎn)位置和運(yùn)動(dòng)特征追蹤、定位,完成手部數(shù)據(jù)記錄,手部節(jié)點(diǎn)模型[5]如圖3所示。手部運(yùn)動(dòng)特征[6]由指尖方向向量和掌心法向量組成,如圖4 所示。采集到的數(shù)據(jù)以文本格式存儲(chǔ)到指定的文件夾內(nèi)。
圖3 手部節(jié)點(diǎn)模型
圖4 指尖方向向量和掌心法向量
手勢(shì)數(shù)據(jù)采集環(huán)境由PC 機(jī)和LeapMotion 設(shè)備組 成。在PC 機(jī)上安裝LeapMotion SDK(Software Development Kit)、Python2.7 編譯器和PyCharm 平臺(tái)組成開(kāi)發(fā)環(huán)境。PC 機(jī)負(fù)責(zé)存儲(chǔ)采集到的手部數(shù)據(jù),LeapMotion 作為手部數(shù)據(jù)采集的硬件。
構(gòu)建的手勢(shì)數(shù)據(jù)集設(shè)計(jì)了以下五種手勢(shì)樣本:剪刀、石頭、布、GOOD、OK,如圖5 所示。通過(guò)Python程序完成對(duì)五種手勢(shì)數(shù)據(jù)的多次收集并建立數(shù)據(jù)集,每種手勢(shì)設(shè)置了120 組訓(xùn)練數(shù)據(jù)。
圖5 五種手勢(shì)樣本
K-近鄰算法(K-Nearest Neighbor,KNN)是一種基本的分類與回歸算法,1968 年由Cover 和Hart 提出,通過(guò)測(cè)量不同特征值之間的距離來(lái)進(jìn)行分類,具體原理:給定一個(gè)訓(xùn)練數(shù)據(jù)集,對(duì)新輸入的實(shí)例,在訓(xùn)練數(shù)據(jù)集中找到與該實(shí)例最鄰近的K個(gè)實(shí)例,如果這K個(gè)實(shí)例的多數(shù)屬于某個(gè)類,就把該實(shí)例歸于這個(gè)類[7-8]。如圖6 所示,有A 和B 兩類不同的樣本集,待分類樣本點(diǎn)為C,在與C 相鄰最近的六個(gè)點(diǎn)中,A 類有四個(gè),B 類有兩個(gè),由此判定點(diǎn)C 屬于A 類。
圖6 K-近鄰算法分類原理圖
KNN[9]算法以其穩(wěn)定性好、準(zhǔn)確率高等特點(diǎn)受到廣泛應(yīng)用,但其對(duì)訓(xùn)練數(shù)據(jù)依賴程度較大。若在訓(xùn)練數(shù)據(jù)集中,有一兩個(gè)數(shù)據(jù)是錯(cuò)誤的,恰好又在需要分類數(shù)值附近,則會(huì)導(dǎo)致預(yù)測(cè)數(shù)據(jù)不準(zhǔn)確,對(duì)訓(xùn)練數(shù)據(jù)的容錯(cuò)率較低。KNN 算法對(duì)于“維數(shù)災(zāi)難”問(wèn)題也未能很好地解決,由于每個(gè)待分類的樣本都要計(jì)算它到全部點(diǎn)的距離,根據(jù)距離排序求得K個(gè)鄰近點(diǎn),在面對(duì)高維度數(shù)據(jù)(維度不小于2 且擁有多個(gè)屬性的數(shù)據(jù))時(shí),分類的準(zhǔn)確性會(huì)受到影響。
支持向量機(jī)(Support Vector Machine,SVM)算法是采用結(jié)構(gòu)風(fēng)險(xiǎn)最小化準(zhǔn)則設(shè)計(jì)的,考慮了經(jīng)驗(yàn)風(fēng)險(xiǎn)和置信范圍[10]。對(duì)于非線性問(wèn)題,通過(guò)線性變換轉(zhuǎn)到高維度的特征空間,在高維特征空間[11]中構(gòu)造線性判別函數(shù)來(lái)實(shí)現(xiàn)訓(xùn)練樣本分類,其算法復(fù)雜度與特征空間的維數(shù)無(wú)關(guān),避免了“維數(shù)災(zāi)難”問(wèn)題。
SVM 算法主要針對(duì)有限樣本情況,其目標(biāo)是得到現(xiàn)有信息下的最優(yōu)解,而不僅僅是樣本數(shù)趨于無(wú)窮大時(shí)的最優(yōu)解,SVM 算法通過(guò)學(xué)習(xí),選擇出只占訓(xùn)練樣本集少部分的支持向量,通過(guò)SVM 算法處理的數(shù)據(jù),可以得到全局最優(yōu)解。因此SVM 算法可以彌補(bǔ)KNN算法的缺點(diǎn),文中將利用SVM 算法對(duì)KNN 算法進(jìn)行改進(jìn),幫助KNN 算法完成對(duì)錯(cuò)誤和差值較大數(shù)據(jù)的預(yù)處理,改進(jìn)的算法命名為S-KNN算法。
通過(guò)對(duì)手勢(shì)數(shù)據(jù)進(jìn)行歸一化處理來(lái)判斷其是否在探測(cè)范圍內(nèi),若在范圍內(nèi)則輸入SVM 算法進(jìn)行下一步手勢(shì)數(shù)據(jù)篩選,若不在探測(cè)范圍內(nèi)則舍棄數(shù)據(jù)。手勢(shì)數(shù)據(jù)通過(guò)算法處理后再次判斷是否為良好的手勢(shì)數(shù)據(jù),良好數(shù)據(jù)的標(biāo)準(zhǔn)為:
1)若手勢(shì)數(shù)據(jù)節(jié)點(diǎn)(真實(shí)風(fēng)險(xiǎn)值)與算法預(yù)測(cè)值(經(jīng)驗(yàn)風(fēng)險(xiǎn)最優(yōu)值)相差超過(guò)10%,則舍棄該節(jié)點(diǎn)。
2)若兩節(jié)點(diǎn)(或兩個(gè)節(jié)點(diǎn)以上)在空間位置重合,則去除重合節(jié)點(diǎn)。
滿足以上兩個(gè)條件,則判斷為良好的手勢(shì)數(shù)據(jù),輸入給下一層級(jí)的KNN 算法處理。通過(guò)兩次判斷去除不必要的和錯(cuò)誤的三維坐標(biāo)信息[12],使數(shù)據(jù)具有更好的訓(xùn)練性和準(zhǔn)確性。利用KNN 算法進(jìn)行手勢(shì)識(shí)別計(jì)算,測(cè)定哪些手指是張開(kāi)的,哪些是蜷縮的,通過(guò)其蜷縮的程度[13]計(jì)算出最終結(jié)果。例如需要判斷一個(gè)剪刀的手勢(shì),就需要判斷大拇指、無(wú)名指和小拇指是蜷縮的,食指和中指是伸開(kāi)的。通過(guò)輸出結(jié)果來(lái)驗(yàn)證S-KNN 算法的魯棒性[14]和有效識(shí)別率,S-KNN 算法流程如圖7 所示。
圖7 S-KNN算法流程
如圖8 所示,S-KNN 算法與基于歐式距離的KNN 算法[15]的平均識(shí)別率隨著K值變化的對(duì)比圖中,線S-KNN-Feature 代表S-KNN 算法的平均識(shí)別率,線KNN-EU-Feature 代表基于歐式距離的KNN算法的平均識(shí)別率,橫軸代表K的取值,縱軸為識(shí)別準(zhǔn)確率。隨著K值的變化二者的識(shí)別率有著不同程度的波動(dòng),從實(shí)驗(yàn)結(jié)果可以看出,S-KNN 算法對(duì)手勢(shì)的平均識(shí)別率要遠(yuǎn)遠(yuǎn)高于基于歐式距離的KNN算法的平均識(shí)別率,當(dāng)K等于10 時(shí),S-KNN 算法對(duì)手勢(shì)的平均識(shí)別率達(dá)到最高,約為97%,而基于歐式距離的KNN算法對(duì)手勢(shì)的平均識(shí)別率只有78.8%左右。
圖8 S-KNN算法與基于歐式距離的KNN算法識(shí)別率對(duì)比圖
如圖9 所示,S-KNN 算法與基于曼哈頓距離的KNN 算法[16]的平均識(shí)別率隨著K 值變化的對(duì)比圖中,線S-KNN-Feature 代表S-KNN 算法的平均識(shí)別率,線KNN-MA-Feature 代表基于曼哈頓距離的KNN 算法的平均識(shí)別率,從實(shí)驗(yàn)結(jié)果可以看出,SKNN 算法對(duì)手勢(shì)的平均識(shí)別率仍遠(yuǎn)高于基于曼哈頓距離的KNN 算法的平均識(shí)別率,當(dāng)K等于10~13 時(shí),S-KNN 算法對(duì)手勢(shì)的平均識(shí)別率達(dá)到97%左右,而基于曼哈頓距離的KNN 算法對(duì)手勢(shì)的平均識(shí)別率只有78.2%左右,即使在K=4 時(shí)基于曼哈頓距離的KNN 算法對(duì)手勢(shì)平均識(shí)別率達(dá)到最高,也只有79.8%左右,要遠(yuǎn)低于S-KNN 算法的平均識(shí)別率。綜上實(shí)驗(yàn)結(jié)果可以看出,改進(jìn)得到的S-KNN 算法對(duì)手勢(shì)的有效識(shí)別率[17]有非常明顯的提高,平均識(shí)別率提高了約15%,驗(yàn)證了該算法的有效性。
圖9 S-KNN算法與基于曼哈頓距離的KNN算法識(shí)別率對(duì)比圖
如圖10 所示為S-KNN 算法的手勢(shì)識(shí)別率混淆矩陣圖,橫坐標(biāo)為1、2、3、4、5 代表了“剪刀”、“石頭”、“布”、“GOOD”、“OK”五種不同手勢(shì)的預(yù)測(cè)手勢(shì)標(biāo)簽,縱坐標(biāo)為手勢(shì)1 至5 的真實(shí)手勢(shì)標(biāo)簽,混淆矩陣y行和x列的值為第y類手勢(shì)被識(shí)別或第x類手勢(shì)的概率。從實(shí)驗(yàn)結(jié)果圖可以看出,第二行的實(shí)際手勢(shì)“石頭”被識(shí)別成預(yù)測(cè)手勢(shì)的“GOOD”概率為5%,第三行的實(shí)際手勢(shì)“布”被識(shí)別成預(yù)測(cè)手勢(shì)的“石頭”和“OK”概率各為3%,第五行的實(shí)際手勢(shì)“OK”被識(shí)別成預(yù)測(cè)手勢(shì)的“剪刀”概率為3%,識(shí)別錯(cuò)誤概率均較低,可以判斷S-KNN 算法對(duì)五種手勢(shì)的識(shí)別率均為較高水平,在較為理想的情況下平均識(shí)別率均達(dá)到了95%以上。
圖10 S-KNN算法手摯識(shí)別率混淆矩陣
通過(guò)以上實(shí)驗(yàn)結(jié)論可以判斷S-KNN 算法相對(duì)于傳統(tǒng)的KNN 算法手勢(shì)識(shí)別準(zhǔn)確率有著較大幅度的提高,對(duì)KNN 算法的改進(jìn)是合理且成功的,利用SVM 算法來(lái)改進(jìn)KNN 算法可以更好地收集到有效訓(xùn)練集,獲得更高的手勢(shì)識(shí)別率。