OpenNI 2.0 のサンプルをMacで動かす
タイトルは釣りですw
というのも、悪戦苦闘した結果、今のOpenNI 2.0 (unstable)は、WindowsのKinectセンサーに対応してなかった。。
なので、WindowsのKinectセンサーを使ってる私はの環境では実際には動いていないです。
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でプロジェクトを作成
自分は「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 が欲しい。