مقدمة
ستركز هذه المقالة على تجميع وتثبيت 
OpenCV 4 لـ 
C / C ++ و 
Python 2 و 
Python 3 من الملفات المصدر مع وحدات 
CUDA 10 الإضافية على 
Windows .
حاولت أن أذكر هنا جميع التفاصيل الدقيقة والفروق الدقيقة التي قد تواجهها أثناء التثبيت ، والتي لم تتم كتابتها في 
الدليل الرسمي .

تم اختبار التجميع من أجل:
- 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
تحذير! لن تعمل 
البنية للإصدار 
OpenCV 4.0.1 و / أو 
CUDA أدناه الإصدار 10. يتم دعم 
CUDA 9 وتحت بواسطة 
OpenCV 3 .
ما تحتاج إلى تثبيت
تم استخدام الأدوات التالية في التجميع الخاص بي:
- CMake 3.15
- MS Visual Studio 2019 أدوات 64 بت + CMake C ++ لنظام Windows
- بيثون 3.7.3 64 بت + NumPy 64 بت
- Python 2.7.16 64 بت + NumPy 64 بت
- كودا 10.0
- CuDNN 7.6.2
- OpenCV 4.1.1 و OpenCV-Particip-4.1.1
تركيب
نظرًا لأن التثبيت يتم من خلال أوامر وحدة التحكم ، يجب عليك تنفيذ جميع الخطوات بعناية وبدقة. أيضًا ، إذا لزم الأمر ، قم بتغيير مسارات التثبيت الخاصة بك.
تحتاج أولاً إلى تثبيت البرنامج المطلوب ، ويجب تثبيت 
Visual Studio قبل 
CUDA :
بعد تثبيت جميع المكونات ، تأكد من كتابة مسارات 
CMake و Visual Studio و Python و CUDA و CuDNN في المتغيرات 
PATH و PYTHONPATH و CUDA_PATH و 
cudnn ، على التوالي.
بعد ذلك ، قم بتنزيل 
أرشيفي المصدر opencv-4.1.1 و 
opencv-Contributor-4.1.1 إلى الموقع المطلوب (في حالتي ، هذا هو 
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" 

إنشاء الإنشاء 
/ المجلد داخل opencv-4.1.1.

بعد ذلك ، نقوم بإنشاء ملفات التجميع باستخدام 
cmake . سنستخدم إصدار وحدة التحكم من 
cmake ، نظرًا لأن 
cmake-gui يخلط بين أنواع بعض المتغيرات (على سبيل المثال ، 
OPENCV_PYTHON3_VERSION ) ونتيجة لذلك ، يقوم بإنشاء ملفات بشكل غير صحيح.
نفتح وحدة التحكم على طول المسار 
C: \ OpenCV \ وتسجيل المتغيرات.
 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" 
المذكرة. بالنسبة 
لبرنامج Visual Studio 2017 ، تتم كتابة المولد باسم " 
Visual Studio 15 2017 Win64 " وبدون علامة 
-A .
يمكنك أيضًا تحديد مكتبات Python بشكل صريح لكل من python 2 و python 3 في حالة عدم تمكن المجمع من العثور عليها تلقائيًا.
 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" 
المذكرة. يرجى ملاحظة أن مكتبة 
NumPy يجب أن تكون بنفس عمق بت 
OpenCV . من السهل التحقق من ذلك:
 import numpy.distutils.system_info as sysinfo print(sysinfo.platform_bits) 
قم بإنشاء ملفات التجميع باستخدام الأمر الطويل أدناه. في حالة عدم إنشاء أو أخطاء غير ناجحة بعد تنفيذ الأمر ، يجب إجراء التكرار المتكرر عن طريق تنظيف جميع الملفات في 
build / و 
.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%" 
معنى بعض الأعلام- BUILD_opencv_world - وحدة نمطية اختيارية تحتوي على نسخ من جميع المكتبات المحددة أثناء التثبيت. هذا مفيد عند التطوير في C ++ ، لأنه بدلاً من توصيل مجموعة من تبعيات opencv ، يمكنك توصيل opencv_world411.lib بالاعتماد على المشروع
- INSTALL_EXAMPLES / INSTALL_TESTS - تثبيت أمثلة / اختبارات رمز opencv
- CUDA_FAST_MATH ، WITH_CUBLAS - وحدات إضافية لـ CUDA ، مصممة لتسريع العمليات الحسابية
- CUDA_ARCH_PTX - نسخة من تعليمات PTX لتحسين أداء الحوسبة
- OPENCV_EXTRA_MODULES_PATH - المسار إلى وحدات إضافية من مساهمة opencv (مطلوب لـ CUDA )
- BUILD_PROTOBUF - لبعض وحدات opencv للعمل ، مطلوب Protobuf ( جامع opencv سيعين BUILD_PROTOBUF = ON على أي حال )
 بعد حوالي 10 دقائق ، يجب أن تظهر معلومات التجميع والخطوط النهائية " 
التهيئة التي تم إجراؤها " و " 
الإنشاء المنجز " في وحدة التحكم. نتحقق من جميع المعلومات ، لا سيما أقسام 
NVIDIA CUDA و Python 2 و Python 3 .

بعد ذلك ، نجمع الحل. قد يستغرق إنشاء عدة ساعات بناءً على المعالج وإصدار 
Visual Studio .
 cmake --build %opencvBuild% --target ALL_BUILD --config Release 
تثبيت الحل.
 cmake --build %opencvBuild% --target INSTALL --config Release 
بعد التثبيت الناجح ، قم بإنشاء متغير النظام 
OPENCV_DIR بالقيمة 
C: \ OpenCV \ opencv-4.1.1 \ build \ install \ x64 \ vc15 \ bin وأضفها أيضًا إلى 
PATH .
اختبار
سنقوم باختبار وظيفة 
OpenCV باستخدام وحدة 
CUDA باستخدام مثال بسيط لتكاثر المصفوفة.
قم بتوصيل OpenCV إلى مشروع Visual Studio- عيّن نوع الإصدار / x64 (من أجل Debug ، قم ببناء OpenCV بعلامة Debug)
- خصائص المشروع → C / C ++ → عام → أضف السطر "C: \ OpenCV \ opencv-4.1.1 \ build \ install \ include" إلى أدلة تضمين إضافية
- خصائص المشروع → رابط → عام → أضف السطر "C: \ OpenCV \ opencv-4.1.1 \ build \ install \ x64 \ vc16 \ lib" إلى دلائل المكتبة الإضافية
- خصائص المشروع → رابط → عام → إضافة "؛ opencv_world411.lib" ("؛ opencv_world411d.lib" لـ Debug) إلى نهاية التبعيات الإضافية
 بيثون 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") 
إخراج وحدة التحكم
 Time elapsed: 0.3130002021789551 
مثال 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; } 
إخراج وحدة التحكم
 Time elapsed: 0.354 
إزالة
لإزالة 
OpenCV ، تحتاج إلى تشغيل الأمر.
 cmake --build %opencvBuild% --target uninstall --config Release 
وإزالة متغير النظام 
OPENCV_DIR وإزالة المسار إلى OpenCV من 
PATH .
استنتاج
في هذه المقالة ، نظرنا في تثبيت 
OpenCV 4 لنظام 
التشغيل Windows 10 . تم اختبار هذه الخوارزمية على 
نظامي التشغيل Windows 8.1 و 
Windows 10 ، ولكن من الناحية النظرية ، يمكن إنشاؤها على 
نظام التشغيل Windows 7 . لمزيد من المعلومات ، انظر قائمة المصادر أدناه.
ملاحظة: أخيرًا ، سوف نجمع جميع أوامر التثبيت في ملف 
.bat واحد لأولئك الذين يريدون أتمتة التثبيت.
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 
 قائمة المصادر
- 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
- الفصل "بناء المكتبات من المصدر" للكتاب العملي - رؤية تسريع وحدة معالجة الرسومات باستخدام OpenCV و CUDA