Để 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
- Visual Studio 2017: để build source code (không nên chọn cũ hơn, còn 2019 thì không ổn định)
- 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
- Cmake (mình đang sử dụng Cmake 3.14.2)
- 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\opencv450 và D:\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 done và Generating 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.
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.
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?
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. 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
Cảm ơn.
Đã tìm thấy 2 thư mục sources và build .. tuy nhiên, mình Download source code OpenCV 4.5.0 tại link https://github.com/opencv/opencv/releases/tag/4.5.0, chọn Windows — thì file exe về –> run sẽ extract ra folder opencv có 2 thư mục là sources và build.
đúng rồi bạn