12
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

Azure KinectのBodyTracking公式サンプルをUnityで動かしてみる

はじめに

Azure Kinectを使ってUnity上でBodyTrackingをする方法を解説しようと思います。
実は前にこの内容のLTをしたのですが、リポジトリに色々変更が入ったりして、せっかくなので記事にもまとめようと思いました。

LTスライド:Azure Kinect+Unityで軽率にBodyTrackingする

TL;DR

結果的に、下の動画のように人の骨格を認識してUnityのオブジェクトに反映させるまでができます。

ezgif-7-7554c637cf9f.gif

対象の読者

基本的に以下のような方をターゲットにしていますが、以下に当てはまらなくてもわかりやすいように解説するつもりです。

  • AzureKinectでボディトラッキングしてみたいひと
  • UnityでAzureKinectを触ることに興味がある人
  • AzureKinectで何ができるのかを知りたいひと
  • VTuberなどのトラッキング技術に興味がある人

扱わないこと

本記事は、公式サンプルを使ってボディトラッキングを動かすまでを目的としていますので、特にサンプルを発展させて何かをするようなことはしません(いずれ別記事にしたいですが)

  • AzureKinectSensorSDKやBodyTrackingSDKのインストール
  • キャラクターモデルを動かす方法
  • 点群を扱う方法
  • Windowsフォームアプリケーションでの実装(WPFとかUWPとかC++とか)

検証環境

今回の記事の内容は以下の環境で動作したものになります。

環境
OS Windows 10 Home
CPU Intel Core i7-7700
GPU GeForce GTX 1060 3GB(k4a動作非推奨)
Unity 2019.1.2
Sensor SDK 1.4.0
BodyTracking SDK 1.0.1

また、今回の動作を確認したのはmicrosoft/Azure-Kinect-Samplesの7/20現在のmasterブランチのコミット04b874...になります

AzureKinectのBodyTrackingをUnityで

AzureKinectとは?

一応AzureKinectとはいったい何なのかを簡単にご紹介しておきます。
AzureKinectとはMicrosoftが開発しているセンサーデバイスです。通常のカメラのようにRGB画像の取得に加え、深度情報の取得や骨格認識を可能にします。もともとKinectというデバイスをご存知の方は多いかもしれませんが、AzureKinectは一番新しいバージョンになります。

image.png
Microsoft Windows公式ブログより

AzureKinectのイマ

AzureKinectは2020年7月現在SensorSDKは1.4.1、BodyTrackingSDKは1.0.1がリリースされています。従来のKinectよりも高解像度のセンサ、高性能の推定エンジンを備えており、もともとXboxのセンサデバイスとして開発を始められたKinectですが、いまは汎用分野の開発向けにSDKが公開されています。(AzureKinectのXBox対応はまだ実装されていなかった気がします。いつの間にかターゲットが逆転していて面白いですね)
現状ネットの記事などはまだ少ないですが、MS公式のドキュメントは結構充実していていい感じです。(ホンマか?)
あと、ハイスペックPCでの動作が推奨されています。基本的にはGPUを積んでいるPCで、推奨はGTX1070以上のスペックを要求されています。(この時点で私の環境(GTX1060)は非推奨なのですが...)
ただ、前に上がったissueで「ロースペックマシンでも動作するようにしよう!」みたいな構想があるらしく、今後の開発に期待です!

Microsoft公式のサンプル環境を整える

ここではAzure Kinect Sensor SDKやAzure Kinect Body Tracking SDKの環境構築は終わっていることを前提とします。これが終わってない方はこちらこちらのドキュメントを参照しながら環境構築を行ってください。公式のViwerがございますのでそれが動いたら大丈夫です。
さてではサンプル環境を整えていきましょう。以下の手順で実行できます。

  1. GiHubからサンプルリポジトリをcloneする
  2. NuGetパッケージをインストールする
  3. ファイルを移動する
  4. ビルドする

実は今から説明する手順はこちらのREADME(英語)にすべて書かれていますので、そちらを確認してしていただいても大丈夫です。

まずこちらのmicrosoft/Azure-Kinect-Samplesというリポジトリをcloneします。このリポジトリにはUnity以外のサンプルも同梱されておりますので、そのままUnityHubでは開けません。Unityプロジェクトの場所はAzure-Kinect-Samples/body-tracking-samples/sample_unity_bodytracking/になります。現時点でUnityのバージョンは2019.1.2で開発されているみたいです。

image.png

開いてみると以下のような画面になると思います。コンソールを見てみると何やらエラーが出ているみたいですが、パッケージの依存関係によるものなのでそれを解決していきましょう。

image.png

Azure Kinect SDKのパッケージはNuGetからインポートできます。
NuGetからパッケージをインストールするためにUnityプロジェクトをVisual Studioで開きましょう。デフォルトのIDEがVSになっている方はそのままで結構ですが、そうでない方は[Eidt]->[Preference]->[External Tool]からエディタをVisual Studioに変更し、[Assets]->[Open C# Project]を選択し、Visual Studioを開きます。
Visual Studioを開いたらNugetパッケージをインストールしましょう。公式のREADMEではパッケージコンソールからコマンドをたたくよう指示されていますが、ソリューションを右クリックして[NuGetパッケージの復元]を選択すれば依存関係がインストールされるので、そうする方が簡単です。パッケージのインストールが完了したらVisual Studioは閉じてもらっても構いません。

image.png

そしたら、次にdllの移動を行います。とはいえバッチファイルを実行すれば良しなにしてくれるので、プロジェクトのルートディレクトリにあるMoveLibraryFiles.batを実行してください。
ここまでくればコンソールのエラーが消えているはずです。

image.png

それではAssets/Scenes/Kinect4AzureSampleSceneを開いて再生してみましょう。すると赤い棒人間みたいなものが自分の動きに追従しているのがわかるでしょうか?
見事Unity上でAzure Kinect のボディトラッキングを実行できました!
シェー(特に世代とかではないです)
image.png

トラブルシュート1:NuGetForUnityでインストールした

NuGetパッケージと聞いて、NuGetForUnityを思い浮かべる方もいると思います。自分は最初パッケージをNuGetForUnityを使っていストールした結果、動きませんでした。かならずVisual Studioからインストールするようにしましょう。

トラブルシュート2:nugetパッケージのインストールに失敗する

Azure Kinect BodyTracking SDKはそれ自体の名前空間の階層が深いせいで、ちょっと階層の深いディレクトリにUnityプロジェクト本体があった場合インストールに失敗するケースがあります。自分はいつものワーキングディレクトリで実行したらダメでした。

ビルドしてみる

それではプロジェクトをビルドしてみましょう。とりあえず通常のWindowsのスタンドアロン向けにビルドします。

image.png

そのあとにビルド先のフォルダに、以下のファイルをコピーしてください。これらはプロジェクトの直下にあったものと同じです。

  • cublas64_100.dll
  • cudart64_100.dll
  • cudnn64_7.dll
  • dnn_model.onnx
  • onnxruntime.dll

画像のようになると思います。
image.png

それができたら起動してみましょう。ビルドしても実行できていることが確認できたと思います。コロンビア

image.png

PuppetMasterについて

Assets/Scenesの中にはもう一つPuppetMasterというサンプルシーンがあると思います。こちらはHumanoidリギングされたアバターに対してAzureKinectのボディトラッキングを適用してモーションキャプチャさせたように動かしてみよう!みたいなサンプルになっているのですが、こちらのシーンが結構流動的に変わっていて動作も不安定なので今回は触れないでおこうと思います。(自分が触ったときには色々いじらないと動かなかった)

おわりに

いかがでしたか?(天下無双)
本当はビルドしたプロジェクトが終了時にクラッシュするバグについての対処法とか書こうと思ったんですが、一週間前にfixされていました、残念。(良いこと)
AzureKinectの情報を追っているとモーションキャプチャ利用を視野に入れているようなアナウンスがたびたび見られるので、今後Unityを組み合わせることでVTuberシステムであったりゲームのキャラクターアニメーションであったりを制作できるかもしれません。
そういえば3tene ProがAzureKinectのモーションキャプチャに対応したという発表もありましたね。今後の開発動向に注目です。
個人的にde:code2020の「Azure Kinect DKテクニカルTips」というセッションがすごく良かったのでそちらもよかったらご覧ください。

P.S. 自分の環境だけなのかわからないのですが、なぜかこのプロジェクトを実行した時にAzureKinectの白いランプがつきませんでした。動作に影響はないもののちょっと気になります。

参考

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
12
Help us understand the problem. What are the problem?