初心者がVisual Studio で始める Azure Kinect


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 を入れる。入れ方は以下
  1. NuGet で SDK をインストール
  2. AzureKinect Sendor SDK をPCにインストールし、モジュールのパスを通す の二つがあるが、今回は、1のNuGetで取得。「ツール」からNugetパッケージマネージャーの管理でGUIで入れる

  • 画面が表示される。このHello,World の部分にスクリプトを入れる。

ConsoleApplication1.cpp
#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 で接続、画面に表示できるところまで・・・

  • 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入門、私も書こうと思ってましたが、他のものにしようかな・・・楽しみにしています。