OpenNIセットアップ for MMDのKinect連携

昨日OpenKinectやらなんやらをいじっていましたが…

  • MMDKinect連携にOpenNIを使っている

ということで、同じ環境で開発するための選択肢はOpenNI、となりました。Kinect用のドライバを複数入れるわけにはいかんので。
(もしOpenNIが気に食わなかったら、MMD以外の開発には32bit機のほうを使おう…)


朝方、色々遊んでみたので、その記録を残しておきます。

環境セットアップ (MMD連携が動くようになるまで)

ここは、検索してたどり着いたとても詳しいページを紹介して終わりとします。→まとめ?ブログ Kinect 1 -OpenNI導入-
他のKinectドライバが入っている場合は最初にアンインストールが必要です。そして、余計なことを考えずにきっちり手順どおりやりましょう。
うちの場合は、4番目の「PrimeSensor 5.0.0 for Windows(Kinect Mod)をインストール」でちょっと間違えました。書いてあるとおり「githubから取ってきた圧縮ファイルの中のSensorKinect-Win32-5.0.0.exe」を使います。NITEをダウンロードするページに、Sensor-Win32-5.0.0.24.exeという紛らわしい名前の、PrimeSensor PSDK 5.0 Driver build 24 for windowsというものがありますがそれは不正解です。ファイル名だけうろ覚えで進めてはダメです。


で、先のページの手順どおりNiUserTracker.exeを起動して、うまくいけば成功。
このNiUserTracker.exeの認識ポーズは、MMDで連携開始時にも使用する手順なので、サンプルアプリ起動成功で完了とせずに、どんなものか感覚をつかむことをお勧めします。

失敗パターン
  • サンプルアプリを起動すると、One or more of the following nodes could not be enumerated と出る

OpenNIだけインストール成功した状態では、こうなりました。全然手順が足りていませんw

  • サンプルアプリを起動すると、UpdateData Failedと延々出る

Kinect用のドライバが無いとこうなりました。「PrimeSensor 5.0.0 for Windows(Kinect Mod)をインストール」が失敗しています。

MMD側セットアップ

VPVPのページにひそかに追加されているDxOpenNIをダウンロードし、同梱readmeの通りに2つのファイルをDataフォルダ内におきます。MikuMikuDnace.exeと同じ場所ではなく、Dataフォルダです。

起動からモデルが動くまで

  1. MMDを起動
  2. モデルを読み込み
  3. ヘルプ→Kinectを選択


操作はこれで完了し、Kinectが動き出しますが、人間の形が認識されるまではモデルは何も動きません。

  1. 赤い人影(自分)がMMD右上に表示されるまで待つ(立ち位置が悪く、人間候補として何も認識されないと赤い影が出ない)
  2. ポーズをとる
  3. モデルが動き出したら成功


さっきのサンプルアプリにあった、両手を顔の横に上げるポーズをとります。赤い影がなかなか出てこない場合は、立ち位置が悪くてKinectから見えていないのでしょう。Kinectはかなりできるヤツで、かなりの精度で認識します。ダメな場合は、障害物で遮っているか、近すぎるのだと思います。



赤い影と緑の影の図。(両手上げたポーズのスクリーンショットはとるのが面倒だった)
緑色の影は背景です。人間の影が緑で認識されてしまった場合(Kinect起動時にKinectの視角から外れてしまった場合など)、何か違うものをキャプチャ候補として選択してしまっています。一度ヘルプ→Kinectでオフにして、もう一度やり直したほうが早いでしょう。
認識後、ヘルプ→キャプチャを選択すると、カウントダウンの後にリアルタイムでレコーディングが始まります。30フレーム全記録です。機能(X倍速記録、一部のボーンだけ記録等)が充実するまでは、実用化するのはちょっと大変そうですが、今の段階ではとりあえず楽しいのでよしとしましょう(´ー`)


認識用ポーズをとる際の注意点:
頭や手の先がフレーム上端に達していると、認識精度がよくないようです。
足が二本に見えるようにしたほうがいいようです。って最初は思ってたけど、足のほうは認識時によくわからなくても、大丈夫なようです。

その他

複数モデルがある場合、操作対象に選択されているモデルが動きます。
かなり色々なモデルが動きます。手足があって素直に名前がついているモデルは、かなり直感的に動きます。
異形のモデルも適当に動きます。馬モデルは苦しそうな体勢でピクピクしてるし、たこルカは触手がうねうねします。これはこれでww


Kinectのために頑張って2.5mほど直線距離を確保しましたが、これでも172cmの自分の全身がぎりぎりです。手挙げたらはみ出てしまう。全身キャプチャするには、3m近く必要かもしれません。
直線だけ確保すればいいというわけでもなく、遮蔽物も問題になります。机や箪笥、座布団など色々なものを認識した結果、爪先が隠れるとボーンがどこか飛んでいってしまいます。どうしても全身キャプチャするには、配置換えの覚悟がいるかも。でも、上半身だけだったら、六畳間でも問題ないんじゃないかと思います。認識ポーズのときだけ、ガニ股で小さくなって頑張れば。