Tech Sketch Bucket of Technical Chips by TIS Inc.

体を張ってアプリを起動「Kinect Launcher」の作り方

Pocket

開発合宿

2011年の9月に開発合宿を行いました。場所は茨城の デュープレックスセミナーホテル
美味しいご飯&広い別館が良いですね。到着してすぐにPCを開き、集中して開発することができました。

いまさらですが、その時作ったソフト「Kinect Launcher」を公開します。
あなたもポーズをとってアプリを起動してみませんか?

Kinect Launcher

Kinect Launcher本体 (Windows & .NET Framework 4.0):KinectLauncher.zip
C#ソースコード (Visual Studio 2010):KinectLauncherSource.zip

Kinect Launcherはその名前の通り、「Kinectを使ってポーズを入力することでアプリを起動することのできるランチャーアプリ」です。
この一文で大体想像は付くと思いますが、「なにそれ?」な人は動画をごらんあれ。

当然ながら、動かすためにはKinectをPCに接続しておく必要があります。


続きには使い方&作り方を記載しています。


使い方

kinectlauncher.png

1. コマンドを登録

ポーズとコマンドを紐付けるために設定を行います。
まず、最終的に実行したいコマンドを設定します。実行ファイルの絶対パスや、PATHが通っている場所の実行ファイル名が指定できます。

2. ポーズを登録

コマンドを実行する為のポーズを追加します。
複数のポーズを登録することで、ポーズA→ポーズBと順に取った場合にだけアプリを起動することもできます。
例えば、動画では「T」「X」「T」のポーズを連続してとることでメモ帳が起動するように設定しています。

こんなネタに付き合ってくれる友人がいる人は、自分がポーズを取った状態で「即座に登録」ボタンを押してもらえば良いのですが、
そんな奇特な人は少ないと思うので「5秒後に登録」ボタンも付けておきました。ボタンを押してから5秒以内にポーズをとって下さい。

#実はポーズ登録中にもランチャー機能が有効になっている為、ポーズを登録した直後にアプリが起動すると思います。まぁ、確認ということで。

作り方

ポーズの判定方法

Kinectのスケルトン認識を使うと、人体の特徴点として20頂点を取得することができます。
今回は事前に登録したポーズを認識するだけで良いので、「右肘から右手首への線が示す角度」など頂点間がなす角度を求めることでポーズの判定を行なっています。

Kinect.png

ポーズの登録時とポーズの認識時に19個の角度を求め、それぞれの角度の差分を計算します。
腕や足のように動かしやすく、また、角度の違いがポーズの見た目に影響しやすい場所については係数を高めに取ることで判定精度を上げています。
逆に手首周辺や足首周辺は頂点間の長さが短く、見た目にあまり変化がないような少しのズレでも大きな角度の違いとして現れてしまう為、係数を少なめにしています。

Kinect SDKの使い方

using句と初期化

Kinect SDKへの参照設定を行い、エンジンの初期化を行います。
今回はKinectの可視光カメラが捕らえた映像をそのまま受け取るメソッド(onVideoFrameReady)と
人体を認識した際に、20頂点で構成されるスケルトンモデルを受け取るメソッド(onSkeletonFrameReady)の2つのメソッドを登録しています。

可視光カメラの映像を取得

イベントに撮影した画像情報が含まれる為、そのまま画面上に表示します。
PlanarImageをそのままImageViewで扱うことはできない為、画像データのコピーを行なっています。

人体認識結果を取得

SkeletonFrameReadyEventArgsのSkeletonFrame.Skeletonsに認識結果が格納されます。
複数人の同時認識を行うことができる為、Skeletonsは複数件になることがあります。

SkeletonFrame.Skeletons.Jointsに20頂点の情報が含まれるのでそれを元に、前項の方式でポーズのチェックを行なっています。

雑感

今回使用したのはKinect for XBox360とKinect for Windows SDK betaですが、2012年2月1日にKinect for Windowsが発売された為、ライセンス形態がややこしくなっています。
これからKinectを使ったアプリを作るのであれば、Kinect for Windowsを買って始めましょう。

combination.png

この辺りの問題にさえ巻き込まれなければAPIは使いやすい為、手軽にアプリを作ることができると思います。
手の位置を認識するだけのアプリでも実際にためしてみると中々面白いですし、Kinectが必要なのは難点ですが余裕のある人はお試しあれ。

エンジニア採用中!私たちと一緒に働いてみませんか?