姚 欣,陽夢珂,周小梅,高 然,何明濤,應 申
(武漢大學 資源與環境科學學院,湖北 武漢430079)
傳統的地圖瀏覽方式通過對鼠標和鍵盤的操作來進行,通常是一個人講解,一個人通過電腦進行系統操作,對地圖的公眾講解有所限制。講解者和參觀者不能有效地與展品互動。新興的體感技術使得人們直接使用肢體動作,身臨其境地與機器或者環境互動。如果能夠建立一個使用體感系統操作的地圖平臺,解放鼠標與鍵盤輸入對人機交互的束縛,探尋體感姿態與動作對地圖瀏覽操作的適用性則會更加容易。
與傳統的鼠標、鍵盤等人機交互設備不同,用戶借助Kinect用身體動作就可以直接控制計算機,Kinect很可能和鍵盤鼠標成為新一代標準人機交互設備[1]。而Kinect與電子地圖的結合,將帶來全新的地圖瀏覽體驗。
基于人體手勢動作的地圖瀏覽可以劃分為兩個模塊:地圖平臺和地圖瀏覽的內核操作;人體手勢識別需要兩者的關聯和鏈接(見圖1)。第一步,同時進行地圖瀏覽系統的搭建與體感系統的姿態動作定義。地圖瀏覽系統,主要實現縮放與平移功能,并根據現有的鼠標或鍵盤操作方式,建立一個全屏地圖場景漫游系統;體感系統則是設計對應的操作手勢,并提供識別功能,Kinect提供的 Windows SDK可實現在Windows平臺下獲取操作者肢體動作。第二步,將兩系統對接,結合人體行為和習慣認知,用手勢動作來實現對GIS地圖瀏覽的操作,整體技術路線如圖1所示。

圖1 技術路線
手勢是指人手或者手臂結合產生的各種姿勢或者動作[2],是一種表達思想或感情的肢體運動。手勢識別是通過計算機設備對人的手勢進行精確解釋,已成為當前人機交互的一種重要手段,這種方式是非接觸性的、自然的交互,相比傳統的鍵盤鼠標等具有自然簡潔和豐富性等特點,是人機交互發展的趨勢[3]。
作為新一代的人機交互工具,Kinect提供了骨架跟蹤系統,通過偵測到的3D深度圖像,通過機器學習的方式,可以很好地識別人體的軀干、四肢以及手指等動作。其核心算法就是探測識別雙手在空間中的運動,如在Kinect里,為模擬鼠標點擊的下壓按鈕動作,使用手向前推的手勢來模擬[4]。按照這種思路,本文使用了全身6個骨骼點,包括頭、手、肘、肩、髖、膝,總共定義了8個基本的地圖瀏覽手勢,包括4個平移,2個縮放,以及圖層切換、縮放至全地圖4個平移手勢,兩個縮放手勢,以及圖層切換、縮放至全地圖等手勢(見圖2)。具體描述如下:
1)上移:兩手臂同時在胸前抬升;
2)下移:保持兩手臂豎直,同時向后擺動;
3)左移:右手臂向左揮動;
4)右移:左手臂向右揮動;
5)放大:兩手平推向肩外側;
6)縮?。簝墒终瓶拷?;
7)圖層切換:任意一手抬升至頭頂;
8)縮放至全地圖:左或者右膝蓋抬高。
與鍵盤、鼠標相比,頻繁地使用肢體動作進行控制操作更易讓人感到疲憊,因此手勢設計充分考慮了簡單、高效的原則,盡量減小肢體運動距離,并且符合人的一般認知習慣。
由于Kinect可以利用它的景深攝像頭提供深度圖像,其中的像素記錄了場景中各點的校準深度,分辨率達到幾厘米。這種深度攝像機可以很好地消除背景噪音,提取出人的信息。本文利用Microsoft Kinect提供的 Windows SDK v1.8建立對應的操作手勢來搭建體感系統,從而實現在 Windows平臺下獲取操作者肢體動作。
當Kinect的位置確定后,人的肢體的每個關節便對應有一個空間坐標(x,y,z),并隨關節位置的變化而改變。通過比較各個節點的3個方向的坐標值,便可以判斷它們的位置關系,從而對不同手勢進行判別。根據前述手勢設計,對其動作的判斷規則如下:

圖2 手勢的設計和約定
1)上移:右手在右肩前,并且左手臂高于左手手肘,右手臂高于右手手肘。
2)下移:右手低于右肩,并且左右手同時在臀部后。
3)左移:左手低于左肩,并且右手在髖部中心左側。
4)右移:右手低于右肩,并且左手在髖部中心右側。
5)放大:右手高于右手手肘,并且右手在右肩右側,左手在左肩左側。
6)縮?。河沂指哂谟沂质种?,并且左手高于左手手肘,左右手距離小于一定數值。
7)圖層切換:右手高于頭部,或者左手高于頭部。
8)縮放至全地圖:左膝高于右膝,或者右膝高于左膝。
對于每個手勢相應設置了一個或多個位置參數,當兩個關節的空間X,Y或Z方向上的距離在這個參數的限定范圍內時,便會觸發相應的事件。例如,在圖層切換手勢中,“右手高于頭部”對應的條件語句為:

其中p為參數,值為0.2,是一個最佳測試值。
由于Kinect捕捉、處理的是肢體的瞬時位置信息,因此這種識別方式屬于靜態識別。
OpenLayers是一個用于開發網絡地圖客戶端的JavaScript包,用于實現標準格式發布的地圖數據訪問,其實現訪問地理空間數據的方法符合OGC(開放地理信息系統協會)標準[5-7]。
首先是創建地圖并加載圖層。在HTML文檔的JavaScript模塊中利用web地圖服務請求返回相應的地圖圖層進行加載,本文選用的地圖為必應虛擬地球(Bing Virtual Earth),圖層包括衛星圖層、道路圖層、混合圖層。
然后是實現對地圖的控制,主要是通過調用OpenLayers.Map下的相關函數完成。Kinect中根據關節的節點坐標進行動作的識別,之后向地圖瀏覽平臺傳遞一個信號,JavaScript根據信號來調用相應的地圖瀏覽控制函數。
本系統Kinect開發使用CJHJ語言生成控制臺程序,地圖搭建基于 OpenLayers 2.10,使用JavaScript編寫html文檔,借助Windows平臺實現連接。通過基于手勢動作識別,可以不使用任何鼠標、鍵盤工具,直接從Kinect接入OpenLayers地圖,來實現地圖的瀏覽。本文搭建的體感控制地圖的平臺,通過反復測試并不斷改進代碼,手勢識別的正確率得以提高,用戶友好度也得以加強。已有多名人員測試過本系統實現的體感地圖控制,總體效果良好,能很快識別成功并進行地圖瀏覽。測試發現人體與Kinect的最近有效距離為2m,在2~6m的范圍內能夠較好地完成地圖控制。圖3為部分測試照片,其中圖3(a)為每個測試的初始地圖狀態,通過動作可以實現對地圖的放大、左移和圖層切換。
通常地圖的瀏覽用鼠標和鍵盤交互實現;但是在基于手勢動作的識別時,由于人體動作的連續性和先后性,動作和所想的瀏覽結果可能產生沖突,如“放大”時有胳膊的舉起,人在執行時會附帶有“上移”或“下移”的動作,引出在文中動作的設計和判斷時必須準確地分類,并規定相關的參數,才能實現有效的動作和地圖瀏覽的一致性。通常來說,對于這些動作需設置一個優先級來降低動作的誤判,例如,要實現放大,首先必須滿足右手高于右手手肘,然后才是外推動作的識別。

圖3 實驗測試
本文實現基于Kinect手勢識別,搭建體感地圖平臺,以探索瀏覽地圖的交互方式,是利用自然用戶界面實現交互系統的初探。對手勢動作的識別,精度和自由度是一個難點,文章限定了識別的距離才獲得了比較良好的效果,在距離較近或者較遠的時候誤差就會很大。Kinect是下一代自然用戶界面的一個縮影,基于Kinect等自然用戶界面的人機交互設計可大幅度提高用戶工作的能力和效率,成為當前桌面系統、移動終端后的另一種地圖瀏覽方式。
[1]孫樹森,馬文娟,桂江生,等.基于Kinect的《互動應用開發》課 程 開 發 探 究 [J].中 國 校 外 教 育,2012(30):161,165.
[2]江立,阮秋琦.基于神經網絡的手勢識別技術研究[J].北京交通大學學報,2006,30(5):32-36.
[3]陶麗君,李翠華,張希婧,等.基于Kinect傳感器深度信息的動態手勢識別[J].廈門大學學報:自然科學版,2013,52(4):493-497.
[4]余濤.Kinect應用開發實戰:用最自然的方式與機器對話[M].北京:機械工業出版社,2013.249.
[5]陳德鑫.基于OpenLayers客戶端的網絡地圖實現技術框架[J].現代測繪,2010,33(3):48-49.
[6]馮駿,劉文兵,夏翔.Web2.0下網絡地圖的發展及存在問題探討[J].測繪工程,2013,22(2):37-41.
[7]張志軍,邱俊武,于忠海.通用地圖符號表達機制的研究[J].測繪工程,2013,22(5):5-8.