Oculus先後收購了Nimble VR、Surreal Vision、Pebbles Interfaces。手勢與VR控制、AR互動整合的重要性不言而喻。作者王元介紹了目前主流的光學手勢識別方案,包括二維手型識別、二維手勢識別、三維手勢識別。
談起手勢識別技術,由簡單粗略的到複雜精細的,大致可以分為三個等級:二維手型識別、二維手勢識別、三維手勢識別。
在具體討論手勢識別之前,我們有必要先知道二維和三維的差別。二維只是一個平面空間,我們可以用(X坐標,Y坐標)組成的坐標信息來表示一個物體在二維空間中的坐標位置,就像是一幅畫出現在一面牆上的位置。三維則在此基礎上增加了「深度」(Z坐標)的信息,這是二維所不包含的。這裡的「深度」並不是咱們現實生活中所說的那個深度,這個「深度」表達的是「縱深」,理解為相對於眼睛的「遠度」也許更加貼切。就像是魚缸中的金魚,它可以在你面前上下左右的遊動,也可能離你更遠或者更近。
前兩種手勢識別技術,完全是基於二維層面的,它們只需要不含深度信息的二維信息作為輸入即可。就像平時拍照所得的相片就包含了二維信息一樣,我們只需要使用單個攝像頭捕捉到的二維圖像作為輸入,然後通過計算機視覺技術對輸入的二維圖像進行分析,獲取信息,從而實現手勢識別。
而第三種手勢識別技術,是基於三維層面的。三維手勢識別與二維手勢識別的最根本區別就在於,三維手勢識別需要的輸入是包含有深度的信息,這就使得三維手勢識別在硬體和軟體兩方面都比二維手勢識別要複雜得多。對於一般的簡單操作,比如只是想在播放視頻的時候暫停或者繼續播放,二維手勢也就足夠了。但是對於一些複雜的人機互動,與3D場景互動,就必須含有深度信息才行。
二維手型識別二維手型識別,也可稱為靜態二維手勢識別,識別的是手勢中最簡單的一類。這種技術在獲取二維信息輸入之後,可以識別幾個靜態的手勢,比如握拳或者五指張開。其代表公司是一年前被Google收購的Flutter。在使用了他家的軟體之後,用戶可以用幾個手型來控制播放器。用戶將手掌舉起來放到攝像頭前,視頻就開始播放了;再把手掌放到攝像頭前,視頻又暫停了。
「靜態」是這種二維手勢識別技術的重要特徵,這種技術只能識別手勢的「狀態」,而不能感知手勢的「持續變化」。舉個例子來說,如果將這種技術用在猜拳上的話,它可以識別出石頭、剪刀和布的手勢狀態。但是對除此之外的手勢,它就一無所知了。所以這種技術說到底是一種模式匹配技術,通過計算機視覺算法分析圖像,和預設的圖像模式進行比對,從而理解這種手勢的含義。
這種技術的不足之處顯而易見:只可以識別預設好的狀態,拓展性差,控制感很弱,用戶只能實現最基礎的人機互動功能。但是它是識別複雜手勢的第一步,而且我們的確可以通過手勢和計算機互動了,還是很酷的不是麼?想像一下你忙著吃飯,只要憑空做個手勢,計算機就可以切換到下一個視頻,比使用滑鼠來控制可是方便多了!
二維手勢識別二維手勢識別,比起二維手型識別來說稍難一些,但仍然基本不含深度信息,停留在二維的層面上。這種技術不僅可以識別手型,還可以識別一些簡單的二維手勢動作,比如對著攝像頭揮揮手。其代表公司是來自以色列的PointGrab,EyeSight和ExtremeReality。
二維手勢識別擁有了動態的特徵,可以追蹤手勢的運動,進而識別將手勢和手部運動結合在一起的複雜動作。這樣一來,我們就把手勢識別的範圍真正拓展到二維平面了。我們不僅可以通過手勢來控制計算機播放/暫停,我們還可以實現前進/後退/向上翻頁/向下滾動這些需求二維坐標變更信息的複雜操作了。
這種技術雖然在硬體要求上和二維手型識別並無區別,但是得益於更加先進的計算機視覺算法,可以獲得更加豐富的人機互動內容。在使用體驗上也提高了一個檔次,從純粹的狀態控制,變成了比較豐富的平面控制。這種技術已經被集成到了電視裡,但是還沒有成為常用控制方式。
三維手勢識別接下來我們要談的就是當今手勢識別領域的重頭戲——三維手勢識別。三維手勢識別需要的輸入是包含有深度的信息,可以識別各種手型、手勢和動作。相比於前兩種二維手勢識別技術,三維手勢識別不能再只使用單個普通攝像頭,因為單個普通攝像頭無法提供深度信息。要得到深度信息需要特別的硬體,目前世界上主要有3種硬體實現方式。加上新的先進的計算機視覺軟體算法就可以實現三維手勢識別了。下面就讓小編為大家一一道來三維手勢識別的三維成像硬體原理。
1. 結構光(Structure Light)
結構光的代表應用產品就是PrimeSense的Kinect一代了。
這種技術的基本原理是,加載一個雷射投射器,在雷射投射器外面放一個刻有特定圖樣的光柵,雷射通過光柵進行投射成像時會發生折射,從而使得雷射最終在物體表面上的落點產生位移。當物體距離雷射投射器比較近的時候,折射而產生的位移就較小;當物體距離較遠時,折射而產生的位移也就會相應的變大。這時使用一個攝像頭來檢測採集投射到物體表面上的圖樣,通過圖樣的位移變化,就能用算法計算出物體的位置和深度信息,進而復原整個三維空間。
以Kinect一代的結構光技術來說,因為依賴於雷射折射後產生的落點位移,所以在太近的距離上,折射導致的位移尚不明顯,使用該技術就不能太精確的計算出深度信息,所以1米到4米是其最佳應用範圍。
2. 光飛時間(Time of Flight)
光飛時間是SoftKinetic公司所採用的技術,該公司為Intel提供帶手勢識別功能的三維攝像頭。同時,這一硬體技術也是微軟新一代Kinect所使用的。
這種技術的基本原理是加載一個發光元件,發光元件發出的光子在碰到物體表面後會反射回來。使用一個特別的CMOS傳感器來捕捉這些由發光元件發出、又從物體表面反射回來的光子,就能得到光子的飛行時間。根據光子飛行時間進而可以推算出光子飛行的距離,也就得到了物體的深度信息。
就計算上而言,光飛時間是三維手勢識別中最簡單的,不需要任何計算機視覺方面的計算。
3. 多角成像(Multi-camera)
多角成像這一技術的代表產品是Leap Motion公司的同名產品和Usens公司的Fingo。
這種技術的基本原理是使用兩個或者兩個以上的攝像頭同時攝取圖像,就好像是人類用雙眼、昆蟲用多目複眼來觀察世界,通過比對這些不同攝像頭在同一時刻獲得的圖像的差別,使用算法來計算深度信息,從而多角三維成像。
在這裡我們以兩個攝像頭成像來簡單解釋一下:
雙攝像頭測距是根據幾何原理來計算深度信息的。使用兩臺攝像機對當前環境進行拍攝,得到兩幅針對同一環境的不同視角照片,實際上就是模擬了人眼工作的原理。因為兩臺攝像機的各項參數以及它們之間相對位置的關係是已知的,只要找出相同物體(楓葉)在不同畫面中的位置,我們就能通過算法計算出這個物體(楓葉)距離攝像頭的深度了。
多角成像是三維手勢識別技術中硬體要求最低,但同時是最難實現的。多角成像不需要任何額外的特殊設備,完全依賴於計算機視覺算法來匹配兩張圖片裡的相同目標。相比於結構光或者光飛時間這兩種技術成本高、功耗大的缺點,多角成像能提供「價廉物美」的三維手勢識別效果。
手勢控制之於VR/AR
今年E3展上各大廠商推出的VR遊戲都需要控制器,對於Hardcore遊戲,遊戲控制器是目前最優解決方案。遊戲控制器的優勢在於,控制反饋及時,組合狀態多。缺點是與虛擬環境互動少,用戶只能控制而不能參與。目前各大廠商的沉浸式VR體驗只有量上的差距,但是加入手勢控制與VR環境實現互動,將會把VR體驗真實性再推到另一個高度。
特別的在VR遊戲和AR領域,尤其是互動性更強的AR應用方面,遊戲手柄和其它類型的控制器只能改變「狀態」的特點,就成為了硬傷。舉個例子來說,設計給iOS和Android這種觸控設備的遊戲(憤怒的小鳥,水果忍者等等),就不適合用手柄來玩,應為這些遊戲就是為手控操作而設計的,我想你絕對不會想用手柄去切水果的。
當前市場上的3D遊戲,之所以稱為3D主要是因為其中模型是3D的,但是對比VR遊戲的3D場景來說,深度場景開發的還不夠。所以Oculus很有遠見的看到了手勢控制在VR/AR的重要性,不僅是可以將目前的手控操作遊戲無縫移植到VR平臺上來,更可以發揮三維手勢的深度信息的優勢,開發出新類型遊戲(挖掘深度信息,體會子彈時間,空手奪白刃等)。手勢識別增強了實現運動控制遊戲,例如,通過執行方向盤的姿勢開車,使用彈弓的姿態玩「憤怒的小鳥」,用手勢來玩第一人稱射擊遊戲等等。
如果說遊戲手柄在VR遊戲領域還有一席之地,那麼在AR應用方面,手柄就完全不能勝任人機互動的任務了。在AR應用領域有豐富的人機互動內容,而這種互動是非常複雜的,只有手勢操作才可以完成。以教育AR為例,我們希望使用AR來與用戶互動,需要有選中、拖拽、拉伸等操作,使用手勢完成這些動作是最自然的,而手柄完全無法應用。
Oculus此舉表明了手勢識別對VR和AR不言而喻的重要意義,但是手勢識別和手勢控制算法複雜,計算資源要求高,Pebbles Interfaces和LeapMotion目前都運行在PC平臺。但是目前移動VR市場佔有很大比例,人們日常也更希望可以在移動端享受VR體驗,所以手勢識別如何流暢地運行在移動VR設備上,將是未來的關注點。
本文來源:VR觀察 責任編輯: 張彬彬_NT5025