OpenNI 2.0 のサンプルをMacで動かす

タイトルは釣りですw
というのも、悪戦苦闘した結果、今のOpenNI 2.0 (unstable)は、WindowsKinectセンサーに対応してなかった。。
なので、WindowsKinectセンサーを使ってる私はの環境では実際には動いていないです。
OpenNIのフォーラム

Hi all,

I have some good news! :-)

An unstable version of OpenNI2.0 for Mac OSX and Linux-ARM is now available:
http://www.openni.org/openni-sdk/

PS: As I explained before, concerning the Kinect devices we support Kinect SDK so Kinect devices will still work only on Windows.

Xtionは大丈夫みたいなので、持っている人はそっちを使えば動かせるはずです。

なので、以下はただのメモ。

OpenNI 2.0
Nite 2.0
は、こちらのサイトからダウンロードします。
(このメモではNiteは使わないです)

インストール

インストールといっても、バイナリそのままなので、ダウンロードしたものをどこかのディレクトリに展開します。
OpenNI-2.0.0 > Samples にある 「SimpleViewer」を今回は使います。

Xcodeでプロジェクトを作成


Command Line Tool として作成します。


自分は「Use Automatic Reference Counting」のチェックを外しておきました。

SimpleViewerのフォルダに有る以下のファイルをコピーしてきます。

  • main.cpp (自動生成されたものは上書き)
  • Viewer.cpp
  • Viewer.h

Build Phase の Compile Sources のところにに、Viewer.cpp が無ければ「+」をクリックして追加します。

このままビルドすると、「OniSampleUtilities.h」がないと怒られるので、OpenNI-2.0.0 > Samples > Common の中からコピーしてきます。

更にビルドすると大量にエラーが表示されるので、Build Phase の 「Link Binary With Library」の所で

を追加します。

Build Settings の設定

自分の場合は、プロジェクト内にライブラリとヘッダーを含めてます。
本当は、/usr/lib とかに置いたほうがいいのだろうけど、まだunstableなので、、
なので、プロジェクトのツリーはこんな感じ

Other Linker Flags

「libOpenNI2.dylib」のパスを指定するので、以下のパスを追加。

$(SRCROOT)/SimpleViewer2_0/lib/libOpenNI2.dylib

Header Search Paths

OpenNIのヘッダーファイルへのパスを追加します

$(SRCROOT)/SimpleViewer2_0/include/**

これでビルドをすると、エラーとかでないはず。
このまま実行すると、以下の様なエラーが表示される。

After initialization:
Found no files matching './OpenNI2/Drivers/lib**.dylib'

取り急ぎ、プロジェクトのディレクトリ/build/Debug/ の中に、「OpenNI2」とディレクトリを作成して、その中に、OpenNI-2.0.0/Redist の中身を全部置きます。

これで、ビルドエラーが出なくなりました!

早速実行してみると。。
(以下ハマりメモ)

SimpleViewer: Device open failed:
DeviceOpen using default: no devices found

とエラーが表示される。。
ちゃんとKinectセンサーはつながってるし、システム情報で見ても、しっかりと認識されてる。
なんでだろう、、

そこでたどり着いたのが、最初に書いたOpenNIのフォーラムで、最初の「PS」を無視して読み進めてたら、「ports で libusb を最新にしたか?」と書き込みがあったので、

port installed libusb

と打ち込んだら、1.0.8 だったので、アップデートして、

port installed libusb
The following ports are currently installed:
  libusb @1.0.9_0+universal (active)

1.0.9にしたんだけど、やっぱり同じくデバイスが見つからないと怒られる。。

もう少し読み進めると。。

Unfortunately kinect won't work. They only support it in Windows at the moment using Kinect SDK. I tested it with an Asus Xtion.

とかかれてて、同じくOMG!!

な訳で、最初にPSって書かれてたっけと思いだし、敗北感いっぱいで3連休初日の午前中を終えました。

フォーラムを色々読んでると、なんとあのKinectかめはめ波を作った人が、OpenNI中の人(?)になってる!
そして、投稿によれば、ライセンスの問題でサポートはされない可能性が高いと。
http://community.openni.org/openni/topics/about_kinect_support_on_mac_linux

更には、誰か個人で対応したものを作ったとのことなので、これを使えば動くかも。
OpenNI2-FreenectDriver

また、チャレンジしてみるか。。
ってか、ASUS Xtion が欲しい。