MRが楽しい

MRやVRについて学習したことを書き残す

py-k4aを使ってPythonからAzureKinectを利用する その1(ビルドとインストール)

本日はAzureKinectの調査枠です。
py-k4aを使ってPythonからAzureKinectを利用してみます。
今回はビルドとインストール手順を記事にします。
f:id:bluebirdofoz:20191121091609j:plain

py-k4aはbrendandburnsさん(@brendandburns)が公開しているPythonモジュールです。
github.com
f:id:bluebirdofoz:20191121091743j:plain

今回は Windows 環境の64bit版でのインストール手順をまとめます。

必要な環境

事前に以下のツールの環境のインストールが必要です。
・AzureKinectSDK
Python
・Cコンパイラ(VC++)

それぞれ以下の記事に従ってインストールを実施します。
bluebirdofoz.hatenablog.com
bluebirdofoz.hatenablog.com
bluebirdofoz.hatenablog.com

今回、筆者環境では AzureKinectSDK 1.3.0, Python 3.7.4, VisualStudio2017のCコンパイラを利用しています。
VisualStudioのインストールでは VC++コンポーネントをインストールする必要があります。
f:id:bluebirdofoz:20191121091825j:plain

py-k4aのダウンロード

以下のページからpy-k4aのソースコードを取得します。
今回は Download ZIP でソースコードを取得しました。
github.com
f:id:bluebirdofoz:20191121091849j:plain

ダウンロードした py-k4a-master.zip ファイルを展開します。
これで py-k4a のダウンロードは完了です。
f:id:bluebirdofoz:20191121091907j:plain

Includeファイルのコピー

ダウンロードしたプログラムを Python でビルドするため、include ファイルの参照を追加します。
以下の k4a.h のヘッダファイルを含む k4a ディレクトリを Python 配下の include ディレクトリにコピーします。
・コピー元

C:\Program Files\Azure Kinect SDK v1.3.0\sdk\include\k4a

・コピー先

C:\Users\(ユーザ名)\AppData\Local\Programs\Python\Python37\include

f:id:bluebirdofoz:20191121091921j:plain

Libファイルのコピー

次に lib ファイルを追加します。
以下の k4a.lib のライブラリファイルを Python 配下の lib ディレクトリにコピーします。
・コピー元

C:\Program Files\Azure Kinect SDK v1.3.0\sdk\windows-desktop\amd64\release\lib\k4a.lib

・コピー先

C:\Users\(ユーザ名)\AppData\Local\Programs\Python\Python37\libs

f:id:bluebirdofoz:20191121091932j:plain

py-k4aのビルド

これで py-k4a のビルドの準備が整いました。
展開した py-k4a-master のディレクトリを開き、右クリックから[PowerShellウィンドウをここに開く]を実行します。
f:id:bluebirdofoz:20191121092359j:plain

以下のコマンドを実行し、py-k4a のビルドを実行します。

python .\setup.py build

f:id:bluebirdofoz:20191121091941j:plain

ビルドが成功すると、build ディレクトリが生成され、k4a.cp37-win_amd64.pyd ファイルが出力されます。
cp37-win_amd64 の部分はビルド環境の情報が反映されます。
f:id:bluebirdofoz:20191121091953j:plain

py-k4aのインストール

出力された pyd ファイルを Python にインストールします。
インストールディレクトリを整理したいので、今回は以下のインストール作業を手動で行いました。

1.Python ディレクトリの Lib\site-packages 配下に py-k4a ディレクトリを作成する。
f:id:bluebirdofoz:20191121092003j:plain

2.Lib\site-packages 配下に py-k4a ディレクトリへのパスを記述する py-k4a.pth ファイルを作成する。
f:id:bluebirdofoz:20191121092013j:plain

3.py-k4a.pth ファイルに以下の通り、py-k4a ディレクトリへのパスを記述する。

py-k4a

f:id:bluebirdofoz:20191121092024j:plain

4.py-k4a ディレクトリに k4a.cp37-win_amd64.pyd ファイルをコピーする。
f:id:bluebirdofoz:20191121092033j:plain

5.py-k4a ディレクトリに以下の2つの *.dll ファイルをコピーする。

C:\Program Files\Azure Kinect SDK v1.3.0\sdk\windows-desktop\amd64\release\bin\k4a.dll
C:\Program Files\Azure Kinect SDK v1.3.0\sdk\windows-desktop\amd64\release\bin\depthengine_2_0.dll

f:id:bluebirdofoz:20191121092043j:plain

これで Python へのインストールは完了です。

動作確認

py-k4a を組み込んだ Python ディレクトリの python.exe を起動し、以下のコマンドを実行してみます。

import k4a
print(k4a)

k4a.cp37-win_amd64.pyd の参照パスが表示されれば py-k4a のインポートに成功しています。

module 'k4a' from '(参照パス)\lib\site-packages\py-k4a\k4a.cp37-win_amd64.pyd'

f:id:bluebirdofoz:20191121092051j:plain

次回は実際にツールを利用してみます。
bluebirdofoz.hatenablog.com

エラー対処

以下にいくつかのエラー対処のパターンを記載します。

error: command 'cl.exe' failed: No such file or directory

python .\setup.py build」の実行時に以下のエラーが発生することがあります。

error: command 'cl.exe' failed: No such file or directory

Cコンパイラへのパスが通っていないことが原因です。
環境変数の[Path]にCコンパイラへのパスを手動で追加することで解消されることがあります。

例えば VisualStudio のCコンパイラ(32bit版)はデフォルトでは以下のディレクトリにインストールされます。

C:\Program Files (x86)\Microsoft Visual Studio\(バージョン)\(ライセンス)\VC\Tools\MSVC\(バージョン)\bin\Hostx86\x86\cl.exe