アーカイブ

Kinect for Windows v2でプロ生ちゃんとベストショットを撮る方法

先日の記事でも書きましたが、v2からは手の関節もトラッキングできるようになったため、「グー・チョキ・パー」も判別できるようになりました。

というわけで、FaceTracking機能と組み合わせて、「被写体が笑っている」かつ「どちらか一方の手がピースしている」時に写真を撮るサンプルを簡単に作成してみました。
またキャプチャした情報から被写体のみを抽出し、別の画像と合成してpngに出力してくれます。これをもう少し改良すれば、いつでもベストショットで写真が取れるようになるかも…?

FaceTrackingに関して

ボーンを取得・描画、それから被写体の抽出はほとんどサンプルと同様です。
今回はデフォルトのサンプルにはなかったFaceTrackingに関して説明します。

FaceTrackingの開始

FaceTrackingを開始するには、まずどの対象をトラッキングするかを設定する必要があります。そこで、BodyFrameからBodyを取得した際にTrackingIdというプロパティがありますので、それを用いてインスタンスを作成しています。


FaceFrameFeaturesには他にも以下のような項目があります。複数指定することも可能です。

  • BoundingBoxInColorSpace
  • BoundingBoxInInfraredSpace
  • FaceEngagement
  • Glasses
  • Happy
  • LeftEyeClosed
  • LookingAway
  • MouthMoved
  • MouthOpen
  • PointsInColorSpace
  • PointsInInfraredSpace
  • RightEyeClosed
  • RotationOrientation

Trackingデータの処理

無事にTrackingが成功すると、FrameArrivedイベントが発生します。(上記のコードでは、OnFaceFrameArrivedイベントハンドラが呼ばれています)この引数には結果が格納されています。
FaceFrameFeaturesの項目に関してはFacePropertiesプロパティで取得可能です。結果にはYes,Maybe,No,Unknownが返ってきます。


今回作成したプログラムは、条件が揃った際にスナップショットを作成しますが、その際一瞬にして同じような画像が大量に保存されてしまうことを防ぐため、この仕組みを用いて1トラッキングにつき1回までしか作成しないよう制限しています。(つまり「画面に写っている人が写真を撮ったら、その人が画面の外に出てもう一度中に入るなどをしてトラッキングを失わない限り、写真を撮らない」、ということを行っています)

Tracking対象を失ってしまった時の処理

画面外に移動した等の理由で対象を失ってしまった際には、TrackingIdLostイベントが発生します。(上記のコードでは、OnTrackingLostイベントハンドラが呼ばれています)
このイベントハンドラが取る引数eに、失ったTrackingId等が格納されているので、それを見て判別することが可能です。


注意事項

実はこれだけではプログラムは動かず、分析のためのデータベースが必要となります。(それがないと、Noという結果しか出ません)
そこで、ビルド後のアクションにNUIDatabaseを出力フォルダにコピーするコマンドが実行されるよう、設定する必要があります。

サンプル

動作画面のサンプルを以下に掲載します。(一人暮らしで家が狭いため、障害物も多く全身が入りきっていません)

右手でピースをした時に反応している

右手でピースをした時に反応している

パーでは何も反応しない

パーでは何も反応しない

笑うとHappyとして認識される

笑うとHappyとして認識される

笑いながらピースで記念撮影

笑いながらピースで記念撮影

このような画像が保存されます

このような画像が保存されます

コード

以下のページで公開しています。基本的にボーンの作成等はサンプルと同様ですので、そちらを見たほうがよいでしょう。
GitHub – KinectCameraSample

また今回背景の画像は プログラミング生放送勉強会よりプロ生ちゃんを使用させていただきました。(許可は頂いております)
可愛い女の子とベストショットで写真を撮ることができるなんて、まるで夢のようですね!


Kinect for Windows v2.0 オープンベータ版で遊んでみました

先日7月15日にKinect for Windows v2.0のオープンベータの販売が開始されました。お値段は21,578円(税込み)です。他の国ではすでに予約が始まっていて、日本だけComing Soonとなっていたので、ようやくという感じなのでしょうか。

今回マイクロソフトストアで7月15日1時頃に注文して、18時頃に発送メールが来ていました。かなり早いですね。

外見

Kinectの箱はこんな感じです。

外箱

外箱

付属品

なぜか電源ケーブルが2個付属している

本体は以下の様な感じです

Kinect v2本体

Kinect v2本体

環境構築

まず最新版のSDK(Kinect for Windows SDK 2.0 Public Preview)をインストールします。こちらのサイトにアクセスすると最新版SDKへのリンクが有りますので、そこからダウンロードをしてインストールしましょう。インストール作業自体は、チェックを入れてインストールボタンを押すだけと、かなり簡単です。

本体の各種ケーブルの繋ぎ方はコネクタが特徴的なのですぐに分かるかと思います。電源ケーブルは2本有りますが、1本しか使わないので注意です。(一応PSEマークが付いている方を使いました) 本体側のケーブルの接続が終わったら、いよいよKinectをPCに接続しましょう。あとは先ほどインストールした各種ドライバが自動的に適用されます。

PCに正常に認識されていると、デバイスマネージャからは以下のような項目が表示されると思います。

Kinect正常認識時のデバイスマネージャ

Kinect正常認識時のデバイスマネージャ

遊んでみる

まず手軽にKinectで遊んでみましょう。SDK Browser v2.0をクリックして、Kinect for Windows Developer Toolkit v2.0を起動しましょう。

Toolkitの画面

Toolkitの画面

後は気になる項目の[Run]ボタンをクリックして、デモで遊んでみましょう。

Audio Basicsの実行画面例

Audio Basicsの実行画面例

いくつか遊んでみた結果をあげておきます。

Body Basics

ボーンを取得して表示します。
Kinect v1では最大2人までしか同時に取得できなかったそうですが、v2からは6人同時に取得できるようになっているようです。(まだ検出率やその精度は試せていません)
友人と2人で遊んでみましたが、なかなか良い感じに認識してくれました。

またもう一つ大きな特徴として、標準でグー・チョキ・パーが判別できるようになっています。(サンプルではグーが赤,チョキが青,パーが緑となっています)これは取得できる関節部位が増加(首や指先、親指等)したからでしょうか。
友人と並んでじゃんけんをしてみた画像を以下に掲載します。

ボーン検出とじゃんけん

ボーン検出とじゃんけん

Coordinate Mapping Basics

背景を除いて人だけを残し、写真等に合成します。
このデモの素晴らしいところは、単純なクロマキー合成ではなく複雑な背景でも正常に人を認識して合成してくれる点です。
友人がデモに協力してくれたので、その画面を以下に掲載します。

Coordinate Mapping Basicsサンプル

Coordinate Mapping Basicsサンプル

Depth Basics

これは深さを図るデモです。v1と比べて精度も向上しているようです。以下サンプル画面の左側にあるのは壁です。

Depthデモ

Depthデモ

Infrared Basics

これはKinectが認識している赤外線情報を見ることができるデモです。照明を暗くしても、遠くの場合でも結構な情報を認識してくれています。v2になって認識範囲も増えたようです。

Infrared Basicsサンプル

Infrared Basicsサンプル

Kinect Studio v2.0

Kinect StudioはKinect SDKが認識した各種情報を記録して再生することができるものです。現在取得している情報もリアルタイムで表示させることも出来ます。特に3DViewは取得したデータを元に、いろんな角度から眺めることができるので面白いです。

Kinect Studioサンプル

Kinect Studioサンプル

その他

Kinect for Windows v2.0にはその他にも様々な新機能が搭載されているようです。その他新機能に関しては以下を参考にすると良いです。どちらの連載もSDKのサンプル等まで掲載されていて、非常にわかりやすいです。


エフサミ!! 2014に参加してきました

先日7月12日13日と、郡山にてエフスタ!!主催のエフサミ!!が開催されました。
ホームページを見ればわかりますが、2日間タイムテーブルがぎっしりと詰まっています…(しかも初日は同時に6セッション)

1日目のタイムテーブル

1日目のタイムテーブル

行きのバス

なんと今回、石巻・仙台から無料の送迎バスが出ています!すごい!
バス内では「エフスタでは毎回自己紹介タイムをやっているけど、今回のエフサミ!!ではさすがにできないので、せめてバスだけでも…」ということで自己紹介タイムが行われました。やはりこのような心がけは大切ですよね。エフスタ!!のフレンドリーさを実感できた一時でした。

また、小中学生もバスに乗っていて、彼らもアプリ開発経験者(というより、実際にアプリを公開している)とのこと。素晴らしい、私も頑張らないとですね。

会場に到着

想像以上に大きかったです。
広い会場、屋上に設置されたカフェ、屋外に設置されていた各種屋台(らーめんやクレープなども)などなど。さらにこれらの会場に大勢の人が集まって、ITを楽しみに来ている…、なんて素晴らしいのでしょうか!クロージングの際に聞いた情報ですと、7月12日だけでも総来場者数350人を超えていたようです。

セッションに関して

どのセッションも面白そうで、本当はすべてに参加したかったのですが、今回は以下の5つに参加しました。

  • 基調講演 This is IT
  • ライトニングトーク祭り(学生編)
  • はじめてのセンサー
  • Kinect2で未来をつかむ
  • イマドキWebデザイン

ライトニングトーク祭り(学生編)

私はライトニングトーク祭りで登壇させていただきました。セッション資料は以下で公開しておきます。そこそこ受けは良かった模様…?

参加したセッションに関して

どのセッションも非常に面白い内容ばかりで、特にセッション系の内容は実演が多く、視覚的にもわかりやすいものばかりで、インパクトが大きかったです。各セッションの詳細な内容に関しては省略させていただきますが、一つだけ。

初音さんのセッション「Kinect2で未来をつかむ」での「『このセンサー、何かに使えるかも』では何も作れない。『ここにこのセンサーが使えるかも』という発想に変えてほしい」というお言葉が、個人的にはかなり印象に残っています(仰ってたお言葉そのままではないので、ニュアンスが違うかもしれません)。というのも、私自身の日常生活ですごく良く当てはまるうえ、いつまでたっても変われていない気がするからです。

毎度言っているような気がしますが、もっと精進いたします。

他のセッションに関して

午前中とお昼は展示ブースのほうで少々忙しかったため、セッションに参加できませんでした。他にも気になっていたセッションは多数あったので、エフサミ!!終了後にライブ配信のアーカイブを見て確認しました。
セッション動画に関しては、八巻さんのブログでまとめられています。
エフサミ2014のリンクまとめ – Yuya Yamaki’s blog

展示ブース

現在作成中のTwitter関係のプログラムのデモと、プロ生ちゃんのすぱこーとポストカードを配布しておりました!
LTの際にもプロ生ちゃんの宣伝をさせていただきましたし、これでプロ生ちゃんの認知度が少しでもあがってれば良いのですが…

全体を通して

今回用事があったため懇親会には参加できませんでしたが、それでもその中で非常に密度の濃い時間を過ごすことが出来ました。
やはりITは楽しい、エフスタ!!は楽しい、そんなことが強く感じられた、とにかく楽しい1日でした!

講師の皆様、エフスタ!!のスタッフの方々、本当にありがとうございました!