Compiler openCV 3.1 avec sa partie CUDA sur Windows

Compiler openCV 3.1 avec sa partie CUDA sur Windows

Dans cet article, je vais vous expliquer comment compiler la librairie openCV avec sa partie CUDA sur Windows. C’est une véritable épopée. Je précise également que cet article s’adresse à ceux voulant coder en C ou C++. Pour Python ou Java, la démarche doit être plus ou moins identique.

Vous aurez besoin de télécharger CUDA Toolkit, CMake, Microsoft Visual Studio 2013 et QtCreator avec MSVC 2013 64bit.

A l’heure où j’écris ce tuto, la version de CUDA disponible en téléchargement est la 7.5. Sur Windows, seuls VS 2010 à 2013 permettent de compiler des fichiers CUDA avec NVCC. La version 8 devrait permettre d’utiliser VS 2015. Donc faites bien attention à la version que vous téléchargez. De plus, si vous avez un processeur 64 bit, prenez bien les versions 64 bit.

La première étape est donc de télécharger et installer CUDA Toolkit que vous trouverez ici : https://developer.nvidia.com/cuda-downloads

Une fois fait, téléchargez et installez Microsoft Visual Studio 2013 : https://www.visualstudio.com/fr-fr/downloads/download-visual-studio-vs.aspx. Sur cette page, cliquez sur Visual Studio 2013 dans la liste en bas à gauche puis cliquez sur téléchargement.

Une fois téléchargé et installé, ouvrez un projet C++ pour vous assurer que le compilateur MSVC C++ est bien présent. Normalement, il l’est. S’il ne l’est pas, le logiciel devrait vous proposer de l’installer.

Après l’installation de Visual Studio (ou pendant car l’installation prend beaucoup de temps), téléchargez et installez CMake (en 64 bit) : https://cmake.org/download/

De même, téléchargez et décompressez openCV 3.1 à la racine de votre disque C: : http://opencv.org/downloads.html. Vous devriez donc avoir C:\opencv avec un dossier sources à l’intérieur. Dans ce dossier, ouvrez le fichier CMakeLists.txt. Il se trouve une erreur que nous allons corriger. Cherchez la ligne « set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS}  -L${p})« . Remplacez la par « set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} ${CMAKE_LIBRARY_PATH_FLAG}${p})« .

Maintenant que tout est installé, on va passer à la partie configuration. Dans votre dossier C:\opencv, créez un dossier build. Ensuite, ouvrez CMake. A la ligne « where is the source code », mettez C:\opencv\sources (vous pouvez aussi cliquer sur browse source…). Pour « where to build the binaries », mettez C:\opencv\build.

Cliquez sur configure. Pour « Specify the generator for this projet », choisissez « Visual Studio 12 2013 win64 » puis cliquez sur finish. Si vous avez pu compiler un fichier .cpp avec Visual Studio, vous ne devriez pas avoir un pop-up indiquant qu’aucun compilateur n’est présent. Dès que la configuration s’est terminée pour la première fois, une liste rouge apparait. Dans cette liste, vérifiez bien que l’option WITH_CUDA est bien cochée. Profitez-en également pour cocher l’option WITH_OPENMP. OpenMP est une librairie permettant le multithreading. Beaucoup d’algorithmes d’openCV s’en servent pour accélérer le traitement. Ce serait donc bête de s’en priver.

Étant donné que par la suite on utilisera QtCreator, cocher l’option WITH_QT n’est pas utile. Si vous souhaitez utiliser un autre IDE et que vous voulez utiliser la librairie Qt, pensez bien à la télécharger préalablement. En cochant l’option WITH_QT, il vous sera demandé de spécifier où se trouvent certains dossiers. Même remarque pour openGL.

Une fois que c’est fait, re-cliquez sur configure. Puis cliquez sur generate.

Maintenant, passons à la compilation. Allez dans le dossier C:\opencv\build. Vous y trouverez un fichier Microsoft Visual Studio Solution nommé OpenCV. Double cliquez dessus. Visual Studio va s’ouvrir et ouvrir le projet. En haut, vérifiez que le projet est configuré en Release et en x64. Dans Solution Explorer, cliquez droit sur ALL_BUILD puis cliquez sur Build. La compilation va se lancer. Celle-ci peut prendre beaucoup de temps selon votre ordinateur. Pendant ce temps, profitez-en pour télécharger et installer QtCreator avec MSVC 2013 64bit : https://www.qt.io/download-open-source/#section-2

Pendant la compilation, vous aurez des warnings (plus de 4000), ne vous inquiétez pas, ils ne sont pas problématiques.

Quand la compilation est terminée, vous avez le choix de refaire une compilation en Debug (compilation beaucoup plus longue qu’en Release) ou vous pouvez passer à la suite. Dans Solution Explorer, ouvrez le dossier CMakeTargets. Faites un clique droit sur INSTALL puis Build. Rassurez-vous, cette étape est beaucoup plus rapide que la précédente.

Ensuite, ouvrez le panneau de configuration, cliquez sur Système et Sécurité puis Système. Cliquez sur Paramètres système avancés puis variables d’environnement. Dans la partie variables système, cliquez sur Nouvelle. En nom de variable, mettez OPENCV_DIR et en variable, C:\opencv\my_build\install\x64\vc12.

Félicitations, vous venez de compiler openCV avec ses fichiers CUDA ! C’était long mais vous y êtes arrivés !

Pour finir, on va vérifier que ça fonctionne. Ouvrez QtCreator et créez un nouveau projet.

Dans le fichier .pro, mettez :

INCLUDEPATH += C:/opencv/build/install/include
LIBS += -LC:/opencv/build/install/x64/vc12/lib
LIBS += "C:/opencv/build/install/x64/vc12/lib/opencv_core310.lib" \
 "C:/opencv/build/install/x64/vc12/lib/opencv_highgui310.lib" \
 "C:/opencv/build/install/x64/vc12/lib/opencv_imgcodecs310.lib" \
 "C:/opencv/build/install/x64/vc12/lib/opencv_imgproc310.lib" \
 "C:/opencv/build/install/x64/vc12/lib/opencv_videoio310.lib"

A chaque fois que vous mettrez un #include <opencv2/….hpp>, pensez bien à ajouter la ligne correspondant au .lib dans le .pro comme ci-dessus. Si vous ne le faites pas, le #include sera souligné en jaune.

Dans main.cpp, mettez le code que vous voulez. Pour les débutants avec openCV, vous trouverez de quoi apprendre ici : http://opencv-srf.blogspot.ca/2011/09/capturing-images-videos.html. Vous pouvez récupérer le code qui allume la webcam, par exemple.

Vous pouvez ensuite cliquer sur le triangle vert pour compiler. Vous aurez une erreur 255. Cela est du au fait qu’il manque les .dll dans le dossier créé lors de la compilation de votre programme. Dans ce dossier, mettez-y les .dll correspondant au .lib. Vous les trouverez dans C:/opencv/build/install/x64/vc12/bin. Il se peut qu’il manque encore certains .dll. Pour le vérifier, cliquez sur .exe de votre programme (dans le doute, prenez tous les .dll). Vous devez également ajouter qwindows.dll. Il se trouve dans C:Qt\Qt-Votre-Version\Votre-Version\msvc2013_64\plugins\platforms. Mettez le dans un dossier nommé platforms. Ce dossier doit être là où se trouve le .exe. Ajoutez également les fichiers msvcp120.dll et msvcr120.dll. Vous les trouverez en faisant une recherche dans votre disque C:. Si vous utilisez les widgets et autres outils venant de Qt, ajoutez Qt5Core.dll, Qt5Gui.dll et Qt5Widgets.dll.

Vous pouvez dorénavant recompiler votre projet. Celui-ci devrait se lancer correctement.

 

Publicités