谷學靜,王 旭,闞 闊
1.華北理工大學 電氣工程學院,河北 唐山 063210
2.華北理工大學 信息工程學院,河北 唐山 063210
在虛擬現實系統中,人手作為人機交互的重要輸入通道,是虛擬現實系統的主要交互手段之一[1]。傳統的基于數據手套的交互方法通過讓使用者穿戴數據手套,通過手套上的傳感器獲取人手的姿態信息。該方法雖然識別數據精準,識別速度很快,但數據手套往往會影響使用者的操作體驗,且設備價格相對高昂[2]。隨著虛擬現實技術的快速發展,以Leap Motion 和Kinect 為代表的基于機器視覺的體傳感器通過計算機圖像處理技術,將設備中獲取的圖像或視頻經過處理,對提取出的人手特征進行識別、重建[3]。該方式符合真實人手交互的方式,貼近現實生活,是未來人機交互的重要發展方向。但這些體傳感器常常受到硬件系統、場景和光線等因素的制約,影響其識別準確度和用戶的使用效率。
鑒于Leap Motion 硬件系統的限制和圖像處理的局限性,針對識別區域邊緣和手指遮擋引起的識別不穩定的現象,本文提出了一種基于Leap Motion的手勢交互方法。該方法通過實時對比閾值方式分析Leap Motion的識別錯誤,并采用層次化的校正算法校正人手位置,解決人手交互過程中的識別不穩定現象。通過對實驗者進行用戶分析,該方法能提高Leap Motion的識別準確率,提升用戶體驗。
Leap Motion 是美國LEAP 公司出品的一款面向PC和Mac系統,用于手姿態捕捉的體感控制器,具有體積小、售價適中、手姿態識別精度高的優點。Leap Motion體傳感器利用雙目立體視覺成像原理進行測量,通過兩個高幀攝像頭采集高清圖片對物體進行3D位置的定位,并能檢測跟蹤手掌、手指的位置和方向,建立手的立體模型。Guna等[4]對Leap Motion進行不同數量的跟蹤配置的實驗表明,Leap Motion 在靜態手誤差測量實驗中,平均捕獲的精度0.8 mm;在手誤差測量實驗中,運動空間x、y、z方向的精度分別為0.7 mm、0.5 mm和0.3 mm,具有很高的采集效率和采集精度。Leap Motion體傳感器的識別范圍是其上方25 mm到600 mm的一個扇形區域,能實時計算出識別范圍內的連續幀人手信息。識別范圍如圖1所示,其中矩形區域為最佳交互區域。

圖1 Leap Motion識別區域圖
由于Leap Motion 在手勢識別中具有出色的采集效率和采集精度,故基于Leap Motion手勢識別的仿真系統得到了廣泛的應用。Hu等[5]利用Leap Motion設計了針對載人航天的地面訓練系統,研究了虛擬手的構建,并在航天員訓練應用中取得很好的交互結果。Li等[6]設計了基于Leap Motion 的小鼠卵巢切割實驗系統,應用到學生的實驗培訓中,有效地對小鼠卵巢模型切割進行模擬實驗,再現了現場操作體驗。Chuan 等[7]利用Leap Motion傳感器進行北美手勢語識別,該系統以支持向量機技術為基礎,結合Leap Motion 體感技術,培訓聾啞患者手勢交流能力,為他們提供了高效的交流方式。
本文結合電氣控制臺特點[8]和用戶操作習慣設計了交互手勢[9],選取了四種交互手姿態,作為本系統的主要交互手勢,并采用二元組Handle={H,D}的形式描述手勢交互過程。其中,H為手的姿態集合;D為手運動方向集合。四種手姿態分別為點擊手勢(Click)、夾持手勢(Hold)、握持手勢(Grasp)和選擇菜單手勢(Select)。手姿態示意圖如圖2所示。H集合為H={Click,Hold,Grasp,Select}。

圖2 手姿態定義示意圖
集合D表示手運動的方向,根據手操作的實際運動情況,手運動的方向為:向下(Down)、向上(Up)、向左(Left)、向右(Right)。集合D為D={Down、Up、Left、Right}。系統根據集合H與集合D,對手勢進行定義,如表1所示。

表1 手勢定義
3.2.1 人手結構模型
人手是進行人機交互的重要媒介[10]。在手勢交互系統中,幾乎所有的操作都要通過虛擬手完成[11]。因此手模型結構是人手交互的基礎。人手由手掌關節、指關節和關節間的指骨組成。正常人手共有5根手指,其中每根手指由指尖(Tip)和3個指關節組成,根據指關節到手掌的遠近將指關節分為遠指關節(DIP)、近指關節(PIP)、指掌關節(MCP)(拇指由2 個指關節組成,沒有遠指關節)。
人手在連續運動過程中,指骨可以看作是一段鋼體,指骨和指關節連接部分遵循著鉸鏈運動的約束關系,即兩者可以相對轉動但不能移動。指骨可以進行以指關節為原點,有角度限制的轉動,轉動狀態決定手指的姿態。如圖3所示。圖中,θMCP為手掌與近節指骨在指掌關節處所形成夾角的鄰補角;θPIP為近節指骨和中節指骨所形成夾角的鄰補角;θDIP為遠指關節處中節指骨和遠節指骨夾角的鄰補角。
每根手指指關節之間的關系如圖4 所示。關節之間連接的箭頭表示上下級關系,箭頭尾部為上級節點,箭頭指向為下級節點。當上級節點運動狀態發生改變會傳遞給下級節點,而下級節點的運動狀態發生改變對上級節點的影響較小。這樣的手指運動方式遵循層次化的運動關系。

圖3 手指運動模型

圖4 指關節關系圖
3.2.2 虛擬手位姿錯誤判斷
Leap Motion體傳感器識別人手的信息與人手結構模型相似[12]。其傳感器的高頻攝像頭能快速捕捉每幀手姿態數據,包含手掌信息和手指信息。其中手掌信息包含手掌位置、手掌法線、手掌速度等;手指信息包含手指關節位置、指尖位置、手指方向、手指類型(系統把大拇指、食指、中指、無名指和小拇指分別標記為0、1、2、3、4),如表2所示[5]。

表2 Leap Motion識別的手數據
由上可知,通過Leap Motion 可以獲得某一幀某指關節在三維世界的坐標pi,并同時可以得到同一根手指相鄰兩個關節的位置pi-1、pi+1(指掌關節的相鄰關節為手掌位置和近指關節位置,遠指關節的相鄰關節為近指關節位置和指尖位置)。令近指關節為p1,則示意圖如圖5所示。

圖5 指關節位置示意圖
此指關節此幀夾角θ為:

當手勢運動到Leap Motion 識別區域邊緣或手指相互遮擋時,Leap Motion 識別穩定度下降。多表現為虛擬手姿態劇烈變化,即手指關節角度的劇烈變化。因此在每一幀手模型繪制前,對比上一幀手指關節的角度,得到手指關節變化角度θΔ,即:

其中,i表示幀的時序。

3.2.3 虛擬手層次化校正
當檢測到Leap Motion 識別信息錯誤后,刪除當前Leap Motion 體傳感器的錯誤數據,并對問題關節進行位置校正。在手勢交互過程中,除去Leap Motion的識別錯誤,手勢的運動過程可以看成是從前一種手姿態到后一種手姿態的勻速變化過程,手姿態運動應該自然、流暢,指關節的角度和方向不會發生劇烈改變。因此進行手姿態校正時,系統將問題關節前一幀變化角度θ,作為問題指關節此幀的運動角度,據此進行下一幀姿態校正。即將錯誤姿態替換為以問題關節為中心,下層關節旋轉角度為θ的校正姿態,從而實現虛擬手位置校正。
因為手指之間的結構相似,所以本文只討論單個手指的姿態校正。依據人手模型遵循的層次化運動關系,將手指關節分層為上下層結構。定義手掌位置為世界坐標系原點,也稱為0 級坐標系,指掌關節在0 級坐標系的位置為;指掌關節及其下層關節建立1 級坐標系,原點為指掌關節位置,近指關節在1 級坐標系的位置為;近指關節及其下層關節建立2 級坐標系,原點為近指關節位置,遠指關節在2級坐標系的位置為;遠指關節及其下層關節建立3 級坐標系,原點為近指關節位置,指尖在3 級坐標系的位置為。手指的分層坐標系如圖6所示。
假設錯誤關節δ在i(i≥1) 級坐標系的位置為,下層關節δ+1 在i+1 級坐標系的位置為。錯誤關節旋轉角度為θ,得出旋轉矩陣R(θ),則下層關節δ+1 旋轉后在i級坐標系的位置為:


圖6 手指的分層坐標系
因為在繪制虛擬手姿態時,需要得到指關節的世界坐標,所以需要將問題關節旋轉后的i(i≥1)級坐標轉換成世界坐標。若錯誤關節同時為指掌關節、近指關節、遠指關節,且其旋轉角度分別為θmcp、θpip、θdip時,可以得出旋轉矩陣。

調整后指掌關節的世界坐標為W′mcp,近指關節的世界坐標為W′pip,遠指關節的世界坐標為W′dip,指尖的世界坐標為W′tip,則:

通過層次化校正方式計算出手指各個關節的世界坐標位置,以驅動計算機進行虛擬手的繪制。
3.2.4 校正誤差分析
在校正關節姿態的同時,系統繼續計算Leap Motion識別的問題關節角度數據,并將校正角度θ與實際計算角度θ′相減,得到校正誤差θ′Δ,即:

誤差分析步驟如下:
(1)設定校正誤差閾值λ′,通過比較校正誤差θ′Δ與校正誤差閾值λ′的大小,來判斷校正是否成功。
(2)如果校正誤差小于校正閾值,則視為Leap Motion識別正確,虛擬手與實際手位姿同步,停止校正,否則將繼續校正位姿。
(3)如果1 s后的校正數據仍不能與Leap Motion同步,則系統校正失敗,并在界面發出校正失敗的信息提示。提示用戶操作手離開識別區域,重新進行人手姿態識別操作。
姿態校正誤差分析流程圖如圖7所示。
因此,校正誤差閾值影響系統中問題關節的校正效果。若閾值過大,虛擬手校正與實際手相差過大,則無法起到手姿態校正的效果;若閾值過小,則校正結果容易失敗,影響用戶的使用體驗。

圖7 誤差分析流程圖
本系統分為硬件和軟件部分,兩者共同構建用戶和虛擬現實環境的紐帶。其中硬件環境包括一臺雙核3 GHz、內存 8 GB 的 PC 機和一臺 Leap Motion 的體傳感器,軟件環境包括Unity V5.4.2 開發環境與Leap-DeveloperKit V3.2.0 的軟件開發包。其中Unity 為系統的運行平臺。LeapDeveloperKit創建Leap Motion與PC機的接口,并將Leap Motion體傳感器識別的人手關鍵點數據通過描點的方式渲染到場景中。
本系統參考用戶體驗,并結合文獻[13]中指關節運動5°到10°的調整范圍,經過多次用戶測試。當系統固定運行60 幀/s時,關節運動閾值λ角度為每幀0.11°,校正誤差閾值λ′角度為每幀0.18°的實驗結果最佳。
尋找20名志愿者(志愿者為冶金相關專業的在校大學生及研究生,其中男14人,女6人)作為被試,使用圖2定義的手姿態,在如圖8所示的虛擬場景中進行交互。
圖8 中(a)、(b)、(c)、(d)分別展示了理想條件下點擊手勢、夾持手勢、握持手勢和菜單手勢在虛擬場景中操作電氣控制臺的使用效果。
為了驗證具有層次化校正的手勢交互方法的有效性,設計了兩個實驗系統,分別為:系統1,使用層次化手勢校正方法的手勢交互系統;系統2,運行環境相同,但未使用層次化校正方法的手勢交互系統。
20名被試在未告知系統差別的情況下,單個實驗分別通過兩個系統進行兩次。
4.2.1 交互效果評估
實驗1 選取控制電氣控制臺的主要交互手勢[14-15]:點擊、打開旋鈕、關閉旋鈕、左推操控桿、右推操控桿、打開菜單、關閉菜單,每位被試通過兩種系統各做5次。

圖8 虛擬操作效果
記錄被試操作準確率,同時記錄每種手勢5次交互所用時間。操作是否正確的判斷準則如圖9 所示。由圖9 可知,當點擊手勢運動到識別邊緣時,識別正確的虛擬手(a2)與實際手(a1)相差不太,而錯誤的虛擬手(a3)食指會發生彎曲;識別實際夾持姿態(b1)和正確夾持姿態(b2)相差不太大,而錯誤夾持姿態(b3)出現了手指交叉錯誤信息;當握持手勢出現自遮擋時,正確的虛擬手(c2)繼續彎曲運動,而錯誤的虛擬手(c3)會向外張開運動;當菜單手勢運動到Leap Motion 的識別邊界時,正確的虛擬手(d2)會按原方向運動,錯誤的虛擬手(d3)會出現突然翻轉。

圖9 判斷準則
統計實驗1 中調查問卷1 的問卷結果為“是”的人數,統計結果如圖10所示。

圖10 問卷1結果統計
由圖10 可知,志愿者對系統一的舒適性和有效性具有較高評價,其中有75%以上的人對所設計的交互方式滿意,并認為該交互手勢方法便于培訓學習,符合交互習慣。
統計調查問卷2 中志愿者對兩個系統的滿意度對比結果,統計圖如圖11所示。

圖11 問卷2結果統計
由圖11 可知,兩種系統相比,用戶對使用系統1 的感覺更加舒適,有80%的用戶認為系統1的識別更加精確。
實驗1 結果證明了層次化手勢校正方法在精確度和有效性上具有明顯的優勢,且系統更加舒適,更加利于學習者進行操作學習,符合用戶在虛擬場景中對電氣控制臺進行交互操作的需求。
4.2.2 主觀感受評估
實驗2 分別用點擊手勢點擊按鈕3次;用旋轉手勢控制旋鈕左旋1 次后右旋1 次;用握持手勢向左推控制桿1 次,然后向后拉1 次;最后運用菜單手勢退出系統。當操作完成后,每人填寫1份使用體驗調查問卷。
實驗2分別在兩個系統進行后,每人填寫1 份使用效果對比調查問卷。
調查問卷1 主要調查對當前系統的滿意度和交互體驗舒適度,如表3所示。

表3 交互體驗效果調查問卷
調查問卷2主要調查被試對兩種系統滿意度對比,如表4所示。

表4 交互體驗對比調查問卷
實驗2 中,滿足圖9 判斷準則的一次操作視為操作準確。被試5次操作的準確率如圖12所示。

圖12 操作準確率
由圖12 可知,在使用控制電氣控制臺的幾種手勢中,系統1 的識別率更高,均超過89%。整個操作過程中,系統1 對虛擬手的繪制十分準確,虛擬手能準確與控制臺模型進行交互,實現了對虛擬電氣控制臺的準確操控。并且系統1能很好地解決Leap Motion在識別區域邊緣或者手指遮擋時出現的識別問題,為用戶提供了更好的虛擬交互體驗。
20 位被試的平均每種手勢5 次交互的時長如圖13所示。由圖可知,系統1 減少了用戶的操作時間,手勢的交互更加高效。

圖13 5次交互時長
由于層次化手勢校正方法根據設定關節運動閾值判斷運動關節識別的正誤,剔除了捕獲的錯誤手勢識別數據,從而縮短了交互時長;采用層次化思想,把錯誤手勢識別信息定位為以關節為中心,依據手模型遵循的層次化運動關系和關節在運動中兩幀之間的參數變化,逐層校正手勢,提高了手勢識別的精度。
本文分析了Leap Motion 在手勢交互過程中導致虛擬手的運動錯誤、手勢識別精度較低的原因,提出了層次化的手姿態校正方法,解決了遮擋和最佳識別區域邊緣識別能力差帶來的識別難題。然后從用戶體驗、操作準確率、任務時長、虛擬手與真實手姿態一致性四方面對本文方法進行了驗證。實驗結果表明,本文方法有效地提升了用戶基于Leap Motion的手勢使用的交互體驗。
但本文方法也存在一些局限性:采用統一的關節運動閾值θ判斷Leap Motion 的識別錯誤,會影響關節校正的準確性。應根據人手層次化的結構特點,得出不同層次的關節角度的關節運動閾值。下一步工作將重點解決以上問題。