OpenNI Java を試す (2)

今日はHandsGeneratorというクラスを触ってみた。目標は、手の動きを追う方法を調べる事。

他の○○Generatorと同様にcontextを与えて生成。

handsGen = HandsGenerator.create(context);

それぞれのイベントのオブザーバーの実装クラスを渡しておく。

handsGen.getHandCreateEvent().addObserver(...)
handsGen.getHandDestroyEvent().addObserver(...)
handsGen.getHandUpdateEvent().addObserver(...)

これだけでは何も起こらない。どっかでhandsGen.startTracking(Point3D)しないとトラッキングが始まらない。

��ここはサンプルのUserTrackerのままだが)まず、UserGeneratorを生成し、userGeneratorからskeltonCapabikityを取得する。skeltonCapabilityのCalibrationCompleteイベントのオブザーバを登録し、

userGen = UserGenerator.create(context);
skeletonCap = userGen.getSkeletonCapability();
skeletonCap.getCalibrationCompleteEvent().addObserver(...);


そのオブザーバーの中は次のような処理にする。キャリブレーションがOKだったら、SkeltonCapabilityのトラッキングを開始し、その後に右手のトラッキングを開始する。

if (args.getStatus() == CalibrationProgressStatus.OK)
{
skeletonCap.startTracking(args.getUser());
handsGen.StartTracking(skeletonCap.getSkeletonJointPosition(
args.getUser(), SkeletonJoint.RIGHT_HAND).getPosition());
}

以上で、何となく手の動きが追えるようになった。ただし、「RIGHT_HAND」と書いてあるのにどうしても左手をトラッキングしているように見える・・。