特集:Kinectセンサーの可能性C#開発者が“Kinectハック”に挑戦してみた デジタルアドバンテージ 一色 政彦2011/05/16 |
|
「Kinectハック」をご存じだろうか?
その名のとおり、Kinectセンサー(詳細後述。コード名:「Project Natal」。以降、「Kinect」)をハックすることだ。つまり、Kinect製造・販売元以外の第三者が技術力を駆使してKinectが動作する仕組みを解析し、Kinectを(本来の用途以外の目的で)自分が自由に使える道具に(ソフトウェア的に)仕立て上げてしまうことである。当然ながら、このような行為は法的な問題を含んでいる可能性がある(と考えられる)が、本記事の執筆時点で、マイクロソフトはほぼ黙認しており、これにより世界中でいま、Kinectハックが広がりを見せている。
また、米国で4月13日に開催されたWeb開発者向けカンファレンス「MIX11」(の2日目の基調講演)において、KinectのWindows向けSDK(ベータ版)(以降、Kinect SDK)の提供計画が発表された。このKinect SDK(ベータ版)のリリースは今春の後半の予定で、まもなく登場すると思われるが、マイクロソフト「公式」のKinect SDKが提供されることになれば、Kincetを活用した、まったく新しい分野のソフトウェアが出現しそうな雰囲気になってきている。
本特集では、「Kinect SDK登場前夜祭」という趣旨で、前半でKinectセンサーとKinectハックについてご紹介し、後半で実際に筆者自身がC#によるKinectハックに挑戦してみる。
■Kinectセンサーの概要
●Kinectセンサーとは?
そもそもKinectとは、人の体の動き(=ジェスチャ)や音声を認識して、それをゲームのコントローラとして利用できる、マイクロソフト製のゲーム機「Xbox360」向けの入力デバイスだ。いわゆる、「家庭用で気軽に使えるモーション・キャプチャ機器」といえる。2011年3月時点の、世界中での累計販売台数は、すでに1000万台を突破しており、爆発的な勢いで売れ続けている。
次の写真が、そのKinectである。
マイクロソフトが提供するゲーム用コントローラ「Kinectセンサー」 |
執筆時点で、メーカー希望小売価格は「1万4800円(税込)」。 |
次の写真は、Kinectで遊んでいるイメージ写真だ。
Xbox360とKinectセンサーで遊ぶイメージ |
Kinectの設置場所から180cmほど距離を取り、そこに自分の両手を振り回せる程度のスペースがあれば、遊べる。「micosoft.com: Introducing Kinect for Xbox 360」からの引用。 |
実際にKinectで遊んでいる動画を見た方がイメージしやすいだろう。次の動画は、Kinectに対応したXbox360のゲーム『Kinect アニマルズ』の海外でのCMである。
『Kinect アニマルズ』の海外CM |
この動画を見ると、自分の体が自然とコントローラになっているのが分かる。同時に2人が並んで、複数のプレイヤーとして認識させることもできる。
●Kinectの外観
Kinectの外観は、次の写真のようになっている。
Kinectセンサーの外観と各センサー機能 |
各番号で示した各センサー機能に関する説明は以下のとおり。各センサー機能が搭載されたヘッド部分は、機械的に上下にチルトさせること(=首を振らせること)ができる。 |
距離センサー(左側)=「近赤外光プロジェクタ」は、近赤外光パターンを広範囲にレーザー照射する。
距離センサー(右側)=「近赤外光カメラ」(=3D奥行きカメラ)は、レーザー照射された近赤外光パターンを撮影する。撮影された画像から、奥行き(=距離)や動きなどを計算する。
映像センサー=「カラー映像(RGB)カメラ」は、写真を撮影したり、映像を録画したりするために使われる。
4つの内蔵マイクがあり、音声を認識したり、アクティブなプレイヤーの方向を感知したりするために使われる。外観からは分からないが、左側に1つ、右側に3つが設置されている。
●Kinectの基本的な機能
Kinectの基本的な機能としては、下記の点が挙げられる。
- 体の動きを認識:距離センサーにより、プレイヤーの位置や動きを検出できる。
- 音声を認識:4つの内蔵マイクにより、周囲のノイズをキャンセルしながらの音声入力が行え、音声の位置情報からプレイヤーの方向も感知できる。
- 写真やビデオ映像:映像センサーにより、プレー中の写真を撮影したり、ビデオを録画したりできる。ビデオ通話も可能。
- 上下の角度の自動調整:Kinectのヘッド部分の向きをモーター駆動で上下にチルトできる。
●Kinectのハードウェア&ソフトウェア仕様
Kinectのハードウェア&ソフトウェア仕様は、下記のとおり。※ただし、下記の内容はネット上の情報を収集してまとめたものなので(=マイクロソフトによる公表値ではないので)、必ずしも正確とは限らないことを、あらかじめご了承いただきたい。
- 近赤外光プロジェクタ(距離センサー):レーザー光の波長は830nm、出力レベルは一定(無変調)、出力パワーは60mW。
- 近赤外光カメラ(距離センサー):カメラ画像の解像度は、(うわさでは)16bitモノクロ(=6万5536階調)のQVGA(320×240画素)。視野は水平方向に57度、垂直方向に43度で、感知できる範囲は120cm〜350cm。(うわさでは)2メートル離れた状態で、1cm以内の誤差で距離を計測できる。なお、距離計算は、Kinect内部に設置されている「PrimeSense PS1080-A2 - SoC イメージ・センサー・プロセッサ」で行われる。
- カラー映像(=RGB)カメラ(映像センサー):ビデオ映像の解像度は、32bitカラーのVGA(640×480ピクセル)。フレーム周波数は30Hz。
- 同時に検知できる人の数:最高6人まで。その内、アクティブなプレイヤーは2人まで。
- アクティブなプレイヤー当たりの動作検出用ポイント「ジョイント」の数:最高20関節
- モーター駆動チルト:上下方向にそれぞれ27度ほど動く。これにより、距離センサーの検出範囲を調整できる。
- 外部機器への接続:専用インターフェイスのほか、USB 2.0ポートによる接続が可能。Kinectハックでは、USBインターフェイスを利用して、PCやMacなどに接続する。
- 冷却ファン:内部温度が70℃を超えると動き出す。
Kinectのハードウェア内部の構造に興味がある方は、Kinectを分解して解説している、下記のリンク先の記事がお勧めだ。写真が豊富なので、一度目を通すだけでも楽しい。
ちなみに、距離センサー技術はイスラエルの3D情報検知カメラ開発会社「PrimeSense」によって提供され、ソフトウェア技術はイギリスのテレビ・ゲーム開発会社「Rare」とマイクロソフトの子会社「Microsoft Game Studios」によって提供されている。
●Kinectの3D情報検出の仕組み
基礎知識として、Kinectの3D情報検出の仕組みについて説明しておこう。
前述のとおり、近赤外光プロジェクタにより近赤外光レーザーによる「無数のドット(=光:Light)パターン」が広範囲に照射されている(=「Light Coding:光コーディング」と呼ばれるPrimeSense社の技術)。赤外光は人間の目には見えないが、「実際にどのような形で照射されているのか」については、赤外線カメラで撮影された、次の動画を再生してみてほしい。
Microsoft Kinect Night Vision |
照射区域全体(=シーン:Scene)は細かく9つの領域に分けられ、各領域の中央にはひときわ明るい光が照射されている。また、各領域で光の明るさが異なっている。次の写真は、シーンを分かりやすく赤外線カメラで写したものである(この写真は、「Kinectを買ってみました −? 工作ユニットHello WORLDのキットサポートBlog」からの引用)。
近赤外光プロジェクタにより照射される光パターン |
「Kinectを買ってみました − 工作ユニットHello WORLDのキットサポートBlog」からの引用。 |
奥行き(=距離)の認識には、人間が物を見るときの仕組みをまねて、「3次元の世界から得た情報を、奥行きを持つ画像に変換する」という仕組みを採用している。具体的には、近赤外光カメラでシーンを写真撮影し(=人間でいうところの「目」)、標準的な既製のCMOSイメージ・センサーで写真画像を読み取り、CMOSイメージ・センサーに接続されたPrimeSense社のSoCチップが、高度な並列計算アルゴリズムを用いて、撮影した光コーディングを解読し、シーンの奥行き画像を生成している(=人間でいうところの「脳」)。
次の図は、この仕組みをまとめたものである。
Light Coding(=光コーディング)による奥行き認識の仕組み |
「PrimeSense, Reference Design」からの引用。ただし、英語表記を日本語表記に改変している。 |
次のページでは、いよいよKinectハックの事例を紹介していく。
INDEX | ||
特集:Kinectセンサーの可能性 | ||
C#開発者が“Kinectハック”に挑戦してみた | ||
1.Kinectセンサーの概要 | ||
2.Kinectハックの可能性/KinectハックのためのOpenNI環境の準備 | ||
3.Kinectハックのサンプルを動かす/C#+OpenNIフレームワークでKinectハックを試す | ||
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|