3D Sensor Advent Calendar 2019の2日目の記事です。
概要
3D センサー歴 3 か月程度の初心者ですが、AzureKinect 手元にあるので、頑張ってみようかと。
目標としては、初心者レベルで Azure Kinect Sensor SDK 使って、接続、動作するところまで試してみたいと思います。
環境
- windows 10 pro
- Microsoft Visual Studio Community 2019 Version 16.3.9
- Microsoft .NET Framework Version 4.8.03752
- (Azure Kinect Sensor SDK 1.3.0)
環境としては、上記は Visual Studio しかインストールされていない状態で開始します。
NET デスクトップ開発
C++ によるデスクトップ開発
ユニバーサル Windows プラットフォーム開発
上記は適宜チェックをつけてインストールをしておいたほうが良いと思います。(最低限のモジュールまでは調べてないです)
まずは C++ で AzureKinect に接続
- C++のコンソールアプリで新しいプロジェクトの作成からC++のコンソールアプリを指定
- プロジェクト名と配置場所を指定し、空のアプリケーションを作成。
- 次の画面で AzureKinectのキーワードで探しパッケージをインストールする。
- プロジェクトが作成出来たら、 Azure Kinect の SDK を入れる。入れ方は以下
- NuGet で SDK をインストール
- AzureKinect Sendor SDK をPCにインストールし、モジュールのパスを通す の二つがあるが、今回は、1のNuGetで取得。「ツール」からNugetパッケージマネージャーの管理でGUIで入れる
- 画面が表示される。このHello,World の部分にスクリプトを入れる。
ConsoleApplication1.cpp
#include <iostream>
#include <k4a/k4a.h>
intmain(){std::cout<<"Hello World!\n";k4a_device_tdevice=NULL;if(K4A_RESULT_SUCCEEDED!=k4a_device_open(K4A_DEVICE_DEFAULT,&device)){"Device open error!\n";return2;}std::cout<<"Opened device";k4a_device_configuration_tconfig=K4A_DEVICE_CONFIG_INIT_DISABLE_ALL;config.camera_fps=K4A_FRAMES_PER_SECOND_30;config.color_format=K4A_IMAGE_FORMAT_COLOR_MJPG;config.color_resolution=K4A_COLOR_RESOLUTION_2160P;config.depth_mode=K4A_DEPTH_MODE_NFOV_UNBINNED;if(K4A_RESULT_SUCCEEDED!=k4a_device_start_cameras(device,&config)){std::cout<<"Failed to start!\n";return3;}else{std::cout<<"Camera started.\n";}k4a_device_stop_cameras(device);std::cout<<"Device stopped.\n";k4a_device_close(device);std::cout<<"Camera closed.\n";}
- ビルドからソリューションのビルドを実行。
- アプリケーションを実行。ディレクトリや実行ファイル名などは適当に読み替えてください。
- 実行すると以下のような結果となり、無事接続成功。
D:\>"D:\ConsoleApplication1\Debug\ConsoleApplication1.exe"
Hello World!
Opened deviceCamera started.
Device stopped.
Camera closed.
上記で、Visual Studio の C++ で Azure Kinect に接続することができました・・・
って何も動いてないよね
・・・すみません。C++バージョン、コンソールで接続、以外何も見えるものできてません。 C++ の描画ライブラリに手こずって、C++ で動かすところまでいきませんでした。なので、もう一つやります。
改めて C# サンプルを使って AzureKinect で接続、画面に表示できるところまで・・・
- 今度は、表示ができるように C# WPF ライブラリのサンプルを使用する。公式サンプルの https://github.com/microsoft/Azure-Kinect-Samplesからをダウンロード。
- Download したら適当なフォルダに展開し、build2019/csharp 配下のサンプルを試す。
- とりあえず 1-AquiringImages 下のソリューションファイル(.slnという拡張子)を開く。自分の環境ではセキュリティ警告とターゲットフレームワークがインストールされてませんと出るけどそのままOKを押す。
- 忘れないように Azure Kinect Sensor SDK を NuGet でインストールする。
- リリースにして、ソリューションのビルドを実行する。
- ちなみに本体プログラムは Mainwindow.xaml.cs なので、詳細を変えたければここを変える。
- 正常終了したら bin の中にプロジェクトの名前の実行可能なファイルが作成される。
- 上からカラーカメラ取得 、 深度を色で表現したもの 、 色での識別、(4つめのはAzure の Cognitiveサービス使用が必要そうなので今回は割愛)
やっと、何とか表示までできました・・・。
振り返り
- 今回は、 C++ と C# を初心者でも動かせるように解説したかった。すごい初歩だが、苦戦しながらなんとか完了。
- でも、 世にある AzureKinect の C++ サンプルは、動作するまでかなり大変そう。(C++知識がないのと、ライブラリが各々違ってコンパイルがなかなかできない)
- C# の方が描画などは楽かもしれない(でも AzureKinect の C#Sample も少ない)
ということで、次は Unity で頑張ってみます。
明日12/3(火)は @SatoshiGachiFujimotoさんの「PythonでRealSenseD400シリーズ入門」です。Python入門、私も書こうと思ってましたが、他のものにしようかな・・・楽しみにしています。