(前編はこちら)
スケルトンの認識はKinect SDKの方が高速
Kinect for Windows SDKとOpenNIとの違いとしては、前編で述べた点以外に以下がある。例えば、スケルトンの認識速度はKinect for Windows SDKの方がOpenNIよりも「格段に速い」(セカンドファクトリー)という。また、OpenNIの場合、1回のイベントにつき片方の手の情報しか取得できないため、両手を使った動作の認識処理を実装しにくいが、Kinect for Windows SDKは両手に対応できるという。
OpenNIが優れている点としては、前述のようにジェスチャー認識機能が標準でビルトインされていることのほかに、(1)体全体のスケルトンを認識していない状態でも手の認識が可能なため、「座った状態などでも手の動作を認識できる」(セカンドファクトリー)、(2)Kinect for Windows SDKの距離画像は85cm~400cmの範囲の距離を出力可能だが、OpenNIは85cmより近くにある物体でも距離を取得できる、などがある。
2台のKinectを接続可能
Kinect for Windows SDKでは、2台のKinectを接続することができる。ただし、距離画像を取得できるのは1台目だけであり、2台目は通常のRGB画像のみを取得できる。
距離画像の取得モードには「UseDepth」と「UseDepthAndPlayerIndex」の2種類がある。UseDepthは単純に16ビットの距離画像がグレースケールとして出力されるもので、解像度は320×240と80×60の2種類ある。距離範囲は85cm~400cmである。影や高反射した領域の画素には、距離不定を意味するゼロが値として入る。
UseDepthAndPlayerIndexは、各ユーザーを区別した状態の距離画像を出力するものである。画素の値が16ビットなのはUseDepthと同様だが、UseDepthAndPlayerIndexの場合は、0~2ビットにユーザーの区別を示すインデックス値が入り、残りの3~15ビットが距離画像(depth)となる。いわば、ユーザーごとにセグメンテーション(領域分割)を施し、ユーザーのIDでラベリング処理した距離画像がUseDepthAndPlayerIndexであるといえる。各画素に入っているユーザーのインデックス値は、特定のユーザーや特定の領域のみをマスクして切り出すのに利用できる。ユーザーが写っていない背景などの領域では、インデックス値はゼロとなる。
最大7人のユーザーを区別可能
Kinect for Windows SDKでは、スケルトンの認識については最大2ユーザーまでを同時に認識可能だが、単純な距離画像上でのユーザーの区別(セグメンテーション)であれば同時に最大7人まで可能である。会場では、実際に7人までのユーザーを距離画像上で区別して表示させるデモを実演していた(写真1)。
スケルトンの認識については、Kinect for Windows SDKでは20個の関節の3次元座標を認識できる。関節は体全体に分布しているが、頭部については1点しか設定されていないため、顔の向きを取得することはできない。
Kinect for Windows SDKでは、オーディオ関連の機能も用意されている。音声認識の機能もあるが、現状では日本語には非対応である。Kinectに実装されている四つのマイクロフォン・アレーを用いて、話者の音源位置を左50°~右50°の範囲で推定することが可能である。
チルト機構を酷使すると例外が発生
Kinectにはチルト方向にアクチュエータが搭載されており、Kinect for Windows SDKからカメラのチルト角(仰角)を制御することができる。ただし、「あまり頻繁に動かすと例外が発生してしまう。1秒に1回くらいが上限」(日本マイクロソフト デベロッパー&プラットフォーム統括本部 エバンジェリストの川西 裕幸氏)という。