Takunojiのプログラミング・プレイグラウンド(遊び場)

プログラミングのススメとか記載します、今までにやったのは、環境構築、実装方法の説明など、Java, UnrealEngine, Unity, BlenderPython, Discord, OpenCV, TensorFlow(Python), ラズパイ(RPi)などやりました。まだ中途半端ですが。。。

Blender Python + OpenCV〜インストール〜

前回は、アドオンを起動するとき停止するときにそれぞれ「こんにちは」「さようなら」を言うアドオンを作成しました。

今回は
Blender Python上にOpenCvをインストールしよう
と言う試みです。
ちなみにMacOSXでの手順になります。がWinでも同じ様なことが起きるかも?

そして、以下のサイトを参考に実行しました。

「pipコマンドのインストール」

blender.stackexchange.com

opencv」のインストール

qiita.com

 

参考サイトを参考にしてやればインストール自体は難なく行きました。
問題はその後でした。
OpenCvをOS上にインストールするまではOKでした

大雑把に
1.「homebrew」コマンドで「pip」コマンドをインストール
2.「OpenCv」を「pip」コマンドでインストール
完了ってな感じでした。。。がここで終わらないのが人生の常(笑)

【問題その1】BlenderのPythonConsoleにて以下のコードを実行するとエラーが起きる
>> import cv2
Traceback (most recent call last):
File "<blender_console>", line 1, in <module>
ImportError: No module named 'cv2'

結局のところは、「cv2」→OpenCvが見つかりませんよ。と言うことなので
パスを通してやればおっけーな訳です。
Pythonコードでは以下の様に記載してやれば良い
>>> import sys
>>> sys.path.append('追加するパス')

【問題その2】どこのパスを通してやれば良い?
さらに疑問点が二つ、
・「PythonなのにOpenCvでダウンロードしたものがpyファイルではない」
・「Python自体に2.Xと3.X、どちらがBlenderで使用しているものかわからない」

こんな感じで、OpenCvの読み込みをやり始めました。
そんなこんなで、上記の問題点及び疑問点は以下の様に解決しました。

お尻から解決して行きました。

<解決【問題その2】>
PythonなのにOpenCvでダウンロードしたものがpyファイルではない」に関して
これはダウンロードするものが違ったと言うことでした。
>pip install opencv
上のコマンドが悪かった。。。これはPythonの方ではなかった。。。
>pip install opencv-python

こちらのコマンドが正しい、初めのコマンドだと以下の様にインストールされた

f:id:Takunoji:20180210171210p:plain

みるからにPythonのインストール後ではない(〜.pyファイルがないため)
そして「おかし〜な〜」なんて思っていましたが案の定間違っていました。

Python自体に2.Xと3.X、どちらがBlenderで使用しているものかわからない」

そして、こちらのケースはなんとかpipコマンドでインストールしたもののインストールしたものが2.Xの方だったのですがBlenderコンソールから起動しても参照されない。
「なんでだろー」と考えていたら「3.Xなのか?」と疑問に思い。。。案の定。。。
と言うわけで、Blenderで使用しているのは3.Xの方のPythonでした。

そして、ラスボス
【問題その1】BlenderのPythonConsoleにて以下のコードを実行するとエラーが起きる
以下のコードをBlenderから起動した時に
>>import cv2
 下の様な感じのエラーメッセージが出ました。
これは、ラズパイでの実行結果の様です。
※エラーログがどこかへ行ってしまい。。。

pi@raspberrypi~$ python cam.py
Traceback (most recent call last)
File "cam.py", line 1, in <module>
    import cv2
ImportError: No module named cv2

内容としては次の様なものでした。
「__init__.py の4行目「from cv2 import cv2 ..」 が見当たりません。」


結局のところは以下の点に集約されます。
「pipでインストールした</usr/local/lib/python3.6/site-packages/cv2>
にはcv2.soファイルがないために上記ディレクトリにある
__init__.pyからインポートするものがありませんよ。」

実際にインポートするのはsoファイルなのですが、自分のインストールディレクトリには、以下の様なものしかありませんでした。

f:id:Takunoji:20180210174023p:plain

仕方ないので、それっぽい名前の「cv2.cpython-36m-darwin.so」をリネームしました(笑)。
実行コマンド
>> cp パス/
cv2.cpython-36m-darwin.so パス/cv2.so

 

結果以下の様になりました。

f:id:Takunoji:20180210174610p:plain

f:id:Takunoji:20180210174647p:plain

次回は、画像の読み込みからどの様なデータが取得できるのか検証してみようと思います。