Kinect SDK v1.7 新特性、互動框架與新概念

查志強發表於2016-08-02

【原文:http://blog.csdn.net/zouxy09/article/details/8697647

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.

 

       水平有限,以上理解難免有錯,請大家不吝指正。謝謝


相關文章