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 の部分にスクリプトを入れる。
#include <iostream>
#include <k4a/k4a.h>
int main()
{
std::cout << "Hello World!\n";
k4a_device_t device = NULL;
if (K4A_RESULT_SUCCEEDED != k4a_device_open(K4A_DEVICE_DEFAULT, &device))
{
"Device open error!\n";
return 2;
}
std::cout << "Opened device";
k4a_device_configuration_t config = 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";
return 3;
}
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入門、私も書こうと思ってましたが、他のものにしようかな・・・楽しみにしています。