ウィンドウズでOpenCV 3.1.0をopencv_contrib付きでPython用にビルド。
今更ながらopencv_contribにある実験的なモジュールの数々が宝の山であることを発見。昔はC++しかアクセスできなかったが、opencv3.0.0あたりからPythonからもだいぶ利用可能になっているらしい。opencv_contribのモジュールは公式なバイナリには含まれないので、Python27(32-bit)用に自分でビルドに挑戦。だれか配ってくれよとおもったが、ぐぐっても「ビルドは簡単だから自分でやれ」とのお言葉ばかりで、バイナリは落ちていない模様。
追記! GohlkeさんのところにPython3.5のopencv_contrib付きビルドがあった。64ビットと32ビット両方。Python27はなし。これは本格的に3.5に乗換るときが来たということか。
さらに追記・・。Gohlkeさんのopencv_python-3.1.0+contrib-cp35-none-win_amd64.whlをアナコンダの64ビットのPython3.5で試したところインポートできなかった・・。多分64ビットNumpyのコンパイラーの不一致のせい。GohlkeさんのNumpyはMKLサポート版で公式のPythonをビルドした同じVisual Studioでビルドしてある。AnacondaのNumpyはMKLなしなのかな。とにかく相性悪い模様。
追記) Anacondaにひっそりとopencv_contrib付きと見られるビルドをみつけた。公式のレポジトリーにはないので油断してた。。。conda install -c https://conda.anaconda.org/menpo opencv3
とするとopencv 3.1.0がインストールされる模様。menpoって?ググってもようわからん。Linuxではsource activate後にlib_opencv_highgui.soにパスを通さないとVideoCapture使えないのが注意だが、ちゃんと使える。AnacondaにはウィンドウズでもLinuxでもopencv_contrib付きのすばらしいOpenCV3があるという結論。見直した。自分でビルドしなくてもいいかも。
参考資料:
- opencv_contribのビルド方法の公式ガイド
- OpenCV 3.0 を opencv_contrib を有効にして VS 2013 用にコンパイルする
- Install OpenCV-Python in Windows
- OpenCV 2.4.12.0 documentation » OpenCV Tutorials » Introduction to OpenCV » Installation in Windows
上の「にせねこメモ」さんのところではVS2013を使っていますが、私の場合Install OpenCV-Python in Windowsにあるとおり、上の「Install OpenCV-Python in Windows」に従ってVisual Studio 2012をつかってビルドしました。
なのでVS2012がなければこれをインストールしておく。 こちらからisoファイルをダウンロードできる。これを WinCDEmu Portableなどでマウントしてインストール。
1.適当にフォルダ作成 temp。
2.temp内でgit cloneコマンドで
opencvをクローン
git clone https://github.com/Itseez/opencv
opencv_contribをクローン
git clone https://github.com/Itseez/opencv_contrib
最新のバージョンでビルドがうまくいかないときはリリースまで戻る。
git tag
としてでてくるタグで3.1.0とか3.0.0とか選んで、
git checkout tags/3.1.0
としてリリース版をチェックアウトする。contribの方も同様にバージョンをあわせる。
gitが面倒なら[DOWNLOAD ZIP]ボタンからzipでもおk.
これで
temp/opencv temp/opencv_contrib
のフォルダができているはず。
3.公式にしたがってtemp/opencvの下にbuildフォルダを作成。
temp/opencv/build
4.今作ったまっさらなbuildフォルダにコマンドラインで移動し、ここでcmakeする。cmakeコマンドは現在のフォルダにもろもろと大量のファイル・フォルダを作成するので、移動しておくのが大事。(失敗から学んだ人の言葉)
cmakeはなければ適当に最新版をインストールして、パスを通しておく。
公式では
cmake -DOPENCV_EXTRA_MODULES_PATH=opencv_contrib/modules opencv_source_directory
でコンフィグレーションするとある。相対パスが効いたのでtemp/opencv/buildからなので
cmake -DOPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules ../
でおk.これでConfigureとGenerateが終了。cmakeがPythonのヘッダーとかNumpyのヘッダーとか勝手に見つけてくれる。
もしVS2012以外のジェネレーターが選択されている場合
cmake -G
で出てくるリストを参考に
cmake -G "Visual Studio 11 2012" -DOPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules ../
のようにジェネレーターを指定してやるか、
cmake-gui
としてGUIを呼び出して、Fileからキャッシュの削除をして、Configureボタンを押すとジェネレーターを聞いてくるのでVisual Studio 11 2012と"Use default native compilers"を選ぶ。で、Generateボタンを押して完了。
5.VS2012などでビルド
cmakeでプロジェクトファイルの準備が済んだら、makeをしろと公式にはあるがそれはLinux/Macの話。ウィンドウズなのでおとなしくマイクソソフト謹製のコンパイラを使う。
cmakeコマンドが成功していれば、OpenCV.slnというファイルができるはずなのでダブルクリックしてVS2012とかを立ち上げる。
VS2012でビルドのターゲットをDebugからReleaseに変えて、ソリューションエクスプローラーからALL_BUILDを右クリックしてビルドを選択。
リリースにするのを忘れるとdebugバージョンでビルドすることになり長々とビルドをした最後のあたりでpython27_d.lib がないと怒られる。(失敗から学んだ人の言葉2)これはPythonのディベロップメント用のファイルを持っていなからと思われる。
6.できたバイナリを手作業でサイトパッケージにコピー
cv2.pydは opencv\build\lib\Release
にある。これがわかりにくい。(失敗から学んだ人の言葉3)
もろもろのDLLは opencv\build\bin\Release
にある。
cv2.pydとDLLをごっそりサイトパッケージにコピー。
さらに、ここが重要:
opencv_ffmpeg310.dllをC:\Python27にもコピーする。
python.exeがあるC:\Python27にもffmpegのDLLがないとcv2.VideoCaptureでビデオファイルを開こうとしてもエラーになります(失敗から学んだ人の言葉4)。
前のバージョンが残っている場合はアンインストールする。手作業でやる場合cv.pyとcv2.pydとopencv_**.dlもろもろとtbb.dllをsite-packagesから他のフォルダに避難しておく。opencv_ffmpegXXX.dllをC:\Python27から避難するのもわすれずに。cv2.pydを選んで日付順にソートすると見つけるのが楽。
7.テスト
>>> import cv2 >>> cv2.__version__ 0: '3.1.0-dev' >>> fp = r'C:/Users/Public/Videos/Sample Videos/Wildlife.wmv' >>> cap = cv2.VideoCapture(fp) >>> cap.isOpened() 1: True
やったー。。
8.おまけ TBBでマルチコアを使う。
欲を言えばtbbがオンになっていないのでマルチコアが使えてないのがちょっと悲しい。場合によっては爆速らしいしやってみる。設定するオプションがいっぱいなのでコマンドラインよりcmake-guiでやったほうがいい。
- OpenCVとcontribは3.1.0のリリースソースをチェックアウト
- cmake-guiでOPENCV_EXTRA_MODULES_PATHがちゃんと設定されているか確認。一度上でコンフィグしているので大丈夫なはず。
- opencv\depというフォルダをつくってそこに最新版tbbの44のソースとバイナリを解凍。ソースだけだとtbb.libがないと怒られた気がする。
- cmake-guiでWITH_TBB をイエス
- cmake-guiでBUILD_TBBはチェックすると怒られるのでしない
- TBB_INCLUDES_DIRSに C:\temp\opencv\dep\tbb44_20151115oss
でなんかできたっぽい。tbb.dllは自分でビルドするなと書いてあるのでダウンロードしてきたものをそのまま使う。
« ウィンドウズ版のPythonでメモリに困った場合の対処法 | トップページ | ウィンドウズでCUDA付きでTheanoインストール!Python3.5でもできた。 »
「パソコン・インターネット」カテゴリの記事
- 『将棋神やねうら王』のオープンソース版MyShogiをLinux Mint 19.1でビルドしてみた件(2019.03.24)
- ElementaryOS: ウィンドウズ10のVMをVirtioドライバでKVMに直インストール!(2018.09.02)
- ElementaryOSのすゝめ。インストールから日本語入力まで。(2018.07.10)
- やねうら王MyShogiをLinuxでビルドしてみた(2018.06.19)
- Linux Mint 18.2でNoMachine 6をつかう。(2017.12.06)
「Python」カテゴリの記事
- Noteの記事をPythonでバックアップしといた。(2021.05.05)
- JupyterLabでも好きな外部エディターを使いたい!(2018.05.02)
- ローカルエリア内のJupyterLabサーバーにLAN経由で接続する。(2018.05.02)
- Juliaやってみよう。五日目。Pythonと速度比較。(2017.08.01)
- Juliaやってみよう。四日目。@timeでプロファイリング(2017.07.16)
« ウィンドウズ版のPythonでメモリに困った場合の対処法 | トップページ | ウィンドウズでCUDA付きでTheanoインストール!Python3.5でもできた。 »
コメント