Kinect SDK v1.7 新特性、互動框架與新概念
【原文:http://blog.csdn.net/zouxy09/article/details/8697647】
Kinect SDK v1.7 新特性、互動框架與新概念
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.
水平有限,以上理解難免有錯,請大家不吝指正。謝謝
相關文章
- Kinect for Windows SDK開發入門:Kinect FusionWindows
- 新技術新概念
- HTML5 和 CSS3的新互動特性HTMLCSSS3
- HTML5和CSS3中的互動新特性HTMLCSSS3
- Kinect體感互動解決方案——體感漫畫拍照遊戲遊戲
- iOS與JS互動之UIWebView-JavaScriptCore框架iOSJSUIWebViewJavaScript框架
- 新聞類APP軟體開發有哪些特性?北京銳智互動APP
- 《Kinect體感人機互動開發基礎》封面方案設計徵集意見
- fir.im Weekly - 從 iOS 10 SDK 新特性說起iOS
- 開發者所需要知道的iOS7 SDK新特性iOS
- WKWebViewJavascriptBridge - 優雅的 iOS 與 JS 互動層框架(Swift)WebViewJavaScriptiOSJS框架Swift
- 遊戲UX互動框架規範遊戲UX框架
- DHorse改用fabric8的SDK與k8s叢集互動K8S
- 基於聲網 Flutter SDK 實現互動直播Flutter
- Android SDK簡明教程:使用者互動Android
- WWDC總結:開發者需要知道的iOS 9 SDK新特性iOS
- Phaser遊戲框架與HTML Dom元素之間的通訊互動遊戲框架HTML
- 記一則iOS封裝SDK的開發過程之WebView與JS的互動iOS封裝WebViewJS
- js 與WKWebView 互動JSWebView
- 互動與關係
- MySQL 與OS互動MySql
- WKWebView與JS互動WebViewJS
- 【Oculus Interaction SDK】(六)實體按鈕 && 按壓互動
- watchOS 5 新特性:繼續發力運動與健身
- Spring 5 新特性:函式式Web框架Spring函式Web框架
- Defne平臺新特性:非同步訊息框架非同步框架
- 微互動(五)——微互動的迴圈與模式模式
- 真人大屏互動系統,打造數字互動新體驗!
- 新媒體運營加班多嗎?新媒體與互動設計學習
- Beego框架學習--(核心:資料互動)Go框架
- Java與Excel的互動!-JavaExcel
- Android 與前端互動Android前端
- Lua 與 ObjC 的互動OBJ
- webview與JS的互動WebViewJS
- Android中程式與Service互動的方式——互動方式Android
- 互動投影的應用都具備哪些特性
- 互動滑軌屏的特點及功能特性
- Android SDK使用了JS橋接方法實現與H5互動 混淆問題AndroidJS橋接H5