2013年11月29日金曜日

Kinect2ファーストインプレッション(3)〜Depthカメラを試してみる〜

Kinect2で一番気になるのは、Depthカメラの精度でしょう。深度の取り方がTOFに変わりましたので、精度は格段に良くなることが期待できますのでね。。早速試してみました。参考までに、現Kinectと比較してみます。



違いは明らか、、、???と言いたいところですが、どちらがKinect2かわかりますか?実は、前者がKinect2。近距離については意外と現Kinectも頑張っているようです。ただ、実際に目にすると、Kinect2の方が明らかに精細です。両写真の撮影場所(背景)は違うんですが、Kinect2のほうが後ろにある本棚の各本の境界(エッジ)が、明らかにわかると思います。
それと、現Kinectの仕様上存在する深度の死角(影)については、Kinect2のほうでは完全に消えていますね。これは嬉しいです。

実はKinectの処理については、ソフトウェアの部分で結構改善・改良されているところがあるようで、マイクロソフトの人も、現行のKinectでもKinect2と同じことができると言ってます(精度は違うでしょうけど)。

以上で、ファーストインプレッションは終わりです。今後は、実装する上で、どこが変わったのかなど、調査していきたいと思います。

注意書き
This is preliminary software and/or hardware and APIs are preliminary and subject to change. (この記事は、暫定的なソフトウェアやハードウェア、APIについて述べており、今後変更される可能性があります)


Kinect2 ファーストインプレッション(2) ~初期設定~

前回に続いて、Kinect2 Dev版についての続きです。α版だからかもしれませんが、セットアップが意外と面倒でした。


マシンの準備
下記の仕様を満たすPCが必要です。
  • Windows 8.1
  • メモリ4GB以上
  • i7@ 2.5GHz以上
  • USB 3.0 port (Intel or Renesas chipset)
  • DX11 capable graphics adapter
これは事前にメールで書かれていたので候補のマシンを確保していたのですが、うっかりしていて、Windows8.1にするのを忘れてました。OSアップデートに時間を費やしてしまいました。

Microsoft Connectの認証を受けておく
SDK関係は同梱されていません。Microsoft Connectからダウンロードする必要があるのですが、ユーザは限定されていますので、認証されたアカウントからしかダウンロードできません。認証方法は、既にメールで届いているはずです。ボクはうっかり見逃してました。注意しましょう。

SDKダウンロード&インストール
認証を受けた後、Microsoft Connectにアクセスしダウンロードしてインストールしましょう。サンプルプログラムも入ってます。

初期設定
現Kinectなら、SDKインストールして接続すればすぐ動くはずですが、実はそうはいきません。おかしいなぁ、、、ドライバが認識できてないのかな、、もしかして初期不良?ってよくマニュアルを読むと、
  • ファームウェアの更新
  • Kinect Serviceの起動
という2つのおまじないが必要です。ファームウェア更新は、もちろんKinectを接続してからです。更新中は絶対に本体から抜かないで下さい。で、最後に、Kinect Serviceというのを起動しておく必要があります。これはスタートメニューから実行できます。

以上の作業が終わり、晴れてKinect2が利用できます。まあ製品版ではもっとラクになるかとは思います。

注意書き
This is preliminary software and/or hardware and APIs are preliminary and subject to change. (この記事は、暫定的なソフトウェアやハードウェア、APIについて述べており、今後変更される可能性があります)



2013年11月28日木曜日

Kinect2 ファーストインプレッション(1) 

BLOGでは書いてなかったですが、7月にマイクロソフトが募集していた次世代Kinect(Kinext2)の先行取得プログラムに申し込んでいて、昨日、本体(アルファ版)が届きましたので、ファーストインプレッションの報告です。


怪しげなカラーリングがポイントです。

ちょっと図体がでかい?
現バージョンのKinectと比べるとちょっと本体が大きい??かと思いきや、意外とそうでもないです。




横幅は以前より短いかも?


高さは低いです。角度調整はできます(ソフト的にできるかは未確認)




縦幅はほぼ同じ。




背面にはなんとファンがあります(いつも動いているわけではないです)。

電源周り



バカでかくて面倒なことになってます。右がACアダプター、左がUSB変換コネクタです。まあ、正式版では改良されるのではないでしょうか?


注意書き
This is preliminary software and/or hardware and APIs are preliminary and subject to change. (この記事は、暫定的なソフトウェアやハードウェア、APIについて述べており、今後変更される可能­性があります)







コンピュータに MSVCR110.dll がないため、プログラムを開始できません

Windowsでソフトを動かそうとした時、
コンピュータに MSVCR110.dll がないため、プログラムを開始できません
みたいなメッセージがでて起動できない時があります。

これは、Visual Studio 2012(C++)でで作られたアプリのライブラリがないということなので、下記の公式サイトからダウンロードして下さい。



2013年11月2日土曜日

BackGroundWorkerによる別スレッドからUIクラスにアクセスする

過去記事にて、C#でマルチスレッドを実現するBackGroundWorkerというコンポーネントを紹介しました。スレッドクラスを利用した処理に比べてシンプルなコードになる利点がありましたが、実際に使ってみてさらなる利点に気づきました。

マルチスレッド処理のUIアクセスの制約
マルチスレッド処理をする際の困難さの1つに、プロセス間通信の制約があります。つまり、スレッドが異なる処理のデータの授受には制約があるということです。この制約の影響をモロに受けるのが、UIコンポーネントです。起動したスレッドから呼び出しものにあるUIコンポーネントにデータを渡す、、例えば、ラベルに値を表示するなどの処理は原則できません。Invorker経由でメソッドを呼び出さないといけません。これでなんら問題なければいいんですが、先日、某サードパーティ製のUIクラスを利用する時に、うまく呼び出すことができませんでした。正確に言うと、Invorker経由で呼び出すと動作が異常に遅くなるのです。もともとthreadクラスを利用していたのでその時は問題なかったのですが、今回、BackgroundWorkerを利用するとダメという、、、意味不明なことに。。。

ProgressChangedイベントが肝!
で、ネットをいろいろ調べてみると、ProgressChangedイベント内ではInvokerが不要であるということが判明しました。正直理屈のわからない話ですが、実際に試してみると、InvorkerなしでUIクラス(Labelクラス)にアクセスすることができました。ProgressChangedイベントを呼び出すためには、
  • WorkerReportsProgressプロパティをtrueにしておく
  • ReportProgressメソッドを呼び出す
という手順が必要です。この方法により、Invorkerを使わなくてよく、さらにUIへの処理を分離できるので、コード的にスッキリします。