The backstage of date with Hatsune Miku――まだデートは大変です

 先月に動画「初音ミクとデートしてみた」を公開してから、その反響に驚きつつも、
気力を使い果たしてしばらくぼーっとすごしていました(^^;; 中身の技術について聞かせてほしい、
という話もちらほらあったので、MOM12が終わり、DIVA fも発売される今、少し書き残しておこうかなと・・・。
前回日記からもう2年近く経っているのに愕然としますねorz

※写真や文章の捕捉などは逐次行っていきます。


技術的に見た場合、今回のシステムを実現するのに手を動かした主な点は以下の部分になります。

  1. 背景とCGを重ね合わせるためのリアルタイムな位置合わせ
  2. 実環境によるCGの遮蔽を実現するための奥行き情報の付加
  3. 障害物(手)の検出によるバーチャル物体への干渉

 MMDモデルのアニメーション表示については、以前の動画と同様ARTK_Alive!を使用させて頂きました。
オリジナル版では物理演算やテクスチャ非対応だったのですが、その後更新が行われたARTK_MMD
アップデートの取り込みや、自前で勢いに任せて色々と手を入れた結果、自分でもどこをどこまで
いじったのか分からないくらい魔改造になってしまいました・・・。

 なお、今回の動画に全く関係ないのですが、OpenNI準拠のスケルトン位置情報を取り込む
ことで、いわゆる「俺がミクだ!」的なモーショントラッキング機能も実装しています(参照)。
このARTK_Alive!の更新分だけでも公開したいと思っているのですが、なかなかデバッグ
ライブラリ化のパワーが足りてなくて実現できていません。ごめんなさいorz

 とりあえず、主に手を動かした部分についてちょっとずつ紹介していきます。


1.リアルタイム位置合わせ


青い点が使用点、黄色い点が外れ点です


動画内でも紹介している通り、位置あわせ技術自体はPTAMとかKinect Fusion(kinfu)等、
非常に高性能な実装が既に存在します。今回敢えて自前で作った理由としては、建前上

  • Xtionで奥行きを取得するので、これベースで動かしたい(=PTAM向けには画角が足りてない)
  • kinfuの様な奥行き情報だけでは屋外は厳しい(場合によっては床面のみしか計測できない)
  • ウォークスルー実現のため、バッテリー動作するノートPCで普通に動かしたい(GPUパワーに頼らない)

 というものです。何だかんだといいつつ、本音では車輪の再発明なのは承知の上で、出来合いの
ライブラリを使うだけでアルゴリズムを知った気になるのはどうなのか?というのが最大の理由でした。


 基本的な動作アルゴリズムはICP(Iterative Closest Point)に準じる手法で、ベースはICPの中でも
古典ともいえるのArunらの手法をまず実装しました。ICPにおける最大の課題として、対応点の誤り
による位置、姿勢の破綻が挙げられますが、これを防ぐために対応点はRGBの画像特徴点から抽出しています。
現バージョンでは固有値でコーナー検出し、LK法でトラッキングした特徴点に対応する奥行き点同士を対応
させています。量より質、というストラテジーですね。その反面、テクスチャレスなシーンへのロバスト性には
限界があります(とはいえ、kinfuも計測領域が少なすぎたり、背景が平坦な場合は破綻します)。この部分は、
高速化も含めて改善の余地がある部分ですね。真面目にやるならば、再初期化の機能も考慮してWasington大学のHenryらの手法
で行われているようなSIFTやSURFで行うことも考えられますが、なにぶん重いのが難点ですね・・・。


 その他、床面検出・補正や、ドリフト防止の簡易的な三次元位置マッピングなど、細かい工夫を加えた上で
組み込んでいます。ポイントとしては、自分とバーチャルキャラクターの相対的な位置関係の表現に位置あわせ
を使う場合は、多少のずれを気にするよりも、ウォークスルーさせて破綻さえしなければ大丈夫、と開き直った
ことです。精密さを要求する場合の位置合わせからすると論外ですが、用途次第ではこういった実装もありなのかな、
と言い訳してみます(^^;;


 なお、動画ではカクカクしているという指摘を多数頂いているのですが、これは動画キャプチャソフトの介在が
最大の問題で、実は現状の最適化していない実装でも30fpsの維持は実現できています(1フレーム25ms程度で処理)。
なお、高速化を頑張る体力的余裕がなかったため、動作環境はマウスコンピュータ製のNEXTGEAR i300(Core i7
3612QM 2.1〜3.1GHz)という軽自動車にV8エンジンを積んだようなモバイルノートPCを使用しています。
一応、Core2Duo世代のノートPCでも2.5GHz位あれば30fpsは出せるはず・・・です(自信無し)。


2.奥行き情報の付加
 これは簡単ですね。OpenNIによるRGB画像、Depth画像の重ね合わせ機能を用いて、Depth値をRGB画像上に重ね描き
した上でCGを描画しています。Xtionの性能に依存している部分ですが、エッジ部分が若干ずれたり、荒れていたり
するのが現状の課題です。


3.バーチャル物体への干渉
 これも、Xtionによる奥行き検出で、一定以内の距離範囲内にある障害物を検出し、この障害物位置を球体と
仮定してBullet Physicsに反映させています。球体の仮定はやや乱暴に過ぎると思いますが、思いのほか自然に
干渉できます。それよりも、Xtionの最小計測距離のほうが課題です。動画では思いっきり手を伸ばしていますが、
ああしないと手を検出できません。YUV変換による肌色抽出も試みたのですが、XtionのRGBカメラの性能の低さに
挫折しました・・・。25000円もしたのに、その辺のWebカメラにも画質で劣るのは凹みますねorz


 以上のように、その道の人から見ればなあんだ、と思われる位に特別な事は何もしていません。この動画の
一番の貢献としては、一人でもこの位のARシステムが作れる位、世の中の技術的素地が出来てきているという事に
気づいてもらえた、という事ではないかと思います。又、MMDの関連ライブラリやモデル、モーションなどの揃い具合は、
正直言って日本が一番恵まれた環境にいるのではないかと感じました。リソースを使用させていただいた皆さん、
改めてありがとうございました!


 まだまだ、どんな環境でも動作するほどロバストではないし、やりたい事とやれる事のギャップは埋まって
いないと感じでいます。ですが、要素技術がいつの間にか進歩するか、あるいは自分で頑張るか、いずれにせよ
この辺は時間の問題だと思います。


 今後の展開についてはまだまだ未定ですが、皆さんに何か感じてもらえるものを作っていければと思っています。
あと最後に、事後報告になって申し訳ありませんが、Make: Ogaki Meeting 2012にて本システムの展示をさせてもらいました。
見に来て頂いた方々、どうもありがとうございました!

来場ありがとうございました

終わって一週間も経って今更感満載ですが、来ていただいた皆様、本当にありがとうございました!
リアルで作ったものを展示できる場を提供して頂いて、Make:の方々にも感謝仕切りです。ニコニコ動画Youtubeのように、動画という形で公開できるのもそうですが、個々人がこうして色んな形で情報発信できるいい時代になったものですね。


展示では、位置合わせをもっと完璧にやっておくべきだったと反省しましたorz Wiiリモコンのヘッドトラッキング、Qinect、それぞれ単体では想定どおりに動いていただけに、調整が甘かったのが悔やまれます・・・。ちなみに、Qinectは可視光を使っている関係で、明るい場での使用には限界があるのですが、今回は下から照射する(つまり、手の裏は必ず影で暗くなる)ことで計測できるよう工夫していました。種を明かせば単純な話ですが、デモの構成を考えるときには、足りない頭で相当悩みぬいてようやく決まりました(^^;;; お蔭様で好評のデモとなったようで、考えた甲斐もあったかなと。これにてQinectも無事に成仏させられそうです。3次元形状計測そのものの用途では、まだ使える環境もありそうですが・・・。


#今後は例のごとくどうするか未定ですが、また面白い物を作れたらいいかなと。MTM06と同時にKinectも発売されたこと
#でもあるし、これからは深度センサーをどう作るか?ではなく、どう使うか?が問われていきそうですね。

「Qinect」を作ってみて気がついたこと

告知とは違うので、ちょっと別トピックにしてみました。純粋に技術的な話なので、興味のない方は読み飛ばし推奨です(^^;; 動画の中で紹介している「Milo and Kate」ですが、Qinectよろしくあのデモを実現するには、シンプルかつ大きな問題として

  • 人が近いと認識できないんじゃないか?


ということです。Qinectでは、センサーを上向きに設置して特定用途専用にしてしまいましたが、Kinectは横向き設置のため、どうしてもある一定以上(最低1m〜?)の距離を置く必要があります。これはKinectの視野角の限界によるもので、確かPrimeSense社のリファレンス仕様から読んだ限りでは57°だったと記憶しています。


二つカメラを使うようなステレオ計測の場合、基本的には広視野角のカメラを使えば、歪みによる精度劣化はあるものの、ある程度広い視野を見ることもできます。が、Kinectの赤外線投影方式の場合、対象上に投影されたパターンを撮影する必要があるため、角度が付けば付くほど暗い光しか返ってこないことになります(撮影対象は理想的なRambert反射では「ない」ため)。つまり、現状のKinectのような方式そのままの場合、撮影範囲をより広く取るのは容易ではありません。ただし、もし自分が理解しているKinectの深度センサーの原理が正しければ、Kinectを多重使用して解決することはできそうです(同じ箇所に二つ以上赤外線を当てても計測できる・・・はず)。

Kinectは、コスト―パフォーマンスから見て最良の妥協点を探って作られたもの(実際に三次元計測の確実性は半端無く高い)とは思いますが、以前の日記で指摘したように、日本の平均的住居では狭すぎる、という問題が出てきそうですね。どういう構成なら制限を改良できるか?というのを考えるのも面白そうです。

「Qinect(Project Qatal改)」出展してみます

もう開催まで一週間もありませんが、再びオライリー社が主催するものづくりイベント「Make: Tokyo Meeting 06」への出展を「あるしおうね」名義で行います。今回も同じセンサー「Qinect」を使用しますが、見せ方は全くの別物になっています。


D


例のごとくコピペ+αですが詳細は以下のとおりです。


日時: 2010年11月20日(土)12:00-18:00、21日(日)10:00-17:00
会場: 東京工業大学 大岡山キャンパス(東京都目黒区大岡山2-12-1)
※Qinectはメイン会場の体育館(ニコニコ技術部関連)での展示になります。
交通:東急大井町線目黒線大岡山駅」徒歩1分
参加費: 無料
主催: 株式会社オライリー・ジャパン
共催: 東京工業大学多摩美術大学 情報デザイン学科


前回と打って変わって明るい場所での展示になるため、ちょっと不安がありますが、原理的にちょっとした対策を施しているので、多分大丈夫だと思います(適当)
Qinect本体そのものは、ちょっとした精度向上程度の改良に留まっていますが、今回初音ミクとジャンケンができるように、テンプレートマッチングを実装しました。ただ、手の回転にかなり弱いので、あまり精度はよくないですorz


#Kinectは展示当日に発売されますが、こういう物も将来発売されるかも、という期待を持ちつつ
#展示を見てもらえると幸いです(^^
#もちろん、今回もコアな技術話のほうも歓迎です!ジャンケン認識は適当すぎて申し訳ないレベルですが・・・

MTM06準備中

Make:Tokyo Meeting06(MTM06)に向けて、せかせかと「Qinect」ことProject Qatal改のデモシステムを作り続けている今日この頃です。ほぼ今回のデモは完成させることができました。あとは調整を残すのみというところです。まだ全体完成版の動画はできていないのですが、部分部分については、ちょこまかと簡単に動画をアップしてみました。


この辺を使いながら、某バーチャルなキャラクターを、画面からほんの少しだけ出てきてもらうデモを公開する予定です。詳細は次回を括目して待て?(疑問系)

#Kinectがユーザーサイドドライバで自由に使えるようになれば、性能的に不十分なQinectもいよいよお役御免ですね。
#三度目の今回が、このシステムの最後の晴れ舞台になりそうです。せめて目一杯の性能が出せるよう頑張ります。

ニュース:Kinect早くもハック成功

先日11/4に、北米で先行発売されたKinectですが、もう解析されているのですね・・・。びっくりしました。
既に、深度センサーの計測値まで取得できているようで。人体の関節モデルの情報も含めたユーザーサイドのドライバがリリースされるのも、時間の問題のようです。

自分もいじってみたかったのですが、あまりに2週間+αという時間は長すぎますね。日本にまだ入っていないことが悔やまれますorz

再び時は経ち

社会人になってからというもの、ふと気がつくと平気で数ヶ月経ってますねorz
引越しもあったりでばたばたしていて、日記の存在すら忘れていました(駄目人間)。


Project Natal改め、Kinectも11/20に発売決定したようで。
日々忙しいのは相変わらずですが、せっかくなので、発売までにまた何かしてみようかなと決意表明してみます(^^;;