胡發(fā)麗, 高全力, 王西漢, 李慶敏
(西安工程大學 計算機科學學院, 西安 710048)
虛擬現(xiàn)實技術(shù)自問世以來就受到了人們的普遍關(guān)注, 在教育、軍事、醫(yī)療等方面得到廣泛的應用. 疫情以來, 線上教學成為人們關(guān)注的主要教學方式, 但線上教學多以視頻語音為主, 缺乏課堂沉浸感, 虛擬現(xiàn)實技術(shù)的出現(xiàn), 為遠程沉浸式教學提供了強有力的技術(shù)支撐.
但目前的虛擬課堂的交互方式主要有鍵盤、鼠標以及手柄等, 這些交互方式形式單一, 難以完全滿足人們沉浸式體驗的需求[1]. 為增強虛擬課堂的人機交互體驗, 人們不斷探尋新的交互方式如手勢、語音、人腦控制等. 其中, 手勢在傳達信息方面承擔著重要的角色,是人體與外界交流的主要方式之一, 不同的手勢代表著不同的信息. 因此, 可以利用手勢交互達到在虛擬地理課堂中自然交互的目的, 體驗全新的課堂模式.
20世紀80年代開始, 人們已經(jīng)開始通過數(shù)據(jù)手套上的傳感器來獲取人的手勢信息. 這種方式具有識別數(shù)據(jù)精準、速度快的優(yōu)點, 但數(shù)據(jù)手套價格十分昂貴, 并且穿脫不方便, 影響使用者的操作體驗[2]. 隨著虛擬現(xiàn)實技術(shù)的飛速發(fā)展, Leap Motion和Kinect等體感傳感器出現(xiàn)并被應用在手勢識別中, 這類設備使用計算機圖像處理技術(shù), 對傳感器獲取到的圖像或視頻進行特征提取和手勢識別, 為手勢交互提供了新的解決方案[3,4].
林書坦等人[5]基于Leap Motion構(gòu)建了一套手寫數(shù)字系統(tǒng), 通過建立手部模型來判定用戶所指示的數(shù)字, 該方法具有較高的識別率. 2019年, 金童等人[6]基于Leap Motion捕捉手勢的軌跡, 構(gòu)建了一套可以用于空中書寫和正確筆畫順序演示功能的漢字書寫和識別系統(tǒng), 該系統(tǒng)解決了中小學生和外國友人漢字學習時的枯燥感, 極大提高了交互體驗, 但手勢識別率有待提高. 同年, 李菲菲[7]基于Leap Motion構(gòu)建虛擬健身房交互框架并將其應用于Unity 3D構(gòu)建的健身房虛擬場景中, 使得虛擬健身房的交互體驗更加逼真有趣. 然而,該方法在手勢識別速度上并沒有達到理想的效果.2020年, 林瑩瑩等人[8]針對陶瓷制作條件嚴苛的局限性問題, 采用Leap Motion開發(fā)了能夠使用裸手交互的、具有良好沉浸感的虛擬現(xiàn)實陶藝體驗系統(tǒng), 但該方法對識別范圍要求較高, 邊緣處操作很不流暢. 雖然Leap Motion對手部能夠進行精準高效的追蹤, 但是由于Leap Motion的識別范圍有限, 僅在傳感器上方25–600 mm的區(qū)域內(nèi)有效. 因此當手部超出范圍時, 這類方法會出現(xiàn)識別精度下降的問題.
近年來, 深度學習在圖像分類、目標檢測等計算機視覺領(lǐng)域得到了飛速的發(fā)展[9–15], 因此許多研究人員將深度學習應用在手勢識別領(lǐng)域. 盧迪等人[16]提出一種基于深度學習的手勢識別算法, 該算法采用改進的目標檢測框架YOLOv4-tiny, 能夠?qū)σ曨l圖像中的手勢進行準確的識別. 王粉花等人[17]在YOLOv3-tiny的基礎上進行算法改進, 較大地提高了手勢識別速度. 常建紅[18]提出一種改進的Faster R-CNN的手勢識別算法, 該算法通過兩階段目標檢測方式提高了常規(guī)手勢的識別準確率, 然而在檢測速率上可能慢于一階段目標檢測方法. 胡鵬程[19]采用LSTM 來構(gòu)建循環(huán)神經(jīng)網(wǎng)絡用于識別時序數(shù)據(jù), 實現(xiàn)了動態(tài)的手勢識別, 但LSTM的網(wǎng)絡較深計算復雜非常耗時. 吳曉鳳等人[20]通過修改Faster R-CNN框架的關(guān)鍵參數(shù)并提出擾動交疊率算法, 進一步提高了識別準確率. 然而, 這類基于深度學習的算法通常采用RGB圖像, 對復雜背景的識別魯棒性相對較弱. 同時多數(shù)算法僅僅識別手勢所包含的語義信息, 無法獲取當前手的空間位置.
本文針對Leap Motion 在識別范圍邊緣識別率低以及識別速度慢的問題, 將Leap Motion精確手部空間位置追蹤與基于深度神經(jīng)網(wǎng)絡的手勢識別相結(jié)合, 提出了一種基于深度神經(jīng)網(wǎng)絡的手勢交互方法. 該方法設計和定義了一套交互手勢, 通過基于深度神經(jīng)網(wǎng)絡的目標檢測框架識別Leap Motion采集到的紅外圖像,然后在手勢識別的基礎上設計了三維交互系統(tǒng)并將其應用到虛擬場景中. 經(jīng)實驗證明, 該方法能夠有效提高手勢識別率和識別速度, 并且在Leap Motion識別范圍邊緣仍具有較高的識別率, 實現(xiàn)在虛擬課堂中自然地進行人機交互.
Leap Motion 是一款用于手部姿態(tài)捕捉的體感控制器, 該控制器具有體積小、售價適中、手部姿態(tài)識別精度高的優(yōu)點[21]. 設備內(nèi)部有兩個用于識別并接收紅外光反射回饋的球面攝像頭, 另有4個負責提供光源的紅外LED, 其內(nèi)部結(jié)構(gòu)如圖1所示.
圖1 Leap Motion內(nèi)部結(jié)構(gòu)
光源透過頂層的濾光片后會被障礙物(例如人手)反射回攝像頭, 再經(jīng)由內(nèi)部集成的算法計算得出主要部位(如關(guān)節(jié))的相關(guān)坐標數(shù)據(jù). 這些數(shù)據(jù)可以經(jīng)由Leap Service轉(zhuǎn)發(fā)給用戶的應用, 做進一步處理. Leap Motion最頂層的濾光片起到了很重要的作用, 它可以過濾除波長在940 nm以外的其他雜波, 只容許自帶紅外LED產(chǎn)生的紅外光波進出, 所以Leap Motion控制器并不需要其他的濾波器, 就能得到一個去除掉復雜背景的紅外成像, 使得獲取到的圖像背景簡單利于識別[22].
Leap Motion可以實時檢測跟蹤傳感器上方25–600 mm的扇形區(qū)域內(nèi)手部的空間位置和方向, 并建立手的立體模型[23], Leap Motion識別范圍如圖2所示.
圖2 Leap Motion識別范圍
Leap Motion是基于雙目視覺的手勢識別設備, 通過兩個攝像機來提取包括三維位置在內(nèi)的信息進行手勢的綜合分析判斷, 建立手部的立體模型. 由于需要進行立體匹配, 復雜的立體模型需要大量的數(shù)據(jù), 計算相對來說比較復雜[24,25].
Leap Motion設備僅支持預定義手勢, 如: 揮手、點擊、畫圈等, 這些預定義手勢并不能滿足本文交互場景的實際需求, 因此本文自定義手勢進行交互. 手勢設計需要從用戶體驗、交互過程以及交互系統(tǒng)等方面綜合考量. 本文對30名測試者進行手勢設計調(diào)研, 通過大量的用戶手勢實驗反饋, 最后選定8個手勢進行交互. 本文手勢交互過程分為兩步: 第1步為單一手勢識別; 第2步為手勢運動判斷. 手勢交互開始時會進行開始確認, 若要切換手勢則需進行切換操作. 交互過程中的單一手勢分別為左手握拳、右手握拳、左手五指伸開、右手五指伸開、左手食指伸出其他手指握拳、右手食指伸出其他手指握拳, 系統(tǒng)識別出手勢后將進入運動判斷階段, 左手握拳右滑、右手握拳左滑、左手五指伸開向上抬起、右手五指伸開向下放下、左手食指伸出其他手指握拳點擊、右手食指伸出其他手指握拳點擊. 手勢設計對照如表1所示.
表1 手勢設計對照表
本文手勢識別方法采用YOLOv5目標檢測框架并在其基礎上針對手勢識別進行一定改進. 手勢識別方法結(jié)構(gòu)主要由輸入端、backbone、neck和prediction四個部分組成, 其結(jié)構(gòu)圖如圖3、圖4所示.
圖3 手勢識別方法結(jié)構(gòu)圖
其中輸入端輸入的圖像為Leap Motion采集的紅外圖像, 利用Mosaic數(shù)據(jù)增強技術(shù)對圖片進行拼接.Mosaic數(shù)據(jù)增強方法基本原理是讀取原始數(shù)據(jù)集中 4張圖片, 對 4 張圖片進行翻轉(zhuǎn)、色域變換以及縮放等操作, 然后按照 4個方向的位置拼接在一起. 通過Mosaic數(shù)據(jù)增強, 能夠豐富物體的檢測背景, 提高網(wǎng)絡的魯棒性. 由于手勢操作需在Leap Motion有效范圍內(nèi)進行, 操作時手勢放置位置距離設備較近, 因此大部分手勢數(shù)據(jù)集的手勢寬高比在1:1.4左右, 小目標檢測相對較少. 為了避免使用通用錨框參數(shù)在手勢數(shù)據(jù)集上造成漏檢誤檢的情況, 達到最優(yōu)檢測效果的同時減少先驗的數(shù)量, 提高檢測速度. 本文使用K-means++算法聚類手勢數(shù)據(jù)集的anchor boxes, 在19×19, 38×38兩個尺度上各聚類生成3個錨框, 共6個錨框. 相比之前的9個錨框能夠有效減少錨框數(shù)量, 提升檢測速度. 由于不同圖片具有不同的長度和寬度. 因此需將原始圖像統(tǒng)一縮放到標準大小, 并將其輸入到網(wǎng)絡中, 即自適應圖像縮放法. 本文采用縮減黑邊的方式, 對原始圖像自適應的添加最少的黑邊, 提高目標檢測和推理的速度.
手勢識別的backbone部分由Focus和CSP組成.其中Focus主要實現(xiàn)對圖片進行切片操作, 切片操作是指將數(shù)據(jù)切分為4份, 每份數(shù)據(jù)相當于2倍下采樣得到, 然后在channel維度進行拼接, 最后進行卷積操作. 這樣做可以最大程度地減少信息損失有利于進行下采樣操作. CSP模塊中共有兩種CSP結(jié)構(gòu)(見圖4),CSP1_X結(jié)構(gòu)帶有殘差結(jié)構(gòu)應用于backbone, 能夠有效防止網(wǎng)絡加深時所引起的梯度消失, 從而使得到的特征粒度更細. 另一種CSP2_X結(jié)構(gòu)將主干網(wǎng)絡的輸出分成了兩個分支, 通過concat操作使網(wǎng)絡對特征的融合能力得到加強, 保留了更豐富的特征信息, 該結(jié)構(gòu)應用于neck部分.
圖4 部分組件詳細結(jié)構(gòu)圖
手勢識別方法的neck部分采用FPN+PAN的結(jié)構(gòu), 用于生成特征金字塔. 特征金字塔會增強模型對于不同縮放尺度對象的檢測, 豐富了特征圖的表達能力,加強了網(wǎng)絡特征融合的能力. 根據(jù)觀察, 通過Leap Motion采集到的紅外圖像中, 手的大小處在一定范圍之間, 因此不需要針對較小目標進行檢測. 在本文中,為了進一步提高檢測速度, prediction部分只針對19×19, 38×38兩個尺度進行.
預測部分的損失函數(shù)由classification loss (分類損失函數(shù))和bounding box regression loss (回歸損失函數(shù))兩部分構(gòu)成. 采用Focal Loss評價目標框和預測框的類損失和置信度損失, 采用GIoU_Loss評價bounding box的位置損失. Focal Loss損失考慮的是目標檢測中正負樣本嚴重不均衡的問題. 公式如式(1)所示:
函數(shù)GIoU是源自IoU的一種邊框預測的損失計算方法, 定義如式(2):
其中,IoU可以由式(3)計算得到:
B是預測框和真實框,GIoU Loss= 1 -GIoU.
考慮到基于深度卷積神經(jīng)網(wǎng)絡的手勢識別方法只能識別圖像信息, 并不能體現(xiàn)手部的空間位置信息, 而Leap Motion能夠獲取手部結(jié)構(gòu)的關(guān)節(jié)點信息, 故本文將結(jié)合Leap Motion獲取到的手部關(guān)節(jié)點信息來進行動態(tài)手勢的判斷. 手的運動是通過對比當前幀與之前特定幀得到的, 通過對比前后幀的數(shù)據(jù)來判定手的運動變化, 本文主要通過判斷手部關(guān)節(jié)點的位移來判斷手勢的運動情況.
Leap Motion API提供手部模型的關(guān)節(jié)點坐標, 通過計算兩個時刻關(guān)節(jié)點之間的歐氏距離, 計算公式如式(4), 可以描述手勢運動的空間移動信息.
其中,P為關(guān)節(jié)點位移, (xi,yi,zi)為關(guān)節(jié)點在i時刻的空間坐標, (xc,yc,zc)為關(guān)節(jié)點在c時刻的空間坐標.
本文的手勢交互過程分為單一手勢識別、動態(tài)手勢運動判斷兩個部分. 首先通過Leap Motion進行數(shù)據(jù)采集, 并將獲取到的紅外圖像輸入到手勢識別方法中進行特征提取進而實現(xiàn)對手勢的識別與分類, 單一手勢的識別結(jié)果將作為判斷動態(tài)手勢的重要條件. 手勢的運動情況通過對比前后幀位置變化進行判定, 圖5為手勢交互流程.
圖5 手勢交互流程
其中手勢模塊任務分為6個模塊, 分別為判斷是否左手握拳右滑、判斷是否右手握拳左滑、判斷是否左手五指伸開向上抬起、判斷是否右手五指伸開向下放下、判斷是否左手食指伸出(其他手指握拳)點擊、判斷是否右手食指伸出(其他手指握拳)點擊, 若判斷結(jié)果為真, 則做出對應的物體左轉(zhuǎn)、物體右轉(zhuǎn)、物體放大、物體縮小、選中物體、更換物體風格的相應操作.
本文實驗在PC機上完成, PC配置為Windows 10操作系統(tǒng), 處理器為Inrel(R)Core(TM)i7-9700k, 內(nèi)存32 GB, GPU為NVIDIA GeForce GTX 1 080, GPU內(nèi)存為24 GB, Unity版本為2 018.4.16, 以及一臺Leap Motion.
手勢識別的實驗數(shù)據(jù)為Leap Motion采集到的紅外圖像. 數(shù)據(jù)集共采集26 000張, 包括8種手勢, 手勢數(shù)據(jù)采集過程如圖6所示, 手勢示例如圖7所示. 經(jīng)過多次實驗測試對比, 決定將其中80%的圖片用來訓練,20%的圖片用來測試. 同時利用Leap Motion官方網(wǎng)站提供的開發(fā)文件來獲取手部坐標數(shù)據(jù).
圖6 手勢數(shù)據(jù)集采集過程
圖7 手勢示例
通過使用LabelImg工具對紅外圖像中的手勢進行逐一標注, 并生成相對應的.txt文件, 文件內(nèi)包含手勢類別、歸一化的標注框的中心坐標(x,y), 歸一化的標注框的寬和高(w,h). 歸一化公式如式(5)–式(8)所示:
本文在采取一定數(shù)量的數(shù)據(jù)之后對數(shù)據(jù)集進行數(shù)據(jù)擴增. 利用數(shù)據(jù)增廣技術(shù)如平移、縮放、對比度變換, 添加噪聲等, 將數(shù)據(jù)集擴充到26 000張, 同時對數(shù)據(jù)進行預處理工作: 利用Mosaic數(shù)據(jù)增強技術(shù)對圖片進行拼接; 使用K-means++算法進行聚類生成錨框, 以及采用縮減黑邊的方式, 對原始圖像自適應的添加最少的黑邊等.
本文首先對YOLOv5手勢識別算法和本文改進過的手勢識別方法進行實驗對比, 然后在虛擬場景下進行手勢交互實驗. 本文的交互場景為虛擬地理課堂三維系統(tǒng), 系統(tǒng)使用unity游戲開發(fā)引擎, 能夠使學生沉浸式體驗高仿真虛擬課堂, 本文選取《認識地球》一課, 通過完成相對應的手勢操作實現(xiàn)地球儀的放大、縮小、旋轉(zhuǎn)、點擊地球儀選中地圖板塊、點擊地球儀更換地球儀風格的操作, 如圖8所示.
圖8 虛擬場景交互
實驗使用平均精度均值(mean average precision,mAP)作為評價標準, 它綜合考慮了查準率和查全率.平均精度均值首先需要考慮計算每一個物體類別的平均精度(AP), AP 是計算某一類 P-R 曲線下的面積,mAP 則是計算所有類別 P-R 曲線下面積的平均值. 本文對比了YOLOv5手勢識別算法與本文手勢識別方法的mAP值、處理時間以及P-R曲線如表2、表3、圖9、圖10所示.
表2 不同手勢識別方法平均mAP對比
表3 不同手勢識別方法處理時間對比(ms)
圖9 YOLOv5手勢識別算法的P-R曲線
通過分析表2、圖9、圖10可以發(fā)現(xiàn), 本文手勢識別方法的平均精度值比YOLOv5算法的平均精度值高, 單個手勢的識別精度(即P-R曲線下的面積)也比YOLOv5算法的識別精度高. 說明本文使用K-means++聚類算法重新生成的錨框大小比通用的錨框大小更適合本文的手勢數(shù)據(jù)集, 從而使網(wǎng)絡對目標的檢測變得更加準確, 減少了漏檢和誤檢的次數(shù).
圖10 本文手勢識別方法的P-R曲線
從表3可以發(fā)現(xiàn), 本文改進過的手勢識別算法的數(shù)據(jù)的預處理時間以及推理時間更短. 這是由于本文僅在19×19和38×38兩個尺度上進行預測, 錨框數(shù)量由原來的9個變?yōu)?個, 錨框數(shù)量的減少大大提高了識別速度, 從而更好實現(xiàn)實時識別的效果.
評估分類器性能好壞的方法是觀察P-R曲線, 如果Recall值在增長的同時, Precision的值能夠保持在一個很高的水平, 說明分類器的性能較好, 相反性能比較差的分類器可能會損失很多Precision值才能換來Recall值的提高. 從圖9、圖10可以看出, 本文手勢識別算法的P-R曲線比YOLOv5手勢識別算法的P-R曲線更穩(wěn)定, 即在Recall值不斷增加的情況下, Precision依然能保持較高的值. 而YOLOv5手勢識別算法在Recall值不斷增加的過程中損耗了更多的Precision的值. 因此本文改進的手勢識別方法分類效果更好, 有明顯的改善效果.
為了驗證本文手勢交互方法的有效性, 本文設計了兩個實驗方案: 方案一為本文的手勢交互方案; 方案二為使用Leap Motion自帶的手勢交互方案. 隨機選取10名被試者進行實驗, 實驗者在未被告知系統(tǒng)差別的情況下, 單個手勢分別通過兩個方案進行實驗, 記錄每種手勢交互20次所需時間以及每種手勢的識別成功率.
通過觀察圖11、圖12不同手勢交互方法完成交互所需時間以及每種手勢的識別成功率可以發(fā)現(xiàn), 使用Leap Motion自帶的手勢交互方法所需要的時間更長、每種手勢的識別成功率更低.
圖11 不同手勢交互方法完成手勢所需時間
圖12 不同手勢交互方法手勢識別成功率
Leap Motion是基于雙目攝像頭進行深度成像, 根據(jù)雙目信息推算出深度, 然后從深度圖得到手部模型,最后利用關(guān)鍵點信息識別手勢. 由于Leap Motion是對手部關(guān)鍵點進行檢測, 所以對于手指重疊的復雜情況不能準確捕獲, 建立的模型與實際情況存在較大偏差,出現(xiàn)兩只手指識別成一只手指的情況, 尤其在范圍邊界, 手勢識別率下降, 出現(xiàn)劇烈抖動, 影響操作體驗.
而本文基于深度神經(jīng)網(wǎng)絡對手勢進行識別, 是對手部的紅外圖像直接進行識別和分類, 不會出現(xiàn)手部模型匹配不準而出現(xiàn)手部抖動的現(xiàn)象, 識別過程更流暢.
經(jīng)過多次實驗發(fā)現(xiàn), 采用Leap Motion自帶手勢識別系統(tǒng)進行交互的最佳交互區(qū)域在Leap Motion上方90–430 mm, 超過最佳交互區(qū)域的范圍會出現(xiàn)識別不準確的現(xiàn)象, 而采用本文的手勢識別交互方法在范圍邊界仍可以進行交互. 為更好地對比不同的手勢識別交互方法在不同識別范圍內(nèi)手勢識別的準確率, 本文記錄了兩種交互方法在不同識別區(qū)域范圍內(nèi)完成8個手勢, 每個手勢完成5次的手勢識別情況, 對其結(jié)果進行對比, 如表4所示.
表4 不同交互區(qū)域手勢識別情況
從表4中可以看出不論是在最佳識別區(qū)域范圍內(nèi)還是最佳識別區(qū)域范圍外, 本文的手勢識別交互方法都優(yōu)于Leap Motion自帶的手勢識別方法, 具有較好的識別效果, 進一步驗證了本文手勢識別交互方案的優(yōu)越性.
本文提出了一種基于深度神經(jīng)網(wǎng)絡的Leap Motion手勢交互方法, 設計出一套交互手勢, 將深度神經(jīng)網(wǎng)絡運用到手勢識別當中, 并在此基礎上設計了三維交互系統(tǒng)將其應用到虛擬場景中. 通過實驗對比發(fā)現(xiàn), 本文的手勢識別交互方法無論在識別精度還是識別速度上都優(yōu)于Leap Motion自帶識別系統(tǒng), 并且在Leap Motion識別范圍邊界處仍能保持較高的識別率. 未來, 會進一步增加復雜動態(tài)手勢的研究, 為用戶提供更加豐富的交互體驗.