Microsoft Kinect for Windows SDK betaがリリースされたのでさっそく遊んでみる

はじめに

ついにMicrosoft Kinect for Windows SDK betaがリリースされました。
というわけで早速、C#からKinect SDKを使って遊んでみます。

環境

どうやらWindows 7じゃないと動かないらしいです。

Microsoft Kinect for Windows SDK betaのインストール

1. ダウンロードページからKinect SDKをダウンロード
下記URLからKinect SDKをダウンロードします。

http://research.microsoft.com/en-us/um/redmond/projects/kinectsdk/download.aspx

OSが32bitの場合は[32-bit download]、64bitの場合は[64-bit download]からダウンロードしてください。

f:id:ser1zw:20110617050952p:image


2. Kinect SDKのインストール
ダウンロードしたmsiファイル(32bit版ならKinectSDK32.msi)をダブルクリックし、インストールします。
基本的には全部「Next」とか押していくだけでOK。OpenNIのめんどくささはなんだったんだ。

f:id:ser1zw:20110617050953p:image


3. Kinectのドライバをインストール
KinectのACアダプタを接続し、USBでPCに接続すると、ドライバが自動的にインストールされます。
このとき、ACアダプタを接続するのを忘れるとインストールが始まらず、割と焦るのでご注意を(経験者 談)。

ここまででインストール作業は完了です。

とりあえず動作確認

付属のサンプルで動作確認を行います。サンプルとして、Kinect SDKのインストールフォルダ*1

  • ShapeGame.exe (ゲームっぽい)
  • SkeletalViewer.exe (RGBカメラ画像、デプス画像、スケルトン画像を表示)

というプログラムが用意されています。

ShapeGame.exeを実行すると、こんな感じの画面が表示されます。
右上にRGB画像、中央にスケルトン画像が表示されており、Kinectが正常に動いていることが確認できます。

f:id:ser1zw:20110617050954p:image

Microsoft Kinect for Windows SDK betaで遊ぶ

さて、本題です。とりあえず今回は、KinectからRGBカメラ画像を取得し、ウィンドウに表示させてみます。

まずはVisual Studioを起動し、WPFアプリケーションのプロジェクトを作成します。
ソリューションエクスプローラーからプロジェクトを開き、「参照設定」を右クリック→「参照の追加」の「参照」タブを開き、Kinect SDKのインストールフォルダにある「Microsoft.Research.Kinect.dll」を選択すれば準備完了です。

f:id:ser1zw:20110617052048p:image


メインのコードはこちら。RGB画像を取得するだけならかなりシンプルです。
全体のプロジェクトはあとでどこかにアップします。こちら(zipファイル)

using System;
using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using Microsoft.Research.Kinect.Nui;

namespace HelloKinect
{
	public partial class MainWindow : Window
	{
		// Kinectセンサを表すクラスです。
		Runtime nui;

		public MainWindow()
		{
			InitializeComponent();

			this.Loaded += new RoutedEventHandler(onLoad);
			this.Closed += new EventHandler(onClose);
		}

		/// <summary>
		/// Kinectのランタイムを初期化します
		/// </summary>
		private void onLoad(object sender, RoutedEventArgs e)
		{
			// Kinectを1つしか使わないので、引数は無し。複数使う場合はユニークな数字を渡します。
			nui = new Runtime();
			try {
				// まずはランタイムを初期化します。
				// RGB画像を取るだけなので RuntimeOptions.UseColor のみを指定しています。
				nui.Initialize(RuntimeOptions.UseColor);

				// ビデオストリームを開きます
				// 引数はそれぞれ
				//	・streamType: ストリームの種類を示すImageStreamTypeの値です。
				//	・poolSize: ランタイムが用意するフレームバッファ数です。これを超えると、フレーム落ちします。
				//	  今のところ最大値は4ですが、ほとんどのアプリケーションでは2がちょうどいいらしいです。
				//	・resolution: 解像度を示すImageResolutionの値です。
				//	・image: 画像の種類です。
				nui.VideoStream.Open(ImageStreamType.Video, 2, ImageResolution.Resolution640x480, ImageType.Color);
			}
			catch (InvalidOperationException) {
				System.Windows.MessageBox.Show("エラー");
				return;
			}

			// 各フレームで onVideoFrameReady を呼ぶように設定します
			nui.VideoFrameReady += new EventHandler<ImageFrameReadyEventArgs>(onVideoFrameReady);
		}

		/// <summary>
		/// 各フレームでKinectのビデオフレームをUIに表示します
		/// </summary>
		private void onVideoFrameReady(object sender, ImageFrameReadyEventArgs e)
		{
			// 32bit RGBA画像
			PlanarImage img = e.ImageFrame.Image;
			video.Source = BitmapSource.Create(
				img.Width, img.Height, 96, 96, PixelFormats.Bgr32, null, img.Bits, img.Width * img.BytesPerPixel);
		}

		/// <summary>
		/// Kinectのランタイムを終了します
		/// </summary>
		private void onClose(object sender, EventArgs e)
		{
			nui.Uninitialize();
		}
	}
}


実行するとこんな感じ。普通のRGB画像なので、あんまりKinectな感じがしないですねー。
f:id:ser1zw:20110617050956p:image

もっといろいろ遊ぶには

サンプルコードをいじる

サンプルプログラムのソースコードが下記のフォルダにあります。

C:\Users\Public\Documents\Microsoft Research KinectSDK Samples

ShapeGame.exeとSkeletalViewer.exe以外に、音声認識関連のサンプルも付属しています。
SkeletalViewerのコードではRGB画像、デプス画像、スケルトン画像を取得しているので、最初に読むのにちょうどいいんじゃないかと思います。

公式のドキュメントを読む

下記URLからGetting startedな資料や付属サンプルの解説がダウンロードできます。

http://research.microsoft.com/en-us/um/redmond/projects/kinectsdk/guides.aspx

付属のリファレンスを読む

下記フォルダにAPIリファレンスがありますので、こちらもどうぞ。

C:\Program Files\Microsoft Research KinectSDK\docs

まとめ

Microsoft Kinect for Windows SDK betaをインストールし、KinectからRGB画像を取得するサンプルを作ってみました。
インストールも簡単だしドキュメントもいろいろ揃っているようなので、かなり遊べそうですね。

*1:デフォルトではC:\Program Files\Microsoft Research KinectSDK