« ウィンドウズ版のPythonでメモリに困った場合の対処法 | トップページ | ウィンドウズでCUDA付きでTheanoインストール!Python3.5でもできた。 »

2016年2月11日 (木)

ウィンドウズでOpenCV 3.1.0をopencv_contrib付きでPython用にビルド。

Opencvlogowhite1_2

今更ながら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があるという結論。見直した。自分でビルドしなくてもいいかも。

参考資料:

上の「にせねこメモ」さんのところでは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でもできた。 »

Python」カテゴリの記事

パソコン・インターネット」カテゴリの記事

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1169291/63890089

この記事へのトラックバック一覧です: ウィンドウズでOpenCV 3.1.0をopencv_contrib付きでPython用にビルド。:

« ウィンドウズ版のPythonでメモリに困った場合の対処法 | トップページ | ウィンドウズでCUDA付きでTheanoインストール!Python3.5でもできた。 »

広告欄


やっつけタイムライン

広告欄

はてブ

人目の訪問です。

  • follow us in feedly

    かなり更新が不定期なため、RSSリーダーをオススメします。現在Feedlyに122人登録頂いています。多謝!RSSを表示

    ブログランキング用 にほんブログ村 IT技術ブログ Pythonへ ブログランキングならblogram






    Jenny Mayhem
2017年11月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    

IT技術注目記事

無料ブログはココログ