Kinect for Windows SDK
~ Xbox 360® Kinect™ センサー プログラミング概要 ~
日本マイクロソフト株式会社 パートナーソリューション営業統括本部 パートナーテクノロジー本部 プリンシパル テクノロジーアドバイザー ジニアス平井(平井昌人) masath@microsoft.comCaution
本資料に掲載されている情報は、開発中
の製品および技術に関するものも含まれ
ております。これらは今後、変更される
可能性もあります。
当日のセミナーで使用する資料は、内容
の変更やスライドの追加を行っている場
合があります。最新のプレゼンテーショ
ン資料は以下のサイトからダウンロード
して下さい。
http://www.MasatoHirai.com/
自己紹介
平井 昌人(ジニアス平井)
マイクロソフト株式会社 パートナーソリューション営業統括本部 パートナーテクノロジー本部 プリンシパル テクノロジーアドバイザー 0x2F 歳、横浜市在住。類い稀なプログラミング能力とデザイン センスを持った天才児?1993年に開発言語のサポートエンジニア としてマイクロソフトに入社。現在は SE として開発ベンダー、 SIer へ講演活動や技術支援を行っている。社歴は長いものの権限 とお金をまったく持っていないという技術オタクである。 メールアドレス
masath@microsoft.com
Twitter アカウント
@GeniusHirai
個人サイト
http://www.MasatoHirai.com
アジェンダ
Xbox® 360 + Kinect™
What’s Kinect™
Kinect Sensor Details
Kinect for Windows SDK
How to Install SDK & Setup
Welcome to Kinect Programing
Enjoy Sample Applications
Xbox 360® + Kinect
~ 世界累計販売台数が 1000 万台突破! ~
2011年 3月で 1000万台突破!(世界累計販売台数)
発売 90日で 80万台! Xbox 360® 4GB + Kinect™
希望小売価格 29,800円(税込) Xbox 360® 250GB + Kinect™
希望小売価格 39,800 円(税込) Xbox 360® Kinect™ センサー
希望小売価格 14,800 円 (税込)What’s Kinect ?
What’s Kinect ?
Kinect センサーの構造
~ カメラ2台、マイク4台、赤外線レーザー1台 ~
MOTORIZED TILT RGB CAMERA MULTI-ARRAY MIC 3D DEPTH SENSORSKinect センサーの内部
Kinect センサーの仕様
~ 深度センサーによるモーションチャプチャーが特徴的 ~
①Depth Sensor(近赤外線プロジェクタ)
近赤外線を広範囲にレーザー照射 レーザー波長 830nm, 出力 60mW ②RGB Camera(RGBカメラ)
USB カメラと同じで映像センサーの役割 32-bit Color VGA(640x480)30fps
③
Depth Sensor(近赤外線カメラ)
照射されたレーザーの近赤外線パターン
を撮影するカメラ
16-bit Mono QVGA(320x240)
2m の位置で 1cm 以内の誤差
視野角 水平57度、垂直43度、感知範囲 1.2m~3.5m
④
Multi-Array Microphone(内蔵マイク)
音声認識、音源の位置や方向を検知
プレイスペース
~ 正直かなり広いスペースが必要なんです ~
GOOD SPACE
ENOUGH SPACE
NO SPACE
DANGER SPACE
Kinect の設置
~ PC で利用する場合は USB 延長ケーブルが欲しい ~
プレイスペース
Kinect 本体は 60~180cm の高さ
一人プレイは 1.8m / 二人プレイは 2.5m 以上離れる
ZOOM for Xbox 360 (NYKO)
Kinect 用のアタッチメントレンズ
必要な距離を約 40 %カット
狭い部屋の方はこれが便利かも Amazon で 2,499 円
Kinect for Windows SDK
~ Kinect for Windows SDK from Microsoft Research ~
2011.04.13:SDK の リリースをアナウンス
MIX11 イベントで発表 2011.06.17:Beta1 リリース
一般公開&無償ダウンロード開始 2011.07.29:Beta 1 Refresh
バグ修正などドライバーの強化 プログラミング ガイドとウォークスルーなどのドキュメント拡充 2011.11.04:Beta2 リリース
Skeletal Frame 取得の高速化 x64 ビルドに対応(これまでは x86 のみ) サンプルを追加(KinectAudioDemo, KinectWpfViewers) ※ 旧バージョンで作成したプロジェクトは、参照設定のやり直しと再ビルドが 必要なので注意 http://social.msdn.microsoft.com/Forums/en-US/kinectsdk/thread/da651816-78e5-4fba-916f-d08982f5ec19Kinect SDK システム要件
~ Windows 7 が快適に動いている環境であれば OK ~
XBOX360 Kinect センサー
USB 電源ケーブルで PC の USB ポートに接続可能であること
OS:Windows 7(32ビット、64ビット)
Windows XP, Windows Vista には未対応 Windows 8 Developer Preview 対応
CPU:デュアルコア 2.66GHz 以上
Kinect センサー内部だけでなく PC 側でも処理が必要なため
メモリ:2GB 以上
ビデオカード:DirectX 9.0c 対応のもの
開発ツール
Visual Studio 2010(Express 可)
Kinect USB 電源ケーブル
~ Xbox 360 + Kinect 版をご購入の方はこれが必要 ~
USB の形状が微妙に違う
そのままでは PC の USB ポートに 刺さらない 新型 Xbox360 では Kinect 専用の ポートがあるため USB 電源ケーブルを別途購入
Xbox カスタマーサポートに TEL して注文 http://support.xbox.com/ja-jp/Pages/default.aspx 0120-220-34 シリアルNo Xbox Kinect 3,830 円 支払い方法 クレジット 代金引換SDK のダウンロード
~ Step-by-Step ~
Kinect for Windows SDK のダウンロード
http://www.kinectforwindows.org/download/
KinectSDK-v1.0-beta2-x86.msi KinectSDK-v1.0-beta2-x64.msi
32-bit 版と 64-bit 版があるのでインストールする Windows 7 と
同じもの
ライセンス
このバージョンでは
SDK のインストール
~ Step-by-Step ~
ダウンロードした msi ファイルを起動
KinectSDK-v1.0-beta2-x86.msi または KinectSDK-v1.0-beta2-x64.msi 32-bit, 64-bit を間違えてもインストーラにはじかれる 既定のインストール先 C:¥Program Files¥Microsoft SDKs¥Kinect¥v1.0 Beta2
インストール時の注意点
他の Kinect ドライバーや古い SDK はアンインストールしておく SDK のドライバーが正しくインス トールされない Kinect センサーは絶対に USB ポートに接続しておかないこと Visual Studio は終了しておくKinect センサードライバー認識
~ Step-by-Step ~
Kinect センサーの取り付け
電源を入れた状態で Kinect センサーを USB ポートに接続 自動的にドライバーのインストールが開始される Kinect センサーの 緑 LED ランプが点滅していれば OK Kinect ドライバー
Microsoft Kinect Device
Microsoft Kinect Audio Control Microsoft Kinect Camera
Kinect センサーの動作確認
~ サンプルアプリの Skeletal Viewer で確認 ~
Sample Skeletal Viewer で動作確認
[すべてのプログラム]-[Microsoft Kinect 1.0 Beta2
SDK]-[Sample Skeletal Viewer]を起動
Kinect センサーからかなり離れないと認識不能(1.8m以上) 立ち上がった状態で体を動かす
センサーの上下角度は自分で調整(壊さないようにね) Skeletal View に骨格が表示されれば OK
Speech SDK のインストール
~ 次は音声認識もやっておこう ~
Microsoft Speech Platform Runtime
x64 環境では 32-bit, 64-bit の両方をインストール
Microsoft Speech Platform - Software
Development Kit
環境に合わせて x64 / x86
をインストール
Kinect for Windows
Language Pack
日本語環境でも OK
サンプルで動作確認
[Sample Kinect Audio Demo] レッド/グリーン/ブルー
サンプルゲームで準備体操
~ プログラミングする前に準備体操をしましょう! ~
Sample Shape Game で体を慣らす
[すべてのプログラム]-[Microsoft Kinect 1.0 Beta2
SDK]-[Sample Shape Game]を起動
プロジェクトの準備
~ Managed Code で Hello Kinect 的ものを作ろう ~
VS 2010 で新規プロジェクト(C# or VB)
WPF アプリケーション Microsoft.Research.Kinect の参照
GAC に入っているので [.NET]タブ Microsoft.Research.Kinect.dll Kinect の初期化と終了処理
using Microsoft.Research.Kinect.Nui;private Microsoft.Research.Kinect.Nui.Runtime nui;
private void Window_Loaded(object sender, RoutedEventArgs e) {
nui = Runtime.Kinects[0]; // 接続された Kinect のインデックス
nui.Initialize(RuntimeOptions.UseColor | RuntimeOptions.UseDepth |
RuntimeOptions.UseDepthAndPlayerIndex | RuntimeOptions.UseSkeletalTracking); }
private void Window_Unloaded(object sender, RoutedEventArgs e) { nui.Uninitialize();
RGBCamera イメージの取得
~ ライブ画像(生カメ)の取得と表示 ~
VideoStream のオープン
イベントハンドラ
Image コントロールへの描画
XAML に Image コントロールを配置nui.VideoStream.Open(ImageStreamType.Video, 2,
ImageResolution.Resolution640x480, ImageType.Color);
nui.VideoFrameReady +=
new EventHandler<ImageFrameReadyEventArgs>(nui_VideoFrameReady);
PlanarImage img = e.ImageFrame.Image; Image1.Source = BitmapSource.Create(
img.Width, img.Height, 96, 96, PixelFormats.Bgr32, null, img.Bits, img.Width*img.BytesPerPixel);
DepthCamera イメージの取得
~ 深度データイメージとプレイヤー判定 ~
DepthStream のオープンとイベントハンドラ
ビットデータの変換(単純な画像イメージでない)
Walkthrogh の convertDepthFrame ヘルパ関数を参照 下位 3ビット = Player Index 残りのビット = 深度(ミリメートル単位) Image コントロールへの描画
nui.DepthStream.Open(ImageStreamType.Depth, 2,
ImageResolution.Resolution320x240, ImageType.DepthAndPlayerIndex); nui.DepthFrameReady +=
new EventHandler<ImageFrameReadyEventArgs>(nui_DepthFrameReady);
void nui_DepthFrameReady(object sender, ImageFrameReadyEventArgs e) { PlanarImage img = e.ImageFrame.Image; byte[] b = convertDepthFrame(img.Bits); Image1.Source = BitmapSource.Create( img.Width, img.Height, 96, 96,
PixelFormats.Bgr32, null, b, img.Width * 4); }
Skelton Data の処理
~ これぞ! Kinect プログラミング ~
SkeletonFrameReady イベントハンドラの定義
スケルトンデータの解析
SkeletonFrame.Skeletonsプロパティで取得 Canvas コントロールへ描画
Polyline コントロール生成して Canvas に Add するパターン nui.SkeletonFrameReady +=new EventHandler<SkeletonFrameReadyEventArgs>(nui_SkeletonFrameReady);
void nui_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e) {
SkeletonFrame skeletonFrame = e.SkeletonFrame;
foreach (SkeletonData data in skeletonFrame.Skeletons) {
// ここに解析&表示用ポリゴンを記述
} }
Skeleton Joints
~ 骨格(スケルトン)は 20 か所のポイントが測定 ~
スケルトンジョイントポイント
列挙型の JointID で示される JointID 人体の位置 Head 頭 ShoulderCenter 首元(両肩の間) Spine 胴(脊柱) HipCenter 腰 JointID 人体の位置 JpintID HandRight 手 HandLeft WristRight 手首 WristLeft ElbowRight 肘 ElbowLeft ShoulderRight 肩 ShoulderLeft HipRight 尻 HipLeft KneeRight 膝 KneeLeft AnkleRight 足首 AnkleLeft FootRight 足 FootLeftKinect PPT リモコンのコード例
~ スケルトンデータの座標や距離から動作・ポーズを判断 ~
SkeletonFrameReady イベントハンドラで左右の手と頭の位置を利用 頭と右手が 右へ 45cm 離れたら [→]キーを送信 頭と左手が 左へ 45cm 離れたら [←]キーを送信 右手を頭に重ねたら[ESC]キーを送信var head = m.Joints[JointID.Head];
var rightHand = m.Joints[JointID.HandRight];
var leftHand = m.Joints[JointID.HandLeft]; MyGesture(head, rightHand, leftHand);
if (rightHand.Position.X > head.Position.X + 0.45) { System.Windows.Forms.SendKeys.SendWait("{Right}"); }
if (leftHand.Position.X < head.Position.X - 0.45) { System.Windows.Forms.SendKeys.SendWait("{Left}"); }
if (Math.Abs(rightHand.Position.X - head.Position.X) < 0.05 && Math.Abs(rightHand.Position.Y - head.Position.Y) < 0.05) { dynamic obj = CreateObject("WScript.Shell");
obj.SendKeys("{Esc}"); }
CodePlex サンプル群
~ 後は色々なサンプルを見て理解を深めよう ~
敷居は低くないぞ!
3D の知識(Camera, ViewPort, …) ビット処理