標籤:
Kinect for Windows SDK
骨骼追蹤 —— 對在Kinect視野範圍內移動的一個或兩個人進行骨骼追蹤,可追蹤到人體的20個節點
深度網路攝影機 —— 通過深度感應器擷取到視野內的環境三維位置資訊 (深度映像 —— 每個像素為距離Kinect感應器的距離) —— 利用Kinect紅外發射器發出的紅外線對空間進行編碼,無論環境光線如何都不會影響測量結果
音頻處理 —— 與 Microsoft Speech 語音辨識API整合
Kinect 彩色和紅外映像資料的處理
彩色映像品質 —— 普通品質和高品質 —— 決定資料從Kinect 傳輸到PC的速度
普通品質 —— 在傳遞給應用控制台之前會在感應器端進行壓縮,接著在控制台解壓資料 —— 映像壓縮使得返回的彩色資料的幀頻達30,但是會降低映像品質
高品質 —— 直接傳遞給控制台,不壓縮,最大幀率不會超過15
彩色資料可以選擇兩種色彩格式 —— RGB YUV
彩色映像類型用枚舉類型 ColorImageFormat 表示
紅外資料流
原理:Kinect 首先通過左側的紅外線發射器向環境中發射紅外線,這束紅外線由於具有高度隨機性,其在空間中任意兩個不同位置所反射形成的光斑都不相同,對環境形成立體的“光編碼”,再通過右側的紅外線接收器採集Kinect視野中的紅外線映像,最終,利用這幅紅外映像和kinect的原始參數進行一系列複雜的計算,得到視野中的三維深度資訊
KinectSensor 類提供了一些介面,用於管理Kinect裝置的開關以及所有資料的擷取
紅外映像實際上是彩色映像的一種特殊格式 —— kinectSensor.ColorStream.Enable(ColorImageFormat.InfraredResolution640x480Fps30)
顯示映像語句 this.ColorImage.Source = BitmapSource.Create(imageFrame.Width, imageFrame.Height ,96,96, PixelFormats.Gray16 ,null , pixelData, imageFrame.Width * imageFrame.BytesPerPixel);
深度資料的處理
kinect 通過處理深度資料來識別感應器組前的兩個人體映像,建立分段圖 —— 一張位元影像,其像素與視野內距離網路攝影機最近的玩家索引對應(玩家索引為0,表示相應位置沒有找到玩家,索引值為1,2表示檢測到的玩家編號)
儘管玩家分段資料是隔離的邏輯流,但實際深度資料和玩家分段資料被合并到了一個獨立的結構中
每個像素的高13位表示在深度感應器的視野範圍內離特定座標物體最近的距離,理論上該值的範圍為0~8192毫米
每個像素的低3位標識在像素的xyz座標繫上追蹤到的可見的玩家索引,這3位可看成整形值
深度映像資料類型定義為 DepthImageFrame CopyPixelDataTo () 將從kinect裝置擷取到的深度映像資料賦值到short數組,該數組包含了每個像素的深度資訊和玩家索引資訊(16位)
骨骼追蹤資料的處理方法
kinect 的核心技術,科準確標定人體的20個關鍵點,並能對這20個點的位置進行即時追蹤
資料物件類型以骨骼幀的形式提供,每一幀最多可以儲存20個點 ,每個骨骼點都是用Joint類型表示的
JointType :骨骼點的類型,枚舉類型,列舉了20個骨骼點的特定名稱 —— JointType.HAND_LEFT
Position : SkeletonPoint 類型表示骨骼點的位置資訊 , SkeletonPoint 是一個結構體,包含x,y,z 三個資料元素,用以儲存骨骼點的三維座標
TrackingState : 枚舉類型,表示骨骼點的追蹤狀態 (Tracked 表示正確捕捉到該骨骼點,NotTracked 表示沒有捕捉到骨骼點,Inferred 狀態不確定)
半身模式
Seated Mode —— 半身模式下,系統只捕捉上半身10個骨骼點的資訊,忽略下半身(即使下半身骨骼點的資料不穩定或是不存在也不會對上半身的骨骼資料造成影響)
半身模式定義在枚舉類型 SkeletonTrackingMode中 (default seated)
應用程式擷取下一幀骨骼資料的方式同擷取彩色映像和深度映像資料的方式相同,都是通過調用回掉函數並傳遞一個緩衝實現的 —— OpenSkeletonFrame
如果新的骨骼資料已經準備好,系統會將其複製到緩衝中
輪詢模式讀取骨骼事件 ,通過調用SkeletonStream 類的OpenNextFrame 函數即可實現
public SkeletonFrame OpenNextFrame (int millisecondswait)
當新的資料準備好或是超出等待時間時,OpenNextFrame() 函數才會返回
時間模式以事件驅動方式擷取事件,更靈活,準確
應用程式傳遞一個事件處理函數給 SkeletonFrameReady事件,該事件定義在KinectSensor 類中,當下一幀的骨骼資料準備好時,會立即調用該事件回掉函數
RGB映像資料與深度映像資料(骨骼資料)的空間座標系不同 —— 前者RGB網路攝影機,後者紅外網路攝影機 ,因此使用擷取的骨骼點座標直接繪製在RGB映像上會有相應的誤差
座標系轉換 kinectSensor.CoordinateMapper.MapSkeletonPointToColorPoint()
骨骼點的旋轉資訊(相對旋轉資訊和絕對旋轉資訊)—— 旋轉的矩陣參數和四元數參數
骨骼點旋轉資訊定義為 BoneOrientation 類:
StartJoint 起始骨骼點
EndJoint 結束骨骼點
HierarchicalRotation 相對旋轉資訊
AbsoluteRotation 絕對旋轉資訊
BoneRotation hierarchical = orientation.HierarchicalRotation;
BoneRotation absolute=orientation.AbsoluteRotation; BoneRotation 類型的記錄了旋轉資訊的矩陣和四元數
音頻API 的使用 —— 四元麥克風陣列
語音辨識的任務就是使用電腦程式將語音轉換成一串詞語
kinect for windows sdk 為託管的應用程式結合 Microsoft Speech API 使用Kinect麥克組提供了必備的基礎架構,支援最新的語音演算法
AngleConference 屬性工作表示音頻源位置估計的信賴度
監視束波方向的變化 ,當 KinectAudioSource的BeamAngle 屬性發生變化時會出發BeamChanged事件
SpeechRecognitionEngine 類提供了一系列擷取和管理語音辨識引擎的方法(載入文法器,開始執行語音辨識,結束語音辨識)
InstalledRecognizers 是靜態方法,返回一個語音辨識器的列表 —— 包括了當前系統上安裝的所有語音辨識器
Speech 引擎會觸發以下3個事件:
SpeechRecognitionEngine.LoadGrammer 事件會在每次嘗試命令時發生,它會傳遞給事件處理函數一個SpeechRecognizedEventArgs對象,該對象包含一個從命令集合中選出的首選單詞和一個估計的置信值
SpeechRecognitionEngine.SpeechRecognized 事件會在嘗試的命令被識別為命令集合中的成員時發生,該事件會傳遞給事件處理函數一個包含識別出的命令的 SpeechRecognizedEventArgs 對象
SpeechRecognitionEngine.SpeechRejected 事件會在嘗試的命令未被識別為命令集合成員時發生。它會傳遞給事件處理函數一個SpeechRecognitionRejectedEventArgs 對象
提高識別精確度:
增加識別字串的單詞數量
設計一個手勢,只有Kinect 捕捉到這一特定的手勢時才開啟語音辨識,否則保持關閉
Face Tracking SDK
可以識別出的人臉資料:
特徵點座標 (根據Kinect提供的深度圖和彩色圖,對人臉100個特徵點進行識別和追蹤)
面部朝向
包圍盒
基於 Candide3 人臉模型的參數
Kinect 人機互動開發實踐