ブログトップ 記事一覧 ログイン 無料ブログ開設

かおるんダイアリー RSSフィード Twitter

2011年06月27日

Kinect for Windows SDK beta で遊んでみた 〜 MS Kinect SDK のドライバで OpenNIを動かす 〜 #shibuya_ni

MSの公式Kinect SDKを導入するにあたって、一つ注意したい点が「OpenNIと共存できないこと」です。

理由は公式SDKとOpenNIのドライバが競合するためで、これを解消する動きが本家のMLで議論されていました。

この問題が今朝ほど解決されたようなので、さっそく試してみました


なぜか、日本語のReadmeがあるので、Authorを調べてみたら、「なりきりウルトラマンセブン」や「なりきりかめはめ波」を公開している@さんのモジュールなんですね。すばらしいモジュールにただただ感謝です。。。

README_ja

1. これは何?

先日Microsoftから公式Kinect SDKのBeta版がリリースされました。
これはKinectハッカーにはうれしいニュースですが、残念ながら、
公式SDKをインストールすると、ドライバの衝突のため、OpenNI上で
作られた従来のKinectハックが動かなくなってしまいます。

この残念な状況を打開するため、公式SDKのドライバをOpenNI上から
使えるようにする実験モジュールがこのkinect-mssdk-openni-bridgeです。

このモジュールをインストールすると、Depthノード、Imageノード、
Userノードが公式SDK上で(なんとなく)動作するようになります。

2. インストールとアンインストール

2.1 ダウンロード

既にバイナリパッケージまたはソースコードリポジトリのコピーを
入手しているならば、本節を飛ばしてインストールに進んでください。

そうでなければ、バイナリパッケージを次のURLからダウンロードし、
どこかに展開してください。
https://www.assembla.com/code/kinect-mssdk-openni-bridge/git/nodes/release/

もしソースコードに興味があるならば、次のURLにあるソースコード
リポジトリにgitでアクセスすることができます。
https://www.assembla.com/code/kinect-mssdk-openni-bridge/git/nodes

2.2 インストール

OpenNIをインストールした上で、install.batを実行してください。
Windowsのユーザーアカウント制御(UAC)が有効になっている場合、
バッチファイルを右クリックして「管理者として実行」してください。

デバッグ版をインストールするには代わりにinstall-debug.batを
実行してください。

正しくインストールされたかどうかはOpenNIのユーティリティniRegを
-lオプションをつけて呼び出すことで確認できます。本モジュールの
名前が表示されていれば成功です。

なお、この手順をわかりやすく説明した記事をkaorun55さんに
書いていただきました。合わせて参照してください。
http://d.hatena.ne.jp/kaorun55/20110627/1309193339

2.3. アンインストール

uninstall.batを実行してください。UACが有効になっている場合、
上と同様に「管理者として実行」してください。

3. 使い方

DepthノードとImageノードは何もしなくても自動的に動作します。
Userノードは設定XMLファイルに次のように<Query>を記述してください。

<OpenNI>
    ...
    <ProductionNodes>
        ...
        <Node type="User" name="User1">
            <Query>
                <Name>MSRKinectUserSkeletonGenerator</Name>
            </Query>
        </Node>
        ...
    </ProductionNodes>
</OpenNI>

4. ライセンス

LICENSE.TXTを見てください。

Enjoy!
Tomoto

さっそく試してみる

必要なもの

インストール
  1. Visual C++ Expressをインストール
  2. MS 公式 SDKをインストール
    • f:id:kaorun55:20110628013115p:image
  3. MS 公式 SDKのサンプル「SkeletalViewer」を実行する
    • f:id:kaorun55:20110628013118p:image
  4. OpenNIをインストール
    • f:id:kaorun55:20110628013116p:image
  5. kinect-mssdk-openni-bridge-0.0.zipを解凍したフォルダにあるinstall.batを管理者権限で実行する
    • f:id:kaorun55:20110628013114p:image
    • f:id:kaorun55:20110628013112p:image
  6. OpenNIのサンプル「NiViewer」を実行する
    • f:id:kaorun55:20110628013117p:image

まとめ

というわけで、あっさり公式SDK環境でOpenNIが動いてしまいました。

次回は公式SDKとOpenNIをまぜたプログラムを作ってみようと思います

tomoto335tomoto335 2011/06/28 03:04 わかりやすい記事にしていただいてありがとうございます!
私のドキュメントの方から参照させていただきたいと思います。

ちなみにアーカイブを次のURLに置きました。これでgitなしでも取れます: https://www.assembla.com/code/kinect-mssdk-openni-bridge/git/nodes/release/kinect-mssdk-openni-bridge-0.0.zip

tomoto335tomoto335 2011/06/28 03:05 わかりやすい記事にしていただいてありがとうございます!
私のドキュメントの方から参照させていただきたいと思います。

ちなみにアーカイブを次のURLに置きました。これでgitなしでも取れます: https://www.assembla.com/code/kinect-mssdk-openni-bridge/git/nodes/release/kinect-mssdk-openni-bridge-0.0.zip

yskysk 2011/06/28 05:42 わかりやすい説明ありがとうございます。毎度参考にしております。
.badを管理者実行すると、「プロンプトで'"\niReg"'は内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチファイルとして認識されていません」とでてきます。
どのようにしたらいいのでしょうか・・

kaorun55kaorun55 2011/06/28 10:18 > tomoto335さん
こちらこそ、素晴らしいモジュールをありがとうございます!

バイナリのアーカイブもありがとうございます。
こちらのインストール手順も変更しました。

kaorun55kaorun55 2011/06/28 10:20 >ysk さん
環境変数にOPEN_NI_BINが定義されていて、値にOpenNIのインストールパスが設定されていれば実行できます。
もし、OPEN_NI_BINが定義されていて認識されていない場合は、一度再起動してください。

確認ですがWindows 7 は64biではなく32bitですよね。

yskysk 2011/06/28 11:24 すみません、64bitです。。。 64だとダメなんでしたっけ><

kaorun55kaorun55 2011/06/28 13:17 >yskさん
ぼくはインストールはできましたが、確認はできてません。

64bitだと、OPEN_NI_BIN64だったり、niReg64だったり、batファイルに手を入れないとインストールできませんでした。

tomoto335tomoto335 2011/06/28 18:09 どうも、こんばんは。記事の修正などありがとうございます。m(_ _)m

ちなみに作った本人はWin7 64bitですよ。(笑)
でもOpenNIは32ビット版をインストールしています。
64ビット版OpenNIの場合、環境変数とniRegコマンドの名前が違うのですかね?
これだけ変えればよいのならインストーラに入れてみますがどうでしょう。

kaorun55kaorun55 2011/06/28 18:13 >tomoto335さん
いえいえー。

あれwそうなんですかw

僕は、OpenNIの64bit版いれました。
とりあえず「OPEN_NI_BIN」と「niReg」をそれぞれ「OPEN_NI_BIN64」と「niReg64」に変えたらインストールはできました。

そのあとサンプルを起動しましたが動作せず、で昨日は終わりました。

もし上記変更で動作するようならインストーラに入れていただければと思います。


#OpenNIの32bit版であれば動作するんですね。帰ったら試してみます!

tomoto335tomoto335 2011/06/28 18:26 「SensorKinectドライバが32ビット版しかないので32ビット版で統一せい」と
どこかのOpenNIの解説で読んだ記憶があってそのようにしています。
インストーラには「テストできないけど入れておく」ぐらいにしておこうかな。

kaorun55kaorun55 2011/06/28 20:40 あ、そうなんですね。
ドライバだけ32bitにしておけばいいのかと思ってました。
64bit のWindows 7でももう一度トライしてみます。

お願いしておいてなんですが、間違わないように入れない方がいいのかもしれませんね。すいません。

kaorun55kaorun55 2011/06/28 23:05 Windows 7 64bitでOpenNI 1.1.0.41 32bitで動作確認しました!
batファイル見たんですが、64bit版対応も入ってるんですね。
ありがとうございます!

yskysk 2011/06/29 10:59 なんとなくわかりました(笑 
OpenNI32bitをインストールすることにします。

yskysk 2011/06/29 10:59 なんとなくわかりました(笑 
OpenNI32bitをインストールすることにします。

brubru 2011/07/04 20:05 NiViewerを実行するとAttempting to open \\?\USB#VID_045E&PID_02AE#・・・と表示され、OpenNIが動作を停止してしまいます

kaorun55kaorun55 2011/07/04 22:14 >bruさん
環境やバージョンなど、もう少し詳しい状況を教えてもらえますか

brubru 2011/07/05 12:20 >kaorun55さん
Windows7 32bitでOpenNIはWin32-1.1.0.41-Dev、公式SDKは32bitです。2つとも一度消した後に、手順通りインストール仕直しました。その間、エラーは出てきませんでした

kaorun55kaorun55 2011/07/05 12:28 公式SDK単体では動作するのでしょうか?

また、OpenNIで使ってたドライバは消しましたか?
もし消してなければ(競合させたことがないので想像ですが)、公式SDKアンインストール、Kinect接続、デバイスマネージャからOpenNIのドライバ削除、公式SDK再インストールではどうでしょう?

基本的にはドライバの競合なので、ドライバまわりをきれいにするのがいいかと

brubru 2011/07/05 18:28 公式SDKのサンプルはどれも動作します

デバイスマネージャからドライバの削除、公式SDKやPrimeSense、OpenNIの消去も行い再度試しましたが、変わった所は見られませんでした

kaorun55kaorun55 2011/07/07 13:47 うーん、すいません。わかりません。
何かあれば、また書き込みます。

あと気になるところは、デバイスマネージャでドライバが正しく設定されている確認や、OpenNIのみで動作するかどうかといったところでしょうか
http://www.kosaka-lab.com/tips/2011/06/kinect-for-windows-sdk.php

brubru 2011/07/07 18:59 デバイスマネージャには「正常に動作しています」と表示され、OpenNIは単体で動作します
公式SDKとOpenNIが片方ずつ動けば、mssdk-openni-bridgeの動作に成功したということで良いでしょうか

kaorun55kaorun55 2011/07/08 17:30 「mssdk-openni-bridgeの動作に成功した」の定義は、「MS SDK+OpenNI+mssdk-openni-bridgeでMS SDKとOpenNIのサンプルがそれぞれ動作すること」ですね。
このときに、PrimeSenseのドライバは入れません。

それぞれが単独で動作する環境で「MS SDK+OpenNI+mssdk-openni-bridge」が動作しない場合は、すいませんが、僕の知識ではわかりません。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

【注】このサイトの記事を実践する場合はすべて自己責任で行ってください