Kinectインタラクションライブラリの導入/変更方法in development

 
date:2013.06.07   posted by:mizutani
 

Kinect for Windows SDK 1.7から手をカーソルの代わりにできる機能が追加されました。できることはハンドカーソルの移動、ボタンを押す、スクロールで、そのコントロール周りはソースがあり自由に変更できるようになっています。

今回このハンドカーソルの動きや見た目を変えるにはどうすればいいかを説明していきます。

 

[1] 導入手順
まずプロジェクトを作成するには(1)~(3)の準備が必要で順に説明していきます。導入準備後のプロジェクトファイルはこちら!(33.4MB)

(1)「KinectInteraction170_32.dll」、「KinectInteraction170_64.dll」の準備
 「KinectInteraction170_32.dll」、「KinectInteraction170_64.dll」 この2つのdllを下記の場所よりプロジェクトフォルダにコピーし、エクスプローラからVisualStudioのソリューションエクスプローラーにドラッグ&ドロップで下画像のように配置します。

 C:\Program Files\Microsoft SDKs\Kinect\Developer Toolkit v1.7.0\Redist\amd64\KinectInteraction170_64.dll
 C:\Program Files\Microsoft SDKs\Kinect\Developer Toolkit v1.7.0\Redist\x86\KinectInteraction170_32.dll

 次にVisualStudioでKinectInteraction170_64.dllを選択しプロパティで出力ディレクトリに「新しい場合はコピーする」に設定してください。同様にKinectInteraction170_32.dllも設定してください。

(2)「Microsoft.Kinect.Toolkit」、「Microsoft.Kinect.Toolkit.Controls」の準備
 エクスプローラでプロジェクトフォルダに以下の2つのフォルダをコピーします。

 C:\Program Files\Microsoft SDKs\Kinect\Developer Toolkit v1.7.0\Samples\C#\Microsoft.Kinect.Toolkit
 C:\Program Files\Microsoft SDKs\Kinect\Developer Toolkit v1.7.0\Samples\C#\Microsoft.Kinect.Toolkit.Controls

 次にVisualStudioで「ソリューションエクスプローラ」→「追加」→「既存のプロジェクト」で「Microsoft.Kinect.Toolkit.csproj」と「Microsoft.Kinect.Toolkit.Controls.csproj」をソリューションに追加します。

(3) 参照設定
 参照設定に以下4つを追加しますが、ここで一度デバッグ開始ボタンを押して「Microsoft.Kinect.Toolkit.dll」、「Microsoft.Kinect.Toolkit.Controls.dll」、「Microsoft.Kinect.Toolkit.Interaction.dll」を作っておきます。

 ・Microsoft.Kinect
  .NETタブより追加します。

 ・Microsoft.Kinect.Toolkit
  参照タブより先ほど作った「\Microsoft.Kinect.Toolkit\bin\Debug\Microsoft.Kinect.Toolkit.dll」を追加します。

 ・Microsoft.Kinect.Toolkit.Controls
  参照タブより先ほど作った「\Microsoft.Kinect.Toolkit.Controls\obj\Debug\Microsoft.Kinect.Toolkit.Controls.dll」を追加します。

 ・Microsoft.Kinect.Toolkit.Interaction
  参照タブより先ほど作った「\.DebugMicrosoft.Kinect.Toolkit.Interaction.dll」を追加します。

 

以上で準備が整いました。最終的にソリューションエクスプローラは上のようになります。

 

[2] ソースファイルの編集
準備は整いましたが、ではどのファイルをいじるとどうなるか?「Microsoft.Kinect.Toolkit」、「Microsoft.Kinect.Toolkit.Controls」にはファイルがかなりの数あり、編集部分を見つけるのにひと苦労します。ここでは実際に仕事で編集した3つを説明していきます。

(1) ハンドカーソルの大きさを変える
Microsoft.Kinect.Toolkit.ControlsのKinectCursorVisualizer.csの258~262行目を変更します。

[例]ハンドカーソルの大きさを半分にします。
double finalRadius = KinectCursor.ArtworkSize * (1.0 – (adjustedPressExtent * ((KinectCursor.MaximumCursorScale – KinectCursor.MinimumCursorScale) / 2.0)));

double finalRadius = KinectCursor.ArtworkSize * (0.5 – (adjustedPressExtent * ((KinectCursor.MaximumCursorScale – KinectCursor.MinimumCursorScale) / 2.0)));

ただこれだけだとハンドカーソルが小さくなった時に反転してしまうので
double scaleY = finalRadius / KinectCursor.ArtworkSize;
の下の行に
if(scaleX < 0.3) scaleX = 0.3;
if(scaleY < 0.3) scaleY = 0.3;

など書くとある一定の大きさ以下にならず反転することはなくなります。

(2) ハンドカーソルの位置の指定
Microsoft.Kinect.Toolkit.ControlsのKinectCursorVisualizer.csの281~282行目を変更します。

以下2行のことです。
cursorCanvasPosition.X = Clamp(cursorCanvasPosition.X, -CursorBoundsMargin, kinectRegion.ActualWidth + CursorBoundsMargin);
cursorCanvasPosition.Y = Clamp(cursorCanvasPosition.Y, -CursorBoundsMargin, kinectRegion.ActualHeight + CursorBoundsMargin);

[例]グリップ時だけカーソルを止める
if(pointer.IsInGripInteraction) {
    cursorCanvasPosition.X = Clamp(グリップ開始時のX値, -CursorBoundsMargin, kinectRegion.ActualWidth + CursorBoundsMargin);
    cursorCanvasPosition.Y = Clamp(グリップ開始時のY値, -CursorBoundsMargin, kinectRegion.ActualHeight + CursorBoundsMargin);
} else {
    cursorCanvasPosition.X = Clamp(cursorCanvasPosition.X, -CursorBoundsMargin, kinectRegion.ActualWidth + CursorBoundsMargin);
    cursorCanvasPosition.Y = Clamp(cursorCanvasPosition.Y, -CursorBoundsMargin, kinectRegion.ActualHeight + CursorBoundsMargin);
}

(3) ボタンクリック時の押し出し距離を変更する
Microsoft.Kinect.Toolkit.ControlsのKinectAdapter.csの301行目を変更します。

ボタンクリック時に手を押し出して引くとクリックになりますが、その前に押し出す距離を変更する方法です。

[例] 押し出す距離を短くします。(本来のZの位置よりも多く押し出したようにみせて押し出し距離を短くしています。)
handPointer.PressExtent = data.Z;

handPointer.PressExtent = data.Z * 5;

 

[3] 注意点
「Microsoft.Kinect.Toolkit」、「Microsoft.Kinect.Toolkit.Controls」のファイルを書き換えた場合、一度のデバッグ開始しても変更点が更新されません(コンパイルの順番の関係なのか?)。なので自分は2度コンパイルするようにしています。

google cell phone tracker
 
Copyright © TheDesignium inc. powered by WordPress & mootools.
Relative Keyword|none