Présentation
Cet article se concentrera sur l'assemblage et l'installation d'
OpenCV 4 pour
C / C ++ ,
Python 2 et
Python 3 Ă partir de fichiers source avec des modules
CUDA 10 supplémentaires sur
Windows .
J'ai essayé d'inclure ici toutes les subtilités et nuances que vous pourriez rencontrer lors de l'installation, et dont elles ne sont pas écrites dans le
manuel officiel .

L'ensemble a été testé pour:
- Windows 8.1 + Visual Studio 2017 + Python 2/3 + CUDA 10.0 + GeForce 840m
- Windows 10 + Visual Studio 2019 + Python 2/3 + CUDA 10.0 + GeForce GTX 1060
Attention! La version ne fonctionnera pas pour la version
OpenCV 4.0.1 et / ou
CUDA en dessous de la version 10.
CUDA 9 et inférieur est pris en charge par
OpenCV 3 .
Ce que vous devez installer
Les outils suivants ont été utilisés dans mon assemblage:
- CMake 3.15
- Outils MS Visual Studio 2019 64 bits + CMake C ++ pour Windows
- Python 3.7.3 64 bits + NumPy 64 bits
- Python 2.7.16 64 bits + NumPy 64 bits
- CUDA 10.0
- CuDNN 7.6.2
- OpenCV 4.1.1 et OpenCV-contrib-4.1.1
L'installation
Puisque l'installation se fait via les commandes de la console, vous devez effectuer toutes les étapes avec soin et précision. Si nécessaire, modifiez également les chemins d'installation en fonction des vÎtres.
Vous devez d'abord installer le logiciel requis et
Visual Studio doit ĂȘtre installĂ© avant
CUDA :
AprÚs avoir installé tous les composants, assurez-vous que les chemins d'accÚs pour
CMake, Visual Studio, Python, CUDA, CuDNN sont écrits dans les variables
PATH, PYTHONPATH, CUDA_PATH et
cudnn, respectivement.
Ensuite, téléchargez les
archives sources opencv-4.1.1 et
opencv-contrib-4.1.1 à l'emplacement souhaité (dans mon cas, c'est
C: \ OpenCV \ ).
git clone https://github.com/opencv/opencv.git -b "4.1.1" git clone https://github.com/opencv/opencv_contrib.git -b "4.1.1"

Créez le
build / dossier dans opencv-4.1.1.

Ensuite, nous générons des fichiers d'assemblage à l'aide de
cmake . Nous utiliserons la version console de
cmake , car
cmake-gui confond les types de certaines variables (par exemple,
OPENCV_PYTHON3_VERSION ) et, par conséquent, génÚre des fichiers incorrectement.
Nous ouvrons la console le long du chemin
C: \ OpenCV \ et enregistrons les variables.
set "opencvSource=opencv-4.1.1" set "opencvExtraModules=opencv_contrib-4.1.1/modules" set "opencvBuild=%opencvSource%\build" set "compiler=Visual Studio 16 2019" set "buildType=Release"
Remarque Pour
Visual Studio 2017, le générateur est écrit comme "
Visual Studio 15 2017 Win64 " et sans l'indicateur
-A .
Vous pouvez Ă©galement spĂ©cifier explicitement les bibliothĂšques Python pour python 2 et python 3 au cas oĂč le collecteur ne pourrait pas les trouver automatiquement.
set "python2_executable=C:/Python27/python.exe" set "python2_include_dir=C:/Python27/include" set "python2_library=C:/Python27/libs/python27.lib" set "python2_numpy_include_dirs=C:/Python27/Lib/site-packages/numpy/core/include" set "python2_packages_path=C:/Python27/Lib/site-packages" set "python3_executable=C:/Users/root/Anaconda3/python.exe" set "python3_include_dir=C:/Users/root/Anaconda3/include" set "python3_library=C:/Users/root/Anaconda3/libs/python37.lib" set "python3_numpy_include_dirs=C:/Users/root/Anaconda3/lib/site-packages/numpy/core/include" set "python3_packages_path=C:/Users/root/Anaconda3/Lib/site-packages"
Remarque Veuillez noter que la bibliothĂšque
NumPy doit avoir la mĂȘme profondeur de bits que
OpenCV . Vérifier cela est facile:
import numpy.distutils.system_info as sysinfo print(sysinfo.platform_bits)
GĂ©nĂ©rez des fichiers d'assemblage Ă l'aide de la commande longue ci-dessous. En cas d'Ă©chec de la gĂ©nĂ©ration ou d'erreurs aprĂšs l'exĂ©cution de la commande, une gĂ©nĂ©ration rĂ©pĂ©tĂ©e doit ĂȘtre effectuĂ©e en nettoyant tous les fichiers dans
build / et
.cache / .
cmake ^ -B"%opencvBuild%/" ^ -H"%opencvSource%/" ^ -G"%compiler%" ^ -Ax64 ^ -DCMAKE_BUILD_TYPE=%buildType% ^ -DBUILD_opencv_world=ON ^ -DINSTALL_TESTS=OFF ^ -DINSTALL_C_EXAMPLES=OFF ^ -DBUILD_EXAMPLES=OFF ^ -DOPENCV_EXTRA_MODULES_PATH="%opencvExtraModules%/" ^ -DBUILD_PROTOBUF=ON ^ -DBUILD_opencv_python_bindings_generator=ON ^ -DWITH_CUDA=ON ^ -DCUDA_FAST_MATH=ON ^ -DWITH_CUBLAS=ON ^ -DCUDA_ARCH_PTX=7.5 ^ -DBUILD_opencv_python2=ON ^ -DPYTHON2_EXECUTABLE="%python2_executable%" ^ -DOPENCV_PYTHON2_VERSION=2.7.16 ^ -DPYTHON2_INCLUDE_DIR="%python2_include_dir%" ^ -DPYTHON2_LIBRARY="%python2_library%" ^ -DPYTHON2_NUMPY_INCLUDE_DIRS="%python2_numpy_include_dirs%" ^ -DPYTHON2_PACKAGES_PATH="%python2_packages_path%" ^ -DBUILD_opencv_python3=ON ^ -DPYTHON3_EXECUTABLE="%python3_executable%" ^ -DOPENCV_PYTHON3_VERSION=3.7.3 ^ -DPYTHON3_INCLUDE_DIR="%python3_include_dir%" ^ -DPYTHON3_LIBRARY="%python3_library%" ^ -DPYTHON3_NUMPY_INCLUDE_DIRS="%python3_numpy_include_dirs%" ^ -DPYTHON3_PACKAGES_PATH="%python3_packages_path%"
La signification de certains drapeaux- BUILD_opencv_world - un module optionnel contenant des copies de toutes les bibliothÚques sélectionnées lors de l'installation. Ceci est utile lors du développement en C ++ , car au lieu de connecter un groupe de dépendances opencv , vous pouvez connecter une dépendance opencv_world411.lib au projet
- INSTALL_EXAMPLES / INSTALL_TESTS - installation d'exemples / tests de code opencv
- CUDA_FAST_MATH, WITH_CUBLAS - modules supplémentaires pour CUDA , conçus pour accélérer les calculs
- CUDA_ARCH_PTX - version des instructions PTX pour améliorer les performances de calcul
- OPENCV_EXTRA_MODULES_PATH - chemin vers des modules supplémentaires depuis opencv-contrib (requis pour CUDA )
- BUILD_PROTOBUF - pour que certains modules opencv fonctionnent, Protobuf est requis (le collecteur opencv définira BUILD_PROTOBUF = ON de toute façon )
AprÚs environ 10 minutes, les informations d'assemblage et les lignes finales «
Configuration terminée » et «
Génération terminée » devraient apparaßtre dans la console. Nous vérifions toutes les informations, en particulier les sections de
NVIDIA CUDA, Python 2, Python 3 .

Ensuite, nous collectons la solution. La construction peut prendre plusieurs heures, selon votre processeur et la version de
Visual Studio .
cmake --build %opencvBuild% --target ALL_BUILD --config Release
Installez la solution.
cmake --build %opencvBuild% --target INSTALL --config Release
Une fois l'installation
terminée , créez la variable systÚme
OPENCV_DIR avec la valeur
C: \ OpenCV \ opencv-4.1.1 \ build \ install \ x64 \ vc15 \ bin et ajoutez-la Ă©galement Ă
PATH .
Test
Nous testerons la fonctionnalité d'
OpenCV avec le module
CUDA en utilisant un exemple simple de multiplication matricielle.
Connectez OpenCV à un projet Visual Studio- Définissez le type de build release / x64 (pour Debug, créez OpenCV avec le drapeau Debug)
- PropriĂ©tĂ©s du projet â C / C ++ â GĂ©nĂ©ral â Ajoutez la ligne «C: \ OpenCV \ opencv-4.1.1 \ build \ install \ include» aux rĂ©pertoires d'inclusion supplĂ©mentaires
- PropriĂ©tĂ©s du projet â Ăditeur de liens â GĂ©nĂ©ral â Ajoutez la ligne «C: \ OpenCV \ opencv-4.1.1 \ build \ install \ x64 \ vc16 \ lib» aux rĂ©pertoires de bibliothĂšque supplĂ©mentaires
- PropriĂ©tĂ©s du projet â Ăditeur de liens â GĂ©nĂ©ral â Ajouter «; opencv_world411.lib» («; opencv_world411d.lib» pour le dĂ©bogage) Ă la fin des dĂ©pendances supplĂ©mentaires
Exemple Python 3 import numpy as np import cv2 as cv import time rand = np.random.random((1024, 1024)).astype(np.float32) h_array1 = np.stack([rand, rand],axis=2) h_array2 = h_array1 d_array1 = cv.cuda_GpuMat() d_array2 = cv.cuda_GpuMat() d_array1.upload(h_array1) d_array2.upload(h_array2) start = time.time() cv.cuda.gemm(d_array1, d_array2, 1, None, 0, None, 1) end = time.time() print("Time elapsed:", end - start, "sec")
Sortie console
Time elapsed: 0.3130002021789551
Exemple C ++ #include <iostream> #include <opencv2/opencv.hpp> #include <opencv2/cudaarithm.hpp> using namespace std; using namespace cv; using namespace cv::cuda; int main() { Mat h_array1 = Mat::ones(1024, 1024, CV_32FC2); Mat h_array2 = Mat::ones(1024, 1024, CV_32FC2); Mat h_array3 = Mat::zeros(1024, 1024, CV_32FC2); Mat h_result; GpuMat d_array1, d_array2, d_array3, d_result; d_array1.upload(h_array1); d_array2.upload(h_array2); const clock_t begin_time = clock(); cuda::gemm(d_array1, d_array2, 1.0, d_array3, 0.0, d_result); cout << "Time elapsed: " << (float(clock() - begin_time) / CLOCKS_PER_SEC) << " sec" << endl; d_result.download(h_result); return 0; }
Sortie console
Time elapsed: 0.354
Effacer
Pour supprimer
OpenCV , vous devez exécuter la commande.
cmake --build %opencvBuild% --target uninstall --config Release
et supprimez la variable systĂšme
OPENCV_DIR et supprimez le chemin vers OpenCV de
PATH .
Conclusion
Dans cet article, nous avons examiné l'installation d'
OpenCV 4 pour
Windows 10 . Cet algorithme a été testé sur
Windows 8.1 et
Windows 10 , mais, en thĂ©orie, il peut ĂȘtre construit sur
Windows 7 . Pour plus d'informations, consultez la liste des sources ci-dessous.
PS Enfin, nous rassemblerons toutes les commandes d'installation dans un seul fichier
.bat pour ceux qui souhaitent automatiser l'installation.
install_opencv411.bat cd C:\OpenCV git clone https://github.com/opencv/opencv_contrib.git -b "4.1.1" git clone https://github.com/opencv/opencv.git -b "4.1.1" ren opencv opencv-4.1.1 ren opencv_contrib-4.1.1 set "opencvSource=opencv-4.1.1" set "opencvExtraModules=opencv_contrib-4.1.1/modules" set "opencvBuild=%opencvSource%\build" set "compiler=Visual Studio 16 2019" set "buildType=Release" set "python2_executable=C:/Python27/python.exe" set "python2_include_dir=C:/Python27/include" set "python2_library=C:/Python27/libs/python27.lib" set "python2_numpy_include_dirs=C:/Python27/Lib/site-packages/numpy/core/include" set "python2_packages_path=C:/Python27/Lib/site-packages" set "python3_executable=C:/Users/root/Anaconda3/python.exe" set "python3_include_dir=C:/Users/root/Anaconda3/include" set "python3_library=C:/Users/root/Anaconda3/libs/python37.lib" set "python3_numpy_include_dirs=C:/Users/root/Anaconda3/lib/site-packages/numpy/core/include" set "python3_packages_path=C:/Users/root/Anaconda3/Lib/site-packages" cmake ^ -B"%opencvBuild%/" ^ -H"%opencvSource%/" ^ -G"%compiler%" ^ -Ax64 ^ -DCMAKE_BUILD_TYPE=%buildType% ^ -DBUILD_opencv_world=ON ^ -DINSTALL_TESTS=OFF ^ -DINSTALL_C_EXAMPLES=OFF ^ -DBUILD_EXAMPLES=OFF ^ -DOPENCV_EXTRA_MODULES_PATH="%opencvExtraModules%/" ^ -DBUILD_PROTOBUF=ON ^ -DBUILD_opencv_python_bindings_generator=ON ^ -DWITH_CUDA=ON ^ -DCUDA_FAST_MATH=ON ^ -DWITH_CUBLAS=ON ^ -DCUDA_ARCH_PTX=7.5 ^ -DBUILD_opencv_python2=ON ^ -DPYTHON2_EXECUTABLE="%python2_executable%" ^ -DOPENCV_PYTHON2_VERSION=2.7.16 ^ -DPYTHON2_INCLUDE_DIR="%python2_include_dir%" ^ -DPYTHON2_LIBRARY="%python2_library%" ^ -DPYTHON2_NUMPY_INCLUDE_DIRS="%python2_numpy_include_dirs%" ^ -DPYTHON2_PACKAGES_PATH="%python2_packages_path%" ^ -DBUILD_opencv_python3=ON ^ -DPYTHON3_EXECUTABLE="%python3_executable%" ^ -DOPENCV_PYTHON3_VERSION=3.7.3 ^ -DPYTHON3_INCLUDE_DIR="%python3_include_dir%" ^ -DPYTHON3_LIBRARY="%python3_library%" ^ -DPYTHON3_NUMPY_INCLUDE_DIRS="%python3_numpy_include_dirs%" ^ -DPYTHON3_PACKAGES_PATH="%python3_packages_path%" cmake --build %opencvBuild% --target ALL_BUILD --config Release cmake --build %opencvBuild% --target INSTALL --config Release
Liste des sources
- docs.opencv.org/4.1.1/d3/d52/tutorial_windows_install.html
- www.learnopencv.com/install-opencv-4-on-windows
- jamesbowley.co.uk/build-opencv-4-0-0-with-cuda-10-0-and-intel-mkl-tbb-in-windows
- lightbuzz.com/opencv-cuda
- Chapitre «Créer des bibliothÚques à partir de la source» du livre Hands-on GPU-Accelerated Computer Vision with OpenCV and CUDA