Azure Kinect DKをNode.jsやElectronから使うためのライブラリを見つけたので試してみようと思います。
Azure Kinect DKとは
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が第一候補になるのかなと思っています。
Kinect for Windows v2と比較すると、深度カメラの解像度が上がっていたり、内臓マイクの数が増えていたり、3軸のジャイロジャイロセンサが追加されていたりとパワーアップしていて、
詳しい違いは、こちら にまとまっています。
Electronからアクセスまでの道のり
今回のゴールは、Windows機で wouterverweirder/kinect-azure のElectron用のexample( kinect-azure/examples/electron/ )を動かすところまでとします。
そのために、
- 1. Azure Kinect DKの初期設定
- 2. Azure Kinect Body Tracking SDKのインストール
- 3. wouterverweirder/kinect-azureの準備
を行い、Electronのexampleを実行します。
1. Azure Kinect DKの初期設定
基本的には、公式のクイックスタート に従っていけば問題ありません。
❶ Azure Kinect DKをUSB3.0でPCに接続し、電源ケーブルも電源に接続します
❷ こちら からWindows用のSDKをダウンロード&インストールします
❸ こちら を参考にAzure Kinect DK ファームウェアを更新します
❹ Azure Kinect ビューアー を使って動作を確認します
僕の場合は、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つを引いてしまったようです。
そのポートも他の機器は問題なく繋がるので、原因は謎です。
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のソースコードを見ながら実戦投入していこうと思います。
今回は以上です。