テレビの前で身体を動かすと、ゲームの中のキャラクターが同じ動きをする──「Kinect」という言葉を知らなくても、似たような場面はテレビ番組やCMで見たことがあるのではないでしょうか。
KinectはMicrosoft社のゲーム機Xbox用のコントローラです。しかし、従来のコントローラとはまったく違った概念を持っているのが特徴です。それは、
Kinectはプレイヤーが身に付けるものではなく、プレイヤーを認識して姿勢や動きを入力する装置である
という点です。つまり、プレイヤーの身体の動き、それ自体がコントローラとなってゲームの世界のキャラクターを動かすことができるのです。このとき、従来のモーション・キャプチャ技術のように、身体に多数のマーカーを付ける必要はありません。プレイヤーは普段着のままKinectの前で身体や手を動かすだけで、コンピュータにいろいろな指示ができるのです。 そして、もう1つ、
Kinectはリアルタイムに物の形をとらえている
という点にも注目しましょう。Kinectには近赤外線光パターンを照射するプロジェクタと、その反射を受信する近赤外線カメラが搭載されており、センサーとの距離や撮影範囲を工夫すれば10mm前後の精度でリアルタイムに人体や物体の形状を計測することができます。これと同じようなセンサーとして、光の飛行時間(time of flight)を利用して物体の形状を計測するTOF方式距離画像センサーがありますが、こちらは価格が100万円前後するのに対して、Kinectの価格は1万数千円です。もちろん精度の差はありますが、用途を限定すればKinectも3次元形状の計測装置として十分に使えるのではないかと思います。また、Kinectは近赤外線光パターンと近赤外線カメラを使用しているため、暗闇でも形をとらえることができます。この機能を利用すれば、防犯3Dカメラとしても利用できるかもしれません。
本書はKinectのセンサーから入力した情報を使って、3次元計測する方法を中心に解説しています。Kinectが認識した骨格のXYZ座標を実世界の座標系に変換する方法や、1シーン全体のR、G、B値と距離データをCSVファイルに出力する方法も解説しました。使用した開発キットは、Kinect SDKとOpenNIです。著者の主観ですが、ゲーム用にKinectを利用する場合はKinect SDKが、画像計測をする場合はOpenNIが適しているように思います。
KinectセンサーとPC、C言語の開発環境、そしてKinect SDKまたはOpenNIとOpenCV。必要なソフトウェアをそろえて、ぜひ、Kinectアプリケーションの開発にチャレンジしてみてください。「こんなに簡単な装置で、しかも自分の部屋で、ここまでのことができるんだ!」と感動するに違いありません。