Elsaの技術日記(徒然なるままに)

主に自分で作ったアプリとかの報告・日記を記載

MENU

pyinstallerでopencvを含めた実行ファイルを作成するには

先日よりマウスやきーぼード入力を自動化したいと思い、PyAutoGuiを用いた自動化にチャレンジしてきました。
elsammit-beginnerblg.hatenablog.com
elsammit-beginnerblg.hatenablog.com
elsammit-beginnerblg.hatenablog.com


作成した環境を別PCでも自動化で使用したいな!!
と思い、pyinstallerで実行ファイル化することにしました!!

そこで早速実行してみました。
pyinstallerにより生成された実行ファイルを別PCで実行してみたところ、
マウスやキーボードの入力は問題なく動作したのですが、
locateOnScreen関数でエラーとなってしまいました。。。

■原因
実行時発生したエラーはこちら。

NotImplementedError: The confidence keyword argument is only available if OpenCV is installed.

OpenCVがなくエラーになってしまっているようです。
locateOnScreen関数自体はOpenCV不要で動作するのですが、
confidenceオプションを使用するためにはOpenCVが必要になります。
confidenceオプションを利用しないと完全一致で曖昧な一致はNGとなってしまいます。
付けないと全然使い物にならないんですね。。
なので付けないわけにもいかず。。

ということで、pyinstallerに含める方法を調査することにしました!!



■環境

今回利用した環境ですが、
 ・raspberryPi
 ・pythonバージョン:python3.6

■pyinstallerで実行ファイルにopencvを含める方法

調査を進めたところどうやら

pyinstaller --paths="/usr/local/lib/python3.6/dist-packages/cv2/python-3.6/" hoge.py

といったように、
pathsオプションでopencvまでのパスを指定することでpyinstallerにより実行ファイルに含めることができるようです。

こちらで生成された実行ファイルを実行してみたところ、
OpenCV関係のエラーが発生せず、問題なく実行できました!!
やった!!

もし実行ファイル1つにまとめたい場合には、

pyinstaller --onefile --paths="/usr/local/lib/python3.6/dist-packages/cv2/python-3.6/" hoge.py

といったようにonefileを付与すればOKです。

OpenCVのパス調査方法

OpenCVのパスですが、

print(cv2.__file__)

で調べることが可能です。

もし上記で確認できない場合、もしかしたら

import cv2
print(cv2.path)

で確認できるかもしれないです。

Linux環境であれば、

/usr/local/lib/pythonバージョン/dist-packages/cv2/pythonバージョン/

がパスになるかと思います。
まぁ、正確なのはパスを確認いただく方法です。

■最後に

pyinstallerで生成された実行ファイルが実行できない時、少し絶望を覚えたのですが、、
何とか解決できてよかった。
調べれば何でも見つけられるものですね。