Hiện tại OpenCV 4.8.0 là phiên bản mới, có thể chạy được với các model Pytorch, Tensorflow,… Bài viết này hướng dẫn build lib OpenCV C++ bằng Visual Studio 2017 trên Windows 10 x64
Bài viết này KHÔNG build những thứ như sau:
- Không build CUDA, chỉ chạy với CPU
- Không build Python, chỉ build C++. Đã viết bài hướng dẫn build OpenCV-Python riêng
- Không build x86, chỉ build x64 vì tốc độ nhanh hơn
Trong quá trình build chắc chắn có nhiều vấn đề, khuyến khích các bạn sử dụng Git hoặc SVN để revert nếu thao tác sai.
Bước 1: chuẩn bị source code & tool cần thiết
- OpenCV 4.8.0: https://github.com/opencv/opencv/releases
- OpenCV Contrib 4.8.0: https://github.com/opencv/opencv_contrib/releases/tag/4.8.0
- Visual Studio 2017 Community: nhớ cài đặt C++
- cmake-3.22.1-windows-x86_64.msi
Các tool & version đã test thành công, các bạn chọn không đúng version như hướng dẫn có thể gây ra lỗi.
Bước 2: make C++ solution
Mình sẽ giải nén vào folder D:\LIB\opencv, như vậy 2 folder source code tương ứng là:
D:\LIB\opencv\opencv480
D:\LIB\opencv\opencv_contrib-4.8.0
Chạy Cmake (GUI) lên và chọn folder source code như hình dưới,
Sau đó ấn nút Configure, một popup hiện ra, các bạn chọn phiên bản Visual Studio và architect (Win32/x64). Lý do mình chọn Visual Studio 2017 là do các thư viện khác ở cty cũng dùng VS 2017, x64 vì chạy nhanh hơn Win32.
Các config cần thực hiện
OPENCV_EXTRA_MODULES_PATH: Chọn đến folder D:\LIB\opencv\opencv_contrib-4.8.0\modules
BUILD_JAVA: mình không sử dụng nên uncheck
BUILD_opencv_java_bindings_generator: mình không sử dụng nên uncheck
BUILD_opencv_python3: mình không sử dụng nên uncheck
BUILD_opencv_python_bindings_generator: mình không sử dụng nên uncheck
BUILD_opencv_python_tests: mình không sử dụng nên uncheck
WITH_JASPER: mình không sử dụng nên uncheck
BUILD_OPENEXR: mình không sử dụng nên uncheck
WITH_OPENEXR: mình không sử dụng nên uncheck
BUILD_TIFF: mình không sử dụng nên uncheck
BUILD_opencv_js: mình không sử dụng nên uncheck
BUILD_opencv_js_bindings_generator: mình không sử dụng nên uncheck
BUILD_PERF_TESTS: không cần test performance nên bỏ
BUILD_TESTS: không cần test nên bỏ
ENABLE_PRECOMPILED_HEADERS: bên mình cũng không precompile header nên bỏ
BUILD_ITT: mình không sử dụng nên uncheck
BUILD_ITT: mình không sử dụng nên uncheck
ccitt: mình không sử dụng nên uncheck
BUILD_IPP_IW: mình không sử dụng nên uncheck
WITH_IPP: mình không sử dụng nên uncheck
CPU_DISPATCH: xóa hết vì mình muốn build chạy được và ổn định trên tất cả CPU, kể cả CPU đời cũ
Sau đó ấn nút Generate, Cmake sẽ chạy và báo Generating done là xong
Vào folder D:\LIB\opencv\opencv480 sẽ thấy OpenCV.sln, mở bằng Visual Studio 2017 và build là được
Test nhanh bằng YOLOv5
- Clone YOLOv5 tại link: https://github.com/ultralytics/yolov5
- Download file yolov5m.pt và bỏ vào folder Yolov5
- Tại folder Yolov5 chạy command sau để convert file pt thành file onnx
- Khi convert thành công bạn sẽ được file yolo5m.onnx như hình dưới
- Build project OpenCV DNN c++ với đoạn code bên dưới
- Download file coco.names bỏ vào folder output
- Copy file onnx vào folder output của project OpenCV DNN
- Run code ta được kết quả
export.py --weights yolov5m.pt --include onnx --opset=16
Tương tự, các bạn cũng có thể convert các model train từ Yolov7 như yolov7.py, yolov7-tiny.pt.
Tổng kết
Việc build project OpenCV C++ có những lợi ích như sau:
- Đóng gói thành chương trình dễ dàng hơn, người dùng cuối chỉ quen thuộc với .exe, không quen chạy từ file .py
- Dễ dàng tích hợp vào chương trình viết bằng C#
- Giấu source code, giấu data, không bị lộ như Python
- Tốc độ nhanh hơn Python
Chúc các bạn thành công