Projects‎ > ‎KINECT‎ > ‎

kinelog

20111107-Runtime()初期化の仕様変更

posted Nov 6, 2011, 10:05 PM by Akihiko Shirai   [ updated Nov 6, 2011, 10:06 PM ]


Beta1→Beta2への移行作業中。
Runtime()初期化の仕様変更
クラスに対して新しいインスタンスを作成する(インスタンスインデックスで指定)。
(使用例)Beta1では使えていた初期化
this.kinect= new Runtime();

このような指定をすると
'Microsoft.Research.Kinect.Nui.Runtime.Runtime()' は古い形式です: 'This constructor to be removed.  Use Runtime.Kinects[0] instead.'
という警告が出ます。

APIマニュアルを見ると「This constructor is obsolete starting with the Beta 2 release.」ということでBeta2では推奨されないようです。
「Overloaded」ということですが、Runtime Constructorにオーバーロードされたということでしょうか。
「Runtime Constructor ()」の項目を見ると、Remarksに
Creates a new instance of this class with an Runtime.InstanceIndex of 0.
ということです。手っ取り早く、Runtime()の正しい書式が知りたいわけですが。

<手っ取り早い方法>
// Runtime kinect; //Kinectセンサクラス (Beta1)
public Microsoft.Research.Kinect.Nui.Runtime kinect; //Beta2対応
---
//Kinectセンサクラスの初期化
// this.kinect = new Runtime(); //For SDK Beta1
this.kinect = Microsoft.Research.Kinect.Nui.Runtime.Kinects[0];

<回りくどいけどフル機能>
SDK Beta2サンプルソースのKinectColorViewer.zaml.cs冒頭に面白い記述が。
using KinectNui = Microsoft.Research.Kinect.Nui; //Microsoft.Runtime is conflicting with using Runtime without an expicit namespace. This happens because the namespace starts with "Microsoft."

        public void ReInitRuntime()
        {
            // Will call Uninitialize followed by Initialize.
            this.Kinect = this.Kinect;
        }

        public KinectNui.Runtime Kinect
        {
            get { return _Kinect; }
            set
            {
                //Clean up existing runtime if we are being set to null, or a new Runtime.
                if (_Kinect != null)
                {
                    kinectColorViewer.Kinect = null;
                    kinectDepthViewer.Kinect = null;                    
                    _Kinect.SkeletonFrameReady -= new EventHandler<SkeletonFrameReadyEventArgs>(nui_SkeletonFrameReady);
                    _Kinect.Uninitialize();
                }

                _Kinect = value;

                if (_Kinect != null)
                {
                    InitRuntime();

                    kinectColorViewer.Kinect = _Kinect;

                    kinectDepthViewer.RuntimeOptions = RuntimeOptions;
                    kinectDepthViewer.Kinect = _Kinect;

                    _Kinect.SkeletonFrameReady += new EventHandler<SkeletonFrameReadyEventArgs>(nui_SkeletonFrameReady);

                    UpdateUi();
                }
            }
        }
---

        private void InitRuntime()
        {
            //Some Runtimes' status will be NotPowered, or some other error state. Only want to Initialize the runtime, if it is connected.
            if (_Kinect.Status == KinectStatus.Connected)
            {
                bool skeletalViewerAvailable = IsSkeletalViewerAvailable;

                // NOTE:  Skeletal tracking only works on one Kinect per process right now.
                RuntimeOptions = skeletalViewerAvailable ?
                                     RuntimeOptions.UseDepthAndPlayerIndex | RuntimeOptions.UseSkeletalTracking | RuntimeOptions.UseColor
                                     : RuntimeOptions.UseDepth | RuntimeOptions.UseColor;
                _Kinect.Initialize(RuntimeOptions);
                skeletonPanel.Visibility = skeletalViewerAvailable ? System.Windows.Visibility.Visible : System.Windows.Visibility.Collapsed;
                if (RuntimeOptions.HasFlag(RuntimeOptions.UseSkeletalTracking))
                {
                    _Kinect.SkeletonEngine.TransformSmooth = true;
                }
            }
        }

ちなみに同じ事にハマっているひとは世界には何人かいたようで、
”Migrating from Kinect for Windows SDK Beta 1 to Beta 2”に上記に関係したコードが掲載されています。Thanks.


Kinect SDK beta2がリリースされてました(いろいろ比較)

posted Nov 4, 2011, 12:19 PM by Akihiko Shirai   [ updated Nov 6, 2011, 10:03 PM ]

Kinect SDK beta2がリリースされてました。
学園祭で忙しいのに。
昨日やっとCQ-Interfaceの校了。したところだったのに。
しくしく。

・書籍「KINECTセンサープログラミング」を書かれた中村薫氏(@kaorun55)のBlogより
Beta1 Refreshからの変更点
  • 骨格の追跡が大幅に向上
  • より正確なトラッキングの結果、精度が全体的に改善された
  • 骨格フレームの配信は低レイテンシになり、その結果高速になった
  • 骨格の追跡がマルチスレッド化され、複数のCPUコアを活用することができる
  • 2つのKinectsを使用する場合に、開発者がどちらのKinectに骨格を追跡させるかを指定できる
  • デバイスの状態が変わったことを管理、検出するAPIが追加された。 Kinectが抜かれたり、接続されたりしたときの状態や、電源が抜かれたときの状態を検出することができる。アプリケーションは、Kinectが接続されたときや、サスペンドから復帰したときに再接続を行うことができる。これらの処理はShape Game サンプルのコードを見ることが一番よい例である。
  • 開発者がWPF内でオーディオを使用する場合に、別のスレッドからDMOにアクセスする必要がなくなった。UIスレッドでKinectAudioSourceを作成することでコードを簡略化できる。
  • ドライバ、ランタイム、およびSDKは、Windows 8 Developer Preview用のデスクトップアプリケーションとして、正常に動作します。
  • SDKは、64ビットアプリケーションをビルドするために使用することができる。以前は、32ビットアプリケーションのみビルドできた。
  • NuiImageBufferは、MSR_NuiImageCamera.hで定義されているINuiFrameTextureに置き換えられた。そのためプロジェクト内でNuiImageBuffer.hを含める必要がなくなった
  • SDKのインストールの配置と、デフォルトの場所が変更されています。インストール先の環境変数は、%KINECTSDK_DIR%になり、デフォルトのインストール先は C:\Program Files\Microsoft SDKs\Kinect\v1.0 Beta2 になっている
  • サンプルコードの変更
  • 新しいC#のサンプルにKinectAudioDemoが追加された
  • 既存のサンプルが更新されている。一般的なC#のサンプルとして、KinectWpfViewersを見ることをオススメする
  • サンプルフォルダはSDKのインストールディレクトリにある。デフォルトでは C:\Program Files\Microsoft SDKs\Kinect\v1.0 Beta2\Samples。ZIPファイルになっているので、Program Filesフォルダ以外に解凍する
  • ドライバとランタイムの安定性と、パフォーマンスの向上。特にマネージAPI層

なかなか面白い更新が入っています。
個人的にはゲームサンプル「Skeletal Viewer」のC++版が解説されたのは、MSの本気具合を高く評価したいところ。
[readmeより]
C++版の動作確認には以下のSDKとランタイムが必要です。

以下、特集であつかった部分の差分をまとめてみました。
左側がBeta(無印)、右側がBeta2という感じです。

・インストールまでの違い

まずホームページの見た目が大きく変わりました。そしてURLも。


★Kinect SDK Beta2のインストールのためにはKinect SDK Beta(無印)をアンインストールする必要があります。

インストーラー自体は変化無いようです。

Beta1: Finish


キービジュアルが水ロゴになった以外はライセンス等も変更がないようです。

デバイスマネージャー上のドライバ表記も変化無いようです。

Beta2:DeviceManager



・新サンプル「Sample Kinect Audio Demo」が追加されました


Beta1:menu
 Beta2:StartMenu


・「Sample Skeletal Viewer」が複数KINECT対応になった
Beta1: Skeletal Viewer

左下に「Kinects」という表示が増えてます。
トラッキングはどのKinectにさせるかを選ぶことができる、ということは全部のKinectを使って、という訳ではないということでしょうかね(未調査)。

・「Sample Shape Game」

Beta1: Shape GameBeta2: Shape


特に見た目に変化はないですが、新機能のデバイス状態検出のお陰で電源プラグ抜くと面白いことが起きます。

動作中に電源プラグを抜いた場合
動作中に電源プラグを抜いた場合:
「Attach Kinect to PC to Play」

起動前から電源プラグを抜いておいた場合
起動前から電源プラグを抜いておいた場合:
「Kinect is attached to PC, but AC power is missing.」

Beta2へのアップデートにはBeta(無印)のアンインストールが必要なため、すでにBeta(無印)での動作を確認することができませんが、たしかクラッシュしていただけだったと記憶しています。
WiiRemoteの時は、ちょうど流行ってきた頃になってもこの手のデバイス状態管理のAPIは存在しませんでしたので、難儀しました(自分でBluetoothマネジャーとか書いた人がもいた)。
産業利用するということは、こういうことをちゃんとやるってことですねえ。

・新サンプル「Sample Kinect Audio Demo」

いままでBeta(無印)では64bit版のサポートがされていなかったのですが、64bit版のビルドもサポートしたのでMicrsoft Speech Platform SDKもx64版をインストールしておきます(v10.02)。
さらにLanguage Packも更新(readmeの指示)。
http://go.microsoft.com/fwlink/?LinkId=220942

「MSKinectLangPack_enUS.msi」が何故か起動しないのでここで再起動。
しかしやっぱり起動できないので、これはきっと睡眠しましょう、というKinectの神様のご示唆ということにして、ここで一旦帰って寝ます。
思い直して、READMEを読み直したら、ランタイムはx86版とx64版両方入れておくこと推奨、ということで入れたら動きました。

Sound Source Localization

起動した新サンプルには「Sound Source Localization」という名前がついていますね。
"red", "green", "blue" といった英語を話すと、話者の方向を推定して、さらに認識に成功するとバーの色を変更します。
これはちょっとした英会話教材になるかも!

(続く予定)

20111026

posted Oct 26, 2011, 6:24 AM by Akihiko Shirai

KINECT本プロジェクト進行中!
乞うご期待!

取り急ぎ、第一弾は
CQ出版社「Interface」2012年1月号での特集になります。

やったー!今脱稿した-!
16ページ構成という話ですが…原稿料いくらぐらいかな~。楽しみだ。

1-3 of 3