Installieren Sie OpenCV + CUDA unter Windows

Einführung


Dieser Artikel konzentriert sich auf die Zusammenstellung und Installation von OpenCV 4 für C / C ++ , Python 2 und Python 3 aus Quelldateien mit zusätzlichen CUDA 10- Modulen unter Windows .

Ich habe versucht, hier alle Feinheiten und Nuancen aufzunehmen, die während der Installation auftreten können und über die im offiziellen Handbuch nicht geschrieben steht.


Die Baugruppe wurde getestet auf:

  • 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

Achtung! Der Build funktioniert nicht für Version OpenCV 4.0.1 und / oder CUDA unter Version 10. CUDA 9 und niedriger wird von OpenCV 3 unterstützt .

Was müssen Sie installieren


Die folgenden Werkzeuge wurden in meiner Baugruppe verwendet:

  1. CMake 3.15
  2. MS Visual Studio 2019 64-Bit + CMake C ++ - Tools für Windows
  3. Python 3.7.3 64-Bit + NumPy 64-Bit
  4. Python 2.7.16 64-Bit + NumPy 64-Bit
  5. CUDA 10.0
  6. CuDNN 7.6.2
  7. OpenCV 4.1.1 und OpenCV-Contrib-4.1.1

Installation


Da die Installation über Konsolenbefehle erfolgt, sollten Sie alle Schritte sorgfältig und genau ausführen. Ändern Sie bei Bedarf auch die Installationspfade in Ihre eigenen.
Zuerst müssen Sie die erforderliche Software installieren und Visual Studio muss vor CUDA installiert werden:


Stellen Sie nach der Installation aller Komponenten sicher, dass die Pfade für CMake, Visual Studio, Python, CUDA, CuDNN in die Variablen PATH, PYTHONPATH, CUDA_PATH bzw. cudnn geschrieben sind .

Laden Sie als Nächstes die Quellarchive opencv-4.1.1 und opencv-contrib-4.1.1 an den gewünschten Speicherort herunter (in meinem Fall 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" 



Erstellen Sie den Build / Ordner in opencv-4.1.1.



Als Nächstes generieren wir Assembly-Dateien mit cmake . Wir werden die Konsolenversion von cmake verwenden , da cmake-gui die Typen einiger Variablen (z. B. OPENCV_PYTHON3_VERSION ) verwechselt und infolgedessen Dateien falsch generiert.

Wir öffnen die Konsole entlang des Pfades C: \ OpenCV \ und registrieren die Variablen.

 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" 

Hinweis Für Visual Studio 2017 wird der Generator als " Visual Studio 15 2017 Win64 " und ohne das -A- Flag geschrieben.

Sie können die Python-Bibliotheken auch explizit für Python 2 und Python 3 angeben, falls der Collector sie nicht automatisch finden kann.

 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" 

Hinweis Bitte beachten Sie, dass die NumPy- Bibliothek dieselbe Bittiefe wie OpenCV haben muss . Das Auschecken ist einfach:
 import numpy.distutils.system_info as sysinfo print(sysinfo.platform_bits) 

Generieren Sie Assembly-Dateien mit dem folgenden Befehl long. Bei fehlgeschlagener Generierung oder Fehlern nach Ausführung des Befehls sollte die wiederholte Generierung durchgeführt werden, indem alle Dateien in build / und .cache / bereinigt werden .

 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%" 

Die Bedeutung einiger Flaggen
  • BUILD_opencv_world - ein optionales Modul, das Kopien aller während der Installation ausgewählten Bibliotheken enthält. Dies ist nützlich bei der Entwicklung in C ++ , da Sie anstelle einer Reihe von opencv- Abhängigkeiten eine opencv_world411.lib- Abhängigkeit mit dem Projekt verbinden können
  • INSTALL_EXAMPLES / INSTALL_TESTS - Installation von OpenCV- Codebeispielen / -Tests
  • CUDA_FAST_MATH, WITH_CUBLAS - zusätzliche Module für CUDA zur Beschleunigung der Berechnungen
  • CUDA_ARCH_PTX - Version der PTX- Anweisungen zur Verbesserung der Rechenleistung
  • OPENCV_EXTRA_MODULES_PATH - Pfad zu zusätzlichen Modulen von opencv-contrib (erforderlich für CUDA )
  • BUILD_PROTOBUF - Damit einige opencv- Module funktionieren, ist Protobuf erforderlich (der opencv- Kollektor setzt BUILD_PROTOBUF = ON trotzdem ).


Nach ca. 10 Minuten sollten die Baugruppeninformationen und die letzten Zeilen " Fertig konfigurieren " und " Fertig generieren " in der Konsole angezeigt werden. Wir überprüfen alle Informationen, insbesondere die Abschnitte von NVIDIA CUDA, Python 2, Python 3 .



Als nächstes sammeln wir die Lösung. Die Erstellung kann je nach Prozessor und Version von Visual Studio mehrere Stunden dauern.

 cmake --build %opencvBuild% --target ALL_BUILD --config Release 

Installieren Sie die Lösung.

 cmake --build %opencvBuild% --target INSTALL --config Release 

Erstellen Sie nach erfolgreicher Installation die Systemvariable OPENCV_DIR mit dem Wert C: \ OpenCV \ opencv-4.1.1 \ build \ install \ x64 \ vc15 \ bin und fügen Sie sie PATH hinzu .

Test


Wir werden die Funktionalität von OpenCV mit dem CUDA- Modul anhand eines einfachen Beispiels für die Matrixmultiplikation testen.

Verbinden Sie OpenCV mit einem Visual Studio-Projekt
  1. Legen Sie den Build-Typ release / x64 fest (erstellen Sie für Debug OpenCV mit dem Debug-Flag).
  2. Projekteigenschaften → C / C ++ → Allgemein → Fügen Sie die Zeile „C: \ OpenCV \ opencv-4.1.1 \ build \ install \ include“ zu Additional Include Directories hinzu
  3. Projekteigenschaften → Linker → Allgemein → Fügen Sie die Zeile "C: \ OpenCV \ opencv-4.1.1 \ build \ install \ x64 \ vc16 \ lib" zu zusätzlichen Bibliotheksverzeichnissen hinzu
  4. Projekteigenschaften → Linker → Allgemein → Fügen Sie am Ende der zusätzlichen Abhängigkeiten "; opencv_world411.lib" ("; opencv_world411d.lib" für Debug) hinzu


Python 3 Beispiel

 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") 

Konsolenausgabe

 Time elapsed: 0.3130002021789551 

C ++ Beispiel

 #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; } 

Konsolenausgabe

 Time elapsed: 0.354 

Löschen


Um OpenCV zu entfernen, müssen Sie den Befehl ausführen.

 cmake --build %opencvBuild% --target uninstall --config Release 

Entfernen Sie die Systemvariable OPENCV_DIR und entfernen Sie den Pfad zu OpenCV aus PATH .

Fazit


In diesem Artikel haben wir die Installation von OpenCV 4 für Windows 10 untersucht . Dieser Algorithmus wurde unter Windows 8.1 und Windows 10 getestet, kann jedoch theoretisch unter Windows 7 erstellt werden . Weitere Informationen finden Sie in der Liste der Quellen unten.

PS Schließlich werden wir alle Installationsbefehle in einer .bat- Datei für diejenigen zusammenfassen, die die Installation automatisieren möchten.

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 der Quellen


  1. docs.opencv.org/4.1.1/d3/d52/tutorial_windows_install.html
  2. www.learnopencv.com/install-opencv-4-on-windows
  3. jamesbowley.co.uk/build-opencv-4-0-0-with-cuda-10-0-and-intel-mkl-tbb-in-windows
  4. lightbuzz.com/opencv-cuda
  5. Kapitel „Erstellen von Bibliotheken aus der Quelle“ des Buches Praktische GPU-beschleunigte Computer Vision mit OpenCV und CUDA

Source: https://habr.com/ru/post/de464015/


All Articles