レビューメディア「ジグソー」

ポーズとジェスチャーの判定って、もっと簡単にならないの?

2012年9月1日追記)
第11回の「ものぐさマウス」に
「第3回 カメラの利用」のカメラ画像とエレベータのスライダーの機能を追加しました。


●ここでの課題の1つは、SDKドキュメントのインストールです。
http://kinection.jp/post/85
に従いインストールを進めました。
ここで、やってしまいました。
いつかは全部のドキュメントを追加するんだからと
Kinect for Windows SDKだけを追加すれば良いものを、追加できるものを全て選択して更新ボタンを押してしまいました。
ドキュメント 追加中
ドキュメント 追加中

更新にWiMAX回線で3時間もかかってしまいました。
更新後、Microsoft ヘルプ ビューアー で確認しました。


●次にKinect Toolkitを使った初期化・終了処理の勉強です。
今まで、自己流で終了処理をつけていましたが、こんなに簡単にできるなんて、もっと前から勉強しておけば良かったと後悔してます。
まずは、Developer Toolkit Browser v1.5.0 を起動し、Kinect Toolkitをインストール(フォルダを指定してコピー)します。

あとは、このKinect ToolkitのプロジェクトをVisula Studioの「既存のプロジェクトの追加」し、
参照でKinect Toolkitを指定すれば使用可能になります。

やってみよう!Kinectアプリ開発 - 第8回 初期化・終了処理
に従いプログラムの修正を行いました。

●ElevationAngle(kinect台を上下に動かす)
なおSDKのドキュメントによると「Kinectセンサーのモーターは継続した操作を想定していないので、モーターの操作をできるだけ少なくすること」と注意書きがありますので注意しましょう。
(目安としては、「1秒間に操作は1回まで」、また「15回操作した後は最低20秒間をあけること」とあります)

知らなかったので、目一杯モーターを動かしていました。(~_~;)

いろいろ、調べてみると、ElevationAngleの処理が、同期式のため、
MinからMaxへの変更などは、最大2秒は処理が待たされ画面が停止してしまいます。
これでは使い物になりません。

私が発案し、某支配人さんが完成させたCheckElevation()も、良く考えてみると、
ElevationAngleの処理が終わった時間でDateTime.Nowしないと最大2秒もずれが生じてしまいます。
その点をを踏まえて、ElevationAngleの処理と次の時間のセットする所を別スレッドにしてみました。

最低角度から最高角度への移動中にも画面が停止しなくなりました。

興味がある方はソースをダウンロードして見てください。
ご要望があれば、ソースの解説を追記します。コメントに希望を書いてください。

■ソース一式はこちらから
KinectCameraSample-08A.zip

■実行結果
以下は実行結果です。
kinect 未接続
kinect 未接続

kinect 電源オフ
kinect 電源オフ

kinect 正常
kinect 正常

kinect USB抜く
kinect USB抜く

2つ目のプログラムを起動
2つ目のプログラムを起動



ここでは、ポーズとは何かを勉強します。

「関節の向きから方向ベクトルを取得する方法と、関節の向き同士の角度を調べるために内積を計算する方法を説明します。それらを基にして、具体例を交えてポーズの認識方法と、実際のアプリケーションの作成を行います。」
内積・・・久しぶりすぎて、完全に忘れています。

やってみよう!Kinectアプリ開発 - 第9回 ポーズ認識
に従いプログラムの修正を行いました。

■ソース一式はこちらから
KinectCameraSample-09A.zip

■実行結果
腕と手首がまっすぐになる判定:ベクトルの内積が1、全然、1に近づかなかったので、
0.9を0.5にしてあります。




今回は、ジェスチャーについて勉強していきます。
ジェスチャーは「ある姿勢とそれに付随する動きを含めたもの」=座標と動きの遷移状態でとらえていきます。

まるで通信プロトコルの状態遷移図のようです。
今回のプログラムを読んでみて、昔コーディングした状態遷移図を2次元配列で表現していた手法がそのまま使えそうと思いました。

やってみよう!Kinectアプリ開発 - 第10回 ジェスチャー認識
に従いプログラムの修正を行いました。

■ソース一式はこちらから
KinectCameraSample-10A.zip

■実行結果
「アプリケーションが起動したら、右手を大きく回してみてください。ジェスチャーが正しく認識されると、マスク画像が大きくなります。」とありますが、
ベットの上で座った姿勢で、いくら右手を大きく回しても、腰の座標が取れないので反応しませんでした。
看護師さんにたのんで、右手を大きく回して貰えるだろうか・・・?


今回は継続的なジェスチャー認識の勉強です。
継続的なジェスチャー認識とは、
・体の中心を基準とした相対的な位置
・背景の一点を基準とした相対的な位置
・直前のフレームからの相対的な位置(これは単位時間あたりの移動量であり、速度と考えることもできます)
だそうです。
これまで、やってきたポーズ、ジェスチャーよりわかりやすいです。(作り易いです。)

やってみよう!Kinectアプリ開発 - 第11回 継続的なジェスチャー認識
に従いプログラムの修正を行いました。

■ソース一式はこちらから
MonogusaMouse.zip

■実行結果
アプリを起動して、骨格情報を認識すると、首の左右、前後でマウスが移動します。

マウスがこのアプリに乗っ取られてしまうので、アプリを終了するにはALT+F4で終わらせて下さい。

カメラのイメージ画像がないと、カメラがどこを向いているのかわからなくて、ちっとも骨格情報を認識してくれませんでした。時間があったら、横に小さくカメラ画像を出すように改造したいと思います。
(勿論エレベーター用スライダーも付ける予定です)

「第3回 カメラの利用」のカメラ画像とエレベータのスライダーの機能を追加しました。


■ソース一式はこちらから
MonogusaMouse2.zip

★★★まとめ★★★
ポーズ、ジェスチャーは、こんなにプログラムを書かないとダメなんだ、いうことを認識しました。

カメラの前で、骨格情報や深度情報をレコーディングして、それに名前を付けてそれと一致したら、何か
処理をするみたいなSDKが欲しいと思いました。

21人がこのレビューをCOOLしました!

コメント (0)

ZIGSOWにログインするとコメントやこのアイテムを持っているユーザー全員に質問できます。

YouTube の動画を挿入

YouTube の URL または動画の ID を入力してください

動画の ID が取得できません。ID もしくは URL を正しく入力してください。

ニコニコ動画の動画を挿入

ニコニコ動画の URL または動画の ID を入力してください

動画の ID が取得できません。ID もしくは URL を正しく入力してください。

ZIGSOWリンク挿入

検索対象とキーワードを入力してください

    外部リンクを挿入

    リンク先の URL とタイトルを入力してください

    URL を正しく入力してください。

    画像を挿入(最大サイズ20MB)

    画像を選択してください

    ファイルサイズが20MBを超えています

    別の画像を追加

    ほかのユーザーのレビュー

    ZIGSOW にログイン

    ZIGSOW会員登録(無料)はこちらから