Cài đặt OpenCV Python sử dụng CUDA trên Windows 10

Để viết code Opencv bằng python bạn chỉ cần cài package opencv-python là được, tuy nhiên package này chỉ chạy trên CPU. Muốn sử dụng sức mạnh CUDA của GPU NVIDA thì các bạn phải tự make -> build -> install thủ công. Bài viết này hướng dẫn các bước để cài đặt package opencv-python từ source code có sử dụng CUDA.

Lưu ý với các bạn OpenCV có khả năng linh hoạt cực cao, có thể gọi tới các model Deep Learning khác bằng module DNN. Do đó sau khi build OpenCV python CUDA thì các bạn có thể chạy các thuật toán Deep Learning mới nhất hiện nay mà không cần implement quá phức tạp.

Bước 1: chuẩn bị các tool cần thiết

  1. Visual Studio 2017: để build source code (không nên chọn cũ hơn, còn 2019 thì không ổn định)
  2. Python 3.7.3 x64 (3.6 trở lên là được): chọn bản Windows x86-64 executable installer để download, cài đặt xong thì restart máy
  3. Cmake (mình đang sử dụng Cmake 3.14.2)
  4. CUDA 10.1: cài đặt thành công thì mới có thể build OpenCV sử dụng CUDA

Bước 2: chuẩn bị source code

Download source code OpenCV 4.5.0 tại link https://github.com/opencv/opencv/releases/tag/4.5.0, chọn file Source code (zip)

Download source code OpenCV contrib 4.5.0 tại link: https://github.com/opencv/opencv_contrib/releases/tag/4.5.0

Contrib viết tắt của từ Contribution – đóng góp, đây là code do cộng đồng mã nguồn mở viết thêm 1 số thư viện, ví dụ như Face. Nhưng quan trọng nhất là lib cudev để gọi hàm cho GPU xử lý

Trong máy mình sẽ để trong 2 folder là D:\Lib\opencv\opencv450D:\Lib\opencv\opencv_contrib-4.5.0

Bước 3: config Cmake để tạo solution Visual Studio

Các bạn chọn folder source và folder build giống hình dưới, sau đó chọn tool để build là Visual Studio 15 2017, chọn platform là x64 vì CUDA chỉ chạy được trên x64

Set folder contrib giống hình dưới bằng cách tìm từ khóa extra, sau đó chỉnh đường dẫn đến folder contrib đã download, lưu ý chọn folder con modules

Tương tự chọn các option CUDA, lưu ý là để chọn được các bạn phải cài CUDA thành công. Đọc bài Tăng tốc Deep Learning bằng CUDA 10.1 để biết cách cài đặt CUDA

Tương tự như trên các bạn check tiếp các tham số sau:
ENABLE_FAST_MATH
ENABLE_PYLINT: dùng cho Python

Ngoài ra có 1 số thứ mình không thích hoặc không cần thiết nên mình bỏ check:
ENABLE_PRECOMPILED_HEADERS: config project build nhiều nơi phải sửa macro nhiều quá nên mình bỏ
INSTALL_PDB: chỉ dùng để debug C++
WITH_JASPER: 1 loại file ảnh rất ít dùng
WITH_OPENEXR: 1 loại file ảnh rất ít dùng
WITH_WEBP: Webp cũng chỉ có 1 số trang gần đây dùng, check hay uncheck tùy bạn
BUILD_PERF_TESTS: test hiệu năng
BUILD_TESTS: test case

Sau khi check xong giống như trên thì ấn nút Generate để tạo ra các file solution *.sln và project *.vcxproject. Trong quá trình generate sẽ có download 1 số file nên còn tùy thuộc đường truyền của bạn, thường thì tầm 1-2 phút thôi.

Sau khi thành công sẽ có log Configuring doneGenerating done như bên dưới

Các file solution và project được make ra thành công trong folder D:\LIB\opencv\opencv450\build

Trong quá trình config/make/build rất dễ xảy ra sai sót, mình recommend các bạn sử dụng SVN hoặc Git để quản lý, nếu sai revert lại rồi làm tiếp

Bước 4: config solution và build

Mở solution OpenCV.sln lên, ấn chuột phải vào project INSTALL chọn Make as startup project

Ở build mode chọn Release

Sau đó ấn nút build và chờ, trên PC dùng CPU core i5 2500, RTX 2060 chạy mất gần 6 tiếng để build tất cả project do build CUDA hơi lâu.

Nguyên lý của việc build là Visual Studio sẽ compile code thành file *.pyd tại đường dẫn .\build\lib\python3\Release\cv2.cp37-win_amd64.pyd, sau đó copy vào folder C:\Users\vohungvi\AppData\Local\Programs\Python\Python37\Lib\site-packages\cv2\python-3.7

VD máy của mình sau khi install xong OpenCV-python sử dụng CUDA

Bước 5: kiểm tra cài đặt thành công hay không

Mở cmd chạy Python, trong python import OpenCV và print số GPU đang sử dụng, nếu số lượng lớn hơn 0 là đúng (máy mình hiện ra 1 do chỉ có 1 GPU)

python
import cv2
cv2.cuda.getCudaEnabledDeviceCount()

Bước 6: chạy code YOLO detect object để so sánh tốc độ

Các bạn clone source code YOLO example tại link https://thigiacmaytinh.com/phat-hien-vat-the-bang-yolo-bai-2-thu-nghiem-cac-model-train-san.

Mở file YOLOv3.py, tìm tới đoạn: # if install opencv-python CUDA successful uncomment 3 lines bellow rồi uncomment 3 dòng bên dưới. Đoạn code đó kiểm tra số GPU được enable và chạy với CUDA nếu số GPU > 0

Sau đó chạy file 3.Predict_video.bat, nếu CUDA load như hình dưới thì các bạn đã thành công. Tốc độ xử lý 1 frame fullHD từ 700ms giảm xuống còn 20ms.

Chúc các bạn thành công

6 thoughts on “Cài đặt OpenCV Python sử dụng CUDA trên Windows 10

  1. Hello bạn ..

    Cho mình hỏi chút .. mình thực hiện theo các bước để sử dụng opencv với GPU máy mình :
    – GPU mình là Nvidia GTX 950M.
    – sử dụng python 3.9.5
    Sau khi thành thành Build từ Visual Studio Code 2017 , như thông tin bên dưới (rất tiếc, comment này không có phần attactment hình ảnh):

    197>– Installing: D:/Lib/opencv/build/install/x64/vc15/bin/opencv_annotation.exe
    197>– Installing: D:/Lib/opencv/build/install/x64/vc15/bin/opencv_visualisation.exe
    197>– Installing: D:/Lib/opencv/build/install/x64/vc15/bin/opencv_interactive-calibration.exe
    197>– Installing: D:/Lib/opencv/build/install/x64/vc15/bin/opencv_version.exe
    197>– Installing: D:/Lib/opencv/build/install/x64/vc15/bin/opencv_version_win32.exe
    ========== Build: 197 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
    Mà tìm trong D:\Lib\opencv\build\lib\Release .. không thấy file cv2.cp39-*.pyd .. còn vào cmd -> python.exe , thì import cv2 báo lỗi không có thư viện này .. Hướng dẫn giúp ? Cảm ơn.

    1. Bạn thử tìm trong đường dẫn: D:\Lib\opencv\build\lib\Python3\Release và D:\LIB\opencv\opencv450\build\python\cv2\python-3.9 xem có file cv2.cp39-win_amd64.pyd không?

  2. Cảm ơn bạn .. nhưng vẫn không thấy (mình dùng search để tìm folder Python3 .. vẫn không thấy) .. tuy nhiên, có thể mình làm sai bước nào rồi ..
    1. mình thấy Cmake bạn browser source đến ../opencv450/sources –> file unzip từ nguồn OpenCV 4.5.0 tại link https://github.com/opencv/opencv/releases/tag/4.5.0, chọn file Source code (zip) .. mình không tìm thấy folder nào sources ?
    2. Trong visual studio code 15 2017 .. mục INSTALL , click chuột phải thì có lệnh ” set as startup project” ~ ” Make as startup Project” ? hay phải tìm ở menu khác ?
    3. Trong web https://thinkinfi.com/install-opencv-gpu-with-cuda-for-windows-10/ có hướng dẫn là bắt buộc phải import numpy với python 3.9.5 (mình chưa biết cách install để Cmake tìm thấy .. mình toàn dùng anaconda conda thư viện hoặc pip trong venv để import thư viện nào đó .. ) .. bạn có biết cách nào install numpy để khi cấu hình Cmake tìm thấy ?

    Cảm ơn bạn.

    1. 1. Khi giải nén (chạy file opencvxx.exe) thì sẽ có 2 folder “opencv\build” và “opencv\sources” có sẵn
      2. Đúng rồi, set INSTALL làm project chính là đúng
      3. Build OpenCV không cần import Numpy

Leave a Reply