MRが楽しい

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

blenderのpythonで外部ライブラリを利用する

本日は Blenderpython の環境構築枠です。
blenderpythonで外部ライブラリを利用する方法を記事にします。

Blenderでのpythonの外部ライブラリの参照

Blender 上で実行される ptyhon は以下のディレクトリに含まれる Blender 内の python です。
blender-2.79-windows64\2.79\python\bin
f:id:bluebirdofoz:20190713095225j:plain

このため、Blender の ptyhon の外部ライブラリを利用する場合はこちらに参照を追加する必要があります。
(予め取り込まれている外部ライブラリも幾つかあります)

今回は以下の記事で作成した OpenCVスクリプトをサンプルに利用します。
bluebirdofoz.hatenablog.com

スクリプトBlenderテキストエディタで実行すると以下の通り、cv2 ライブラリが見つからず失敗します。
f:id:bluebirdofoz:20190713095243j:plain

pipのインストール

インストールの手順を簡略化するため、まずは以下の手順で Blender に pip のインストールを行います。
WindowsPowerShell を起動し、Blender のインストールディレクトリに移動します。

cd D:\BlenderDir\blender-2.79-windows64\2.79\python\bin

f:id:bluebirdofoz:20190713095257j:plain

以下のコマンドを実行し、pip インストール用のスクリプトを取得します。

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py

対象の URL は TLS 1.2 のみに対応しています。
PowerShell のセキュリティプロトコルを確認し、Tls12 の表記がなければこれを設定する必要があります。
セキュリティ設定は PowerShell を再起動すると元に戻ります。

[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12

f:id:bluebirdofoz:20190713095311j:plain

ディレクトリに get-pip.py がダウンロードされました。
f:id:bluebirdofoz:20190713095320j:plain

この状態で以下のコマンドを実行し、get-pip.py スクリプトを実行します。
注意点として、必ず Blender ディレクトリの python\bin 直下にある python.exe でスクリプトを実行します。

.\python.exe .\get-pip.py

f:id:bluebirdofoz:20190713095329j:plain

すると python\Scripts ディレクトリが作成されて pip 関連のバイナリがインストールされます。
pip でインストールしたライブラリは python\lib\site-packages ディレクトリに保存されます。
f:id:bluebirdofoz:20190713095341j:plain

もしライブラリが見当たらない場合は以下の手順で python.exe が参照しているシステムパスを確認できます。
注意点として、必ず Blender ディレクトリの python\bin 直下にある python.exe で python を起動します。

.\python.exe
import sys
print(sys.path)

f:id:bluebirdofoz:20190713095432j:plain

blenderへの外部ライブラリのインストール

pip のインストールを完了したら以下のコマンドで opencv-python のインストールを実行します。
注意点として、必ず Blender ディレクトリの python\bin 直下にある python.exe で pip を実行します。

.\python.exe -m pip install -U opencv-python

f:id:bluebirdofoz:20190713095445j:plain

すると以下の通り、python\lib\site-packages 配下に opencv_python のライブラリが追加されました。
f:id:bluebirdofoz:20190713095457j:plain

インストール時に以下のエラーが発生することがあります。

ERROR: could not install packages due to an environmenterror [WinError 5] アクセスが拒否されました。

f:id:bluebirdofoz:20190713095508j:plain

これはライブラリの上書きエラーです。
Blender を起動したままで本コマンドを実行すると、ライブラリの上書きができず、エラーとなります。
エラー回避のため、Blenderpython ライブラリをインストールする際は Blender を終了しておきます。

スクリプトの実行

opencv_python のライブラリをインストールした状態で先ほどのスクリプトBlender 上で実行してみました。
すると以下のエラーが発生しました。

from .cv2 import *
ImportError: numpy.core.multiarray failed to import

f:id:bluebirdofoz:20190713095519j:plain

エラーを追跡すると、2つのバージョンの numpy が競合してエラーが発生していました。
これは Blender には予め numpy のライブラリが組み込まれているためです。
f:id:bluebirdofoz:20190713095531j:plain

競合を解消するため、以下のコマンドで一旦 numpy をアンインストールします。

.\python.exe -m pip uninstall numpy

f:id:bluebirdofoz:20190713095542j:plain

その後、numpy を再インストールすると競合が解決されました。
f:id:bluebirdofoz:20190713095553j:plain

この状態で先ほどのスクリプトを再度、Blender 上で実行してみると……。
f:id:bluebirdofoz:20190713095601j:plain
エラーが発生することなく実行できました。
openCV により2つの画像が合成されています。