AzureKinectで"sample_unity_bodytracking"を動かすまでのお話

![aaa.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1663729/f74d1e1c-ee9a-e97d-0f9d-48c02e2f8b63.png)

この記事ではAzure Kinect(Kinect v2)を使用して公式のUnityサンプルシーンを動作させるまでを紹介します。

Azure Kinectを使用してUnityでボディトラッキングを使用する機会があったので
公式サンプルを動作させるまでの手順を記事に残そうと思います。

#####実行環境
- Windows10 Home
- RTX2070
- corei7

- Unity2019.1.2(公式サンプルが開発されたバージョン)
- Visual Studio 2019
- Azure Kinect SDK 1.4.0
- Azure Kinect BodyTracking SDK 1.1.0


- Azure Kinect DK Firmware

| 項目       |    各種    |
|:-----------------|:------------------:|
| RGB camera firmware  | 1.6.108    |
| Depth camera firmware| 1.6.79     |
| Depth config file    |  6109.7    |
| Audio firm ware      |  1.6.14    |
| Build Config         | Production |
| Certificate Type      | Microsoft  |

#目次
- Azure Kinectのセットアップ
 - Azure Kinect SDKを準備
 - Azure Kinect BodyTrackingを準備
 - ファームウェアの更新

- 公式のサンプルシーンを動作
 - 動かない場合の修正

- おわりに
- 参考になった記事

# Azure Kinectのセットアップ
Azure KinectはPCのUSB3.0と電源に接続してください。
![IMG_0414.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1663729/b345c7f2-20e8-f7de-7916-9cf9138de006.jpeg)
認識されなければUSB3.0に挿入しているか確認しましょう。
また、type-cを延長USB等を介して接続すると認識されにくいため、type-cはPCと直結しましょう。

##Azure Kinect SDKを準備
次にAzure Kinect SDKを入手します。
筆者は v1.4.0 をおすすめします。(最終的に動いたバージョンなので...)

https://github.com/microsoft/Azure-Kinect-Sensor-SDK/blob/develop/docs/usage.md

インストール後にAzure Kinect Viewerというアプリケーションが追加されているはずなので、起動してみましょう！
![r1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1663729/d4ebf2cb-5505-eec5-346b-5c68353f3a7e.png)

こんな感じに映ります。
![r2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1663729/ac016538-eac7-084a-9a2f-8700cd3ef972.png)

##Azure Kinect BodyTracking SDKを準備
次にAzure Kinect BodyTracking SDKを入手しましょう。
筆者はv1.1.0を使用しました。```msi```をクリックするとダウンロードされます。

https://docs.microsoft.com/ja-jp/azure/kinect-dk/body-sdk-download

インストール後にAzure Kinect BodyTrackingというアプリケーションが追加されているはずなので、起動してみましょう！
![r3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1663729/7b17ed18-6138-e694-77c9-44e4390e10cf.png)

このようにボーンを認識し、クリック時にマウスを動かすことで視点を変えることができます。
![r4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1663729/3f882fd2-7726-71c7-42ca-13b7b5f066c7.png)

以下のサイトを参考にKinectのファームウェアを更新してください。

https://docs.microsoft.com/ja-jp/azure/kinect-dk/update-device-firmware

##公式のサンプルシーンを動作
では、いよいよ本題に入りましょう！
私自身いろいろな記事やサイトを参考にしましたが、どれも動作しなかったため原因と解法をまとめつつ紹介していきます。

まずは、GitHubからマイクロソフトが提供しているサンプルを入手します。
＊筆者は.zipで入手しました。

https://github.com/microsoft/Azure-Kinect-Samples

UnityHubを起動し、[リストに追加]から
```Azure-Kinect-Samples-master\body-tracking-samples\sample_unity_bodytracking```
を追加します。

![r6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1663729/d33a6e3a-afd1-2c42-afcb-c2599389dd4a.png)


Unityを起動するとエラーだらけですが正常です。
![r7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1663729/cdc9615a-3fea-bf64-d921-36d3c78f5a4d.png)

次にvisual studioで```main.cs```を開きます。
![r8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1663729/4aeb0757-1d50-3f2f-18fd-7e8d770d55c1.png)

ソリューションエクスプローラーから[NuGetパッケージの復元]を選択します。
![r9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1663729/8b101bf8-48aa-ccbf-d94d-482ecd5b2cae.png)
完了後は下ウィンドウにメッセージが表示されます。
![r10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1663729/4ea32c9c-6dc4-8d96-1f7d-dcd0313f2ae7.png)
Unityへ戻り```Show in Explorer```からプロジェクトのルートディレクトリへ移動し、```MoveLibraryFiles```パッチを実行します。
![r11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1663729/fa028b8a-bdc8-ac79-c582-c7d2ba3d48e8.png)
実行すると必要なファイルを移動してくれます。
<font color='red'>しかし、これだけではいくつか不足しているため手動で追加します。</font>

先ほどのルートディレクトリにいずれも```Program Files\Azure Kinect Body Tracking SDK\```から、

・ ```cudnn_cnn_infer64_8.dll```
・ ```cudnn_ops_infer64_8.dll```
・ ```cuff64_10.dll```

の３つを追加してください。
![r12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1663729/be37de85-e5bd-039b-c552-be23283609be.png)

Unityへ戻り、Sceneフォルダから```Kinect4AzureSampleScene```に飛びます。
実行して、Kinectの前に立つと赤い棒人間が出てくるはずですが、代わりに一番下のログに

```
catching exception for background thread result = K4A_RESULT_FAILED
UnityEngine.Debug:Log (object)
```

と出てきてしまいました。
![r15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1663729/d3520fea-cb75-ffa6-1780-e26aa3782a8d.png)

人によってはここまでで実行できるかもしれませんが、以下は私みたくここまでやって出来ないときの修正について書いていきます。

##動かない場合の修正
では、直していきましょう！
Scriptフォルダから```SkeletalTrackingProvider.cs```の46行目の

```csharp:SkeletalTrackingProvider.cs
using (Tracker tracker = Tracker.Create(deviceCalibration, new TrackerConfiguration() { ProcessingMode = TrackerProcessingMode.Gpu, SensorOrientation = SensorOrientation.Default }))

```

上記のコードを...

```csharp:SkeletalTrackingProvider.cs
using (Tracker tracker = Tracker.Create(deviceCalibration, new TrackerConfiguration() { ProcessingMode = TrackerProcessingMode.Cpu, SensorOrientation = SensorOrientation.Default }))
```
Cudaがすでに導入されている場合は以下のように書くこともできます。

```csharp:SkeletalTrackingProvider.cs
using (Tracker tracker = Tracker.Create(deviceCalibration, new TrackerConfiguration() { ProcessingMode = TrackerProcessingMode.Cuda, SensorOrientation = SensorOrientation.Default }))
```
Unityで実行してみると...

![r16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1663729/701d1443-527e-b19b-5248-f2814a87cac1.png)


今度はちゃんと表示されました!

ちなみに```.Cuda```はインストールしていれば使えます。手順はこちらのサイトでご確認ください。

https://imagingsolution.net/program/cuda/cuda-download-install/

https://developer.nvidia.com/accelerated-computing-toolkit

#おわりに
Unityでデバイスを使用するのは初めてで解決するまでに、とても時間が掛かかりました。
サンプルを動かせたときの達成感はすごかったです。

#####解決のヒントになった記事やサイト
https://github.com/microsoft/Azure-Kinect-Sensor-SDK/issues/1600

https://www.1ft-seabass.jp/memo/2020/07/15/cool-batfile-azure-kinect-bodytracking-for-unity/