月別アーカイブ: 10月 2014

Kinectアプリに挑戦です

標準

開発環境 Windows8 Kinectv1

SDKはKinect v1用に、

Kinect for Windows SDK v1.8

インストールが無事に終わると、そのままツールキットのダウンロードに誘導される

Kinect for Windows Developer Toolkit v1.8

Unity用Wrapper

http://wiki.etc.cmu.edu/unity3d/images/a/ac/Kinect1.7UnityPackage.new.zip
(いきなりダウンロードが始まるので注意)

http://www.naturalsoftware.jp/entry/2014/06/13/070623
「Kinect for Windows v1をUnityで使う(2014/6/3)」こちらが参考になります

===(引用)===

Kinect v1については公式なUnityパッケージがないのですが、(おそらく)有志の手によって作成されたUnityパッケージがあったので紹介します。

使い方の解説(簡易)

3Dモデルの操作、カラー、Depthの表示、スケルトンの位置表示ができます。

Kinectの機能はKinectPrefabにあります。本来はPrefabフォルダにあるようですが、見つからないので、他のプロジェクトで使うときにはこのPrefabごとコピペして使っています。

なお、エミュレーター機能も持っているようで、記録したKinectのデータを再生できます。

再生はDeviceOrEmulatorスクリプトのUseEmulatorにチェックをいれます。これでKinectが接続されていなくても動きを再生できます。再生するファイルはKinectEmulatorスクリプトのInputファイルになります。

記録はKinectで実行中にF10を押します。これで記録が開始されます。再度F10を押すと記録が終了します。なお、終了時にファイルへの書き込みが行われるので、2回目のF10を押す前にプログラムを終了させると記録されません。デフォルトでは上記InputファイルのAssets/Recordings/playback0が上書きされます。

動かしたいモデルに「Assets\Script\Kinect\KinectModelControllers」にある「KinectModelControllerV2.cs」スクリプトを追加します。続いてInspectorビューの「Kinect Model Controller V2」にモデルの設定をします。Swにプレファブを、それぞれのジョイントに対応するボーンを設定します。なおCollar(襟)というのがあるのですが、対応がよく分からず。とはいえ、設定しないと動かないので、Sholderを入れておきました。

続いてカラーデータの表示です。Planeなど表示させたいものに「Assets\Script\Kinect\KinectImgControllers」にある「DisplayColor.cs」を追加します。モデルと同じように「Dev Or Emu」にプレファブを追加します。

Depthデータの表示はカラーデータと同じです。Planeなど表示させたいものに「Assets\Script\Kinect\KinectImgControllers」にある「DisplayDepth.cs」を追加し、「Dev Or Emu」にプレファブを追加します。

====(引用2)

http://wiki.etc.cmu.edu/unity3d/index.php/Microsoft_Kinect_-_Microsoft_SDK

  • KinectSample – This scene shows you how a skeleton is generated / tracked by placing spheres at each of the bones tracked by the Kinect, and how to use kinect to control your model. Use this to get a feel for what the Kinect is capable of. It also shows you how to prepare your GameObjects

Prefabs

  • Kinect_Prefab– This prefab has an empty node which contains all of the necessary scripts for your world to start using the Kinect – this does NOT include the controller, which you will need to use to actually control your models. See setup
  • KinectPointMan – This prefab shows how KinectPointController works.

Kinect

  • KinectModelControllerV2 – (このスクリプトを動かしたいモデルにアタッチする)This is the script that you will attach to your model that you want to manipulate – you will drag each of the bones to be controlled into the appropriate slot, and determine which player controls which model.
  • KinectPointController – This script will place GameObjects that you define onto points that are tracked by the Kinect, generating a skeleton. The starting scene comes with an example of how this looks / should be done.
  • DisplayDepth – This script will get the depth image. Attach it to a game object with renderer. NOTE: In unity, you need to restart unity everytime after running your world, otherwise this script will not work (because of SDK issue).
  • DisplayColor – This script will get the RGB image. Attach it to a game object with renderer. NOTE: In unity, you need to restart unity everytime after running your world, otherwise this script will not work (because of SDK issue).
  • KinectRecorder – This script will record your movement and output playback files for the emulator.
  • KinectEmulator – This script will act as a virtual Kinect. It works with playback files. For now it only simulate the skeleton data.
  • KinectSensor – This script gets data from the physic Kinect.
  • DeviceOrEmulator – This script sets whether to use physic Kinect or the emulator.
  • SkeletonWrapper – This script grabs skeleton data.
  • DepthWrapper – This script grabs depth image data.
  • KinectInterop – This script grabs data from Microsoft Kinect SDK.
  • Recordings/playbackDefault – This is the default playback file for emulator. Do NOT remove this file.

Models and Materials

  • rainbowMan
This is an example model that you can use for testing / learning how to use the wrapper. You can drag the KinectModelControllerV2 script onto this model and attach the bones and immediately begin testing.

Using the Scripts

After importing the asset package, you have the KinectExample to test and get familiar with the KinectPointController and KinectModelControllerV2. You can use this as your base scene, or you can drag the appropriate GameObjects into a new one.

Setting up the Kinect_Prefab【シーンのどこかに置くこと】

As previously mentioned, the Kinect_Prefab GameObject is required to have Unity talk with / use the Kinect. This empty object needs to exist somewhere in your scene. However, if you are switching scenes, it will persist because of the DontDestroyOnLoad call in the KinectWrapper script, so you don’t need to instantiate a new Kinect_Prefab in each scene.【ただし、シーンを変更しても、残り続けるので、新しいプレファブをそれぞれのシーンにおく必要はない】

To get the best use out of the Kinect, you may need to tweak some settings within the Kinect_Prefab object itself – here is a breakdown of each option.

Device Or Emulator

  • Use Emulator – Check this to use emulator.

Kinect Sensor

NOTE: do NOT enable this script manually, it is controlled by DeviceOrEmulator.

  • Sensor Height – How high (in meters) off the ground is the sensor.
  • Kinect Center – This tells the Kinect where it should be looking for it’s 0,0,0 point (relative to the ground directly under the sensor). The default works pretty well.
  • Look At – Tells the Kinect how to orient the camera using the motor control.

NOTE: The following values allow you to smooth the skeleton data. Usually the default values work fine. Do NOT change them unless you find magic numbers for you project.

【デフォルトの数値でだいたいいいので、あまり変更しないように】

  • Smoothing – Default value 0.5.
  • Correction – Default value 0.5.
  • Prediction – Default value 0.5.
  • Jitter Radius – Default value 0.05.
  • Max Deviation Radius – Default value 0.04.

Kinect Emulator

NOTE:

  1. do NOT enable this script manually, it is controlled by DeviceOrEmulator.
  2. If you are in the emulator mode, it will automatically play the playbackDefault file.
  3. Press F12 to play file of the path Input File. Press F12 again to switch back.
  • Input File – The file you recorded for the emulator. The default value is “Assets/Kinect/Recordings/playback0”.
  • Sensor Height – How high (in meters) off the ground is the sensor.
  • Kinect Center – This tells the Kinect where it should be looking for it’s 0,0,0 point (relative to the ground directly under the sensor). The default works pretty well.
  • Look At – Tells the Kinect how to orient the camera using the motor control.

Kinect Recorder

NOTE:

  1. Press F10 to start recording, and press F10 again to stop.
  2. You can record multiple files in one run.
  3. You recording files will be created sequentially in the folder determined by Output File. The default value is “Assets/Kinect/Recordings/playback”, so the your recording files in one run will be named as “playback0”, “playback1”, etc.
  4. The recorder will overwrite existing files. Remember to save your file to another folder before you run your world again and do the recording; or you can change the value of Output File to save the new files to another place.
  • Output File – Where your recording files will go. The default value is “Assets/Kinect/Recordings/playback”.

Controlling your Character

Simply put, to get your character moving, you need to first attach either the KinectModelControllerV2 to control the bones of the model, or KinectPointController to control a series of GameObjects.

NewModelController【新しいモデルへの設定方法】

To set this up, do the following:

  1. Drag the KinectModelControllerV2 script on to your model.【モデルにKinectModelControllerV2スクリプトをアタッチする】
  2. Select the model, and find the Sw variable (it stands for Skeleton Wrapper). Drag your Kinect_Prefab from your CURRENT SCENE into this variable. This gives us a pointer to the main update script.【①シーンの上にひとつ置いたKinect_Prefabをドラッグして、Sw変数にアタッチする】
  3. Now, expand your model fully so that each bone is visible in the hierarchy.
  4. One by one, drag each bone you want to control onto the appropriate variable. Make sure to double-check the bones, as it’s very easy to place it incorrectly.【モデルのボーンをスクリプトにドラッグ(かダブルクリック)していく】
  5. After all the bones are placed, set the player that should control this model. 0 is player one, and 1 is player two.【何人がコントロールするか決める。0は一人、1は二人・・・】
  6. Next, determine whether you want the entire skeleton to be affected by the Kinect (or just some parts) and set the appropriate mask. If you don’t see one that you want, write your own!【身体のどの部分の動きをKinectでトレースするか、マスクを設定する)
  7. If you intend to animate your model while the player is controlling it, set “animated” flag and determine how much blending between the animation and the Kinect should occur – this is a range from 0 to 1.【プレイヤーのコントロール準備まで動かしていたいときは、animatedフラッグをたてて、最初のモーションと、キネクトモーションをどれぐらいの割り合いでブレンドするか、決める】

KinectPointController

To set this up, do the following:

  1. Create an empty object to store each of the objects you want to control.【コントロールするオブジェクトひとつにつき、ひとつエンプティオブジェクトを作る】
  2. Parent each of the objects into this empty node, and place them all at the same location.【オブジェクトは、このエンプティと同じ場所に置く。】
  3. Attach the KinectPointController to the parent node.【親ノードに、KinectPointControllerスクリプトをアタッチ。】
  4. Select the parent node, and find the Sw variable (it stands for Skeleton Wrapper). Drag your Kinect_Prefab from your CURRENT SCENE into this variable. This gives us a pointer to the main update script.
  5. Drag each of the objects you want to be controlled into the appropriate variable.
  6. Set the player number (0 = player one, 1 = player two) and the Mask.

For an example of how this should work, check the KinectExample provided in the package.

Updates (Aug. 2013)

  1. Updated wrapper to Kinect SDK 1.7 in Unity 4.2.
  2. Added in Joint Orientation data from Kinect sensor.
  3. Added seat mode.
  4. Fixed the color and depth image display bug.

 

====
BlenderでKinectデータを使う

https://github.com/asahiufo/AMK2B

 

広告