柯健,張量
(蘇州市職業(yè)大學(xué)計(jì)算機(jī)工程學(xué)院,蘇州 215104)
虛擬現(xiàn)實(shí)技術(shù)的三大基本特征是沉浸感、交互性和想象力,其中交互性是用戶與虛擬世界通過特定的交流手段實(shí)現(xiàn)信息交互的方式。虛擬現(xiàn)實(shí)技術(shù)的實(shí)現(xiàn)離不開硬件設(shè)備的支持,虛擬現(xiàn)實(shí)設(shè)備主要有兩類,第一類是移動頭顯設(shè)備,如Gear VR等,需要插入手機(jī)使用,第二類是外接式頭顯設(shè)備,如HTC Vive等,需要外接電腦使用,這兩類虛擬現(xiàn)實(shí)設(shè)備的交互方式基本都是通過操作手柄實(shí)現(xiàn)。增強(qiáng)現(xiàn)實(shí)技術(shù)是一種將虛擬信息與真實(shí)世界巧妙融合的技術(shù),目前大多數(shù)是通過手機(jī)攝像頭拍攝現(xiàn)實(shí)世界,然后與虛擬信息相融合,從而實(shí)現(xiàn)對真實(shí)世界的增強(qiáng),它的交互方式是通過操作手機(jī)屏幕實(shí)現(xiàn)的。
實(shí)現(xiàn)人與虛擬場景的交互方式主要有三種:一是虛擬交互,通過虛擬場景中的虛擬按鈕進(jìn)行控制;二是物理交互,利用控制手柄等物理設(shè)備,實(shí)現(xiàn)與虛擬場景的交互;三是直接交互,通過數(shù)據(jù)手套或者手勢識別,做出各種不同的動作指令,從而實(shí)現(xiàn)對虛擬場景中物體的控制。在VR/AR中人機(jī)交互方式大多是通過虛擬交互或者物理交互實(shí)現(xiàn)的,隨著VR/AR設(shè)備以及人機(jī)交互的不斷發(fā)展,直接交互尤其是手勢交互成為VR/AR中更為友好,更為自然的交互方式。
手勢識別是手勢交互的前提條件,目前手勢識別主要由兩種實(shí)現(xiàn)方式,一是基于傳感器的手勢識別方法,文獻(xiàn)[1]提出了一種基于加速度計(jì)和陀螺儀傳感器數(shù)據(jù)的深度學(xué)習(xí)框架實(shí)現(xiàn)手勢識別。文獻(xiàn)[2]以手勢識別和虛擬現(xiàn)實(shí)人機(jī)交互為研究對象,提出并設(shè)計(jì)了一種新型的,用于輔助VR設(shè)備進(jìn)行人機(jī)交互的原型系統(tǒng)。文獻(xiàn)[3]基于Leap Motion對模板匹配的手勢識別加以改進(jìn)。文獻(xiàn)[4]提出了基于Leap Motion手勢識別和最鄰近算法,建立了三維手勢交互系統(tǒng)。文獻(xiàn)[5]提出了基于Leap Motion的動態(tài)手勢識別方法。文獻(xiàn)[6]設(shè)計(jì)了一種VR游戲手勢運(yùn)動識別裝置。文獻(xiàn)[7]提出的基于Kinect視覺功能對體感手勢目標(biāo)識別。文獻(xiàn)[8]提出了基于Kinect骨骼數(shù)據(jù)的手勢識別?;跀?shù)據(jù)手套的手勢識別方法,由于數(shù)據(jù)手套價格昂貴,容易損壞,不容易得到推廣,基于Kinect骨骼數(shù)據(jù)的手勢識別方法,由于Kinect只提供人體25個關(guān)節(jié)點(diǎn),每只手的手部只提供4個關(guān)節(jié)點(diǎn),手部關(guān)節(jié)點(diǎn)數(shù)量較少,影響了對手勢的精確識別。
二是基于視覺的手勢識別,使用普通攝像頭采集數(shù)據(jù),成本較低,利用機(jī)器學(xué)習(xí)或神經(jīng)網(wǎng)絡(luò)進(jìn)行手勢圖像識別。文獻(xiàn)[9]提出了基于關(guān)鍵點(diǎn)的殘差全連接網(wǎng)絡(luò)動態(tài)手勢識別方法。文獻(xiàn)[10]提出了基于改進(jìn)的YOLOv3實(shí)現(xiàn)手勢識別的人機(jī)交互方法。文獻(xiàn)[11]提出了融合注意力機(jī)制的YOLOv4-Tiny算法,采用基礎(chǔ)手勢結(jié)合手勢狀態(tài)變化實(shí)現(xiàn)人機(jī)交互。文獻(xiàn)[12]提出了基于深度學(xué)習(xí)的手勢識別算法,利用卷積神經(jīng)網(wǎng)絡(luò)對關(guān)節(jié)特征圖分類,達(dá)到手勢識別的目的?;谝曈X的深度學(xué)習(xí)手勢識別方法是目前研究的熱點(diǎn),但是使用深度學(xué)習(xí)需要提供大量的手勢樣本數(shù)據(jù)用于訓(xùn)練,當(dāng)只有少量樣本時,深度學(xué)習(xí)容易出現(xiàn)過擬合。
在計(jì)算機(jī)科學(xué)和人機(jī)交互領(lǐng)域中,手勢識別是通過數(shù)學(xué)算法來識別人類手勢的一個議題。用戶可以使用簡單的手勢來控制或與設(shè)備交互,讓計(jì)算機(jī)理解人的意圖。在AR中,通過感知手部形狀和動作對于改善用戶體驗(yàn)是至關(guān)重要的。在手勢識別領(lǐng)域常用的一種方法是模板匹配,通過對兩個手勢樣本進(jìn)行歐式距離計(jì)算,得到兩個手勢樣本之間的相似度,根據(jù)相似度加以判斷手勢。
本文針對傳統(tǒng)的VR/AR人機(jī)交互方式,提出了一種基于MediaPipe平臺的手勢識別[13],用于VR/AR操作控制方案,計(jì)算手部關(guān)鍵點(diǎn)之間的位置、距離,從而進(jìn)行手勢識別決策,它是一種實(shí)時的不需要大量樣本訓(xùn)練的手勢識別方法。如圖1所示。
圖1 手勢識別流程
手勢識別的首要工作是先設(shè)計(jì)好能被識別的手勢,手勢的設(shè)計(jì)[14]要遵循幾個原則:首先,在用戶使用方面,手勢的設(shè)計(jì)要方便簡單,符合用戶習(xí)慣,便于用戶理解和掌握;其次,在交互過程方面,要求手勢的設(shè)計(jì)保證流暢和降低操作疲勞;最后,在系統(tǒng)實(shí)現(xiàn)方面,由于手勢識別的準(zhǔn)確度與傳統(tǒng)的交互方式存在一定的差距,識別過程容易出現(xiàn)誤判,要求手勢的設(shè)計(jì)功能交叉少,風(fēng)格統(tǒng)一,使系統(tǒng)存在一定的容錯性和可靠性??傊?,利用手勢交互的目的是使人機(jī)交互的過程更加自然方便。在單目攝像頭下,得到的是二維圖像信息,很難獲得深度方向的信息,因此在設(shè)計(jì)手勢的時候,不要使用手勢離攝像頭的遠(yuǎn)近距離作為判斷手勢的標(biāo)準(zhǔn)。可以根據(jù)手指關(guān)節(jié)的彎曲程度來決定每根手指是彎曲還是伸直的狀態(tài),每個手指的關(guān)節(jié)位置可以作為不同手勢語義的設(shè)計(jì)標(biāo)準(zhǔn)。本文定義了4組基本的靜態(tài)手勢和標(biāo)簽,如表1所示。
表1 手勢定義
檢測人手是一個非常復(fù)雜的任務(wù),模型必須適用于各種尺寸的手,而且需要檢測被遮擋或者自遮擋的手,手的檢測與人臉檢測有所不同,人臉具有眼睛、嘴巴等高對比度的輪廓,而人手沒有類似的特征,只通過視覺特征來檢測很難實(shí)現(xiàn)可靠的手部檢測。為了解決這個問題,使用手掌檢測而不是手檢測,這是因?yàn)楣烙?jì)手掌的邊界框比估計(jì)具有關(guān)節(jié)的手指檢測要簡單得多,而且手掌目標(biāo)更小,即使在握手等造成雙手自遮擋的情況下,非極大值抑制算法也能良好地工作,另外,手掌是正方形的,只使用正方形的邊界框來建模手掌,可以忽略其他長寬比,減少錨框的數(shù)量。使用類似于特征金字塔網(wǎng)絡(luò)的編碼解碼器進(jìn)行特征提取,這樣即使在大場景中,大物體和小物體都能在不同尺度下感知到。在訓(xùn)練過程中使用FocalLoss損失函數(shù),用于支持大尺度方差所產(chǎn)生的大量的錨框。
輸入圖像經(jīng)過手掌檢測器后,檢測手部關(guān)鍵點(diǎn)坐標(biāo)的模型通過回歸預(yù)測手部的關(guān)鍵點(diǎn)坐標(biāo),手部關(guān)鍵點(diǎn)檢測器學(xué)到了內(nèi)在的一致性手部姿勢表示,即使在手部部分缺失或者自遮擋的情況下也能表現(xiàn)出非常好的魯棒性。手部關(guān)鍵點(diǎn)檢測器將輸入圖像映射到21個關(guān)鍵點(diǎn)位置pi∈R3,關(guān)鍵點(diǎn)位置包括X,Y坐標(biāo)和相對手掌的深度Z坐標(biāo),Z值越小,表示離攝像頭越近,輸入圖像中包含手的置信度,以及左右手二分類信息。如圖2所示。
圖2 手部關(guān)鍵點(diǎn)示意圖
手勢識別算法將識別到的手部關(guān)鍵點(diǎn)結(jié)構(gòu)分類成一系列離散手勢,使用一系列算法來推導(dǎo)手勢。手勢識別經(jīng)常需要判斷某個手指是否彎曲,第一種方法是計(jì)算手指頭關(guān)節(jié)的第一節(jié)和第二節(jié)的夾角,根據(jù)設(shè)定的相關(guān)閾值來判斷手指是否彎曲,如果它們之間的夾角大于某個閾值則定義為彎曲,小于某個閾值則定義為伸直,但是這種方法有一定的局限性,比較適合手指側(cè)面圖像的場合。第二種方法是根據(jù)關(guān)鍵點(diǎn)的y坐標(biāo)判斷手指是否伸直,例如食指的關(guān)鍵點(diǎn)8和關(guān)鍵點(diǎn)6,如果關(guān)鍵點(diǎn)8的y坐標(biāo)小于關(guān)鍵點(diǎn)6的y坐標(biāo),則定義食指為伸直。第三種方法是計(jì)算每個指尖關(guān)鍵點(diǎn)與手掌的距離,手指尖與手掌的距離小于閾值的時候,定義手指為彎曲,手指尖與手掌的距離大于閾值的時候,定義手指為伸直。在實(shí)驗(yàn)中要綜合運(yùn)用幾種方法,根據(jù)手指是否彎曲,可以識別手勢1和手勢2。
手勢3和手勢4的檢測,除拇指外,可以使用前面幾方面確定其余四指是否伸直,再根據(jù)食指的狀態(tài)確定拇指是否彎曲。如果食指是伸直狀態(tài),拇指的關(guān)鍵點(diǎn)4與食指的關(guān)鍵點(diǎn)14的距離小于拇指的關(guān)鍵點(diǎn)3與食指的關(guān)鍵點(diǎn)14的距離,則拇指為彎曲狀態(tài);拇指的關(guān)鍵點(diǎn)4與食指的關(guān)鍵點(diǎn)14的距離大于拇指的關(guān)鍵點(diǎn)3與食指的關(guān)鍵點(diǎn)14的距離,則拇指為伸直狀態(tài)。如果食指是彎曲狀態(tài),拇指的關(guān)鍵點(diǎn)4與食指的關(guān)鍵點(diǎn)6的距離小于拇指的關(guān)鍵點(diǎn)3與食指的關(guān)鍵點(diǎn)6的距離,則拇指為彎曲狀態(tài);拇指的關(guān)鍵點(diǎn)4與食指的關(guān)鍵點(diǎn)6的距離大于拇指的關(guān)鍵點(diǎn)3與食指的關(guān)鍵點(diǎn)6的距離,則拇指為伸直狀態(tài)。
本文的實(shí)驗(yàn)環(huán)境為Intel 9700K,內(nèi)存32 GB,顯卡Nvidia 2070,操作系統(tǒng)為Windows10,深度學(xué)習(xí)框架為Pytorch1.10。
本文為手勢交互設(shè)計(jì)了4種手勢,根據(jù)實(shí)驗(yàn)的需要從網(wǎng)絡(luò)上收集或使用攝像頭和計(jì)算機(jī)視覺技術(shù)捕獲手勢圖像,每種手勢180張,共采集720張圖像。把數(shù)據(jù)集輸入到手勢識別系統(tǒng),輸出每個圖像中的手部關(guān)鍵點(diǎn)和識別結(jié)果,最終得到檢測置信度為70%時的各手勢識別的混淆矩陣,如表2所示。
表2 預(yù)測手勢與真實(shí)手勢的混淆矩陣
表2中X軸為手勢的真實(shí)標(biāo)簽,Y軸為手勢的預(yù)測值,表中對角線顯示了識別正確的手勢數(shù)量,當(dāng)預(yù)測的手勢不在定義的4種手勢內(nèi)時,歸到其它類中。
計(jì)算手勢識別算法的精確率、召回率、F1綜合評價指標(biāo),如表3所示。
表3 手勢預(yù)測的精確率、召回率以及F1綜合評價指標(biāo) 單位:%
通過實(shí)驗(yàn),手勢識別平均精確率達(dá)到99.0%,平均召回率達(dá)到98.1%,平均F1綜合評價指標(biāo)達(dá)到98.5%,在實(shí)驗(yàn)過程中手勢識別算法對拇指是否彎曲還存在一些誤判,但整體識別精度能滿足VR/AR中對手勢交互的要求。
本文主要研究了手勢識別在VR/AR中的應(yīng)用,在MediaPipe平臺,通過單目攝像頭采集手勢圖像,基于手部關(guān)鍵點(diǎn)特征實(shí)現(xiàn)實(shí)時手勢識別算法,達(dá)到了通過手勢控制VR/AR系統(tǒng)中的人機(jī)交互的目的,在實(shí)驗(yàn)中設(shè)計(jì)了4種不同的手勢,平均F1綜合指標(biāo)達(dá)到98.5%,該方法的可行性和魯棒性均得到了驗(yàn)證,可用于基于計(jì)算機(jī)視覺的手勢交互場景的實(shí)時識別,為虛擬現(xiàn)實(shí)/增強(qiáng)現(xiàn)實(shí)的人機(jī)交互提供了一種可供選擇的方案。