kinect學習總結

本周重點學習《Kinect體感程序設計入門》,且已翻譯完英文文獻。

Kinect傳感器所能獲取的基礎信息共有5種:彩色圖像、三軸加速度感應器、深度圖像、紅外線圖像、聲音。形成的重要交互功能有:

1)骨架識別——產生骨架信息(也可稱骨架流、骨架圖像、關節信息),其算法分析來自深度圖像的數據。

2)語音識別——識別用戶的語音命令,其算法分析來自麥克風陣列的數據。

3)臉部追蹤——識別用戶臉上的特征點,其算法分析來自彩色圖像、深度圖像,以及骨架信息的數據。

4)Kinect Interaction——辨識使用者手部的特殊動作(如握拳、按壓),其算法分析來自三軸加速度感應器、深度圖像,以及骨架信息的數據。

5)Kinect Fusion——提供3D建模的工具,其算法分析來自深度圖像的數據。

Kinect所回傳的骨架信息包含每個關節在骨架空間里的三維坐標(x,y,z),其單位為米(m),使用右手坐標系統,也就是所,從Kinec看過去,以傳感器為中心,x軸向左為正,向右為負。Y軸向上為正,向下為負。z軸則是越靠近傳感器,值越小;離傳感器越遠,值越大。

骨架信息流


SkeletonStream

Kinect的骨架信息流來自于KinectSensor對象中的SkeletonStream,骨架信息默認為關閉,使用前必須調用其Enable()方法啟動骨架信息流。

啟動之后,需要注冊SkeletonFrameReady事件的事件處理函數方能接收到來自Kinect的骨架信息。應用程序取得的是一系列坐標的集合,稱為骨架關節(joint)位置。AllFramesReady也可以取得骨架信息,不過通常用于搭配彩色圖像、深度圖像。

當有人要與Kinect進行交互時,考慮到現實的復雜環境干擾,需要使傳感器正確識別交互者,可使用握拳或按壓兩種方式實現,其中,握拳動作通過搭配機器學習算法來實現;而按壓動作則通過Z軸變化來偵測,按壓的整個過程基本上就是Z坐標從0變化到1的過程。

通過Kinect控制機械臂基本流程


系統結構圖

KinectSDK中自帶的范例中提供了深度圖像數據和骨骼跟蹤的程序,但它們分開的,并且沒有數據提取記錄的相關程序,經過學習后,要自己編寫應用程序,將骨骼跟蹤和深度圖相互結合,并記錄提取相關的關鍵的骨骼關節數據。

跟蹤程序流程設計主要有以下幾個步驟,如圖

第一步:設備環境設備初始化,并創建新的對象。

第二步:建立新的用戶生成器,來保存捕捉到的目標的深度相關數據信息,方便以后調用。

第三步:完成相關回調函數的注冊。需要調用的和骨骼跟蹤相關的函數有新用戶的生成、用戶的丟失、骨骼姿態的檢測等。

第四步:骨架校準,分析比較看捕捉到的骨骼關節是否可靠,如果分析結果達到要求則可進入下一步,否則返回第三步。

第五部:骨骼跟蹤,記錄骨骼關節的信息。

第六步:更新并讀取數據,保證數據的實時性。

在Visual Studio 中進行人體骨骼點圖的提取時,應注意到,具體的骨架信息是以關節點數據顯示出來的,Joint有以下屬性。第一種,Joint Type屬性是Joint的一種枚舉類型。第二種,每一個骨骼關節點有Skeleton Point的Position屬性,這種屬性是由X,Y,Z三個坐標值來進行顯示每個關節點的位置信息,其中X,Y坐標值可以表示骨骼的在二維空間內的位置,Z坐標值是用來表示關節點的深度信息;Kinect傳感器中有一系列關于點坐標的轉換算法,可以用來將目標對象的骨骼坐標點轉換成相應的深度。最后一種,每個Skeleton骨骼對象都有一個Joint Tracking State屬性,這種屬性表示這個關節點現有的跟蹤情況和方式。利用Visual Studio編程提取出關節的坐標信息后,將坐標信息流經過計算機處理后發送給機械臂,通過舵機控制機械臂的運動實現交互功能。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容