2/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が動き出します。次は、カメラの読み込みの処理について書きます。