OpenNI Java を試す (2)

2012年01月09日 03:39

今日は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」と書いてあるのにどうしても左手をトラッキングしているように見える・・。

OpenNI Java を試す

2012年01月04日 03:18

先日Blogに書いた通り、Kinectを動かすためのJava環境を作ったので、OpenNIのお試しとして以前から作りたかった疑似3Dビューワー的な物(Kinectカメラ一個で取った3D画像の視点を変えられるやつ)をとりあえず作ってみた。

前回全く言及しなかったが、それぞれ以下のようなバージョンを使っている。

OS:Mac OS X 10.6.8
Java:1.6.0_29
Eclipse:3.7.1
OpenNI:MacOSX-v1.5.2.7

サンプルの作成には、OpenNIのSampleに入っていた、Java版SimpleViewerのソースコードを使い回す。

1.Depthを取得する
DepthGenerator depthGen = DepthGenerator.create(context);
DepthMetaData depthMD = depthGen.getMetaData();
ShortBuffer depth = depthMD.getData().createShortBuffer();

depthというShortBufferの中に 640 * 480 の長さで 0 から 10000の
short値が入ってる。(測定不能の場合0が入っているっぽいので、除外した方がよい)


2.カメラ画像(Image)を取得する
ImageGenerator imageGen = ImageGenerator.create(context);
ImageMetaData imageMD = imageGen.getMetaData();
ByteBuffer image = imageMD.getData().createByteBuffer();

imageというByteBufferの中に 640 * 480 * 3 の長さでRGB値が入ってる。
Color オブジェクトを作るには、以下のようにする。

Color color = new Color(image.get() & 0xff, image.get() & 0xff, image.get() & 0xff);

3.グルグルまわす部分を作る。
グルグルまわす機構は、とくにOpenNIは関係ないので省略。座標を再計算してimageに書き出して、Graphicsにpaintしているだけ。今回は20秒で鉛直方向を軸にしてくるくる周り続ける機構を作った。


以上、画像を貼りたいが家が汚いので貼らないことにする。

---
疑似3Dビューワーとして格好いいのは
Kinect RGBDemo v0.6.1
などがある。

Mac と Eclipse で Kinect を使う

2011年12月29日 23:49

Kinect発売から一年以上 経ちましたが、最近家族用にXBOX360 Kinect パックを買ったのでとりあえず Macに繋いでみるまでやってみました。あと、あまり敢えてJava版使っている人多くないような気がしたので使ってみました。

1.Kinect用ACアダプタを買う
XBOX360 Kinect パックを買うと、USB変換アダプタ付きACアダプタが同梱されていません。楽天で売ってたので購入。

2.Macにlibusbをインストール
MacPorts で libusb-devel+universal をインストール。
(+universal本当に必要だったのかは不明)

MacPortsでうまくいかない事があったら、とりあえず

sudo port -v selfupdate

sudo port -v upgrade outdated

してみてから考えよう。

個人的には、OS10.5から使ってるMacports環境だったので、arch ppc というエントリが残っててglib2のインストールでハマった。

3.OpenNI, KInectドライバのインストール

Opien NI は以下のサイトから

http://www.openni.org/Downloads/OpenNIModules.aspx

-OpenNI Binariesを選択するとOSごとのバイナリが出てくるので、MacOS用を選択しダウンロードボタンを押す。その後、install.shを実行

-ドライバは

https://github.com/avin2/SensorKinect/tree/master

からダウンロードして、MacOS用フォ
ルダを取得、その後、install.shを実行

4.Java版サンプルの実行

Eclipseのワークスペースに次のようなディレクトリ構造を作成(例)
libにあるdylibはOpenNIのLIBフォルダからコピーする。org.OpenNI.jarもOpenNIのJarフォルダからコピーする。

Eclipse

上記ディレクトリ構造の場合、Eclipseからサンプルアプリケーションを実行する際には、Run CofiguraionでJVMパラメータとして -Djava.library.path=lib を渡せば良い。


以上です。やっぱりJavaだと起動に少し時間かかかりますね。

DevQuizのしりとりを可視化

2010年08月25日 00:54

Google Developer Days の Dev Quiz のしりとりを解くために可視化を試みた。実際にはツールを作るために性質を調べているうちに解けてしまったので使っていないのだけど・・・。

利用したツールは大好きなCytoscape Webです。


しりとり3:(←拡大縮小できます)

スクリーンショット(2010-08-25 1.02.05)

この、下のマリモの中に先に押し込まれた方が負け。


# 1と2も全然構造が違って味わい深い。


しりとり1:

スクリーンショット(2010-08-25 1.12.35)

しりとり2:
スクリーンショット(2010-08-25 1.12.59)

おわり。

Soramegraph:深く検索する機能

2010年08月01日 04:47

Soramegraph(説明)にグラフのを少しずつ深く検索する機能を追加しました。
「ウナギ」から始めた深さ3の空目グラフです。

スクリーンショット(2010-08-01 3.56.59)

利用法:キーワードを変えずに検索ボタンを押すと、深さを1増加させて検索・描画します。
スクリーンショット(2010-08-01 4.39.19)


エッジをまとめて表示するようにしないと見辛いかも・・・。