新型Kinect for Windows v2 Developer Previewプログラミング入門(6)
Kinect.Xaml.ControlsでストアアプリからKinectを操作する
6月24日に提供開始されたJune SDK Updateの新機能(April SDK Updateからの変更点)を紹介。Windowsストアアプリ用インタラクションコントロールなどが追加された。
前回は「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)。
Me.Kinect = KinectSensor.KinectSensors.FirstOrDefault(
Function(x)
Return x.Status = KinectStatus.Connected
End Function)
|
this.Kinect = KinectSensor.KinectSensors.FirstOrDefault((x) =>
{
return x.Status == KinectStatus.Connected;
});
|
Me.Kinect = KinectSensor.GetDefalt
|
this.Kinect = KinectSensor.GetDefault();
|
BodyCountプロパティの利用方法の変更
今回のアップデートまでは、センサー初期化処理の1つとして、取得可能人数分の大きさでBody形式配列を確保しておき、「フレーム取得→GetAndRefreshBodyDataメソッドでフレームからBody形式配列へコピー→骨格データ処理」を繰り返すことで骨格データを処理していた(参考:「新型Kinectの骨格データに関する新機能とは?」の「リスト2.5 骨格データ処理部(上:VB.NET、下:C#)」)。
今回のアップデートでは、取得可能人数を表すBodyCount
プロパティの所属先が、BodyFrameSource
クラスからBodyFrame
クラスに変更された。つまり、取得可能人数ではなく取得人数を表すプロパティに変更がなされたということだ。
そのため、取得タイミングもフレーム取得後に実施することになる(以前は、VBならMe.Kinect.BodyFrameSource.BodyCount
のようなコードを記述していた)。
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
|
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
|
- 1取得人数分の大きさでBody形式配列を確保する。
Kinect Studio
Kinect Studioの全面的な作り直しが行われた。そのため今回のアップデートでは、Kinectデータの録画/再生は動いているが表示回りについては、7月以降のアップデートで随時手直しが入る予定とのことだ。
Gesture Builder
Gesture Builderでは、機械学習によるジェスチャ定義をサポートする予定だ。Gesture Builderも機能面や品質面がこれからのアップデートで拡充されてきたら、あらためて紹介したい。
Plug/UnPlug対応
USBの抜き差しに対応できるようになった。これで、v1のときと同じような気軽さでセンサーを扱えるようになる。一見地味な機能だが、今までKinect2プレビュー版を使ってきた人であれば、待望の機能の1つだろう。
Windowsストアアプリ用インタラクションコントロール
Windowsストアアプリに対して操作が行えるXAMLコントロールが提供された。
このコントロールを使えば、手軽にKinectによる操作機能を付与できる。次の画面では、上部に操作している様子が描画されているが、このようにKinectでWindowsストアアプリのUIを操作できる。
このコントロールがサポートしている操作は、次の通りだ。Kinect SDK v1のToolkitやXboxでの操作感と近いものが提供されている。
Windowsストアアプリプロジェクトの変更点
既存のWindowsストアアプリに、このコントロールを追加する方法も非常に簡単で、次のようなステップだけでよく、個々の画面に対して何かコードを追加する必要はない。
- KinectSDKv2プレビュー版のアセンブリへの参照設定
- コントロール描画用のスタイルであるHandPoint.xamlファイルをプロジェクトに追加
- App.xamlファイルに
<ResourceDictionary Source="HandPointerStyles.xaml"/>
を追記 - App.xaml.vb/App.xaml.csファイルで
Window.Current.Content = rootFrame
となっているところを以下のように変更
Window.Current.Content = KinectRegion.CreateHandPointerCursorLayer(
rootFrame, HorizontalAlignment.Center, VerticalAlignment.Top)
|
Window.Current.Content = KinectRegion.CreateHandPointerCursorLayer(
rootFrame, HorizontalAlignment.Center, VerticalAlignment.Top);
|
この共通作業を実施すれば、お手持ちのWindowsストアアプリのプロジェクトにKinectインタラクション機能が追加できる。
マニフェストでの機能の許可
KinectをWindowsストアアプリで使用するときは、「マイク」機能と「Webカメラ」機能の許可をマニフェストに追加する必要がある(次の画面は、設定を行っている例)。Kinectインタラクションを追加した場合にも、この2つの機能を有効にしておこう。
まとめ
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(公開プレビュー版)をレビュー。ハードウェアスペックや、センサーの特徴について紹介する。