[譯]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. Kinect for Windows SDK,最新版本爲1.0版本,下載地址:http://www.microsoft.com/en-us/kinectforwindows/develop/overview.aspx
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。