OpenCV 3.4.0 with contrib ビルドのメモ。(Windows編)

ビルド済みの普通のOpenCVpythonでも使いたい!って場合は、Anacondaで神のサイトからwflをダウンロードが時短できておすすめ。

私の用にOpenCV自前ビルドやりたくないけど、、CUDA入りdll作りたいしって人達の参考になれば。

ツールのダウンロード

以下の環境でビルド
- Windows 10 - GPU GTX 1070 - Visual Studio 2015 - CUDA v9.1 - CMake 3.9.6


Visual Studio 2015
一番最近の2017パッチはまだ対応していないという情報があったので、一応Visual Studio 2015 Communityでビルド。 CMake-GUIで以下のエラーが出た場合は、c++環境がセットアップされていないので、

    The CXX compiler identification is unknown
    The C compiler identification is unknown

Qiitaを参考にc++ツールをダウンロード


CUDA
CUDAをインストールする。最新版v9.1で試す


CMake
CMakeをダウンロード 最新3.9.6を使った


OpenCV
OpenCV 3.4.0 OpenCV contlib 3.4.0アーカイブをダウンロードして展開する


CMake GUI設定

CMake-GUIを起動。Visual Studio 2015 64bitを選ぶ。 デフォルトのオプションから変更必要な部分。

  1. Where is the source codeOpenCV本体のフォルダを指定
  2. Where to build the binariesに書き出しフォルダ、build (何でもいい)を指定する
  3. OPENCV_EXTRA_MODULES_PATHにcontrib/modulesのパスを指定
  4. CUDA_TOOLKIT_ROOT_DIRのパスが設定されているか確認。NOT-FOUNDになってたりする。 私の環境はこちらC:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v9.1
  5. CUDA_ARCH_BINは、使うものだけにするとビルドが早くなる。CUDAのビルドはすっごい時間かかるので他の環境で使わない場合は、使うものだけを設定するのが良いかと。自分の使っているGPUアーキテクチャこちらで確認できる(リンク見るためにはNVIDIAログイン必要). GTX1070, GTX1080なら、6.1だけでいい。
  6. 多分以下のようなエラーがでるので。StackOverFlowを参考にCUDA_HOST_COMPILERを設定しなおす。簡単に言うとcl.exeのパスを設定する。 CMake Error at cuda_compile_generated_gpu_mat.cu.obj.cmake:206 (message): D:------/core/CMakeFiles/cuda_compile.dir/src/cuda/Debug/cuda_compile_generated_gpu_mat.cu.obj 設定するパスは私の場合はこちら C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/cl.exe CUDA関連設定
  7. tuple errorが出るので、(参考) BUILD_PREF_TEST : OFF にした
  8. Open Projectボタン → Visual Studio 開く→INSTALLを実行 →結構待つ

これで恐らくビルドできるので、インストールしたファイルを使いやすいところにコピーして、環境変数設定をする。今回はC:\Program Files\OpenCV\3.4.0 にインストールした。 (キャプチャは3.3.1だけど)

ちなみに、opencv_worldをビルドすると、すべてのdllが一つにまとまって楽だけど、ビルドが数時間かかるって、エラーでたときの辛さが増すので、小分けにするのがおすすめかも。


Visual Studioでの設定

OpenCVVisual Studio Projectでリンクする方法はこちらを参考Additional Include Directories, Additional Library Directories を設定する。

include folder linker directory