Hướng dẫn build lib OpenCV 4.8.0 trên Windows 10

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

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

  1. Clone YOLOv5 tại link: https://github.com/ultralytics/yolov5
  2. Download file yolov5m.pt và bỏ vào folder Yolov5
  3. Tại folder Yolov5 chạy command sau để convert file pt thành file onnx
  4. export.py --weights yolov5m.pt --include onnx --opset=16

  5. Khi convert thành công bạn sẽ được file yolo5m.onnx như hình dưới
  6. Build project OpenCV DNN c++ với đoạn code bên dưới
  7. Download file coco.names bỏ vào folder output
  8. Copy file onnx vào folder output của project OpenCV DNN
  9. Run code ta được kết quả

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:

  1. Đó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
  2. Dễ dàng tích hợp vào chương trình viết bằng C#
  3. Giấu source code, giấu data, không bị lộ như Python
  4. Tốc độ nhanh hơn Python

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