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]からダウンロードしてください。
2. Kinect SDKのインストール
ダウンロードしたmsiファイル(32bit版ならKinectSDK32.msi)をダブルクリックし、インストールします。
基本的には全部「Next」とか押していくだけでOK。OpenNIのめんどくささはなんだったんだ。
3. Kinectのドライバをインストール
KinectのACアダプタを接続し、USBでPCに接続すると、ドライバが自動的にインストールされます。
このとき、ACアダプタを接続するのを忘れるとインストールが始まらず、割と焦るのでご注意を(経験者 談)。
ここまででインストール作業は完了です。
とりあえず動作確認
付属のサンプルで動作確認を行います。サンプルとして、Kinect SDKのインストールフォルダ*1に
- ShapeGame.exe (ゲームっぽい)
- SkeletalViewer.exe (RGBカメラ画像、デプス画像、スケルトン画像を表示)
というプログラムが用意されています。
ShapeGame.exeを実行すると、こんな感じの画面が表示されます。
右上にRGB画像、中央にスケルトン画像が表示されており、Kinectが正常に動いていることが確認できます。
Microsoft Kinect for Windows SDK betaで遊ぶ
さて、本題です。とりあえず今回は、KinectからRGBカメラ画像を取得し、ウィンドウに表示させてみます。
まずはVisual Studioを起動し、WPFアプリケーションのプロジェクトを作成します。
ソリューションエクスプローラーからプロジェクトを開き、「参照設定」を右クリック→「参照の追加」の「参照」タブを開き、Kinect SDKのインストールフォルダにある「Microsoft.Research.Kinect.dll」を選択すれば準備完了です。
メインのコードはこちら。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な感じがしないですねー。
もっといろいろ遊ぶには
サンプルコードをいじる
サンプルプログラムのソースコードが下記のフォルダにあります。
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
まとめ
Microsoft Kinect for Windows SDK betaをインストールし、KinectからRGB画像を取得するサンプルを作ってみました。
インストールも簡単だしドキュメントもいろいろ揃っているようなので、かなり遊べそうですね。
*1:デフォルトではC:\Program Files\Microsoft Research KinectSDK