2011年6月18日土曜日

Production Node

「意味のある」3Dデータは、空間を翻訳し、理解することによって得られます。
意味のある3Dデータの生成は複雑な仕事です。

典型的には、この仕事は生データを出力するセンサーを使います。
この生データは、各ピクセルがセンサーからの距離になっているdepth mapであることが多いです。
専用のミドルウェアでこれを処理し、アプリケーションに渡すための上位データを生成します。

OpenNIでは、「Production Node」という言葉を定義します。
Production Nodeとは、NIアプリケーションに必要なデータを生成する過程において、生産的な役割を果たすコンポーネントのことです。
Production Nodeは、ある特定のデータ生成に関わる機能一式をカプセル化したものです。
Production Nodeは、OpenNIがアプリケーションに提供するインタフェースの基本的な構成要素となるものです。
しかしながら、Production NodeのAPIは、インタフェイスなど標準的なルールを定義するだけです。データを生成するロジックは、OpenNIに登録されたモジュールで実装する必要があります。

たとえば、手の位置を生成する機能一式を揃えたProduction Nodeがあったとして、
手の位置データの生成ロジックは、OpenNIに登録され、かつそのようなデータ生成ロジックを実装した、OpenNI外部のモジュールが行わなければなりません。

原則として、Production Nodeは、特定のデータを生成する、独立した存在です。
そして、生成したデータを、他のProduction Nodeや、アプリケーションなど、様々なオブジェクトに提供します。
しかし、中には、他の低レベルデータを生成するProduction Nodeに依存し、その低レベルデータを分析してアプリケーションにデータを提供するProduction Nodeも存在します。


3次元空間内の人間の動きをトラッキングするアプリケーションを考えてみましょう。
このアプリケーションは、人体データを提供してくれるProduction Nodeが必要です。
このようなProduction Nodeを「user generator」と呼びます。
user generatorは、元データを「depth generator」から取得します。
depth generatorはセンサーによって実装されたProduction Nodeで、深度センサーから生のセンサーデータを取得し、(たとえば、毎秒Xフレームのストリームデータです。)そして、深度マップとして出力します。

より上位のレベルの例をいくつか見てみましょう

1.1ユーザーの手の位置の取得
ユーザーの手のひらの中心(よく、ハンドポイントと呼ばれる点です)や、指先を出力します。

2.空間内の人体の取得
人体の間接の現在の位置と向きを出力します。
(よく、人体データ(=body data)と呼ばれます。)

3.手のジェスチャーの認識
出力は、特定のジェスチャーが発生した、というアプリケーションへのメッセージになります。

Production Node型
Production Nodeは型をもっており、次のいずれかのカテゴリに分類されます。
1.Sensor-Related Production Nodes
2.Middleware-Related Production Nodes

現在、OpenNIでは以下のProduction Node型をサポートします。

1.Sensor-Related Production Nodes
・Device
物理デバイスを表現するProduction Node
(たとえば、深度センサーやRGBカメラ)
この Production Nodeの目的は、デバイスの設定を行うことです。

・Depth Generator
深度マップを生成するProduction Node。
OpenNI準拠の3Dカメラによって実装されます。

・Image Generator
カラーイメージマップを生成するProduction Node。
OpenNI準拠のカラーセンサーによって実装されます。

・IR Generaotr
IRイメージマップを生成するProduction Node。
OpenNI準拠のIRセンサーによって実装されます。

・Audio Generator
音声ストリームを生成するProduction Node。
OpenNI準拠のオーディオデバイスによって実装されます。

2.Middleware-Related Production Nodes

・Gestures Alert Generator
あるジェスチャーが行われた場合に、アプリケーションへのコールバックを生成します。

・Scene Analyzer
空間の分析を行い、背景と対象物を分離し、空間内の人体を認識し、床平面を検出します。
Scene Analyzerの主な出力は、ラベル付けされた深度マップです。
ラベルはピクセル単位に付けられ、そのピクセルが人体なのか、背景なのかを表します。

・Hand Point Generator
手の検出とトラッキングを行います。
このProduction Nodeは、ハンドポイント(手のひら)を検出した際のコールバックを生成します。
また、トラッキングが有効な場合は、その位置が変化した際のコールバックを生成します。

・User Generator
空間内の人体(全体または一部)を検出します。

レコーディングのために、以下のProduction Nodeがサポートされています。
・Recorder
データの保存を実装します。

・Player
保存されたデータを読み込み、再生します。

・Codec
保存の際の圧縮や解凍に使用します。

0 件のコメント:

コメントを投稿