Blogger Syntax Highliter

Friday, February 17, 2012

Kinect for Windows SDK Kinectの初期化

本日はデブサミのライブコーディングを行ってきました。で、みなさんのおかげでチームとして Windows Phone賞 をいただいたのですが、私はKinect担当だったので、他のKinectアプリを開発されている方とお話しして、色々苦労されているようでしたので、少しづつではありますが解説していこうと思いました。

1.複雑なサンプルコード


Kinect SDK Beta 1の頃のサンプルを持っている方は気が付くと思うのですが、Kinect SDK 1.0 になってからというか、Beta2あたりから少しづつ複雑になってきて、慣れていない人にとっては、かなりつらい状況のようです。あと、Beta1の頃のサンプルコードを持っているからと言って、Kinect SDK 1.0には使えません。名前空間が変わっているとか、そんなレベルではないくらい変わってますので、Kinect SDK 1.0に移るが難しいと思っている人はそれなりにいるのではないかと思います。

2.Kinectの初期化


ということで、Kinectの初期化周りから始めます。
private void Window_Loaded(object sender, RoutedEventArgs e)
{
    if (KinectSensor.KinectSensors.Count > 0)
    {
        colorImageFormat = ColorImageFormat.RgbResolution640x480Fps30;
        depthImageFormat = DepthImageFormat.Resolution640x480Fps30;

        kinectSensor = KinectSensor.KinectSensors[0];
        if (kinectSensor.Status == KinectStatus.Connected)
        {
            kinectSensor.ColorStream.Enable(colorImageFormat);
            kinectSensor.DepthStream.Enable(depthImageFormat);
            kinectSensor.SkeletonStream.Enable();
//          kinectSensor.AllFramesReady += new EventHandler(kinectSensor_AllFramesReady);
            kinectSensor.AllFramesReady += kinectSensor_AllFramesReady;
            kinectSensor.Start();
        }
    }
}

2-1.接続されているKinectの数を確認



PCに複数のKinectを同時に接続することが可能ですので、利用予定の数だけKinectが接続されているか確認します。ここでは、一台以上のKinectが接続されていることを確認した後、一番目のKinectを利用しています。

    if (KinectSensor.KinectSensors.Count > 0)
    {
        kinectSensor = KinectSensor.KinectSensors[0];
        if (kinectSensor.Status == KinectStatus.Connected)
        {

2-2.Kinectの機能を有効化



どのKinectを使用するか確認した後は、「カメラ」「深度センサー」「骨格生成」「マイク」「音の方向」で利用する機能だけ有効化を行います。ここでは、カメラと深度センサーと骨格生成を行います。
なお、骨格生成を行う場合は、深度センサーを有効にしないと利用できませんので、注意が必要です。
            kinectSensor.ColorStream.Enable(colorImageFormat);
            kinectSensor.DepthStream.Enable(depthImageFormat);
            kinectSensor.SkeletonStream.Enable();


2-3.Kinect動作開始



Kinectからの情報を受け止めるためのメソッドを登録して、Kinectの動作を開始させます。

            kinectSensor.AllFramesReady += kinectSensor_AllFramesReady;
            kinectSensor.Start();


これで、Kinectが動き出します。次は、カメラの読み込みの処理について書きます。

Tuesday, February 14, 2012

Kinect for Windows と SDK がやってきた!

Kinect for Windows がやってきましたので、インストールまでのメモです。

1.Kinect for Windowsの購入


マイクロソフトストアから、Kinect for Windows を購入。XBOX360のと比べるとかなり高い感じがしますが、商用利用が可能なので少し投資的な感じですね。とは言っても、今のところ儲けようとはしていないのですが。。。

2.届く!



予約組でしたが、思ったより早く到着しました。で、段ボールを開けてみると下のような感じ。


で、XBOX360と比べてみると同じ大きさ!とはいっても箱。




一番気になっていたのは、USBと電源アダプタの形状。XBOX360のと比べてスッキリしていると、いいなと思って期待していましたが一緒でした。というより更に少し複雑な感じに。





ケーブルの長さは短くなっているのだが、長いほうが開発しやすい気がする。

3.Kinect SDKのインストール



もし、Kinect SDK Betaがインストールされている場合は、先にアンインストールを行う。順番はSpeech SDK関係を削除した後に、Kinect SDKを削除する。


Microsoft Kinect for WindowsのページからダウンロードしてきたSDKをインストールする。Beta版と異なり、一つのインストールプログラムでSpeech SDK関係も一緒に入る。


4.サンプルプログラムの実行



サンプルプログラムは、C:\Program Files\Microsoft SDKs\Kinect\v1.0\Sample にあるので、適当なディレクトリにコピーしてから、Visual Studio 2010でソリューションファイルを開く。C#とC++のサンプルが入っているが、C#の方が簡単にプログラムを作成できるのではないかと思う。ちなみに、Visual Studio 2010を持っていない人は、こちらからVisual C# 2010 Expressをダウンロードして使ってみるのがいいと思う。

なお、サンプルのプログラムを読むにあたり、知っておかないといけない技術としては、.NET 4.0、WPF、Kinect SDKになる。

5.Kinect SDK クイックスタート



どこから手を付けたらよいかわからない場合は、Channel 9のクイックスタートビデオがわかりやすいので是非見てみてはいかがだろうか?

あ、あと、ビデオの中で紹介されているメソッドは、Kinect SDKだけでは足りないため、CodeplexにあるConfig4Fun Kinect Tookitをダウンロードして、Visual Studioのソリューションエクスプローラーから参照に含めると使えるようになる。

Beta版と異なるところは、クラスの名前空間が変わったこと、「Microsoft.Research.Kinect」から、「Microsoft.Kinect」になって、製品ぽくなった。

骨格の検出例



こんどは、何か作ったものを紹介できればと思います。