スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

MMDAgentとKinect

【Kinectを使ってみる】
Kinect for Windows SDKがリリースされてから早数ヶ月、Kinect本体も手に入ったのでMMDAgentのKinectプラグインを作ってみました。
実際には2月中旬から手を付け始めて、最近になってようやくまともに動くようになったんですけどね。
動作については、久しぶりに上げた動画を見てください。





プラグインはKinect for Windows SDK v1.5で製作しています。
Kinectの特徴であるスケルトントラッキング(モーションキャプチャ)からの情報を元に、ジェスチャに反応させてみたり、手先の位置情報に追従させてみたりしました。

Kinectを使うメリットとしてはモーションキャプチャによるジェスチャに対応できることや、マイクアレイの音源方向特定による複数人に対応したイベント処理ができるようになるなどがあります。
もともとMMDAgentには「耳」となる音声認識が付いていますが、「目」となるKinectを導入することでさらに可能性が広がると思います。

ただし、ネックになるのは価格と開発環境かと思います。
Kinect1台2万円程度と考えると一般ユーザーにとっては敷居が高いかも知れません。コスト面を考えるなら、低価格のwebカメラに対応して画像処理でいろいろするほうがいいかもしれません。
最近webカメラの画像から表情トラッキングする研究とか発表されてましたし。

その辺を考えて作ってみたのがOpenCVプラグインだったりします。
あれから開発が進んでないんですけどね。

あとはKinectの開発環境の問題。
OSがWindows 7であることや、開発はVisual Studio 2010(Express Editionを含む)でしか行えないことなどが上げられます。
このためMMDAgent自体をVisual Studio 2010でビルドする必要があります。

問題点はあるにしろ、Kinectは夢が広がるデバイスですので余裕のある方は使ってみてはいかがでしょうか。
スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

コメントの投稿

非公開コメント

すごい!

Tadミクですね。
Kinect使うとかわいさ倍増じゃないですか~!!

Re: すごい!

> yasuda さん
コメントありがとうございます。
Tda式アペミクさん、いいですよねぇ~。

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

Re: No title

>
初めまして。
自分もまだまだ勉強中なので参考までに。

プラグインからモデルを操作する方法は、MMDAgent付属の「Plugin_LookAt」のソースが参考になると思います。
Plugin_LookAtはマウスの座標に対してモデルの目線が追従するようになります。
Plugin_LookAtでは「頭」「右目」「左目」のボーンをコントロールしています。
自分のKinectプラグインではこれを参考にKinectで得た左手の座標を与えて追従するようにしています。


ただ手を振り返す動作なら、モデルを直接操作するよりKinectのボーン情報からジェスチャーを認識してイベントを発生させるようプログラム(sendEventMessageで発行)して、ジェスチャーイベントに対して以下のようなシナリオを用意してMOTION_ADDで手を振らせるほうが簡単だと思います。

0 0 KINECT_EVENT_GESTURE|hand MOTION_ADD|mei|action|Motion\mei_bye\mei_bye.vmd|PART|ONCE

最初の動画は手を上げたことに対してイベントを発行するようにしてあり、イベント発生後の処理はシナリオで自由にできるようにしています。
ご参考までに。

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

Re: No title

>
MMDAgentのソースに同梱されているなかでは「Plugin_Variables」か「Plugin_WindowController」が参考になると思います。

sendEventMessage()はいろいろなところで使用されます。
プラグインは有効になったとき(多くはロードされたとき)sendEventMessage()でPLUGIN_EVENT_ENABLE|○○○○というイベントを発行します。
このあたりを参考にするといいかもしれません。

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

Re: No title

>
プラグインとしてKinectを起動することはできます。
自分はプラグイン上でKinect関連の処理をしています。

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

Re: No title

>
プラグイン上でKinect関連の処理を行う場合、処理を別スレッドで行う必要があります。
やっぱり参考にしやすいのPlugin_Variablesだと思います。

あとは余分なものを削除したプラグインの雛形がうちのwikiにおいてあるので参考にどうぞ。
スレッドのrun()の中にKinect関連の処理を記述すれば一通り動作できると思います。

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

Re: No title

>
正確にはMMDAgent起動時に自動でrun()が実行されるわけではありません。
細かなプログラムの流れは省きますが、自分が公開しているプラグインの雛形に関してはsetupAndStart()を実行することでスレッドの初期化後run()が実行されます。

基本的にsetupAndStart()を実行するとstopAndRelease()されるまでrun()がループするように作ってあります。

初期化などの処理をsetupAndStart()内に追加し、データの取得などの処理をrun()内のループ部に追加する形になります。

KINECT_EVENT_STARTなどのイベントはsetupAndStart()を実行したあとに別途sendEventMessage()で発行する形になります。

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

Re: No title

>
MMDAgentが実行されてプラグインが読み込まれると最初にextAppStart()が実行されます。
extAppStart()のなかにsetupAndStart()を書きます。

MMDAgentが終了するときにextAppEnd()が実行されます。
extAppEnd()のなかにstopAndRelease()を書きます。

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

Re: No title

>
簡単に言うとスレッドの同期処理をするためのものです。
「mutex」や「ミューテックス」などのキーワードで調べてみるともっと詳しい情報が手に入ると思います。

他のプラグインと同様にこれら2つの関数の間に必要な処理を書きます。

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

Re: No title

>
お久しぶりです。

無事プログラムができたようで何よりです。
また何かあれば気軽にきいてください。
プロフィール

CUBE370

Author:CUBE370
MMDAgent用の誰得プラグインを作ってます。
MMDAgentに関する情報や自作プラグインについて書いてます。

技術的なことはwikiのほうにまとめてます。
http://cube370.wiki.fc2.com/

つぶやき
最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
FC2カウンター
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。