Kinect for windows SDK 開發
前幾天無意中看到微軟釋出了Kinect for windows sensor,進去看了一下Kinect應用的例子,發現Kinect除了作為xbox360遊戲的外設外還能開發一些很酷的應用,而且微軟也釋出可針對Kinect開發的Kinect for windows SDK1.0正式版本,原本想買一個Kinect for windows sensor來進行開發玩一玩的,可是那個出來沒多久,淘寶上只有代購的,而且比Kinect for Xbox360 sensor貴了很多,而且只能進行開發,考慮到以後開發完了,想玩Xbox的話直接就再買個主機,連上這個就可以玩體感遊戲了,所以在淘寶上買了一個Kinect for Xbox360 sensor,這兩個sensor的最大區別是for windows版本的有近景模式,能夠進行近景識別。
首先來看一下Kinect裝置:
1. Kinect裝置
黑色的Kinect裝置如下圖:基座和感應器之間有一個電動的馬達,通過程式能夠調整俯仰角度,在上面的感應器中有一個紅外投影儀,兩個攝像頭,四個麥克風和一個風扇。開啟外面的蓋子可以看到裡面的構造:這些感應器用來捕捉RGB和深度資料,面對Kinect,從左往右看。最左邊是紅外光源,其次是LED指示燈,再次是彩色攝像頭,用來收集RGB資料,最右邊是紅外攝像頭用才採集景深資料。彩色攝像頭最大支援1280*960解析度成像,紅外攝像頭最大支援640*480成像。
在感應器的下方是麥克風陣列,他包括四個不同的麥克風,一個在左邊的紅外發射器下面,另外3個在右邊景深攝像頭下面。
初步瞭解了Kinect構造後,接下來看看開發環境的搭建:
2. Kinect for Windows SDK軟硬體環境
Kinect for Windows SDK是一些列的類庫,他能夠使得開發者能夠將Kinect作為輸入裝置開發各種應用程式。就像名字所顯示的那樣,Kinect for Windows SDK只能執行在32位或者64位的windows7及以上版本的作業系統上。
- 硬體配置
- 一臺電腦,當然記憶體越大越好(推薦2G或者以上),處理器頻率(2.66GHz及以上)越高越好。
- Windows 7作業系統,以及支援Microsoft DirectX9.0c相容的顯示卡
- Kinect for Xbox360 Sensor(如果單買的話,自帶有USB Power Adapter,如果是和Xbox360套裝一起捆綁的話,因為Xbox主機能夠直接為Kinect外設提供電源,所以沒有電源,可能需要另買USB Power Adapter)
使用Visual Studio 2010 Express版本或者專業版進行開發時,需要安裝最新版本的Kinect for Windows SDK,SDK中包含有對Kinect的硬體驅動。
- 軟體配置
1. Visual Studio 2010 Express或者Visual Studio 2010專業版或其他版本
2. .NET Framework 4.0
3. 安裝步驟
安裝SDK之前,需要斷開Kinect與電腦的連線,並關閉Visual Studio。安裝過程很簡單,等SDK安裝完成之後,將Kinect電源線插上並連線到電腦上,Win7會自動尋找和安裝驅動,安裝完成後就可以識別Kinect,這是Kinect上面LED指示燈會變成綠色。
看驅動是否安裝成功,可以到電腦的裝置管理器中檢視,如下圖:在Microsoft Kinect節點下應該有3個項,分別是Microsoft Kinect Audio Array Control,Microsoft Kinect Camera, 和 Microsoft Kinect Security Control.
檢視Kinect麥克風是否安裝成功可以在裝置管理器的聲音視訊遊戲控制器節點下檢視,如下圖,Kinect USB Audio 應該在這個節點下面:
4. 建立第一個Kinect 專案
建立一個Kincet專案通常需要:
1. 建立一個VS專案,一般為了展示通常建立一個wpf專案。
2. 新增Microsoft.Kinect.dll引用,如果是早期版本的SDK,這個名稱可能不同。
3. 引入Kinect名稱空間。
Kinect支援3中型別的託管應用程式,分別是:控制檯應用程式,WPF以及Windows Form應用程式。首先來建立一個Windows 控制檯應用程式,然後在Main函式所在的程式碼中引入Kinect命名控制元件,程式碼如下:
using Microsoft.Kinect;
static void Main(string[] args) { //初始化sensor例項 KinectSensor sensor = KinectSensor.KinectSensors[0]; //初始化照相機 sensor.DepthStream.Enable(); sensor.DepthFrameReady += new EventHandler<DepthImageFrameReadyEventArgs>(sensor_DepthFrameReady); Console.ForegroundColor=ConsoleColor.Green; //開啟資料流 sensor.Start(); while (Console.ReadKey().Key != ConsoleKey.Spacebar) { } } static void sensor_DepthFrameReady(object sender, DepthImageFrameReadyEventArgs e) { using (var depthFrame=e.OpenDepthImageFrame()) { if (depthFrame == null) return; short[] bits = new short[depthFrame.PixelDataLength]; depthFrame.CopyPixelDataTo(bits); foreach (var bit in bits) Console.Write(bit); } }
在上面的程式碼中,為了從攝像頭中獲取資料流,需要初始化KinectSensor物件,然後啟動他。為了獲取景深資料,我們給sensor的DepthFrameReady註冊了時事件。上面的程式碼中資料通過DepthFrameReady事件觸發。在Kinect應用中,這些獲取資料的事件有DepthFrameReady,ColorFrameReady以及SkeletonFrameReady。可以通過這些事件獲取豐富的資料來完成各種有趣的應用。在上面的程式碼中,我們簡單的將景深攝像頭獲取的資料輸出列印到控制檯上。執行程式,然後站在Kinect前面一段距離,你就會看到控制檯上輸出的資訊,酷吧。
5.Kinect SDK示例程式
安裝完Kinect for Windows SDK後,快捷選單列表中有一個Kinect SDK Sample Browser,自帶有一些示例應用程式,開啟後如下圖:
如果安裝好了Kinect,就可以直接點選運行了:我試了一下,挺有趣的:
Kinect Explorer:這是一WPF程式,介面分為左右兩個影象區域,左邊通過彩色攝像頭獲取影象資訊,並通過骨骼追蹤將骨骼疊加在影象上,右邊影象是通過景深攝像頭獲取的景深資訊,也在圖上疊加了骨骼資訊,在這兩幅影象下面是一些列對成像引數的設定。這個例子主要是用來展示這幾個感測器的應用以及如何獲取感測器的資訊,還包括獲取骨骼資料。
Shape Game:這個一個簡單的遊戲,介面上的人是通過骨骼追蹤繪製出來的,在Kinect前面晃動時,介面上的人也會跟著動,當碰到圖形時能夠得分。
Kinect Audio Demo:這個是語音識別的例子上面展示的是聲音的方向,下面是語音識別的結果,有Red,Green,Blue三個單詞,當站在Kinect前面說某個單詞時,如果識別正確,橫線會顯示相應的顏色。試了一下,還是挺靈敏的。後的的例子是針對Kinect for Windows sensor裝置的例子,我的Kinect for xbox Sensor不能用。
6.結語
本文簡要介紹了Kinect感測器的結構,開發所需要的軟硬體環境,並通過一個小例子展示瞭如何從Kinect獲取資料,最後簡單介紹了Kinect SDK所帶的例子,希望本文能幫助你熟悉Kinect for windows SDK。