みかづきブログ・カスタム

基本的にはちょちょいのほいです。

Azure Kinect DKにElectronからアクセスする 📷

Azure Kinect DKをNode.jsやElectronから使うためのライブラリを見つけたので試してみようと思います。

github.com

Azure Kinect DKとは

azure.microsoft.com

Azure Kinect は、洗練されたコンピューター ビジョンと音声モデル、高度な AI センサー、Azure Cognitive Services に接続できる幅広く強力な SDK を備えた、最先端の空間コンピューティング開発者キットです。

https://azure.microsoft.com/ja-jp/products/kinect-dk より引用

とのことです。
僕のざっくりとした理解では、 Kinect for Windows v2 の後継という認識です。
個人的には、Kinect for Windows v2 はボディトラッキングしたい時によく使っていたので、今後そのような機会があったときは、Azure Kinect DKが第一候補になるのかなと思っています。

learn.microsoft.com

Kinect for Windows v2と比較すると、深度カメラの解像度が上がっていたり、内臓マイクの数が増えていたり、3軸のジャイロジャイロセンサが追加されていたりとパワーアップしていて、
詳しい違いは、こちら にまとまっています。

learn.microsoft.com

Electronからアクセスまでの道のり

今回のゴールは、Windows機で wouterverweirder/kinect-azure のElectron用のexample( kinect-azure/examples/electron/ )を動かすところまでとします。

そのために、

  1. 1. Azure Kinect DKの初期設定
  2. 2. Azure Kinect Body Tracking SDKのインストール
  3. 3. wouterverweirder/kinect-azureの準備

を行い、Electronのexampleを実行します。

1. Azure Kinect DKの初期設定

基本的には、公式のクイックスタート に従っていけば問題ありません。

learn.microsoft.com

❶ Azure Kinect DKをUSB3.0でPCに接続し、電源ケーブルも電源に接続します

こちら からWindows用のSDKをダウンロード&インストールします

github.com

こちら を参考にAzure Kinect DK ファームウェアを更新します

learn.microsoft.com

Azure Kinect ビューアー を使って動作を確認します

learn.microsoft.com

僕の場合は、Azure Kinect ビューアーで動作を確認する際、デバイスは見つかるし、「Open Device」もできるのですが、「Start」しようとすると、

Error!
Failed to start device!
If you unplugged the device, you must close and reopen device.

と表示され、スタートできないという困った事態に陥りました。

ログはこんな感じです。

[ error    ] : usb_cmd_io(). Error calling libusb_bulk_transfer for rx, result:LIBUSB_ERROR_TIMEOUT
[ error    ] : usb_cmd_io(usbcmd_handle, cmd, p_cmd_data, cmd_data_size, p_data, data_size, NULL, 0, bytes_read, &cmd_status) returned failure in usb_cmd_read()
[ error    ] : usb_cmd_read( depthmcu->usb_cmd, DEV_CMD_NV_DATA_GET, (uint8_t *)&nv_tag, sizeof(nv_tag), calibration, cal_size, bytes_read) returned failure in depthmcu_get_cal()
[ error    ] : depthmcu_get_cal(depth->depthmcu, depth->calibration_memory, DEPTH_CALIBRATION_DATA_SIZE, &depth->calibration_memory_size) returned failure in depth_start()
[ error    ] : cmd_status == CMD_STATUS_PASS returned failure in depthmcu_depth_stop_streaming()
[ error    ] : depthmcu_depth_stop_streaming(). ERROR: cmd_status=0x00000063
[ error    ] : depth_start(device->depth, config) returned failure in k4a_device_start_cameras()

深度カメラのストリーミングの開始でタイムアウトしているような気がします。

解決策をもろもろ探ったのですが、結局別のUSBポートに接続したらあっさり解決しました。
僕のPCにはUSB3.0のポートが4つついているのですが、なぜか1つだけAzure Kinect DKがうまく接続できず、たまたま最初にその1つを引いてしまったようです。
そのポートも他の機器は問題なく繋がるので、原因は謎です。

Azure Kinect Body Tracking SDKのインストール

こちら からダウンロードしてインストールします。

learn.microsoft.com

wouterverweirder/kinect-azureの準備

wouterverweirder/kinect-azure の調達

クローンするなり、ダウンロードするなりでローカルに用意します。

github.com

❷ npm install

/examples/electron/に移動して、

npm install

を実行します。

❸ Azure Kinect Body Tracking SDK/toolsの中身をコピー

npm run copy-dlls

を実行し、Azure Kinect Body Tracking SDK/toolsの中身をまるまるコピーします。

Electronのexampleを実行

/examples/electron/で、

npm start

を実行すると、Electronのexampleが起動します。
左側のタブから、いろんなデモを確認できます。

軽くソースコードを確認すると、

const KinectAzure = require('kinect-azure');
const kinect = new KinectAzure();

これで、kinectインスタンスを作成し、いろいろ実行していくようです。
ドキュメントが見当たらないのですが、型定義ファイルは見つかったので、型定義ファイルとexsampleのソースコードを見ながら実戦投入していこうと思います。

github.com

今回は以上です。