Kinect for Windows SDK Xbox 360 Kinect センサー プログラミング概要 日本マイクロソフト株式会社 パートナーソリューション営業統括本部 パートナーテクノロジー本部 プリンシパル テクノロジーアドバイザー ジニアス平井 平井昌人 masath@microsoft.com
Caution 本資料に掲載されている情報は 開発中の製品および技術に関するものも含まれております これらは今後 変更される可能性もあります 当日のセミナーで使用する資料は 内容の変更やスライドの追加を行っている場合があります 最新のプレゼンテーション資料は以下のサイトからダウンロードして下さい http://www.masatohirai.com/
自己紹介 平井 昌人 ジニアス平井 マイクロソフト株式会社 パートナーソリューション営業統括本部 パートナーテクノロジー本部 プリンシパル テクノロジーアドバイザー 0x2F 歳 横浜市在住 類い稀なプログラミング能力とデザイン センスを持った天才児 1993年に開発言語のサポートエンジニア としてマイクロソフトに入社 現在は SE として開発ベンダー SIer へ講演活動や技術支援を行っている 社歴は長いものの権限 とお金をまったく持っていないという技術オタクである メールアドレス Twitter アカウント 個人サイト masath@microsoft.com @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? Xbox 360 用のモーションキャプチャーデバイス
Kinect センサーの構造 カメラ2台 マイク4台 赤外線レーザー1台 3D DEPTH SENSORS RGB CAMERA MULTI-ARRAY MIC MOTORIZED TILT
Kinect センサーの内部 将来的には小型化へ
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 内蔵マイク 音声認識 音源の位置や方向を検知 左に1つ 右に3つの計4個
プレイスペース 正直かなり広いスペースが必要なんです 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-d08982f5ec19
Kinect 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 可 ).NET Framework 4(Visual Studio 2010 に含まれる )
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 Microsoft Microsoft Microsoft Kinect Kinect Kinect Kinect Device Audio Control Camera Audio Array Control
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]を起動 発声練習もしておく Speed up / Slow down とか
プロジェクトの準備 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 のオープン nui.videostream.open(imagestreamtype.video, 2, ImageResolution.Resolution640x480, ImageType.Color); イベントハンドラ nui.videoframeready += new EventHandler<ImageFrameReadyEventArgs>(nui_VideoFrameReady); Image コントロールへの描画 XAML に Image コントロールを配置 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 のオープンとイベントハンドラ nui.depthstream.open(imagestreamtype.depth, 2, ImageResolution.Resolution320x240, ImageType.DepthAndPlayerIndex); nui.depthframeready += new EventHandler<ImageFrameReadyEventArgs>(nui_DepthFrameReady); ビットデータの変換 単純な画像イメージでない Walkthrogh の convertdepthframe ヘルパ関数を参照 下位 3ビット Player Index 残りのビット = 深度 ミリメートル単位 Image コントロールへの描画 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 イベントハンドラの定義 nui.skeletonframeready += new EventHandler<SkeletonFrameReadyEventArgs>(nui_SkeletonFrameReady); スケルトンデータの解析 SkeletonFrame.Skeletonsプロパティで取得 void nui_skeletonframeready(object sender, SkeletonFrameReadyEventArgs e) { SkeletonFrame skeletonframe = e.skeletonframe; foreach (SkeletonData data in skeletonframe.skeletons) { // ここに解析 表示用ポリゴンを記述 } } Canvas コントロールへ描画 Polyline コントロール生成して Canvas に Add するパターン
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 足 FootLeft
Kinect PPT リモコンのコード例 スケルトンデータの座標や距離から動作 ポーズを判断 SkeletonFrameReady イベントハンドラで左右の手と頭の位置を利用 var head = m.joints[jointid.head]; var righthand = m.joints[jointid.handright]; var lefthand = m.joints[jointid.handleft]; MyGesture(head, righthand, lefthand); 頭と右手が 右へ 45cm 離れたら [ ]キーを送信 頭と左手が 左へ 45cm 離れたら [ ]キーを送信 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}"); } 右手を頭に重ねたら[ESC]キーを送信 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, ビット処理 Kinect Earth Move Kinect Paint
モーションキャプチャーの時代へ GUI から NUI へ
Questions And Answers
Thanks for Attending! アンケートにご協力ください 本セッション専用のアンケート用紙がございます お手数をお掛けしますが ご協力ほどお願いします