Help us understand the problem. What is going on with this article?

OpenCV 3.4.2 + CUDA 10.1 + Python3な環境をWindows10で構築

1. Visual Studio Community 2017のインストール

筆者はUnityを使っていたのでUnity HubのAdd componentsでVisual Studio Community 2017を選択してインストールした。

2019-04-05 (2).png
2019-04-05 (3).png
2019-04-05 (4).png

インストールしたらVisual Studio Community 2017を立ち上げてHelpからVersionを確認。15.9.11だった。

2019-04-05 (5).png

以下のコマンドでC/C++コンパイラ(MSVC)のVersionが確認できる。19.16.27030.1だった。

> "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\bin\Hostx64\x64\cl.exe"
Microsoft (R) C/C++ Optimizing Compiler Version 19.16.27030.1 for x64
Copyright (C) Microsoft Corporation.  All rights reserved.

usage: cl [ option... ] filename... [ /link linkoption... ]

2. Cuda 10.1のインストール

予め自分のGPUに対応する最新のグラフィックドライバーをダウンロードしてインストールしておく。
https://www.nvidia.com/Download/index.aspx?lang=en-us

Cuda 10.1をダウンロードしてくる。
https://developer.nvidia.com/cuda-downloads?target_os=Windows&target_arch=x86_64&target_version=10&target_type=exenetwork

cuda_download.PNG

cuda_10.1.105_win10_network.exeを実行してCuda 10.1をインストールする。筆者はCustomでCUDAコンポーネントのDevelopmentとRuntimeのみ選択したがExpressでもOK。

2019-04-11 (11).png
2019-04-11 (12).png
2019-04-11 (16).png
2019-04-11 (13).png
2019-04-11 (14).png
2019-04-11 (15).png

PCを再起動。

3. C/C++コンパイラ(MSVC)の確認・設定

CUDA Installation Guideによれば、Cuda 10.1に対応するMSVCのVersionは191xとなっていることがわかる。

cuda_compatibility.png

Visual Studioインストール時に確認したMSVCのVersionは19.16.27030.1だった。Visual Studioのversionと判別マクロでVisual Studio Community 2017 Version 15.9.11のMSVCを確認してみると_MSC_VERは1916となっている。19.16.27030.1=1916∈191xなのでMSVCがCuda 10.1に対応していることがわかる。

Visual Studioフォルダの以下のファイルでMSC_VERが1916になっていないとコンパイルできないらしいので書き換えておく。

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\yvals_core.h

- #if _MSC_VER < 1915   // Coarse-grained, not inspecting _MSC_FULL_VER
+ #if _MSC_VER < 1916   // Coarse-grained, not inspecting _MSC_FULL_VER

4. OpenCV 3.4.2のインストール

4.1. OpenCV 3.4.2のダウンロード

opencv-3.4.2のソースコードをダウンロードする。
https://github.com/opencv/opencv/releases/tag/3.4.2

opencv_contrib-3.4.2のソースコードをダウンロードする。
https://github.com/opencv/opencv_contrib/releases/tag/3.4.2

解凍後、以下のようにディレクトリを構成する。

C:\opencv\3.4.2\opencv-3.4.2
C:\opencv\3.4.2\opencv_contrib-3.4.2
C:\opencv\3.4.2\build

4.2. CMake

CMakeがなければダウンロードしてインストールする。
https://cmake.org/download/

CMakeを立ち上げる。以下、CMake GUIで設定。

Where is the source code: C:/opencv/3.4.2/opencv-3.4.2
Where to build the binaries: C:/opencv/3.4.2/build

Configure

Visual Studio 15 2017 / x64 / Use default native compilers

Finish

2019-04-05 (16).png

再度、CMake GUIで設定。

Name Value
CMAKE_INSTALL_PREFIX C:/opencv/3.4.2/build/install
BUILD_EXAMPLES OFF
BUILD_opencv_python3 ON
BUILD_opencv_python_bindings_generator ON
BUILD_PERF_TESTS OFF
BUILD_TESTS OFF
BUILD_TBB OFF
INSTALL_CREATE_DISTRIB ON
INSTALL_C_EXAMPLES OFF
INSTALL_PYTHON_EXAMPLES OFF
OPENCV_EXTRA_MODULES_PATH C:/opencv/3.4.2/opencv_contrib-3.4.2/modules
PYTHON3_NUMPY_INCLUDE_DIRS C:/Users/YourName/Anaconda3/lib/site-packages/numpy/core/include
WITH_CUDA ON
WITH_LAPACK OFF
WITH_VTK OFF
WITH_TBB OFF


Configure

CUDA architecture番号を確認。
https://developer.nvidia.com/cuda-gpus

筆者のマシンに搭載されているRTX2060のComputer Capabilityは7.5だった。また、Windows 10ではopencv_saliency moduleはビルドに失敗するのでここでOFFにする。opencv_worldをONにしておくことですべてのライブラリファイルを一括でリンクできるopencv_world.libが生成される。CMake GUIで以下のように設定。

Name Value
CUDA_ARCH_BIN 7.5
CUDA_ARCH_PTX 7.5
CUDA_TOOLKIT_ROOT_DIR C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v10.1
BUILD_opencv_saliency OFF
BUILD_opencv_world ON


Configure

Generate

2019-04-05 (18).png

以上でCMakeは完了。

4.3. ビルド

コマンドプロントで以下のコマンドを実行する。

> cd C:\opencv\3.4.2\build
> cmake.exe --build . --config Release --target INSTALL

warningが大量に出るが気にしなくても良い。結構時間がかかるので他のことをしながらビルドが終わるのを気長に待つ。

2019-04-05 (26).png

ビルド完了。

4.4. 環境変数

Variable: OPENCV_DIR
Value: C:\opencv\3.4.2\build

Variable: OPENCV_VER
Value: 342

Variable: PATH
Value: %OPENCV_DIR%\bin\Debug
       %OPENCV_DIR%\bin\Release
       %OPENCV_DIR%\install\x64\vc15\bin

PCを再起動。

4.5. Pythonでimport cv2

最後にPython3でcv2をimportできるようにする。以下の手順でCUDAが使えるOpenCVであることを確認できる。

> conda create -n py37 python=3.7
> cd C:\opencv\3.4.2\build\lib\python3\Release\
> cp .\cv2.cp37-win_amd64.pyd C:\Users\YourName\Anaconda3\envs\py37\Lib\site-packages\.
> activate py37
> pip install numpy
> python
>>> import cv2
>>> print(cv2.getBuildInformation())

General configuration for OpenCV 3.4.2 =====================================
  Version control:               unknown

  Extra modules:
    Location (extra):            C:/opencv/3.4.2/opencv_contrib-3.4.2/modules
    Version control (extra):     unknown

  Platform:
    Timestamp:                   2019-04-10T03:21:47Z
    Host:                        Windows 10.0.17763 AMD64
    CMake:                       3.14.1
    CMake generator:             Visual Studio 15 2017
    CMake build tool:            C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/MSBuild/15.0/Bin/MSBuild.exe
    MSVC:                        1916

  CPU/HW features:
    Baseline:                    SSE SSE2 SSE3
      requested:                 SSE3
    Dispatched code generation:  SSE4_1 SSE4_2 FP16 AVX AVX2
      requested:                 SSE4_1 SSE4_2 AVX FP16 AVX2 AVX512_SKX
      SSE4_1 (3 files):          + SSSE3 SSE4_1
      SSE4_2 (1 files):          + SSSE3 SSE4_1 POPCNT SSE4_2
      FP16 (1 files):            + SSSE3 SSE4_1 POPCNT SSE4_2 FP16 AVX
      AVX (5 files):             + SSSE3 SSE4_1 POPCNT SSE4_2 AVX
      AVX2 (9 files):            + SSSE3 SSE4_1 POPCNT SSE4_2 FP16 FMA3 AVX AVX2

  C/C++:
    Built as dynamic libs?:      YES
    C++11:                       YES
    C++ Compiler:                C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.16.27023/bin/Hostx86/x64/cl.exe  (ver 19.16.27030.1)
    C++ flags (Release):         /DWIN32 /D_WINDOWS /W4 /GR  /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /bigobj /Oi      /EHa /wd4127 /wd4251 /wd4324 /wd4275 /wd4512 /wd4589 /MP8   /MD /O2 /Ob2 /DNDEBUG
    C++ flags (Debug):           /DWIN32 /D_WINDOWS /W4 /GR  /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /bigobj /Oi      /EHa /wd4127 /wd4251 /wd4324 /wd4275 /wd4512 /wd4589 /MP8   /MDd /Zi /Ob0 /Od /RTC1
    C Compiler:                  C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.16.27023/bin/Hostx86/x64/cl.exe
    C flags (Release):           /DWIN32 /D_WINDOWS /W3  /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /bigobj /Oi        /MP8    /MD /O2 /Ob2 /DNDEBUG
    C flags (Debug):             /DWIN32 /D_WINDOWS /W3  /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /bigobj /Oi        /MP8  /MDd /Zi /Ob0 /Od /RTC1
    Linker flags (Release):      /machine:x64  /INCREMENTAL:NO
    Linker flags (Debug):        /machine:x64  /debug /INCREMENTAL
    ccache:                      NO
    Precompiled headers:         NO
    Extra dependencies:          cudart.lib nppc.lib nppial.lib nppicc.lib nppicom.lib nppidei.lib nppif.lib nppig.lib nppim.lib nppist.lib nppisu.lib nppitc.lib npps.lib cublas.lib cufft.lib -LIBPATH:C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v10.1/lib/x64
    3rdparty dependencies:

  OpenCV modules:
    To be built:                 aruco bgsegm bioinspired calib3d ccalib core cudaarithm cudabgsegm cudacodec cudafeatures2d cudafilters cudaimgproc cudalegacy cudaobjdetect cudaoptflow cudastereo cudawarping cudev datasets dnn dnn_objdetect dpm face features2d flann fuzzy hdf hfs highgui img_hash imgcodecs imgproc java_bindings_generator line_descriptor ml objdetect optflow phase_unwrapping photo plot python3 python_bindings_generator reg rgbd shape stereo stitching structured_light superres surface_matching text tracking ts video videoio videostab world xfeatures2d ximgproc xobjdetect xphoto
    Disabled:                    js saliency
    Disabled by dependency:      -
    Unavailable:                 cnn_3dobj cvv freetype java matlab ovis python2 python2 sfm viz
    Applications:                examples apps
    Documentation:               NO
    Non-free algorithms:         NO

  Windows RT support:            NO

  GUI:
    Win32 UI:                    YES

  Media I/O:
    ZLib:                        build (ver 1.2.11)
    JPEG:                        build-libjpeg-turbo (ver 1.5.3-62)
    WEBP:                        build (ver encoder: 0x020e)
    PNG:                         build (ver 1.6.34)
    TIFF:                        build (ver 42 - 4.0.9)
    JPEG 2000:                   build (ver 1.900.1)
    OpenEXR:                     build (ver 1.7.1)
    HDR:                         YES
    SUNRASTER:                   YES
    PXM:                         YES

  Video I/O:
    Video for Windows:           YES
    DC1394:                      NO
    FFMPEG:                      YES (prebuilt binaries)
      avcodec:                   YES (ver 57.107.100)
      avformat:                  YES (ver 57.83.100)
      avutil:                    YES (ver 55.78.100)
      swscale:                   YES (ver 4.8.100)
      avresample:                YES (ver 3.7.0)
    GStreamer:                   NO
    DirectShow:                  YES
    Media Foundation:            YES

  Parallel framework:            Concurrency

  Trace:                         YES (with Intel ITT)

  Other third-party libraries:
    Intel IPP:                   2017.0.3 [2017.0.3]
           at:                   C:/opencv/3.4.2/build/3rdparty/ippicv/ippicv_win
    Intel IPP IW:                sources (2017.0.3)
              at:                C:/opencv/3.4.2/build/3rdparty/ippicv/ippiw_win
    Eigen:                       NO
    Custom HAL:                  NO
    Protobuf:                    build (3.5.1)

  NVIDIA CUDA:                   YES (ver 10.1, CUFFT CUBLAS)
    NVIDIA GPU arch:             75
    NVIDIA PTX archs:            75

  OpenCL:                        YES (no extra features)
    Include path:                C:/opencv/3.4.2/opencv-3.4.2/3rdparty/include/opencl/1.2
    Link libraries:              Dynamic load

  Python 3:
    Interpreter:                 C:/Users/YourName/Anaconda3/python.exe (ver 3.7.1)
    Libraries:                   C:/Users/YourName/Anaconda3/libs/python37.lib (ver 3.7.1)
    numpy:                       C:/Users/YourName/Anaconda3/lib/site-packages/numpy/core/include (ver 1.15.4)
    packages path:               C:/Users/YourName/Anaconda3/Lib/site-packages

  Python (for build):            C:/Users/YourName/Anaconda3/python.exe

  Java:
    ant:                         NO
    JNI:                         NO
    Java wrappers:               NO
    Java tests:                  NO

  Install to:                    C:/opencv/3.4.2/build/install
-----------------------------------------------------------------
obikata
Software engineer developing computer vision and machine learning applications
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした