OpenNIのライセンスが気になったので聞いてみた

LINEで送る
Pocket

KinectやXtionを使ってアプリ開発するときには、Kinect for WindowsのSDKであれば
Kinect for Windowsのデバイスを買い、Windowsアプリを作るのであればライセンスの心配をする事はありません。
一方のOpenNIはLGPLやらGPLやらと書いていて、GPLの解釈については動的リンクでもソースコードの公開義務があるとする解釈もあり商用案件で使うにはやはり躊躇してしまいます。

とはいえOpenNIになじんでいたのでOpenNIの開発元の一つである、primesenseにメールで直接問い合わせました。

返答がこれ。

The LGPL constraint that you are mentioning only applies if you are modifying OpenNI using it source code. If you are using OpenNI as-is, then you do not need to uncover anything about your own code! OpenNI is FREE for commercial use, but softwares using OpenNI do not need to inherit the LGPL license. For examples, NiTE is not LGPL nor open source, it’s a Primesense proprietary software.

要するに、「OpenNIをそのまま使うのであればソースコードを公開する必要は無いよ、実際NiTEはオープンじゃないし」
って事で公認がもらえたと思ってるので商用案件でもOpenNIを導入して良さそうですね!

その後も少しやりとりしていると、Apache ライセンスに変えるか検討しているようでした。

OpenNIのUnityWrapper

LINEで送る
Pocket

このエントリはOpenNI Advent Calendar 2011 : ATNDの12月24日分です!!


さてクリスマスイブですが、
少し前からOpenNIにはUnityWrapper版が存在していますのでそれについて紹介します。

unity_screenshot

最近話題になっている、ゲームの開発環境のUnity3Dというものがあり、OpenNIのサイトからUnity3Dで使うためのUnityWrapperをダウンロードできます。

追記:
2013/06/12時点では(もう少し前からだったと思います)OpenNI公式のUnityWrapperは配布していません。
有料ではありますがこちらのZigfuを使えば同じ事+それ以上の事が出来ます。

opennidownload


Unity3Dについて:

Unity3D ( http://unity3d.com/unity/ ) とはゲーム開発ツールであり、WindowsとMacのどちらでも開発する事が可能です。
IDEがあるのでステージの画面を見ながら次々とオブジェクトを配置するだけでゲームの世界を簡単に作る事ができます。
プログラムはJavascriptとC#(mono)で書く事ができるのでweb開発者や.NETの開発者にも取っ付きやすいのではないでしょうか。
MacでもC#で記述する事ができます。

また、一人でグラフィックやサウンドやモデリング、プログラムを行うのは大変ですが、Unity3DではAsset Storeというものが用意されており、これを利用する事で必要な素材を入手する事ができるので気軽にゲーム開発を進める事ができます。

Unity3Dの無料版、有料版、ライセンスについて

無料版と有料版があり、無料版では制限はいくつかありますが、WindowsとMacで実行できますし、有料版にアップグレードする事でAndroidやiOSに対応させる事も可能です。
詳しいライセンスなどはUnity3Dのサイト( http://unity3d.com/unity/licenses )か、「強火で進め」さまのサイトが詳しいです。( http://d.hatena.ne.jp/nakamura001/20110710/1310292561


Unityのダウンロードからインストール

それでは、Unityをダウンロードしましょう。

http://unity3d.com/unity/download/より、Unityをダウンロードし、流れに沿ってインストールしてください。
インストール後、先ほどOpenNIのサイトからダウンロードしたファイル(Unity OpenNI toolkit 0.9.7.1.unitypackage )をダブルクリックしImport Packageより一式をunityにインポートします。
importが完了すると、Projectタブにこのようなファイル群が表示されます。
unity_project

OpenNI/Sample Scenes以下にすぐに試せるようなサンプルシーンが入っていますのでダブルクリックしてシーンを開き、三角の再生ボタンを押して次々と試してみるとUnity3D+OpenNIの可能性を試せると思います。
Unity_IDE

私はライブなどで使ったりしていますが、骨格をちゃんと映していれば問題なく現場でも使えます。今のUnityWrapperだと全身映す前提のコードになっているので、上半身だけ認識などに変更する事でより柔軟なアプリケーションが開発できます。

ではそれぞれのサンプルのキャプチャやサンプル動画をのせておきます。


サンプルのシーンについて

MultipleSkeletons:
僕は一人なので試せませんでしたが、複数人のスケルトンを認識できるサンプルだと思います。
MutipleSkeletons
NIGUIControl:
NIGUIControl
NIInputControl:
すごく地味なのですが、手を動かすと黒い四角が追従します。XBoxでもあるような、手で操作するゲームはこれを使うと作れそうですね。

SimpleGame:
上からふってくるボールにタッチするゲームです。実際に動いたりジャンプするとそれにあわせて画面も動きます。一番運動している感じになりそうですね。

SingleSkeleton:
スケルトンの情報をもとに画面のキャラクターが動きます。

せっかくなのでスケルトンをサンタにかえてみましたよ。サンタ気分で小さく踊ってみました。
あ、サンタのデータはAsset Storeで購入可能ですよ!

※この記事は、下記の環境で確認しました。

OpenNI 1.5.2.7
NITE 1.5.2.7
Unity3D 3.4.2f3

[修正]スケルトン認識ポーズいらずのOpenNI1.4.0.2がリリースされました!

LINEで送る
Pocket

OpenNIの新しいバージョンがunstableながら出たようです。(バージョンは1.4.0.2)
http://75.98.78.94/
※ググった結果の一番上なんですけどなんでIPアドレスなんだろう。。。

今回からなんとOpenNIでスケルトン認識する時の例のポーズがいらなくなった、という大きすぎるアップグレードがあります。
「かおるんダイアリー」様が早速デモ動画をアップされています。
http://d.hatena.ne.jp/kaorun55/20111121

MSのSDKでは画面から外れた時の暴れっぷりや全身が映っていないときの反応がちょっと荒かった印象がありましたが、OpenNIの方は比較的ましな感じがしています。

今はSensorKinectの人にも問い合わせしているので進展があれば追記します。

早速試したかったのですが、僕の環境では実行しようとしても
Segmentation fault: 11
が出てしまい実行できませんでした。

あまりにもわからなかったのでOpenNIのGoogleGroupで質問してみたところ、
Kinectの時に使っているドライバ、SensorKinectが新しいバージョンに対応していないからだそうです。

これはOpenNI使う時はKinectじゃなくてXtion使えよ、っていうことなんでしょうかね。。。

追記:
動作することを確認しました。
すみません。僕が使っていたSensorKinectが古かったようです。

ここにあるバージョン(5.0.5.1で確認しました)を使うと無事動作しました。
OpenNI, SensorKinect、NITE、入れていればOpenNIのサイトにあるSensorをアンインストールし、KinectをUSBから抜いて再度インストールすると問題なく動作するようになりました。
(NITEは先ほどリリースされた1.5.0.2をインストールしました。)
https://github.com/avin2/SensorKinect

さあ、これで試せるよ!

備考:
動作確認バージョン:
OpenNI: 1.4.0.2
NITE: 1.5.0.2
SensorKinect 5.0.5.1
Mac OS X 10.7 Lion
デバイス: Kinect

撮影するための環境が無くて僕とKinectの距離が近かったのでスケルトンが暴れていますが、実際はもう少しましだと思います。

これになったことでスケルトンを使ったアプリを作りやすくなりましたが、暴れることが以前より多くなった(当然)ので、こういったノイズデータをハンドリングする必要がありそうですね。

[OpenNI] UserTrackerのサンプルが動かないときの確認事項

LINEで送る
Pocket

新しく(2011/10月発売?)MacBook Proを買ったものの時間が無くてOpenNIのインストールをしばらくできてなかったのですが、必要に駆られてOpenNIのインストールをしてみたところはまったところがあったので残しておきます。

おこった問題:
Sample-NiUserTracker の実行ができなかった。(ただし、Sample-NiSimpleViewerは実行できた)

エラーメッセージ:
Could not find data file /usr/etc/primesense/Features_1_4_2/s.dat
current working directory = /Users/xxxxx/Documents/OpenNI/OpenNI-Bin-Dev-MacOSX-v1.3.4.6/Samples/Bin/x86-Release
→実際該当するパスにファイルが存在しなかった。

解決方法:
うまく動いていた状態の古いマシンには /usr/etc/primesense/ 以下に Features_1_3_1と Hands_1_3_1というフォルダがあったので、そのファイルを使い、フォルダ名を Features_1_4_2、Hands_1_4_2と変更した。

OpenNI、NITE、SensorKinectともにバラバラにインストールしてしまっていたのが原因だとは思うが、これで動作するようになりました。

KinectをOpenNI / Macで使ったときにはまった事1

LINEで送る
Pocket

KinectをOpenNIを使えばunstable版ではありますが、Macでも使う事ができます。
で、普段のWebやPC、Mobileのアプリとは異なりハードウェア的な観点で注意しないと行けない事があり、ちょっとハマってしまった事があったので書いておきます。

今までまったくもって普通に動いていたアプリが突然すごくカクカクと動いてしまっていたのですが、ソースコード上の無駄をどれだけそぎ落としても、Kinectのデータ更新を別スレッドで行うようにしてもカクつきがまったく改善されなく、原因がわからなくて途方に暮れていたところ、試しにUSBの差し口を変更した所今までどおり高速に動作するようになりました。
どうやら状態によって通信速度が変わる事が考えられます。

MacBook ProのUSBポートは内部的には同じもののはずだからどちらに差したからと言って通信速度が変わることはないと思っていたのですが、そんな事も無かったです。

Kinect自身はUSBでPCと繋いでデータを受信します。KinectはXtion Proなどのデバイスとは違い、USBだけでは正しく動作しないのでコンセントにさす必要もあるのですが、電気の供給が不足しているときにも動きがカクカクしてしまう事がありました。

USBを差し替える前後の違いが分かるように動画をアップしましたので気になる方はご覧下さい。

はまりどころを抜けて、こんな感じのサンプルを作りました。

MacでのOpenNIのアンインストール

LINEで送る
Pocket

Windows上でのOpenNIのアップデートでは結構苦戦した経験があり、自分のMacでは更新しないようにしていたのですが、OpenNIのアップデートで治るのなら、という不具合に出会ってしまったのでこの度更新する事にしました。

基本的なところですが、そのときのアンインストールのやり方を残しておきます。

※ちなみに、新たにインストールする場合は、こちらのサイトを参考にして下さい。非常に分かりやすくまとめられています。

http://www.cyber.t.u-tokyo.ac.jp/~take/kinect/openni-mac-kinect.html

1. OpenNIのアンインストール

OpenNIをアンインストールします。Terminalで作業を行います。

  1. OpenNIをインストールしたフォルダ(OpenNI-Bin-v….の様な名前です。)に移動します。
  2. “sudo ./install.sh -u” と入力すると、OpenNIがアンインストールされます。

2. SensorKinectのアンインストール

ドライバであるSensorKinectをアンインストールします。

  1. SensorKinectをアンインストールしたフォルダに移動します。
  2. “sudo ./install.sh -u”と入力すると、アンインストールできます。

これで無事にアンインストールが完了しましたので、上記リンク先のサイトの通りにインストールを行って下さい。

./Ni-SimpleViewerなどが実行できるようになれば、インストール完了です。

KinectとOpenNIとVJと – 1. Kinectとは何か

LINEで送る
Pocket

こんにちは。
ここしばらくKinectで何かをする事が多かったので、忘れないうちに記事を残しておこうと思います。

Kinectとは?

kinect
Kinectとは、MicrosoftがXbox360向けに発売したゲームデバイスです。
従来と違い、距離センサーなどを搭載した事で、全く何のコントローラーを持つ事無く人のジェスチャーでゲームを楽しむ事ができます。

どんな事ができるのかは、この動画をみると分かりやすいと思います。

これがもし、Xboxだけでしか使えないものであればここまで流行る事も無かったと思うのですが、あまりにも安価なセンサーデバイスだったため、世界中のハッカーが勝手にハックしてKinectの情報をプログラムで扱えるようになりました。

センサー部分を開発している、イスラエルのPrime Sensor社がOpenNIというライブラリを公開したことは、Kinectのパーツを実際に作っているところからの公開であり、準公式とも言えそうなライブラリの登場に非常に興奮したものです。
C++, C#で利用する事ができます。
http://www.openni.org/

また、Microsoft自身もSDKを公開するとの事ですが、僕はMac使いなため、OpenNIを使う事に変わりないと思います。
http://japanese.engadget.com/2011/02/21/kinect-sdk/

他にもOpenFrameworksで使われるためのofxkinectというアドオンもあります。
https://github.com/ofTheo/ofxKinect

MicrosoftのKinectに関するページ:
http://www.xbox.com/ja-JP/kinect

先ほども書いたように、Mac使いである僕はC++(OpenFrameworks)+OpenNIという方法でKinectをいじり始めるのでした。
続く。