まどべんよっかいち
(2013.11.09)

@ueponx
KINECT概要
KINECT SDKについて
KINECTのセンサー
RGBデータ処理
深度イメージ処理
2009年

• XBOX用のMotion Sensing Input Deviceとして公開
2010年

• “KINECT for XBOX360”
• キャッチコピーは

発売

「カラダまるごとコントローラー」
2011年

• “KINECT for Windows SDK(β)”
2012年

• “KINECT for Windows”

発売

発表
仕様
仕様
視界角度

垂直

43° 水平 57°

チルト角度

± 27°

フレームレート

最大

深度センサー解像度

640 * 480

カラーストリーム解像度

640 * 480

音声フォーマット

16kHz 16bit モノラル PCM

オーディオ入力

4マイクアレイ

30FPS
利用環境
XBOX360(ゲームデバイスとして)
Windows7
Window8(Wndows8.1もOK)
希望小売価格
¥14,800 –(税込)
Amazon価格

¥11,181 -(2013/11/06現在)
利用環境
Windows7(32bit/64bit)
Windows8(32bit/64bit)
Wndows8.1(32bit/64bit)
Windows Embedded Standard7
希望小売価格
¥24,800 –(税込)
Amazon価格

¥21,513 -(2013/11/06現在)
お安いのには訳があります。
for XBOX360

for Windows

近接モード
(40cm~3m)

未対応

対応

Windowsの対応

サポート外
商用利用不可

サポート
商用利用も可能

外見の違い

ロゴが“XBOX 360“

ロゴが“KINECT”

API

一部ステータスが
異なる動作をする

ドキュメント通り

個人で楽しむならXBOX360版で十分だと思います。
KINECT for Windows SDK v1.8
KINECT for Windowsドライバ
ライブラリ群
KINECT Studio

KINECT for Windows Developer Toolkit
Windows Developer Toolkit Explorer
C++,C#,VisualBasicのサンプルコード
ドキュメント群

その他
DirectX SDK
Speech Platform SDK
KINECT for Windows Language Pack

・・・etc

すべて無償でダウンロード可能!!
ハードウエア要件
Dual-Core以上 2.66GHz以上のプロセッサ
KINECT用のUSB2.0のポート
必要以上にデータの収受があるのでHUBを介さない
ことを推奨

2GByte以上のRAM
DirectX 9.0c対応グラフィック
KINECTセンサー
ソフトウエア要件
VisualStudio2010以上(VS2013Expressでも確認)
.NET Framework 4 以上
Speech機能を仕様する場合
• Microsoft Speech Platform SDK(コンパイル時に必要)
• Microsoft Speech Platform Runtime(実行のみ必要)
構築順序
KINECT for Windows SDKのダウンロード
SDKのインストール
KINECTセンサーの電源接続
KINECTセンサーのUSB接続

デバイスの接続より前にSDKをインストール!
KINECTのドライバー

KINECTのマイクアレイ
赤外センサー

RGBカメラ 深度センサー

アレイマイク
チルト台
★ KINECTを使用した基本的な開発の手順
1. VisualStudioでプロジェクト作成
2. 参照の追加(Microsoft.Kinect.DLLと同名前空間)
3. KinectSensorオブジェクトを作成しセンサー情報を取得
4. KinectSenator.Start() メソッドで初期化・開始
5. 設定したイメージストリームや骨格データを取得
6. 取得したデータの画像処理など
7. KinectSenator.Stop() メソッドで終了
2. DLLの参照追加とUsingの追加

• Microsoft.Kinect.DLL
(%Program Files%Microsoft SDKs¥Kinect¥{SDKのバージョン¥Assemblies})
• Microsoft.Kinect名前空間
KinectSensorで接続されたセンサを、
更にKinectSensor. Statusプロパティで
個々のセンサの状態を取得することができます。
KinectSensor.Statusプロパティ(KinectStatus列挙型)
メンバー

説明

Connected

接続完了

DeviceNotGenuine

デバイスがKINECTではない

DeviceNotSupported

デバイスはサポートされていない

Disconnected

USBに接続されていない

Error

エラーが発生している

Initializing

センサー初期化中

NotPowered

センサーに電源が入っていない

NotReady

センサー準備中

Undefined

ステータス未定義

KinectSensor.StatusChangedイベントで取得ができます。
KINECTセンサーを初期化すると、
複数のセンサーデバイスからストリーミング
データを取得することが可能となります。

Color(カラーイメージ)
Depth(深度イメージ)
Depth and Player Index
(深度イメージとプレイヤーインデックス)

Skelton(骨格【関節】位置データ)
センサーからの取得データはAPIを通して、スト
リームデータとして取得

APIからのデータの取得は1回
読み出し方法
ポーリングタイプ
OpenNextFrameメソッドなど
イベントモデル(こちらが一般的)
*FrameReadyイベントなど
カラーイメージの取得はColorImageFormat列挙体によって解
像度とフレームレートを指定する。
列挙体メンバー

値

説明

Undefined

0

未定義

RgbResolution640x480Fps30

1

RGBカラー空間(32it)

RgbResolution1280x960Fps12

2

RGBカラー空間(32it)

YuvResolution640x480Fps15

3

YUVカラー空間(16bit)

RawYuvResolution640x480Fps15

4

YUVカラー空間

InfraredResolution640x480Fps30

5

赤外線イメージ(v1.6対応)

RowBayerResolution640x480Fps30

6

RowBayerResolution1280x960Fps12

7
KinectSensor.ColorStreamプロパティ
Enableにすることでストリーム取得の有効化

KinectSensor.ColorFrameReadyイベント
イベントによりフレームの更新(生成)通知を受け取る
このイベントハンドラの引数からイメージフレームを取得
e.OpenColorImageFrame()からColorImageFrameオブジェクトを取得

ColorImageFrame.CopyPixelDataTo()メソッド
sRGBのピクセルデータに変換(画像に変換)
BitmapImageクラス
(System.Windows.Media.Imageing名前空間)

WriteableBitmapクラス
(System.Windows.Media.Imageing名前空間)
取得したイメージを変更する場合にはこちらを用いる。
例:WritePixels()メソッドなど
private void Window_Loaded(object sender, RoutedEventArgs e)
{
//Kinect接続確認
if(KinectSensor.KinectSensors.Count <= 0)
{
MessageBox.Show("KINECTを接続して下さい", "エラー",
MessageBoxButton.OK, MessageBoxImage.Error);
Close();
}
//対象KINECTをセット
CurrentKinect = KinectSensor.KinectSensors
.FirstOrDefault(x => x.Status == KinectStatus.Connected);
}
//
//初期化のコード
// カラーストリームを有効化
// イベントハンドラを登録
// KINECTの処理を開始
private void InitializeKinectSensor(KinectSensor kinect)
{
if (kinect != null)
{
kinect.ColorStream.Enable();
kinect.ColorFrameReady += kinect_ColorFrameReady;
kinect.Start();
}
}
//イベントハンドラ
private void kinect_ColorFrameReady(object sender,
ColorImageFrameReadyEventArgs e)
{
using(ColorImageFrame frame = e.OpenColorImageFrame())
{
if(frame != null)
{
byte[] pixelData = new byte[frame.PixelDataLength];
frame.CopyPixelDataTo(pixelData);
image1.Source = BitmapImage.Create(frame.Width,
frame.Height, 96, 96,
PixelFormats.Bgr32, null, pixelData,
frame.Width*frame.BytesPerPixel);
}
}
}
*基本的にはその他のセンサーデータもほぼ同様
の手順で取得していき、取得したデータを処理
することになります。

*センサーデータから画像化が出来てしまうとあ
とは画像処理になります。OpenCVなどを使う
と更に世界が広がると思います。

*KINECTはセンサー側からのデータの取得の
ハードルを下げたと言えます。
orz
* KINECT for Windows
http://www.microsoft.com/en-us/kinectforwindows/

* KINECT for Windows SDK

ダウンロードサイト

http://www.microsoft.com/en-us/kinectforwindowsdev/Downloads.aspx

Kinect入門