特集:Kinect開発の選択指針(後編)

Kinect for Windows SDKベータ2とOpenNIの比較

中村 薫
2012/01/24
Page1 Page2

機能の比較

 次の表は、Kinect SDKとOpenNIの機能をまとめた比較表である。

機能項目 Kinect SDK OpenNI
RGBカメラ制御
RGBカメラ解像度 1280×1024
640×480
1280×1024
640×480
320×240
距離カメラ制御
距離カメラ解像度 640×480
320×240
80×60
640×480
320×240
距離計測範囲 850〜4,000ミリメートル(mm) 500〜10,000ミリメートル(mm)
ユーザー認識
ユーザー認識解像度 320×240
80×60
640×480
スケルトン・トラッキングのためのポーズ 不要 不要
ユーザー・トラッキング数 7人 規定なし(ライブラリ上では15人)
スケルトン・トラッキング数 2人 ユーザー・トラッキング数に依存
部分的なトラッキング ×
音声
音源方向の取得 ×
首振り
ミラー機能 ×
カメラと距離のズレ補正機能
ユーザー検出、消失時の通知 ×
トラッキング開始、終了時の通知 ×
RGB、距離カメラの保存、再生 ×
ジェスチャ検出機能 ×
複数デバイスの操作
デバイスの挿抜検出 ×
表2 ライブラリの比較(機能)

 それぞれの項目について詳しく説明していこう。

RGBカメラ/RGBカメラ解像度

 Kinect SDKおよびOpenNIともに、RGBカメラを制御する機能は持っており、解像度は1280×1024、もしくは640×480となっている。

 細かい話ではあるがデータ構造に違いがあり、Kinect SDKは「1ピクセルあたりRGB」+「8bitの無効データ」で32bit、OpenNIは「1ピクセルあたりRGB」で24bitとなっている。

距離カメラ/距離カメラ解像度/距離計測範囲

 Kinect SDKの距離カメラ解像度は640×480か、320×240か、80×60となっている。

 ただし、640×480はユーザーやスケルトンを利用しない場合に限り、ユーザーやスケルトンを利用する場合の解像度は320×240か、80×60となっており、距離のデータ構造も、それぞれの状態で変わってくる(詳細はこちらを参照のこと)。

 OpenNIはユーザーやスケルトンの利用状況にかかわらず640×480もしくは320×240であり、データ構造にも変化がない。

 距離の計測範囲については、Kinect SDKが850〜4,000ミリメートル(mm)、OpenNIが500〜10,000ミリメートル(mm)となっている。ただし、Kinectのハードウェアとしての仕様が1,200〜3,500ミリメートル(mm)であるため、それを外れた計測データについては誤差を考慮する必要がある。

ユーザー認識/ユーザー認識解像度/ユーザー認識数

 Kinect SDK、OpenNIともにユーザーを認識することが可能である。異なるのは、ユーザー認識時の解像度および、ユーザーを認識できる人数である。Kinect SDKは解像度が320×240もしくは80×60、人数が7人となっている。OpenNIは解像度が40×480もしくは320×240、人数は特に規定されていない。ライブラリを見る限り、15人までは認識できるようであるが、7〜8人でカメラに収まらなくなる。

スケルトン・トラッキング/スケルトン・トラッキング数/部分トラッキング

 Kinect SDK、OpenNIともにスケルトン・トラッキングを行うことが可能である。Kinect SDKがリリースされたときにOpenNIとの比較で真っ先に挙げられた、OpenNIの「Psi」ポーズは、1.4.0.2以降で不要になり、現在は両ライブラリともにポーズなしでスケルトン・トラッキングを行うことが可能である。スケルトン・トラッキング数については、Kinect SDKが2人、OpenNIがユーザー数に依存する。

 OpenNIにあってKinect SDKにはない機能として、部分トラッキングが挙げられる。通常のスケルトン・トラッキングは全身をトラッキングするため、頭から膝の辺りまでがカメラに映っていないとトラッキングできなかった。しかし、実際にアプリケーションを利用する場面では全身を使うことはまれで、机の上やリビングなどで使うときを考えると、座って上半身のみがカメラに映ることが多い。そのため、OpenNIでは上半身のみ、下半身のみ、頭および手のみのトラッキングが可能になっている。もちろん、これらのトラッキングでは該当の箇所(上半身のみなど)がカメラに映っていればよく、図1に示すように、机の前に座っていてもスケルトン・トラッキングを行うことが可能である。

図1 上半身のみのスケルトン・トラッキング

音声/音声方向の取得

 Kinect SDK、OpenNIともに取得が可能だ。ただし、Xtion Proにはマイクが搭載されていないので、音声の取得はできず、KinectとXtion Pro LIVEに限られる。また、デバイスとライブラリの組み合わせはKinect+Kinect SDK及び、Xtion Pro LIVE+OpenNIで音声の取得が可能であり、Kinect+OpenNIでの音声取得はできない。

 音声方向の取得については、Kinectのハードウェア特有の機能であるため、Kinect+Kinect SDKのみ利用することが可能だ。この機能もKinect+OpenNIでは実現できない。

首振り(チルト・モーター)

 チルト・モーターもKinectのハードウェア特有の機能であるため、Kinect+Kinect SDKのみ利用することが可能だ。

 ただし、Kinect+OpenNIでもOpenNIのUSB APIを利用してチルト・モーターを直接制御することは可能であるが、正式な方法ではないため、試す場合は自己責任でお願いしたい。

ミラー機能

 ミラー機能とは、カメラから取得できる画像を「鏡のように逆にする」または「ビデオのように見たままを映す」のを選択できる機能だ。この機能はOpenNIでのみ提供されていて、Kinect SDKでは提供されていない。Kinect SDKでは常にミラー・モードに固定されており逆に映る。見たままのように映す場合は実装するアプリケーション内で行う必要がある。

RGBカメラと距離カメラの補正機能

 KinectやXtion LIVEのRGBカメラと距離カメラは、全く同じ位置から撮影していないので、両方の画像を重ねると多少のズレが発生する。この状態でユーザーの検出を利用して、ユーザー画像のみを抜き出すと、きれいに抜き出すことができない(図2を参照)。これを解決するために、ライブラリで両カメラの位置ズレを補正する機能が提供されている。この機能を利用すると、RGBカメラと距離カメラのピクセルが合うため、きれいに切り抜くことができる(図3を参照)。

図2 カメラの補正を利用しない場合

図3 カメラの補正を利用する場合

 ただし、Kinect SDKではRGBカメラと、ユーザー検出利用時の解像度を同じにすることができないため、補正データを使ってもきれいに切り抜けないので、RGB画像を縮小する、ユーザー画像を拡大する、などの工夫が必要だ。

ユーザーの検出、消失時の通知/スケルトン・トラッキングの開始、終了の通知

 OpenNIのみで提供されている機能で、ユーザーの検出/消失時や、スケルトン・トラッキングの開始/終了時に、それをアプリケーションへ通知することができる。この機能を利用すると、ユーザーを検出したことをトリガーにして何らかのアクションを起こす機能の実装が簡単にできる。

 Kinect SDKの場合は、この通知がないため、距離データ内のユーザー・データを調べる必要がある。

RGBおよび距離カメラ・データの保存と再生

 この機能もOpenNIのみで提供されている機能だ。KinectやXtionから取得したRGBカメラ、距離カメラ、音声の各データを保存し、また保存したデータを使用して、再生することができる。活用の場面としては、デモの動作や、デバッグなどに利用できる。

ジェスチャ認識

 この機能もOpenNI(正確にはミドルウェアであるNITE)のみで提供されている機能だ。OpenNIのジェスチャ機能を利用することで、手の前後や左右の動作などの検出、画面に表示されたメニューの選択といった機能を実装できる。

 Kinect SDKでは標準でジェスチャの認識機能は提供されておらず、自前で実装するか、インターネット上で公開されているライブラリ(例えばKinect Toolboxなど)を利用する必要がある。

複数のデバイス操作

 標準ではKinect SDKのみ標準で提供されている。Kinect SDKで複数のKinectを扱う場合の制約として、ユーザーの認識やスケルトン・トラッキングは1台のKinectからのみ取得可能である。別のKinectからデータを取得したい場合は、現在取得しているKinectからの出力をやめて、別のKinectの出力を開始する処理が必要になる。

 OpenNIも複数デバイスを扱えるが、特別な手順を踏む必要がある。一度、複数のデバイスを起動できれば、Kinect SDKのような制約はなく、全てのデバイスからユーザー・データやスケルトン・トラッキングを行うことができる。

 また、KinectおよびXtionのデバイスの制約として、USBハブを介した複数接続はできず、独立したUSBコントローラに接続する必要がある。

デバイスの挿抜検出

 Kinect SDKのみで提供されている機能で、アプリケーションの実行中にKinectが取り外されたり、新しいKinectが接続されたりした場合に通知される。この機能により、Kinect SDKはKinectが接続されていない状態でも、アプリケーションを起動でき、また実行中に全てのKinectが取り外されたとしても、アプリケーションの動作を継続できる。

 OpenNIではこの機能は提供されておらず、アプリケーションの起動から終了まで、デバイスの数が一定である必要がある。

まとめ

 このように、デバイスが同じであるため、基本的な機能については大きな差はない。しかし、細かいところでアプリケーションの実装にかかわる違いがあるため、実装しようとしているアプリケーションに合ったライブラリおよびデバイスを選択することが望ましい。end of article

 

 INDEX
  特集:Kinect開発の選択指針(前編)
  Kinectハック最新動向と、Kinect/Xtionの比較
    1.Kinectハックに関するキーワード/この数カ月のKinectハック界隈の動き
    2.デバイスの比較
 
  特集:Kinect開発の選択指針(後編)
  Kinect for Windows SDKベータ2とOpenNIの比較
    1.ライブラリの比較
  2.機能の比較


Insider.NET フォーラム 新着記事
  • 第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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間