新型Kinect for Windows v2 Developer Previewプログラミング入門(6)

新型Kinect for Windows v2 Developer Previewプログラミング入門(6)

Kinect.Xaml.ControlsでストアアプリからKinectを操作する

2014年7月10日

6月24日に提供開始されたJune SDK Updateの新機能(April SDK Updateからの変更点)を紹介。Windowsストアアプリ用インタラクションコントロールなどが追加された。

初音 玲(Microsoft MVP for Visual Basic)
  • このエントリーをはてなブックマークに追加

 前回は「Kinect for Windows SDK v2 Developer Preview(以下、KinectSDK2プレビュー版)」のApril SDK Updateの変更点を報告した。今回は、シアトル現地時間で2014年6月24日に突然提供が開始されたJune SDK Updateについて報告する。なお、前回予告したAudio関連であるが、ネイティブAPI以外はまだ対応が完了していない状況であるので対応が完了次第、ご報告したい。

注意事項

 本稿で検証に使用したKinect for Windows v2 Developer Previewのソフトウェアやハードウェア、APIは暫定的なものであり、正式版では変更される可能性がある。

 また、本稿は早期提供プログラムの参加規約で公表が許可されている事項について実際に確認した結果に基づき記載していることもあらかじめご了承いただきたい。

June SDK Updateでの変更点

 June SDK Updateでの新機能は、以下の通り。

  • マネージ(Managed)版APIの調整
  • Kinect Studio
  • Gesture Builder
  • Plug/UnPlug対応
  • Windowsストアアプリ用インタラクションコントロール

 なお、このアップデートから、ソフトウェア要件が従来の「Visual Studio 2012のみ」から「Visual Studio 2012もしくはVisual Studio 2013」となっており、Visual Studio 2013が正式に要件として記載されている。

マネージ版APIの調整

DefaultメソッドからGetDefaultメソッドへの変更

 KinectSDK2プレビュー版の初版では接続された複数のKinectからステータスがConnectedのものを探す方式であったが(リスト1.1)、June SDK UpdateではGetDefaultメソッドにより自動的に1台を取得する方法に変更された(リスト1.2)。

Visual Basic
Me.Kinect = KinectSensor.KinectSensors.FirstOrDefault(
  Function(x)
    Return x.Status = KinectStatus.Connected
  End Function)
C#
this.Kinect = KinectSensor.KinectSensors.FirstOrDefault((x) =>
{
  return x.Status == KinectStatus.Connected;
});
リスト1.1 Kinect2SDKプレビュー初版によるKinectの初期化(上:VB、下:C#)
Visual Basic
Me.Kinect = KinectSensor.GetDefalt
C#
this.Kinect = KinectSensor.GetDefault();
リスト1.2 June SDK Update版によるKinectの初期化(上:VB、下:C#)

BodyCountプロパティの利用方法の変更

 今回のアップデートまでは、センサー初期化処理の1つとして、取得可能人数分の大きさでBody形式配列を確保しておき、「フレーム取得→GetAndRefreshBodyDataメソッドでフレームからBody形式配列へコピー→骨格データ処理」を繰り返すことで骨格データを処理していた(参考:「新型Kinectの骨格データに関する新機能とは?」の「リスト2.5 骨格データ処理部(上:VB.NET、下:C#)」)。

 今回のアップデートでは、取得可能人数を表すBodyCountプロパティの所属先が、BodyFrameSourceクラスからBodyFrameクラスに変更された。つまり、取得可能人数ではなく取得人数を表すプロパティに変更がなされたということだ。

 そのため、取得タイミングもフレーム取得後に実施することになる(以前は、VBならMe.Kinect.BodyFrameSource.BodyCountのようなコードを記述していた)。

Visual Basic
Private Sub Reader_FrameArrived(sender As Object, e As BodyFrameArrivedEventArgs) Handles Reader.FrameArrived
  Dim frameReference = e.FrameReference()
 
  Using frame = frameReference.AcquireFrame
    If frame IsNot Nothing Then
      Using dc = Me.BodyDrawingGroup.Open
        Dim bodies(frame.BodyCount - 1) As Body         '……1
C#
private void Reader_FrameArrived(object sender, BodyFrameArrivedEventArgs e)
{
  var frameReference = e.FrameReference;
 
  using (var frame = frameReference.AcquireFrame())
  {
    if (frame != null)
    {
      using (var dc = this.BodyDrawingGroup.Open())
      {
        Body[] bodies = new Body[frame.BodyCount];      //……1
リスト2.1 初期化(上:VB、下:C#)
  • 1取得人数分の大きさでBody形式配列を確保する。

Kinect Studio

図3.1 Kinect Studio(Preview)

 Kinect Studioの全面的な作り直しが行われた。そのため今回のアップデートでは、Kinectデータの録画/再生は動いているが表示回りについては、7月以降のアップデートで随時手直しが入る予定とのことだ。

Gesture Builder

 Gesture Builderでは、機械学習によるジェスチャ定義をサポートする予定だ。Gesture Builderも機能面や品質面がこれからのアップデートで拡充されてきたら、あらためて紹介したい。

Plug/UnPlug対応

 USBの抜き差しに対応できるようになった。これで、v1のときと同じような気軽さでセンサーを扱えるようになる。一見地味な機能だが、今までKinect2プレビュー版を使ってきた人であれば、待望の機能の1つだろう。

Windowsストアアプリ用インタラクションコントロール

 Windowsストアアプリに対して操作が行えるXAMLコントロールが提供された。

 このコントロールを使えば、手軽にKinectによる操作機能を付与できる。次の画面では、上部に操作している様子が描画されているが、このようにKinectでWindowsストアアプリのUIを操作できる。

図6.1 WindowsストアアプリをKinectで操作する例

 このコントロールがサポートしている操作は、次の通りだ。Kinect SDK v1のToolkitやXboxでの操作感と近いものが提供されている。

図6.2 コントロールがXbox 360/Kinect for Windows 1.x/Xbox One/Kinect for Windows 2.0でサポートする操作機能

Windowsストアアプリプロジェクトの変更点

 既存のWindowsストアアプリに、このコントロールを追加する方法も非常に簡単で、次のようなステップだけでよく、個々の画面に対して何かコードを追加する必要はない。

  1. KinectSDKv2プレビュー版のアセンブリへの参照設定
  2. コントロール描画用のスタイルであるHandPoint.xamlファイルをプロジェクトに追加
  3. App.xamlファイルに<ResourceDictionary Source="HandPointerStyles.xaml"/>を追記
  4. App.xaml.vb/App.xaml.csファイルでWindow.Current.Content = rootFrameとなっているところを以下のように変更
Visual Basic
Window.Current.Content = KinectRegion.CreateHandPointerCursorLayer(
   rootFrame, HorizontalAlignment.Center, VerticalAlignment.Top)
C#
Window.Current.Content = KinectRegion.CreateHandPointerCursorLayer(
   rootFrame, HorizontalAlignment.Center, VerticalAlignment.Top);
リスト6.2 現在のコンテンツの設定部分を変更(上:VB、下:C#)

 この共通作業を実施すれば、お手持ちのWindowsストアアプリのプロジェクトにKinectインタラクション機能が追加できる。

マニフェストでの機能の許可

 KinectをWindowsストアアプリで使用するときは、「マイク」機能と「Webカメラ」機能の許可をマニフェストに追加する必要がある(次の画面は、設定を行っている例)。Kinectインタラクションを追加した場合にも、この2つの機能を有効にしておこう。

図6.3 機能の許可

まとめ

 Kinect v2のプレオーダーも開始され(日本でも間もなく開始とのこと)、また、Microsoft Virtual AcademyでのKinect v2コンテンツ(英語)の提供も7月15日から開始される予定だ。それに先立って急いで提供開始された感じもするが、Kinectインタラクションコントロールなど直前になっても新しい機能が追加されてきており、ますますその動向を注目していきたい。

※以下では、本稿の前後を合わせて5回分(第3回~第7回)のみ表示しています。
 連載の全タイトルを参照するには、[この記事の連載 INDEX]を参照してください。

3. 新型Kinectの骨格データに関する新機能とは?

KinectSDK2プレビュー版の距離データと骨格データに関する主要な変更点を解説。手の開閉が判定できるようになり、グー、チョキ、パーも判別可能に。

4. 世界最速・最新情報、March SDK Update(Kinect for Windows v2 Developer Preview)の内容に迫る!

本日、SDKの3月更新版が提供された。その更新点として「Kinectファームウェアの更新」「Kinect Serviceの変更は特になし」「Kinect Studioの提供」について紹介。

5. Windowsストアアプリ対応に、Unityサポートも ― 最新April SDK Update(Kinect for Windows v2 Developer Preview)の新機能

4月30日に提供が開始された「April SDK Update」の内容を解説。Windowsストアアプリ対応/Unityサポート/サービス・スピンダウン機能/Audio APIなどの新機能を紹介する。

6. 【現在、表示中】≫ Kinect.Xaml.ControlsでストアアプリからKinectを操作する

6月24日に提供開始されたJune SDK Updateの新機能(April SDK Updateからの変更点)を紹介。Windowsストアアプリ用インタラクションコントロールなどが追加された。

7. 日本最速レビュー。開発者目線で調査する「Kinect for Windows v2」パブリックプレビュー版

ついに日本でも購入可能になったKinect for Windows v2センサー(オープンベータ版)と、そのSDK(公開プレビュー版)をレビュー。ハードウェアスペックや、センサーの特徴について紹介する。

サイトからのお知らせ

Twitterでつぶやこう!