Posted at

Azure Kinect DKのSDK/サンプルをビルドする


はじめに

Azure Kinect DK、入手はしましたが、なかなかまとまって触る時間を確保できません。

Unity初めて触るので、むずかしいです。ようやくDepthから点群表示できるようになりました。

今回は、まだリリースされてない

SensorSDK v1.2.0(含C#ラッパー)のビルド、KinectFusionのサンプルのビルド について、メモ


SDK(インストーラー)


Sensor SDK


  • カラー&深度カメラ,IMUのSDK(マイクはなし)、ビューア,レコーダ,ファームウェアツールも入ってます。

ダウンロードはこちらから

v1.2ではC#のラッパー実装されているので、リリースを待つか自分でビルドしましょう


Body Tracking SDK

クローズドソース v0.9.0


Sensor SDKのビルド

基本的にはgithub Azure-Kinect-Sensor-SDK/docs/buildingに従えばビルドできます。

以下ステップバイステップで


  1. 前提

    VS2019でC++によるデスクトップ開発C++によるLinux開発ワークロードをONにした状態で行います。

    以降x64 Native Tools Command Prompt for VS 2019を使用

    Developer Command Prompt for VS 2019とかだと32ビットのほうに行くみたいなので注意が必要


  2. クローン

    https://github.com/microsoft/Azure-Kinect-Sensor-SDK.git

    developブランチ



  3. gitリポジトリのルートに"build"フォルダを作成して移動

    mkdir build && cd build
    



  4. "build"ディレクトリでcmake(Ninja)

    cmake .. -GNinja
    



  5. ビルドを実行

    ninja
    



C#ラッパーのビルド

続いてC# ラッパーのビルドをします。



  1. 前提

    C#のプロジェクトは、SDKをNinjaでビルドする前提で構築されているようなので、

    上記SensorSDKのビルドを行ってから始めるとよいです。

    (ソリューション直下にk4a.x64.propsとStubGenerator.x64.xmlが必要)

    参考までにNinjaで生成されるpropsを張っておきます


    src\csharp\k4a.x64.props

    <Project>
    
    <PropertyGroup>
    <K4aGeneratorSourcesDirectory>C:/github/Azure-Kinect-Sensor-SDK/build/src</K4aGeneratorSourcesDirectory>
    </PropertyGroup>
    <PropertyGroup Condition="'$(Configuration)' == 'Debug'">
    <K4aBinaryDirectory>C:/github/Azure-Kinect-Sensor-SDK/build/bin</K4aBinaryDirectory>
    </PropertyGroup>
    <PropertyGroup Condition="'$(Configuration)' == 'Release'">
    <K4aBinaryDirectory>C:/github/Azure-Kinect-Sensor-SDK/build/bin</K4aBinaryDirectory>
    </PropertyGroup>
    </Project>




  2. depthエンジンのコピー

    SensorSDKインストーラーに同梱されているクローズドソースのバイナリのため、インストールしたSDKからbuild/binにコピーします

    copy "%ProgramFiles%\Azure Kinect SDK v1.1.0\sdk\windows-desktop\amd64\release\bin\depthengine_1_0.dll" bin
    

    詳しくはこのへん



  3. ビルド

    \src\csharp\K4a.slnをVS2019で開いてCtrl+Shitf+B



非公式 C#ラッパー

github K4A.Net

Three-in-one managed .NET library to work with Azure Kinect devices

Sensor API/Record API/Body Tracking API

全部入りです。

公式のCSharpは現時点ではSensor APIのみなので、C#erな方はこちらが手っ取り早い気もします。


Kinect Fusionのサンプル

3DスキャンなKinect Fusionのサンプルが公式で公開されています

github Azure Kinect - OpenCV KinectFusion Sample

C++/CMake不慣れで、動かすまでに時間がかかったので

以下にステップバイステップでメモ



  1. ダウンロード&展開


    1. OpenCV
      OpenCV – 4.1.0 windows(opencv-4.1.0-vc14_vc15.exe)をダウンロードして展開
      こちらから

    2. OpenCV_Contrib
      opencv_contrib-4.1.0.zipをダウンロードして展開
      こちらから

    3. VTK-8.2.0
      VTK-8.2.0.zipをダウンロードして展開
      こちらから




  2. 以降の前提



    • チェックアウト先

      C:\github\Azure-Kinect-Samples\opencv-kinfu-samples




    • OpenCV/OpenCV_Contrib/VTKの配置

      D:\cv\opencv

      D:\cv\opencv_contrib-4.1.0

      D:\cv\VTK-8.2.0




    • CMake GUI

      cmake-3.15.1-win64-x64.msiをダウンロードしてインストール

      こちらから






  3. includeの展開



    1. OpenCV

      xcopy /S D:\cv\opencv\build\include C:\github\Azure-Kinect-Samples\opencv-kinfu-samples\extern\opencv-4.1.0\include\
      



    2. OpenCV_contrib

      xcopy /S D:\cv\opencv_contrib-4.1.0\modules\rgbd\include C:\github\Azure-Kinect-Samples\opencv-kinfu-samples\extern\opencv_contrib-4.1.0\modules\rgbd\include\
      
      xcopy /S D:\cv\opencv_contrib-4.1.0\modules\viz\include C:\github\Azure-Kinect-Samples\opencv-kinfu-samples\extern\opencv_contrib-4.1.0\modules\viz\include\





  4. VTKのビルド


    1. cmake-gui


      • source code:D:/cv/VTK-8.2.0

      • binaries:D:/cv/VTK-8.2.0\build




    2. 設定変更


      • CMAKE_INSTALL_PREFIX:D:\cv\VTK-8.2.0\install
        (フォルダは手で作成)

      • CMAKE_CXX_MP_FLAG:チェック

      • CMAKE_CXX_MP_NUM_PROCESSORS:4

      設定変えたら再度ConfigureしてからGenerate




    3. ビルド&インストール

      ソリューションD:\cv\VTK-8.2.0\build\VTK.slnをVS2019で開いてALL_BUILDをReleaseでビルド

      ビルドは時間がかかります。Corei7/NVMe(&RAID0)なデスクトップでも 30分程度…(IO\Geometoryがなかなか終わらない…?)

      INSTALLをReleaseでビルド

      参考1 Visualization Toolkit (VTK) のインストール on Windows, Visual Studio






  5. OpenCV&OpenCV_Contrib


    1. cmake-gui


      • source code:D:/cv/opencv/sources

      • binaries:D:/cv/opencv/build




    2. 設定変更


      • OPENCV_ENABLE_NONFREE:チェック

      • OPENCV_EXTRA_MODULES_PATH:D:\cv\opencv_contrib-4.1.0\modules

      • WITH_VTK:チェック

      • VTK_DIR:D:\cv\VTK-8.2.0\install\lib\cmake\vtk-8.2

      設定変えたら再度ConfigureしてからGenerate




    3. ビルド

      ソリューションD:\cv\opencv\build\OpenCV.slnをVS2019で開いてALL_BUILDをReleaseでビルド

      INSTALLをReleaseでビルド

      参考1参考2






  6. libの展開

    SET SRC_DIR=D:\cv\opencv\build\lib\Release\
    
    SET DEST_DIR=C:\github\Azure-Kinect-Samples\opencv-kinfu-samples\extern\lib\Release
    mkdir -p %DEST_DIR%
    copy %SRC_DIR%opencv_calib3d410.lib %DEST_DIR%
    copy %SRC_DIR%opencv_core410.lib %DEST_DIR%
    copy %SRC_DIR%opencv_highgui410.lib %DEST_DIR%
    copy %SRC_DIR%opencv_imgproc410.lib %DEST_DIR%
    copy %SRC_DIR%opencv_rgbd410.lib %DEST_DIR%
    copy %SRC_DIR%opencv_viz410.lib %DEST_DIR%


  7. 環境変数の設定

    PATHにD:\cv\VTK-8.2.0\install\binD:\cv\opencv\build\bin\Releaseを追加します



  8. Kinfuサンプル



    1. 依存関係の設定

      kinfu_example.vcxprojに依存関係を設定(とりあえずRelease側で)

      <AdditionalDependencies>%(AdditionalDependencies);opencv_core410.lib;opencv_calib3d410.lib;opencv_rgbd410.lib;opencv_highgui410.lib;opencv_viz410.lib;opencv_imgproc410.lib;</AdditionalDependencies>
      




  9. ビルド

    kinfu_example.slnをVS2019で開き、

    main.cppのL.13あたりにある、"#define HAVE_OPENCV"コメントアウトを外して、Releaseビルド

    #Solutionが2017になってるので、VS2019で明示的に開くこと

    #VS2017起動してることに気が付かず、VS2017にC++ワークロード入れてなくてハマった


image.png


おわりに

Cのビルドシステムってさっぱり…つらい

Unity入門にお勧めの本とかあれば教えてください。

ところで AzureKinectDK Azure要素あります…?