2011年01月16日

車輪の再発見...

なんか本家マイクロソフトがAvatar Kinectでフェイシャルキャプチャーを
やるみたいだ。マーカーレスでジオメトリまで作るものらしい。
早晩、OpenNIのサポートも始まりそうな気がする。

http://www.youtube.com/watch?v=t0ot_3q-pSA&feature=player_embedded

もしかして無駄骨?(>_<)








7頂点限定でマーカーの位置同定は出来るようになった。
まだ隠れて取れなかった時の補完はうまく動いてないけど。

controller_new.jpg

検出したマーカーの位置でドロネー三角形を作りポリゴン化
している。エッジ数から真ん中は確定できるが、右上とか
左上はいまいち。いんちきくさい方法しか見つからない。
なんとかならないものか...(゚ε゚)
posted by noboyama at 23:56| Comment(0) | TrackBack(0) | kinect

2011年01月10日

顔の部位を検出する

OpenCVには顔認識用の関数とデータが用意されている。顔だけ
ではなく、目や鼻、口といった部位のデータもある。これを
使えば顔の部位を検出し、トラッキングすることが可能だ。

...理論的には。

ところがこれが結構うまく行かない。まず速度が極端に遅い。
鼻など比較的認識しやすものもあるが目や口は形状が似ている
為にうまく行かない。また、洋服のしわ等や髪の毛の影を
誤認識し易い。

ためしに最も精度が良かった鼻にControllerをつけてみた。






うーん、精度が微妙....。しかも検出に1フレ/1秒ぐらいかかる。

すざまじく重い、取れない、精度が悪いの三重苦なので
cvHaarDetectObjectsを使った画像認識を諦めてマーカーを
セットする方向に切り替えた(゚ε゚)

1)100円ショップで蛍光ラベルを買ってくる(肌色と混合しないように
緑色系が良いみたい)
ztomodo.jpg
2)顔に張る(注1)
3)YUVに変換し色で分離する。
4)グレイスケールにしてcvFindContoursを使って輪郭抽出を行う。
marker1.jpg

この方法で検出した結果はこんな感じ。







これならリアルタイムでも処理できる負荷だ。順番の制御とかして
無いのですごい勢いで入れ替わってるけど(笑)、まあ、精度もなんと
かなりそうだ。

かなり良いところまで来たんだけど冬休み&1月3連休も終わって
しまった。これから週一ぐらいしか出来ないなぁ orz

注1)冷静になるとすげえバカみたい!
posted by noboyama at 23:26| Comment(0) | TrackBack(0) | kinect

2011年01月04日

バーチャルツーリングに行ってきた

MDDと一緒にRGB画像を保存してテクスチャとして張ってみた。
バーチャルツーリングが出来たよ。外は寒いからこれで良いか。(^_^)







OpenNI上でキャリブレーションが行われているので、アニメーション
してもほとんどズレが無い。

ztomodo.jpg
KinectのZ方向の精度は微妙だ。悪くは無いが良くもない。CGツールに
持ち込むと精度の問題からガタガタになってしまう。計測してみたところ
1.5〜2.0mm程度のようだ。

ztomodo2.jpg
テクスチャとジオメトリが同時に撮れるのでリトポの方法が確立すれば
モブデータ作成とかに役立つかもしれない。
posted by noboyama at 15:07| Comment(0) | TrackBack(0) | kinect

2011年01月03日

なんちゃって3Dスキャナ

なし崩し的に作ったMDDを利用したらなんちゃって3Dスキャナが出来た(^_^)
色データを利用して影の部分を補完してやれば精度はかなり向上出来そうな予感。







レンダリングしたら本人認定が出来そうな雰囲気になってきたので
ヘルメットを被って変装してみた。

●OpenNIのメモ
1)depthとimage画像のキャリブレーション
 depth.GetAlternativeViewPointCap().SetViewPoint(image);
 // これだけでキャリブレーションが終了する。(゚ε゚)

2)OpenNIでポイントクラウド
 この辺のページを参考。
 TK's HP
 OpenNIフォーラム[Depth in Meters]
 座標が取得できない場合、カメラ位置(0,0,0)になるので
 ジオメトリ化する場合は何らかの対策が必要。

3)modoで頂点インデックスを格子状に並べる方法
 modoで四角を作るとエッジ部から頂点インデックスが始まる。
 その後内部は格子状に番号が付く(図参照)。今回みたいな
 場合は2個大目にポリゴンを作成し、ループエッジ選択をして
 外側の頂点を削除すると良い。
modo_pontindex.jpg
posted by noboyama at 13:18| Comment(1) | TrackBack(0) | kinect

2011年01月01日

あけおめ、ことよろ

勢いでKinectのZデータをMDDへ変換するツールを作ってみた。
MDDは頂点位置アニメーションを記録するMotionDesignerの
ファイルフォーマットだ。頂点の動きのみを記述するシンプルな
フォーマットなので、本来の目的だけでなくCGツール間で
アニメーションを受け渡す場合に活用されている。

Kinectから出力されたZデータをMDD化し、ベースモデルに
適応すると以下の様なことが出来る。








当初は独自フォーマット&Modo(Pyhton)を使う予定だったんだけど
重すぎて断念。急遽MDDフォーマットを吐き出すように変更した。
なんかアニメーションデータも取れるようになったので良しとする。

テストではKinectまで60〜70センチ。服のしわや口の中まで取れる。
うん、予想以上に良いね。ただCGツールへ生データを持ち込もうと
するとデータ量が多すぎる。変換用の独自ツールを用意しないとダメだね。

続きを読む
posted by noboyama at 00:29| Comment(0) | TrackBack(0) | kinect

最近の記事