ブログトップ 記事一覧 ログイン 無料ブログ開設

かおるんダイアリー RSSフィード Twitter

2012年02月01日

Kinect for Windows SDK で プレーヤーを認識させる(C# + WPF)

f:id:kaorun55:20120202105929p:image

次はプレーヤーです。

Kinect Toolkitを利用している場合は、前回のコードから一行追加するだけです。


コード

全体のコードはこちらにあります。


public MainWindow()
{
    InitializeComponent();
    try {
        if ( KinectSensor.KinectSensors.Count == 0 ) {
            throw new Exception( "Kinectが接続されていません" );
        }

        // Kinectインスタンスを取得する
        KinectSensor kinect = KinectSensor.KinectSensors[0];

        // Colorを有効にする
        kinect.ColorFrameReady +=
            new EventHandler<ColorImageFrameReadyEventArgs>( kinect_ColorFrameReady );
        kinect.ColorStream.Enable();

        // Depthを有効にする
        kinect.DepthFrameReady +=
            new EventHandler<DepthImageFrameReadyEventArgs>( kinect_DepthFrameReady );
        kinect.DepthStream.Enable();

        // Skeletonを有効にするとプレーヤーが取得できる
        kinect.SkeletonStream.Enable();

        // Kinectの動作を開始する
        kinect.Start();
    }
    catch ( Exception ex ) {
        MessageBox.Show( ex.Message );
        Close();
    }
}

追加されたコードは kinect.SkeletonStream.Enable() の部分のみです。

自前でやろうとした場合は、DepthImageFrameに定義されている、プレーヤーインデックスを取得するためのPlayerIndexBitmask(値:7)を使ってpixelごとに抜き出すことになるでしょう。

umenorikaumenorika 2012/02/08 18:22 突然のコメントで失礼いたします。
「Kinect for Windows SDK での プレーヤー認識」大変参考になります。
「KINECT SDK Beta2 でユーザーデータを扱う」も非常に参考になりました。

正式版のsdkでプレイヤーの色づけを行う場合は、
プレイヤーのインデックスをDepthImageFrameに定義されている
PlayerIndexBitmask(値:7)を使って取得して処理するとのことですが、
画像上のプレイヤーの位置(X座標、Y座標)はどのように求めるのでしょうか?
(的外れな質問をしていたら申し訳ありません。)

kaorun55kaorun55 2012/02/08 18:27 PlayerIndexBitmask(値:7)を使って「pixelごとに抜き出」しますので、pixel=(X座標、Y座標)になりますー。

「KINECT SDK Beta2 でユーザーデータを扱う」の方で、プレーヤーインデックスを
int index = (x + (y * depth.Image.Width)) * 2;
で計算してます。この時のX,Y座標が、おそらくご希望のものになると思います

umenorikaumenorika 2012/02/08 19:21 ありがとうございます。
無事解決できました。

kaorun55kaorun55 2012/02/08 23:15 よかったですー

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

リンク元

【注】このサイトの記事を実践する場合はすべて自己責任で行ってください