Kinect 開發 —— Kinect for windows SDK

來源:互聯網
上載者:User

標籤:style   blog   http   color   使用   width   

開發 —— 基本的SDK和Windows 編程技巧(彩色映像視頻流,深度映像視頻流的採集,骨骼跟蹤,音頻處理,語音辨識API)

深度資料,就是Kinect的精髓和靈魂,很多問題都轉換為深度映像的模式識別問題

AForge.NET 是一套C#編寫的Framework,提供電腦視覺,機器學習 www.aforgenet.com

影像處理需要消耗大量的計算資源,使用C#這類託管語言並不明智,應多使用OpenCV

應用程式層API詳解

NUI API

Kinect Audio DMO :提供束波成形和音源定位功能

Windows Speech SDK : 提供音頻,語音,多媒體API集以及微軟的語言識別功能

 

Kinect 的核心 NUI API

最多支援4個Kinect裝置串連在同一個電腦上,但應用程式只能指定其中一個Kinect啟用“骨骼跟蹤”功能。多個應用程式無法同時共用一個kinect感應器

1,獲得 Kinect 執行個體

KinectSensor sensor=(from sensorToCheck inKinectSensor.KinectSensors where sensorToCheck.Status==KinectStatus.Connected select sensorToCheck).FirstOrDefault();

foreach(KinectSensor KinectSensor indexer KinectSensor.KinectSensors){    if(KinectSensor.Status==KinectStatus.Connected)    {        KinectSensor=kienct;        break;    }}

 

2,調用 KinectSensor.Start 方法初始化並啟動Kinect 感應器

3,註冊相關事件,(如視頻流或深度資料到來的事件,骨骼跟蹤事件,並基於這些事件調用SDK提供的API進行處理)

KinectSensor.ColorFrameReady

KinectSensor.DepthFrameReady

KinectSensor.SkeletonFrameReady

KinectSensor.AllFrameReady

4,調用KinectSensor.Stop 方法關閉Kinect感應器

 

Kinect NUI API 通過 “管道”的方式處理來自Kinect感應器的資料。在初始化時,應用程式指定它所需要的感應器資料。(色彩,深度,深度和使用者編號,骨骼跟蹤)

這些選項必須在初始化中設定,否則將無法使用資料。

 

Kinect Audio DMO

提高音頻品質      波束成形

回聲消除  回聲抑制  自動增益控制(當使用者靠近或遠離麥克風時,自動增益演算法使得聲音振幅保持一致)   波束成形

Microsoft.Speech 類庫的關鍵對象是 SpeechRecognitionEngine,負責從Kinect感應器擷取降噪預先處理過的音頻資料流,然後分析和解釋,從而進一步匹配出最合適的語音命令

SpeechRecognitionEngine 基於一定的文法表達來進行語音命令識別,Grammar 對象由一系列的單個單詞或片語組成,由類GrammarBuilder來表達,文法可以基於選擇Choices類和萬用字元來表達。

 

資料流概述

1,彩色映像資料

映像品質的高低將影響到Kinect感應器與電腦間的傳輸速率

應用程式可以設定彩色映像的編碼格式,包括RGB,YUV兩種編碼

30幀每秒的傳輸速度和320*240的解析度

2,使用者分割資料

深度映像的每個像素由2位元組,共16位組成

每個像素的高13位代表從Kinect紅外網路攝影機到最近物體對象的距離,以毫米為單位

低3位位元組表示被跟蹤的使用者索引編號,這3位位元組會被轉換為整數實值型別,並不作為標誌位

在代碼編寫過程中不要引用特定的“使用者索引號”,即使針對同一個人,Kinect骨骼跟蹤返回的“使用者索引編號”也可能發生變化

通過 “使用者分割資料”可以將使用者深度映像從原始深度映像中分離出來,通過座標映射,也可以進一步將使用者彩色映像從原始彩色映像中分離出來 —— 達到“增強現實”的效果

3,深度映像資料

每一個像素包含了特定的距離資訊

對於Kinect紅外網路攝影機,可以通過 DepthImageStream.DepthRange枚舉類型瞭解當前網路攝影機的工作模式:

TooFarDepth

TooNearDepth

UnknowDepth

深度映像的每個像素為16位,定義一個short資料來儲存深度映像:

short[] depthPixelData=new showrt[depthFrame.PixelDataLength];depthFrame.CopyPixelDataTo(depthPixelData);

對應深度映像中的每個點 p(X,Y),depthFrame.Width為深度映像寬度,通過位元運算來計算某個像素所表達的目標物體與Kinect的距離

Int32 depth = depthPixelData[pixelIndex]>>DepthImageFrame.PlayerIndexBitmaskWidth;

 

如何擷取資料流

1,輪詢模(拉)

首先開啟映像資料流,然後請求幀資料並設定等待時間為T,單位為毫秒;如果幀資料尚未就緒,則系統將等待T時間後返回。如果幀資料成功返回,則應用程式可請求下一幀資料,並在同一線程執行其他動作

OpenNextFrame(T)  T—— 等待新資料返回的最長時間

2,事件模型

應用程式註冊資料流的FrameReady事件,當事件觸發時,將會呼叫事件的屬性 FrameReadyEventArgs 來擷取資料幀

不能對同一資料流同時使用者兩種模式

AllFrameReady 事件包括了三種資料流,如應用程式註冊了AllFrameReady事件,任何試圖以採用“拉”(輪詢)的方式擷取流中的資料都會產生 InvalidOperationException

在某些應用中,為了保持深度映像和彩色映像儘可能的同步,可以採用輪詢模式 —— 通過 Timestamp屬性

骨骼跟蹤

骨骼資訊檢索

1,輪詢模式  SkeletonStream.OpenNextFrame

2,事件模型  KinectSensor.AllFramesReady 事件,一旦新的骨骼資料準備好,該事件觸發,調用 SkeletonFrameReadyEventArgs.OpenSkeletonFrame 來擷取該幀

骨骼跟蹤對象選擇

如果需要手動選擇跟蹤對象,需要使用 AppChoosesSkeletons 屬性 和ChooseSkeletons 方法。

NUI 座標轉換

MapDepthToColorImagePoint —— 深度映像座標系——彩色映像座標系

MapDepthToSkeletonPoint  ——  深度映像座標系 —— 骨骼跟蹤座標系

MapSkeletonPointToColor —— 骨骼跟蹤座標系 —— 彩色映像座標系

MapSkeletonPointToDepth ——骨骼跟蹤座標系——深度映像座標系

即使使用同樣的解析度,深度圖象幀的像素也無法一一對應到彩色映像幀中去 —— 因為兩個網路攝影機位於Kinect的不同位置

深度映像幀的DepthImageFrame類中有3個座標轉換方法

MapFromSkeletonPoint 將骨骼關節點座標映射為深度映像點座標

MapToColorImagePoint 將深度映像中的某點座標映射為同步對應的彩色映像幀的點座標

MapToSkeletonPoint 將審圖映像中的某點座標映射為同步對應的骨骼資料幀的點座標

 

 

Z軸表示紅外網路攝影機光軸,與映像平面垂直。光軸與映像平面的交點,即為映像座標系的原點

深度映像座標系和骨骼跟蹤座標系都是Kinect網路攝影機座標系,原點為紅外網路攝影機中心,X軸Y軸與映像的X軸Y軸平行,Z軸位紅外網路攝影機光軸,它與映像平面垂直

螢幕座標系 —— 左上方為原點,X軸向右為正,Y軸向下為正

深度映像空間座標 —— 以毫米為單位

骨骼空間座標 —— 以米為單位

 

感應器陣列和傾斜補償

每個骨骼幀都包括一個描述重力的值。該值是由內部的三軸加速度計和感應器映像測量來配合計算得到的。在運動情況下,加速度計測量重力的方向,並將其餘水平垂直的的向量

骨骼鏡像

SDK 中沒有提供非鏡像的骨骼跟蹤

實現鏡像骨骼很簡單 —— 反轉骨骼節點的eX座標值就可以實現此效果

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.