Instal OpenCV + CUDA di Windows

Pendahuluan


Artikel ini akan fokus pada perakitan dan pemasangan OpenCV 4 untuk C / C ++ , Python 2 dan Python 3 dari file sumber dengan tambahan modul CUDA 10 pada Windows .

Saya mencoba memasukkan di sini semua seluk-beluk dan nuansa yang mungkin Anda temui selama instalasi, dan yang tidak tertulis dalam manual resmi .


Majelis diuji untuk:

  • 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

Perhatian! Build tidak akan berfungsi untuk versi OpenCV 4.0.1 dan / atau CUDA di bawah versi 10. CUDA 9 dan di bawah ini didukung oleh OpenCV 3 .

Apa yang perlu Anda instal


Alat-alat berikut digunakan dalam perakitan saya:

  1. CMake 3.15
  2. MS Visual Studio 2019 64-bit + CMake C ++ tools untuk 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 dan OpenCV-contrib-4.1.1

Instalasi


Karena instalasi dilakukan melalui perintah konsol, Anda harus hati-hati dan akurat melakukan semua langkah. Juga, jika perlu, ubah jalur instalasi ke jalur Anda sendiri.
Pertama, Anda perlu menginstal perangkat lunak yang diperlukan, dan Visual Studio harus diinstal sebelum CUDA :


Setelah menginstal semua komponen, pastikan jalur untuk CMake, Visual Studio, Python, CUDA, CuDNN ditulis dalam variabel PATH, PYTHONPATH, CUDA_PATH dan cudnn, masing-masing.

Selanjutnya, unduh arsip sumber opencv-4.1.1 dan opencv-contrib-4.1.1 ke lokasi yang diinginkan (dalam kasus saya, ini adalah 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" 



Buat build / folder di dalam opencv-4.1.1.



Selanjutnya, kami membuat file perakitan menggunakan cmake . Kami akan menggunakan versi konsol cmake , karena cmake-gui membingungkan tipe-tipe beberapa variabel (misalnya, OPENCV_PYTHON3_VERSION ) dan, sebagai akibatnya, menghasilkan file secara tidak benar.

Kami membuka konsol di sepanjang jalur C: \ OpenCV \ dan mendaftarkan variabel.

 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" 

Catatan Untuk Visual Studio 2017, generator ditulis sebagai " Visual Studio 15 2017 Win64 " dan tanpa tanda -A .

Anda juga dapat secara eksplisit menentukan pustaka Python untuk python 2 dan python 3 jika kolektor tidak dapat menemukannya secara otomatis.

 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" 

Catatan Harap dicatat bahwa perpustakaan NumPy harus kedalaman bit yang sama dengan OpenCV . Memeriksa ini mudah:
 import numpy.distutils.system_info as sysinfo print(sysinfo.platform_bits) 

Hasilkan file rakitan dengan menggunakan perintah panjang di bawah ini. Jika generasi atau kesalahan tidak berhasil setelah menjalankan perintah, pembuatan ulang harus dilakukan dengan membersihkan semua file dalam build / dan .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%" 

Arti beberapa bendera
  • BUILD_opencv_world - modul opsional yang berisi salinan semua perpustakaan yang dipilih selama instalasi. Ini berguna ketika berkembang dalam C ++ , karena alih-alih menghubungkan banyak dependensi opencv , Anda dapat menghubungkan satu dependensi opencv_world411.lib ke proyek
  • INSTALL_EXAMPLES / INSTALL_TESTS - memasang contoh / tes kode pembuka
  • CUDA_FAST_MATH, WITH_CUBLAS - modul tambahan untuk CUDA , yang dirancang untuk mempercepat perhitungan
  • CUDA_ARCH_PTX - versi instruksi PTX untuk meningkatkan kinerja komputasi
  • OPENCV_EXTRA_MODULES_PATH - jalur ke modul tambahan dari opencv-contrib (diperlukan untuk CUDA )
  • BUILD_PROTOBUF - agar beberapa modul opencv berfungsi, Protobuf diperlukan (pengumpul opencv akan menetapkan BUILD_PROTOBUF = ON anyway )


Setelah sekitar 10 menit, informasi perakitan dan baris terakhir " Mengonfigurasi selesai " dan " Menghasilkan selesai " akan muncul di konsol. Kami memeriksa semua informasi, terutama bagian NVIDIA CUDA, Python 2, Python 3 .



Selanjutnya, kami kumpulkan solusinya. Mungkin perlu beberapa jam untuk membangun, tergantung pada prosesor dan versi Visual Studio Anda .

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

Instal solusinya.

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

Setelah instalasi berhasil, buat variabel sistem OPENCV_DIR dengan nilai C: \ OpenCV \ opencv-4.1.1 \ build \ install \ x64 \ vc15 \ bin dan tambahkan juga ke PATH .

Tes


Kami akan menguji fungsionalitas OpenCV dengan modul CUDA menggunakan contoh sederhana dari perkalian matriks.

Hubungkan OpenCV ke proyek Visual Studio
  1. Setel tipe rilis / x64 build (untuk Debug, build OpenCV dengan flag Debug)
  2. Properti Proyek โ†’ C / C ++ โ†’ Umum โ†’ Tambahkan baris โ€œC: \ OpenCV \ opencv-4.1.1 \ build \ install \ includeโ€ ke Direktori Sertakan Tambahan
  3. Properti Proyek โ†’ Linker โ†’ Umum โ†’ Tambahkan baris โ€œC: \ OpenCV \ opencv-4.1.1 \ build \ install \ x64 \ vc16 \ libโ€ ke Direktori Perpustakaan Tambahan
  4. Properti Proyek โ†’ Linker โ†’ Umum โ†’ Tambahkan "; opencv_world411.lib" ("; opencv_world411d.lib" untuk Debug) ke akhir Ketergantungan Tambahan


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

Output konsol

 Time elapsed: 0.3130002021789551 

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

Output konsol

 Time elapsed: 0.354 

Hapus


Untuk menghapus OpenCV , Anda perlu menjalankan perintah.

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

dan hapus variabel sistem OPENCV_DIR dan hapus path ke OpenCV dari PATH .

Kesimpulan


Pada artikel ini, kami memeriksa instalasi OpenCV 4 untuk Windows 10 . Algoritma ini diuji pada Windows 8.1 dan Windows 10 , tetapi, secara teori, dapat dibangun di Windows 7 . Untuk informasi lebih lanjut, lihat daftar sumber di bawah ini.

PS Akhirnya, kami akan membawa semua perintah instalasi ke dalam satu file .bat bagi mereka yang ingin mengotomatiskan instalasi.

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 


Daftar sumber


  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. Bab โ€œMembangun Perpustakaan dari Sumberโ€ buku Visi Komputer Dipercepat Secara Langsung dengan OpenCV dan CUDA

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


All Articles