特集
» 2012年03月30日 11時00分 UPDATE

必読! Kinect for Windows 基礎のキソ:Kinect センサーで夢と魅力にあふれるアプリを“創造”しよう! (2/3)

[太田 寛,@IT MONOist]

Kinect for Windows SDK Sample Browser

 SDKをインストールすると、「Kinect for Windows SDK Sample Browser」というプログラミングガイドやサンプルアプリケーションのLauncherがインストールされます。

 Kinect for Windows SDK Sample Browserの「Kinect SDK API Reference」を選択し、[Documentation]ボタンをクリックすると、Kinect センサープログラミングの詳細を説明するドキュメントが開きます。Kinect センサーに関する基本事項、およびAPIの詳細はこのドキュメントを参考にしてください。

Kinect for Windows SDK Sample Browser 図3 Kinect for Windows SDK Sample Browser

 Kinect for Windows SDK Sample Browserの中に、Kinect センサーの一通りの機能を実行できる「Kinect Explorer」というアプリケーションが用意されています。手っ取り早くKinect センサーの機能を試してみたい方には、このアプリケーションがオススメです。

 Kinect Explorerをマウスで選択し、[Run Sample]ボタンをクリックして、このアプリケーションを起動すると、図4と図5に示すようなウィンドウが表示されます。

Kinect Explorer Console 図4 Kinect Explorer Console
Kinect Explorer Viewer 図5 Kinect Explorer Viewer

 図4に示したコンソールは、Windows PCへのKinect センサーの接続状況を表示します。SDKには、Kinect センサーの接続状況を取得するAPIが用意されており、センサーの状態が変わったことを通知するイベントにハンドラを登録しておけば、“センサーの接続の有無”と“センサーの状態”をプログラムで取得できます。図4左が未接続状態の表示で、Kinect センサーをWindows PCに接続すると図4右のように表示が変化します。

 図5に示したビュワーは、Kinect センサーで取得した実画像、深度情報、スケルトン情報を表示しています。左側の画面には実画像とスケルトン情報をマージした画像が表示され、右側の画面には、深度情報とスケルトン情報をマージした画像が表示されます。各画像の左下に表示されている数字は、1秒当たりのフレーム数(FPS:Frame Per Second)です。図5には「30」と「29」が表示されているので、実画像30枚、深度情報画像29枚を1秒当たりに処理して表示していることを意味します。

 ビュワーの下部左側の[Expand]マークをクリックすると、表示する画像の種類や画素数の設定を選択するUIが表示され、ビュワー上で表示する画像の種類や、Kinect センサーの仰角などを設定できます。

深度情報とスケルトン情報

深度情報とスケルトン情報 図6 深度情報とスケルトン情報

 図6は、深度情報とスケルトン情報のみを選択した画像です。この図を見れば、Kinect センサーとSDKの組み合わせで取得できる情報が一目瞭然でしょう。スケルトン情報は、同時に2人まで計測が可能で、人物ごとに、「頭」「肩の中央」「左肩」「右肩」「左肘」「左手首」「左手のひら」「右肘」「右手首」「右手のひら」「背骨の中心」「腰の中央」「左足の付け根」「右足の付け根」「左ひざ」「左足首」「右ひざ」「右足首」「左足先」「右足先」の20カ所(「ジョイント」と呼ぶ)の3次元の位置を追跡可能です。ジョイントの3次元位置情報は、図7の座標系の浮動小数点の数値で記述されます。単位はメートル(m)です。

スケルトンの座標系 図7 スケルトンの座標系

 深度情報は、センサー正面にある物体とセンサーまでの距離情報です。図8に示す座標系で、単位はミリメートル(mm)の整数で取得が可能です。スケルトン情報が各ジョイントの3次元座標値であるのに対し、深度情報はあくまでも深度画像のピクセルごとの正面の物体までの距離であることに注意してください。

深度情報の座標系 図8 深度情報の座標系
深度とスケルトンによる人の識別 図9 深度とスケルトンによる人の識別

 図9は図7の画像部分を取り出したものです。よ〜く見てください。色違いのシルエットが3つ並んでいるのが分かるでしょう。この色分けは深度センサーからの情報を基に行っています。深度センサーは物体のセンサーからの距離を測るだけでなく、人間がいる場所の検知も同時に行えます。深度画像の各ピクセルに、そのピクセルが人の一部なのか、そうでないかの情報が格納されています。全てのジョイント情報を持つ「スケルトントラッキング」は最大2人までですが、深度情報は同時に最大6人まで識別が可能です。

 もう一度図9を見てみると、右側の2人にはスケルトンの骨格が表示されているのに対し、一番左の人物には腰の中央に1つだけが表示されています。このように、スケルトントラッキングでは3人目以降(最大6人目まで)の人物に対しても“腰の位置に限り”追跡することができます。

 また、Windows PC専用版のKinect for Windows センサーには、深度情報の計測範囲に2つのモードが用意されています。1つは、Xbox版 Kinect センサーと同じ計測可能範囲(80cm〜4m)の「Defaultモード」と、近距離での操作も可能にするために、40cmからの計測が可能な「Nearモード」です。Nearモードに設定した場合、追跡可能なスケルトンは6人全て“腰の位置のみ”になり、体全体のジョイント情報は取得できなくなります。

「Nearモード」時のスケルトン追跡 図10 「Nearモード」時のスケルトン追跡

 さて、再度図5をご覧ください。ビュワー画面下部にオレンジ色と赤色の細い横長の領域があります。このサンプルアプリケーションでは、Kinect センサーに5つ並んで配置されているマイクアレイで拾った音が、センサー正面のどの角度から聞こえているのかをオレンジ色と赤色で表示しています。この機能とスケルトン追跡の機能を組み合わせれば、センサーの前にいる複数人のうち、誰が今しゃべっているのかを識別することができます。

 他にも、図6右下の「.Elevation Angle」を使って、Kinect センサーの仰角を動かすことができます。

Copyright © ITmedia, Inc. All Rights Reserved.