王宇航, 朱運生, 孫曉燕
(杭州師范大學(xué) 杭州國際服務(wù)工程學(xué)院, 杭州 311121)
現(xiàn)代發(fā)達的醫(yī)學(xué)影像技術(shù)已經(jīng)能夠讓醫(yī)生直觀的窺探人體內(nèi)部[1], 但目前多限于術(shù)前檢查和規(guī)劃, 難以在手術(shù)過程中發(fā)揮最大的作用. Augmented Reality (AR)即增強現(xiàn)實技術(shù), 是一種把虛擬世界套在現(xiàn)實世界中,并進行互動的技術(shù). 這種技術(shù)最早于1990年提出, 目前, AR技術(shù)在軍事[2]、游戲[3]等領(lǐng)域都有了廣泛的應(yīng)用. 隨著AR技術(shù)的發(fā)展, 它也被引入包括手術(shù)在內(nèi)的醫(yī)學(xué)領(lǐng)域以及手術(shù)模擬[4]中, 應(yīng)用于手術(shù)導(dǎo)航[5]、手術(shù)訓(xùn)練[6]等, 使得術(shù)前影像提供的患者信息最大限度地服務(wù)于手術(shù). 越來越多的探索在實際臨床手術(shù)中展開, 包括頭頸、脊柱、顱額面等多個部位的手術(shù)操作中都嘗試了AR輔助的方式. 例如, 冰島Landspitali大學(xué)醫(yī)院使用3D X射線和光學(xué)成像技術(shù)為外科醫(yī)生提供“患者全面的增強現(xiàn)實視圖”[7]; 杜克大學(xué)用AR眼鏡助力大腦手術(shù)[8]; 尼克勞斯兒童醫(yī)院與VR/AR公司Next Galaxy Corp連手, 制作為醫(yī)院手術(shù)專用設(shè)計的軟件[9]; 國內(nèi)四川大學(xué)也推出了《人衛(wèi)3D系統(tǒng)解剖學(xué)》VR應(yīng)用[10],使得醫(yī)生憑借VR能全方位立體地觀察屏幕中人體的各個器官和結(jié)構(gòu). 有研究指出, 在針刺活檢應(yīng)用中, AR技術(shù)比傳統(tǒng)的“徒手”技術(shù)具有更好的操作精度和可靠性[11].
然而, 在實際的手術(shù)場景中, 醫(yī)生對于虛擬圖像的檢索和操控仍然沒有那么容易——在手術(shù)過程中要求手術(shù)醫(yī)生放下手術(shù)器械切換到鼠標或鍵盤操作進行顯示狀態(tài)的切換顯然不符合手術(shù)無菌環(huán)境的要求[12], 因為它們未經(jīng)消毒, 有感染的風險. 外科醫(yī)生通常只能向助手下達口令, 再由后者通過鼠標或鍵盤進行操作[13],但這無法直接有效的體現(xiàn)醫(yī)生的意圖. 近年也有研究者探索利用平板計算機的觸屏方式提供交互[14], 但都存在干擾手術(shù)進程、引起染菌風險的問題.
目前, 現(xiàn)有的手術(shù)非接觸式控制技術(shù)主要包含兩大類: 語音控制和手勢控制. 如國外有學(xué)者利用語音控制和計算機系統(tǒng)來遠程輔助手術(shù)的操作[15], 但語音控制存在著精度不夠準確, 語音識別率較低等問題. 在手勢控制中, 有學(xué)者提出了基于Kinect的手勢控制技術(shù)[16].Kinect是微軟出品的3D體感設(shè)備, 可提供非接觸式的人機交互, 但在實際的手術(shù)控制中, 由于Kinect的傳感器分辨率不夠, 無法有效的辨別出手指, 其次Kinect使用的結(jié)構(gòu)光技術(shù)也使得深度傳感器的可視范圍無法重疊, 在實際手術(shù)中環(huán)境匯中, Kinect的設(shè)備尺寸大, 需要較長的電源線, 對于手術(shù)的操作有一定的阻礙.
為此, 從手術(shù)的安全性和實際操作的可行性上, 因此本文基于Leap Motion小巧、靈活、高精度的提出了基于Leap Motion手勢識別的非接觸式無干擾化的交互控制技術(shù). 系統(tǒng)設(shè)計了一套易于理解和操作的手勢用于手術(shù)中影像數(shù)據(jù)的交互呈現(xiàn): 利用Leap Motion設(shè)備采集手部的數(shù)據(jù)[17]、基于API實現(xiàn)相應(yīng)的手勢識別, 并將對應(yīng)的控制信號回饋給計算機, 從而達到手術(shù)過程中影像可視化效果非接觸式人機交互的目的.
系統(tǒng)主要由手術(shù)過程中的AR顯示和手勢控制兩部分組成, 其中, AR效果在平板電腦中呈現(xiàn), 實現(xiàn)術(shù)前信息與術(shù)中場景的虛擬迭加, 而手勢控制則基于Leap Motion設(shè)備實現(xiàn). 系統(tǒng)總體結(jié)構(gòu)如圖1所示, 利用ARToolKit實現(xiàn)術(shù)前數(shù)據(jù)在真實場景中空間坐標的實時配準, 并以O(shè)penGL技術(shù)將由CT、MRI等數(shù)字化成像技術(shù)獲得的人體信息在計算機上直觀地表現(xiàn)為三維效果, 從而提供用傳統(tǒng)手段無法獲得的結(jié)構(gòu)信息. 其中對于手術(shù)相關(guān)的影像信息的控制, 以Leap Motion獲取醫(yī)生的手勢信息, 在同一局域網(wǎng)下利用Java類中的Socket方法, 輔以接聽函數(shù)實現(xiàn)顯示內(nèi)容的旋轉(zhuǎn)、縮放、平移等.
圖1 系統(tǒng)總體結(jié)構(gòu)
Leap Motion作為Leap公司在2013年新推出的體感控制產(chǎn)品, 類似于微軟的Kinect, 是目前最流行的體感設(shè)備之一[17]. Leap Motion對用戶手掌的9塊骨頭、29個關(guān)節(jié)進行探測, 并檢測到較近距離內(nèi)的從手肘到指尖部分的手勢, 可以識別毫米級別的極短位移量, 具有高精度、實時回饋的特點.
Leap Motion使用的是人眼3D原理, 將兩個獨立的2D畫面轉(zhuǎn)換為空間3D感應(yīng). 它根據(jù)內(nèi)置的兩個攝像頭以及紅外LED從不同角度捕捉的畫面, 以設(shè)備本身為原點建立一個三維坐標體系(如圖2所示, 坐標系的原點是控制器上表面的中心, 坐標系的X軸平行于傳感器, 指向屏幕右方. Y軸指向上方. Z軸指向背離屏幕的方向), 重建出手掌在真實世界三維空間的運動信息[18]. Leap Motion所采用的快門傳感器速度高達120幀每秒, 可完整采集手部的像素信息, 然后再對這些資料進行后續(xù)處理, 通過大量資料計算來做到對設(shè)備功能的穩(wěn)定控制, 從而獲取包括如圖3所示的手掌方向和法向等手部運動相關(guān)的信息. Leap Motion的檢測范圍大體在傳感器上方25 mm到600 mm之間, 檢測的空間大體是一個倒四棱錐體.
圖2 Leap Motion坐標系
圖3 Leap Motion識別的手掌方向和法向
Leap Motion提供了適用于Windows、Mac OS和Linux的SDK. 本系統(tǒng)在Windows10操作系統(tǒng)的Java環(huán)境下開發(fā), 利用原生接口, 通過接口中六大類(Controller類、Frame類、Gesture類、Finger類、HandList類、Hand類)來的實現(xiàn)從Leap Motion服務(wù)中獲取追蹤數(shù)據(jù).
Leap Motion Controller的主要接口為Controller類. 創(chuàng)建此Controller類的實例以訪問跟蹤數(shù)據(jù)和配置信息的幀. 可以使用Controller :: frame()函數(shù)隨時輪詢幀數(shù)據(jù). 調(diào)用frame()或frame(0)來獲取最近的幀. 為了在程序中開啟Leap Motion的手勢識別, 需使用controller中的enableGesture函數(shù), 輸入的參數(shù)為手勢的類型(如Gesture.Type.TYPE_CIRCLE).
Frame類表示在單個幀中檢測到的一組手和手指跟蹤資料. Leap Motion設(shè)備檢測跟蹤區(qū)域內(nèi)的手、手指, 以幀速率的方式報告其位置、方向、手勢和運動.Gesture類表示對用戶移動手勢的識別. 其子類定義了由運動控制器識別的特定運動模式的屬性, 子類包括CircleGesture(), SwipeGesture(), ScreenTapGesture(),KeyTapGesture().
Finger類代表一個跟蹤的手指. 試驗中從Frame或Hand物件獲取有效的Finger物件.
HandList類表示Hand對象的列表. 其中g(shù)et方法通過其在列表中的位置訪問列表成員. 輸入的參數(shù)為基于零的列表位置索引, 返回在指定索引處的Hand對象.
Hand類從HandList類中獲取得到, 通過Hand類可以得到檢測到的手的身體特征如手掌位置和速度、手掌正常的方向和手指的方向、適合手的球體屬性和附加的手指的列表. 其中palmVelocity方法返回向量表示手掌速度的坐標(X, Y, Z), direction方法返回從手掌位置朝向手指的方向的向量.
Leap設(shè)備把代表識別動作模型的Gesture對象放到Frame對象中g(shù)estures的list列表里. 在回調(diào)函數(shù)onFrame()中, 應(yīng)用程序循環(huán)讀取gestures的list列表,并把每個手勢的信息輸出.
通過使用上述的類和方法, 來實現(xiàn)從Leap Motion中獲取到手勢信息.
我們提出一種基于手勢識別的非接觸式的交互技術(shù), 讓醫(yī)生通過不同手勢來實現(xiàn)對圖像顯示效果的控制, 從而減少鼠標操作對手術(shù)無菌環(huán)境造成的影響. 在手術(shù)過程中, 醫(yī)生對圖像控制的主要需求有對圖像進行旋轉(zhuǎn)、縮放、平移等. 為此, 設(shè)計了6種不同的手勢來實現(xiàn)需求, 具體手勢如表1.
表1 手勢配置表
基于Leap Motion的手勢識別流程如圖4所示, 首先用戶的手勢信息被Leap Motion的紅外攝像頭捕捉到, 然后通過Leap Motion設(shè)備的處理, 進行手勢分割,并與現(xiàn)有的模型進行參數(shù)對比, 從而識別出相應(yīng)的手勢.
手勢識別的具體算法如圖5所示, 在算法處理中,通過Leap Motion提供的gesture類, 利用gesture.type()返回的數(shù)值TYPE_CIRCLE, TYPE_KEY_TAP,TYPE_SWIPE分別得到基于指尖畫圈動作的順逆時針旋轉(zhuǎn)、手指單擊、以及平移手勢, 從而實現(xiàn)圖像的旋轉(zhuǎn)、縮放和平移功能.
圖4 手勢識別流程圖
圖5 算法流程圖
1) 圖像的旋轉(zhuǎn)功能通過比較gesture.state()的返回值得到. 在TYPE_CIRCLE(旋轉(zhuǎn))手勢中, 利用gesture.state()的返回值(Gesture.State.STATE_STOP或Gesture.State.STATE_START)來得到手勢動作的開始狀態(tài)和結(jié)束狀態(tài), 從而得到一個完整的連續(xù)的手勢時間周期. 若direction().angleTo<π/2, 則識別出只伸出手指, 并順時針旋轉(zhuǎn)的手勢, 反之則識別出只伸出手指,并逆時針旋轉(zhuǎn)的手勢.
2) 圖像的縮放功能通過比較isFinger()和tappingFinger.type()的返回值得到. 在TYPE_KEY_TAP(手指單擊)手勢中, 通過keytap類中的pointable方法得到單擊物體的類型(手指或工具), 若為手指(tappingPointable.isFinger()), 根據(jù) tappingFinger.type()識別出不同的手勢. 當手指類型為INDEX時, 識別出手掌張開單擊食指的手勢; 當手指類型為MIDDLE時, 識別出手掌張開單擊中指的手勢. 該方法對左右手均可識別.
3) 圖像的平移功能通過計算palmVelocity數(shù)字得到. 在TYPE_SWIPE(滑動)手勢中, 通過gesture.state()獲取到滑動停止時的狀態(tài), 并利用Hand類的palmVelocity得到手掌速度的向量信息. 由于Leap Motion的坐標系與圖像的坐標系存在差異, 因此若X,Z軸的向量數(shù)值在一定的閾值內(nèi)且X軸上的向量數(shù)值遞減, 則識別出手掌張開向右移動的手勢; 若X, Z軸的向量數(shù)值在一定的閾值內(nèi)且X軸上的向量數(shù)值遞增, 則識別出手掌張開向左移動的手勢.
圖6 手勢與手勢關(guān)節(jié)對應(yīng)圖
實驗用到了計算機(Windows 7系統(tǒng))一臺和Leap Motion設(shè)備一套, 首先在計算機上安裝好Leap Motion驅(qū)動程序, 將Leap Motion設(shè)備水平放置在無雜物的桌面上, 再將其與計算機連接, 設(shè)備指示燈顯示黃色則表明連接成功. 其中必須將Leap Motion設(shè)備放置在無障礙的桌面上, 設(shè)備上方無障礙是成功使用Leap Motion設(shè)備的基本條件.
本次實驗選取了20名試驗對象, 其中10名男性,10名女性, 均為右利手. 為方便數(shù)據(jù)統(tǒng)計, 20名實驗對象分組為A、B、C、D、E五組, 每組兩男兩女共四人, 分別編號為A1到A4, 、B1到B4、C1到C4、D1到D4、E1到E4. 20名實驗對象中, 有2名在實驗前接觸過非接觸式交互技術(shù)如Kinect(對象A2和C1).共設(shè)計了三組實驗, 分別對Leap Motion參數(shù)準確性、手勢識別準確性、系統(tǒng)交互易用性進行測試. 為避免測試人員因疲勞感而產(chǎn)生的影響, 實驗順序按照如下圖順序進行:
在實驗前, Leap Motion設(shè)備放置在水平桌面上,通過USB線和系統(tǒng)相連, 手勢的操作均在Leap Motion上方中央?yún)^(qū)域進行.
分別對Leap Motion返回的手指個數(shù)以及手部運動速度進行測試, 以評估Leap Motion對手部運動基本數(shù)據(jù)的獲取的準確程度. 五組試驗對象均進行了手指個數(shù)的測試, 測試形式為用右手放置不同的手指數(shù). 每位測試人員分別對伸開1–5根手指的手勢重復(fù)50次進行測試, 對比實際手指個數(shù)和系統(tǒng)利用Leap Motion的Finger.number值輸出的手指個數(shù). 在共計1000次的試驗中, 僅有97次未能正確識別, 準確率90.3%. 其中, 1根手指無錯誤識別, 2根手指的錯誤識別有16次,3根手指的錯誤識別有20次, 4根手指的錯誤識別有26次, 5根手指的錯誤識別有35次. 由此可知, Leap Motion對少于三個手指的情況識別較為準確; 當手指個數(shù)為三個以上時, 誤差較為明顯. 而男女性別差異在手指個數(shù)的識別結(jié)果上無明顯差異.
圖7 實驗順序圖
在對X軸速度參數(shù)的測試中, 隨機選取了一組實驗對象, 進行了4次測試, 分別以慢、適中、快、極快的速度下?lián)]手通過Leap Motion的正上方的中央?yún)^(qū)域,將數(shù)據(jù)取平均值, 得到如表2所示數(shù)據(jù).
表2 對X軸速度參數(shù)的測試
由此, Leap Motion傳感器返回到的X軸速度分量與用戶的揮手的速度在一定情況下成正比, 能夠反應(yīng)實際手勢速度的差異.
五組試驗對象進行了手勢識別準確性的測試, 在沒有提前對手勢進行練習(xí)的情況下, 將手部置于Leap Motion上方區(qū)域并完成如下表格中的手勢. 各組的每名對象對每種手勢重復(fù)測試100次, 即每種手勢共實驗2000次, 并將所得的數(shù)據(jù)進行整理匯總, 得出表3.
表3 各手勢準確性評估表
從多次實驗的結(jié)果中看, 對于平移和旋轉(zhuǎn)手勢,Leap Motion的識別率基本上能達到令人滿意的程度,但是對于食指和中指的點擊, 由于手掌在自然張開的狀態(tài)下, 食指的點擊會影響到中指, 同樣中指的點擊也會影響到食指, 因此誤差較大. 其中中指的點擊效果優(yōu)于食指點擊.
五組試驗對象分別對手勢識別系統(tǒng)的交互功能進行試用后, 對每一項手勢易用性進行了打分評估. 打分以操作者的主觀感受為標準, 其中每一項滿分為10分,對得分取平均值得到如表4.
表4 交互易用性評估表
大多數(shù)被試者對平移手勢的評分較高, 但對于縮小和放大所對應(yīng)的單擊手指手勢, 由于手指間的動作的互相影響, 交互的自然性略顯不足, 易用性仍需加強,相應(yīng)的客觀評分低于其他四種手勢. 其中有個別被試者反映對于縮放手勢感覺不夠自然, 分析后得知一個原因便是由于食指的點擊不可避免的會影響到中指,同樣, 中指的點擊也會影響到食指, 而Leap Motion設(shè)備將這幾毫米動作當成了人體手指的移動, 從而造成了誤差. 后期為了解決這一問題, 討論了兩種可行的方案,方案一是采用其他手勢來實現(xiàn)縮放效果, 如手指的捏合; 方案二是優(yōu)化算法, 將數(shù)據(jù)精確到手指的向量信息上.
在完成對Leap Motion參數(shù)準確性、手勢識別準確性和交互易用性的測試后, 讓被試者對系統(tǒng)的總體感受、反應(yīng)速度、手勢自然程度進行打分, 并寫出最不滿意的手勢. 得到了如下的每一項滿分為100分的數(shù)據(jù)表格如表5.
表5 實驗評分表
在對系統(tǒng)的測試中, 對于六項手勢所對應(yīng)的六個動作, 絕大部分被試者能在未訓(xùn)練的前提下良好的實現(xiàn).
針對手術(shù)室無菌環(huán)境要求非常高的現(xiàn)實需求, 以及傳統(tǒng)鼠標鍵盤等人機交互方式存在的需要定期消毒且無法在手術(shù)過程中進行操作等客觀限制, 本文對目前手術(shù)室中人機交互存在的問題進行了分析, 提出基于體感設(shè)備Leap Motion的非接觸式手勢控制方案.以Leap Motion作為數(shù)據(jù)采集源, 利用Leap Motion的API, 形成一套精確度相對較高、易用性相對較強的無干擾化手術(shù)控制系統(tǒng). 在現(xiàn)有的虛擬操作人機交互方法中, 本文方法更具有現(xiàn)實意義, 優(yōu)勢突出, 且進一步促進了人機交互與手術(shù)結(jié)合領(lǐng)域的發(fā)展. 實驗表明, 目前該系統(tǒng)在無干擾特性上有著較大的優(yōu)勢, 準確度與易用性上的表現(xiàn)也令人滿意, 同時也證明了Leap Motion設(shè)備獲取指尖信息的可行性[19]. 但目前對于某些手勢(比如手指單擊)的精確識別上仍存在不足, 下一步的工作將繼續(xù)深入研究手指關(guān)節(jié)和體感信息的提取方法和手勢匹配算法, 在現(xiàn)有的基礎(chǔ)上通過雙目攝像頭進行深度成像, 再根據(jù)雙目信息利用匹配算法推算出深度, 最后從深度圖中得到三維手部模型[20]. 與傳統(tǒng)的鼠標相比較, 手勢控制有著更加靈活的操作性: 在操作上無需接觸, 且手勢的控制不受空間的限制, 同時對手勢控制的研究有著更加大的研究意義[21]. 但在精細操作時, 靈敏度和穩(wěn)定性有待提高, 這也是我們下一步的工作目標.