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ờ, máy mình CPU core i5 2500 chạy mất gần 60 phút để 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, 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

Leave a Reply