Kinect SDK v1.7 新特性、互動架構與新概念
zouxy09@qq.com
http://blog.csdn.net/zouxy09
2013年3月18日,微軟Kinect for Windows團隊發布了新版的Kinect for Windows SDK 1.7,這是自去年發布Kinect forWindows SDK以來最重要的一次更新。其更新的核心內容包括:
1、Kinect Interactions:
手勢識別(可以識別pressing、gripping和releasing等手勢,從而實現拖拽、滾屏、點擊和放大等等功能)、多人智能適應方式、雙人互動等。之前OpenNI中都有手勢識別的功能,但以前版本的Kinect for Windows SDK卻沒有手勢識別相關的功能,對手勢體驗方面的處理得開發人員自己去開發,這是非常耗時的。微軟意識到這個趨勢,順勢而為還是比較贊的。況且還可以藉此機會規定下標準啊啥的。
2、Kinect Fusion:
即時捕捉和構建物體的3D模型。這點聽起來還是比較喜人的。在Kinect開放至今,很多的研究和開發都是針對於3D重構的,的確這也是3D網路攝影機的一個誘人之處。3D情境重構可利用於虛擬現實、3D列印、工業設計、服飾購物體驗等。有些產品都已經表現出了其獨特的魅力。但這個如果需要即時的話,對GPU的要求那是高啊。Kinect Fusion官方是在NVidia GeForce GTX560和 AMD Radeon 6950中測試的,更高端的情況是NVidia
GeForce GTX680和AMD Radeon HD 7850(對於顯卡,咱們看型號的第2位,第2位元字越大,越高端)。對於台式機,最好大於3GHz的多核CPU和具有2GB以上獨立顯存的顯卡。
3、與Matlab和OpenCV嫁接:
在電腦視覺領域的人相信都知道這兩大影像處理巨頭。在這個功能沒有出現之前,很多人都是自己對Kinect的映像資料進行轉換到OpenCV的映像格式進行處理的。現在微軟也應這個潮流,自己把這個橋樑給大家搭好了。當然,這給Kinect的互動發展感覺還是有很大作用的,畢竟在Matlab和OpenCV領域的開發群體不是一般的大啊。
一、KinectInteractionArchitecture互動架構
KinectInteraction通過結合深度流、骨骼流和複雜的演算法來提供人手跟蹤和手勢識別,以及一些其他特性。其架構圖如下:
Kinect v1.7 給使用者提供了兩種編程API,分別是用C++實現的native code APIs ,和用C# 與 Visual Basic編寫的、被更高層封裝的managed code APIs。
Native API提供使用者識別、人手跟蹤、人手狀態(被跟蹤、互動等等)和瞄準按下等基礎特性。這個API還提供了一個全新的資料流,稱為interaction stream(互動流)(在所有的版本中,Kinect都是以流的形式來訪問資料的,包括舊版本的深度流、顏色資料流和骨骼流等等),它反映的是手勢識別事件的觸發。
Managed API通過C#實現,它除了提供和nativeAPI相同的上述功能外,還通過C#/WPF controls提供了更高層的處理和互動控制封裝,它可以使使用者更快的構建互動程式。這些控制包括互動地區、抓取-拖拽和針對使用者按下的按鈕控制等。
二、KinectInteractionConcepts互動新概念(術語)
KinectInteraction是v1.7版新加入的特性,其中有很多新的概念,所以我們有必要去深入瞭解它們,清楚這些新的特效能做什麼,不能做什麼。另外,Kinect互動控制可以與鍵盤和滑鼠控制相容。
2.1、Hand Tracking
第一個概念是手勢跟蹤,如果我們之前用過Kinect的SDK的都會熟悉骨骼跟蹤,它可以為在Kinect視覺範圍的人建立骨骼。但是,在KinectInteraction中,這個功能本身沒有加強,而是通過結合深度資訊和骨骼跟蹤資訊去對使用者的手勢進行跟蹤。除了跟蹤人手,KinectInteraction還可以檢測和報告人手和手臂的狀態,使得一些例如握緊gripping、放開releasing和壓下pressing的自然手勢可以被識別。所以,使用者可以在感應器的正常操作範圍內(近距離模式0.4米,標準模式會達到3-4米)對Kinect程式進行非接觸式互動。Kinect可以檢測到在它前面的使用者的手,並且進行跟蹤。當然,如果使用者是面對Kinect的,那麼跟蹤效果會更好,還有就是使用者剛開始是用手掌來啟動控制的。
2.2、The Physical Interaction Zone (PhIZ)
物理互動地區指處於真實物理世界中使用者前面的3D空間與 程式員在程式中構建的3D座標空間 之間的映射。對於每一個當前被跟蹤的使用者(可以同時跟蹤兩個)的手勢都存在一個物理互動地區PhIZ。在大部分的互動中,PHIZ都是需要的。
2.3、What Gets Tracked?
互動層可以跟蹤兩個手,但它可以分別屬於一個或者兩個使用者的手。第一個與系統發生互動的使用者將被指定為主使用者primary user。主使用者保持對系統的互動控制權,直到系統檢測到使用者不再使用該應用程式。雖然主使用者的兩個手都可以被跟蹤,但只有一個被指定為primary hand(使用者用來控制experience的那個手)。只有primary hand才可以控制experience(什麼意思?)。當然,如果兩個手都被跟蹤,那麼使用者可以通過將當前的primary
hand放下,並把另一個手抬起,放進PhIZ中來切換primary hand。
2.4、Hand State
對每一個手,都會維護一個手的狀態,它指明該手屬於哪個使用者,對於該使用者,這個手是否是primary hand,這個手是否處於互動狀態,還有就是這個手是在gripping、pressing還是其他手勢狀態。
2.5、Tracked vs. Interactive
一個跟蹤的手trackedhand表示KinectInteraction正在盯著的,並且觀察這個手可能會發生的互動。一個互動的手interactive hand是處於PhIZ中,並被KinectInteraction觀測直接用於互動的。
2.6、The User Viewer
在Kinect的互動控制集中,存在一個使用者視圖User Viewer。它是從Kinect視角觀測到的使用者的一個小視窗。這個視圖來源於深度資料流,它會在一個Kinect Region被建立的時候自動產生。
2.7、The Hand Pointer
Hand pointer是用來標記處於PhIZ中的使用者的手勢的當前位置的。它可以通過Kinect Cursor游標來可視化。如果程式開啟了cursor可視功能(在C#/WPF controls中是預設開啟的),那麼在Kinect Region(s)中,cursor表現人手形狀。另外,當使用者當前進行拖拽控制時,cursor就表現為一個握著的拳頭。
2.8、The Hand Pointer and Other Controls
為了提供一個流暢的互動體驗,一旦hand pointer在一個給定的Kinect Interaction Control中停留一定的時間,那麼就認為該handpointer被該control捕捉,直到使用者將手移出該control的邊界。被一個給定的control捕捉到的屬性由該hand pointer和捕捉到該hand pointer的control共同表示。
2.9、Interaction Types
KinectInteraction提供了以下幾種互動方式:
1)Grip and Release
當使用者從一個張開的手掌,到握緊變為拳頭的時候,就觸發一個grip互動,並且綁定手勢跟蹤到當前的被grip觸發的control上,直到使用者releases,也就是張開拳頭。這個可以用來實現拖拽或者滾屏的控制功能。通過運動速度映射的改變,還可以在長列表中實現快速滾動。Control Basics常式中展示了其用法和效果。
2)Press
當使用者用手掌伸向(壓向)Kinect的方向(理想情況是手掌面向Kinect,而且手臂並沒有完全在Kinect的方向伸展開),就觸發一個press互動指令。它可以用以表示滑鼠的單擊功能。還可以用來配合滾屏查看器操作。Interaction Gallery常式中展示了其用法和效果。
3)Scroll
實際就是通過上面的哪些控制指令進行Scroll。
2.10、The Interaction Stream
互動系統提供了互動幀流,和其他的資料來源(音頻流、深度流、骨骼流等等)的流模型相似。通過處理互動幀給使用者與應用程式的互動提供資訊,例如人手位置、人手是pressing、gripping還是releasing,還有就是目前使用者正在瞄準哪個control。
三、一些新的常式
1)Controls Basics - WPF:
Demonstrates the new KinectInteraction Controls, including hands-free button pressing and scrolling through large lists. This replaces the Basic Interactions sample from previous releases.
2)Interaction Gallery - WPF:
Demonstrates basic interactions using the new KinectInteraction Controls.
3)KinectBridge with MATLAB Basics - D2D:
Demonstrates how to do image processing with the Kinect sensor using MATLAB API.
4)KinectBridge with OpenCV Basics - D2D:
Demonstrates how to do image processing with the Kinect sensor using OpenCV API.
5)Kinect Explorer - D2D:
Demonstrates how to use the Kinect's ColorImageStream, DepthImageStream, SkeletonStream, and AudioSource with C++ and Direct2D. This replaces the SkeletalViewer C++ sample.
6)Kinect Fusion Basics - WPF, Kinect Fusion Basics - D2D:
Demonstrates basic use of the Kinect Fusion APIs for 3D reconstruction.
7)Kinect Fusion Explorer - WPF, Kinect Fusion Explorer - D2D:
Demonstrates advanced 3D reconstruction features of Kinect Fusion, allowing adjustment of many reconstruction parameters, and export of reconstructed meshes.
水平有限,以上理解難免有錯,請大家不吝指正。謝謝