特集:Kinectセンサーの可能性C#開発者が“Kinectハック”に挑戦してみた デジタルアドバンテージ 一色 政彦2011/05/16 |
|
|
■Kinectハックのサンプルを動かす
●OpenNIフレームワークに標準搭載されているサンプル
まずはOpenNIサンプルを動かしてみよう。
次の画面のように「C:\Program Files\OpenNI\Samples\Bin\Release」フォルダ内にはOpenNIのサンプルが多数用意されている。
OpenNIに標準搭載されているサンプル群(Windowsエクスプローラ) |
任意の.exeファイルを実行すればよいが、ここでは「NiSimpleViewer」(=NiSimpleViewer.exeファイル)を実行してみよう。
NiSimpleViewerは、シーンに対する奥行き画像と写真画像を描画する、小型のOpenGLアプリケーションだ。[1]/[2]/[3]キーを押すと、「オーバーレイ・モード(写真画像の上に奥行き画像を重ねる)」/「奥行き画像モード」/「写真画像モード」にモードが切り替わる。[Esc]キーを押すと、アプリケーションを終了できる。
次の画面は、奥行き画像モードで表示したNiSimpleViewerの例である。
奥行き画像モードで表示したNiSimpleViewerの例 |
同フォルダには、ほかにもさまざまなサンプルが用意されているので、試してみるとよい。各サンプルの説明(英語)は、「C:\Program Files\OpenNI\Documentation」フォルダ内にある「OpenNI.chm」ファイルを実行し、表示されるヘルプの左側にあるツリーから[OpenNI Document]−[Samples]で参照できる(一部のサンプルについては説明がない)。
また、同フォルダ内にある「SimpleViewer.net.exe」「SimpleRead.net.exe」「UserTracker.net.exe」などのファイルは、.NET言語のC#で作られたサンプルである(ほかのサンプルはすべてC++で作成されている)。次の画面は、「UserTracker.net.exe」ファイルを実行した例で、骨格情報が表示されている(なお、骨格を表示するには、この画像のように両腕を直角に曲げるポーズを取る必要がある)。
骨格情報が表示されているUserTracker.net(C#のサンプル)の例 |
●NITEミドルウェアに標準搭載されているサンプル
以上のOpenNIフレームワークのサンプルのほか、「C:\Program Files\PrimeSense\NITE\Samples\Bin\Release」フォルダ内にあるNITEミドルウェアのサンプルも試せる。
●Kinectで操作できる3Dキャラクタのサンプル
自分の体の動きに合わせて、3DキャラクタをKinectにより操作できるサンプルも提供される。このサンプルは、下記のリンク先よりダウンロードできる。
次の画面は、SampleAppSinbadを実行して、3Dキャラを動かしているところだ。動かしているアクティブ・プレイヤーは右下に小さく表示される。
Kinectで操作できる3Dキャラクタのサンプル |
■C#+OpenNIフレームワークでKinectハックを試す
それでは、実際にKinectハックを試していこう。ここでは、奥行き画像を表示するWPFアプリケーションを作成する。
奥行き画像を表示するWindowsフォーム・アプリケーションのサンプルが、「C:\Program Files\OpenNI\Samples\SimpleViewer.net」フォルダに配置されているので、内部の実装はこれを大幅に参考にする。
●WPFアプリケーションのプロジェクトの作成
それではまずは、WPFアプリケーションのプロジェクトを作成する。
Visual Studio 2010のメニューバーから[ファイル]−[新規作成]−[プロジェクト]を実行し、そこで表示される[新しいプロジェクト]ダイアログで、左側のツリー表示から[Visual C#]−[Windows]を選択し、右側のテンプレート一覧から「WPF アプリケーション」テンプレートを選択して、「HelloKinect」という名前でプロジェクトを作成する。
●OpenNIフレームワークを活用するためのアセンブリ参照
「C:\Program Files\OpenNI\Bin」フォルダ内にある「OpenNI.Net.dll」アセンブリを参照に追加する。
●WPFへのコントロールの配置
WPF上には、奥行き画像を表示するコントロールが必要だ。これに最適なのはImageコントロールなので、メイン画面(=MainWindow.xamlファイル)をWPFデザイナで開き、そのデザイン・サーフェイス上に[ツールボックス]から「Image」をドラッグする。配置されたImageコントロールの右クリック・メニューから[レイアウトのリセット]−[すべて]を実行して、ウィンドウいっぱいにImageコントロールを広げる。
●Kinectから画像を取得して描画
Kinectから画像データを取得してビットマップ・イメージに変換した後、Imageコントロールのデータソースに指定する。詳細なコードの解説は割愛する(コメントを参考にしてほしい)。
|
|
Kinectから画像を取得して描画するサンプル・コード(MainWindow.xaml.cs) |
以上で開発は完了だ。
このアプリケーションを実行すると、OpenNIの「SimpleViewer.net」のように奥行き画像が表示される(次の画面はその例である)。
自作したKinectハックのサンプルを実行した例 |
もちろん、これはまだ画像が表示できただけという何の意味もないものだが、ここから面白いアプリケーションに改めて挑戦していくことができるだろう。何よりもKinectハック・プログラミングは面白い。
■
以上、「Kinectハックは面白い」と感じていただけただろうか?
.NET開発者であるならば、Kinectハック(もしくはKinectプログラミング)を行わないのは、宝の持ち腐れだ。しかも「ダイアモンド」クラスの宝なのに、タンスの中に一生しまい込んでいるようなものである。できるだけ多くの日本の.NET開発者で積極的に未来のIT技術を開発し、非マイクロソフト系の技術者や世界を驚かせていこうではないか。
ここで筆者が気に入っている名言をご紹介しよう。
「アップルで働くまで、イノベーションというのは『今にない、新しいものを作ること』だと思っていた。でもそれは違って、イノベーションというのは『未来にある普通のものを作ること』なのです。この違いを理解できるまでかなり時間がかかった。」(@hu uesugi氏のTwitterでのつぶやきより引用)
いま.NET開発者は、「未来のIT技術」という視点で、「最も有利な位置にいる」といえる。.NET開発者にはぜひ、「未来にある普通のものを作ること」に、いまから励んでほしい。もちろん、非マイクロソフト系の技術者がいまから.NET開発者に転向するのも大歓迎である。
INDEX | ||
特集:Kinectセンサーの可能性 | ||
C#開発者が“Kinectハック”に挑戦してみた | ||
1.Kinectセンサーの概要 | ||
2.Kinectハックの可能性/KinectハックのためのOpenNI環境の準備 | ||
3.Kinectハックのサンプルを動かす/C#+OpenNIフレームワークでKinectハックを試す | ||
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|