はじめに
Azure Kinect DK、入手はしましたが、なかなかまとまって触る時間を確保できません。
Unity初めて触るので、むずかしいです。ようやくDepthから点群表示できるようになりました。
今回は、まだリリースされてない
SensorSDK v1.2.0(含C#ラッパー)のビルド、KinectFusionのサンプルのビルド について、メモ
SDK(インストーラー)
Sensor SDK
- カラー&深度カメラ,IMUのSDK(マイクはなし)、ビューア,レコーダ,ファームウェアツールも入ってます。
ダウンロードはこちらから
-
Azure Kinect Sensor SDK download | Microsoft Docs
v1.1.0 -
github Azure-Kinect-Sensor-SDK/docs/usage.md
v1.1.1もあります
v1.2ではC#のラッパー実装されているので、リリースを待つか自分でビルドしましょう
Body Tracking SDK
クローズドソース v0.9.0
Sensor SDKのビルド
基本的にはgithub Azure-Kinect-Sensor-SDK/docs/buildingに従えばビルドできます。
以下ステップバイステップで
-
前提
VS2019でC++によるデスクトップ開発
とC++によるLinux開発
ワークロードをONにした状態で行います。
以降x64 Native Tools Command Prompt for VS 2019
を使用
※Developer Command Prompt for VS 2019
とかだと32ビットのほうに行くみたいなので注意が必要 -
クローン
https://github.com/microsoft/Azure-Kinect-Sensor-SDK.git
developブランチ -
gitリポジトリのルートに"build"フォルダを作成して移動
mkdir build && cd build
-
"build"ディレクトリでcmake(Ninja)
cmake .. -GNinja
-
ビルドを実行
ninja
C#ラッパーのビルド
続いてC# ラッパーのビルドをします。
-
前提
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>
-
depthエンジンのコピー
SensorSDKインストーラーに同梱されているクローズドソースのバイナリのため、インストールしたSDKからbuild/binにコピーしますcopy "%ProgramFiles%\Azure Kinect SDK v1.1.0\sdk\windows-desktop\amd64\release\bin\depthengine_1_0.dll" bin
詳しくはこのへん
-
ビルド
\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不慣れで、動かすまでに時間がかかったので
以下にステップバイステップでメモ
-
ダウンロード&展開
-
以降の前提
-
チェックアウト先
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
をダウンロードしてインストール
こちらから
-
-
includeの展開
-
OpenCV
xcopy /S D:\cv\opencv\build\include C:\github\Azure-Kinect-Samples\opencv-kinfu-samples\extern\opencv-4.1.0\include\
-
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\
-
-
VTKのビルド
-
cmake-gui
- source code:
D:/cv/VTK-8.2.0
- binaries:
D:/cv/VTK-8.2.0\build
- source code:
-
設定変更
- CMAKE_INSTALL_PREFIX:
D:\cv\VTK-8.2.0\install
(フォルダは手で作成) - CMAKE_CXX_MP_FLAG:チェック
- CMAKE_CXX_MP_NUM_PROCESSORS:
4
設定変えたら再度ConfigureしてからGenerate
- CMAKE_INSTALL_PREFIX:
-
ビルド&インストール
ソリューション
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
-
-
OpenCV&OpenCV_Contrib
-
cmake-gui
- source code:
D:/cv/opencv/sources
- binaries:
D:/cv/opencv/build
- source code:
-
設定変更
- 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
-
ビルド
ソリューション
D:\cv\opencv\build\OpenCV.sln
をVS2019で開いてALL_BUILDをReleaseでビルド
INSTALLをReleaseでビルド
参考1、参考2
-
-
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%
-
環境変数の設定
PATHにD:\cv\VTK-8.2.0\install\bin
とD:\cv\opencv\build\bin\Release
を追加します -
Kinfuサンプル
-
依存関係の設定
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>
-
-
ビルド
kinfu_example.sln
をVS2019で開き、
main.cppのL.13あたりにある、"#define HAVE_OPENCV"コメントアウトを外して、Releaseビルド
#Solutionが2017になってるので、VS2019で明示的に開くこと
#VS2017起動してることに気が付かず、VS2017にC++ワークロード入れてなくてハマった
おわりに
Cのビルドシステムってさっぱり…つらい
Unity入門にお勧めの本とかあれば教えてください。
ところで AzureKinectDK Azure要素あります…?