Duy Nguyen Hoang A fully enthusiastic boy

OpenCV – Trợ thủ đắc lực cho Computer Vision

6 min read

OpenCV là gì ?

opencv

Project OpenCV được bắt đầu từ Intel năm 1999 bởi Gary Bradsky. OpenCV viết tắt cho Open Source Computer Vision Library. OpenCV là thư viện nguồn mở hàng đầu cho Computer Vision và Machine Learning, và hiện có thêm tính năng tăng tốc GPU cho các hoạt động theo real-time.

OpenCV được phát hành theo giấy phép BSD (*), do đó nó miễn phí cho cả học tập và sử dụng với mục đích thương mại. Nó có trên các giao diện C++, C, Python và Java và hỗ trợ Windows, Linux, Mac OS, iOS và Android. OpenCV được thiết kế để hỗ trợ hiệu quả về tính toán và chuyên dùng cho các ứng dụng real-time (thời gian thực). Nếu được viết trên C/C++ tối ưu, thư viện này có thể tận dụng được bộ xử lý đa lõi (multi-core processing). 

GIẤY PHÉP BSD: DÀNH RIÊNG CHO CÁC LOẠI MÃ NGUỒN MỞ NHẰM CHO PHÉP SỬ DỤNG MIỄN PHÍ VÀ HẠN CHẾ TỐI ĐA CÁC RÀO CẢN LUẬT LỆ THÔNG THƯỜNG. GIẤY PHÉP BSD LÀ MỘT GIẤY PHÉP ĐƠN GIẢN CHỈ YÊU CẦU TẤT CẢ CÁC MÃ ĐƯỢC CẤP PHÉP THEO GIẤY PHÉP BSD NẾU ĐƯỢC PHÂN PHỐI LẠI Ở ĐỊNH DẠNG MÃ NGUỒN.

OpenCV có một cộng đồng người dùng khá hùng hậu hoạt động trên khắp thế giới bởi nhu cầu cần đến nó ngày càng tăng theo xu hướng chạy đua về sử dụng computer vision của các công ty công nghệ. OpenCV hiện được ứng dụng rộng rãi toàn cầu, với cộng đồng hơn 47.000 người, với nhiều mục đích và tính năng khác nhau từ interactive art, đến khai thác mỏ, khai thác web map hoặc qua robotic cao cấp.

Ứng dụng của OpenCV là gì? 

OpenCV được sử dụng cho đa dạng nhiều mục đích và ứng dụng khác nhau bao gồm [1] 

  • Hình ảnh street view
  • Kiểm tra và giám sát tự động
  • Robot và xe hơi tự lái
  • Phân tích hình ảnh y học
  • Tìm kiếm và phục hồi hình ảnh/video
  • Phim – cấu trúc 3D từ chuyển động
  • Nghệ thuật sắp đặt tương tác

Tìm hiểu thêm các API hàng đầu của Computer Vision TẠI ĐÂY

Tính năng và các module phổ biến

Theo tính năng và ứng dụng của OpenCV, có thể chia thư viện này thánh các nhóm tính năng và module tương ứng như sau:

  • Xử lý và hiển thị Hình ảnh/ Video/ I/O (core, imgproc, highgui)
  • Phát hiện các vật thể (objdetect, features2d, nonfree)
  • Geometry-based monocular hoặc stereo computer vision (calib3d, stitching, videostab)
  • Computational photography (photo, video, superres)
  • Machine learning & clustering (ml, flann)
  • CUDA acceleration (gpu)
opencv

OpenCV có cấu trúc module, nghĩa là gói bao gồm một số thư viện liên kết tĩnh (static libraries) hoặc thư viện liên kết động (shared libraries). Xin phép liệt kê một số định nghĩa chi tiết các module phổ biến có sẵn [2] như sau:

  • Core functionality (core) – module nhỏ gọn để xác định cấu trúc dữ liệu cơ bản, bao gồm mảng đa chiều dày đặc và nhiều chức năng cơ bản được sử dụng bởi tất cả các module khác.
  • Image Processing (imgproc) – module xử lý hình ảnh gồm cả lọc hình ảnh tuyến tính và phi tuyến (linear and non-linear image filtering), phép biến đổi hình học (chỉnh size, afin và warp phối cảnh, ánh xạ lại dựa trên bảng chung), chuyển đổi không gian màu, biểu đồ, và nhiều cái khác.
  • Video Analysis (video) – module phân tích video bao gồm các tính năng ước tính chuyển động, tách nền, và các thuật toán theo dõi vật thể. 
  • Camera Calibration and 3D Reconstruction (calib3d) – thuật toán hình học đa chiều cơ bản, hiệu chuẩn máy ảnh single và stereo (single and stereo camera calibration), dự đoán kiểu dáng của đối tượng (object pose estimation), thuật toán thư tín âm thanh nổi (stereo correspondence algorithms) và các yếu tố tái tạo 3D.
  • 2D Features Framework (features2d) – phát hiện các đặc tính nổi bật của bộ nhận diện, bộ truy xuất thông số, thông số đối chọi.
  • Object Detection (objdetect) – phát hiện các đối tượng và mô phỏng của các hàm được định nghĩa sẵn – predefined classes (vd: khuôn mặt, mắt, cốc, con người, xe hơi,…).
  • High-level GUI (highgui) – giao diện dễ dùng để thực hiện việc giao tiếp UI đơn giản.
  • Video I/O (videoio) – giao diện dễ dùng để thu và mã hóa video.
  • GPU – Các thuật toán tăng tốc GPU từ các modun OpenCV khác.
  • … và một số module hỗ trợ khác, ví dụ như FLANN và Google test wrapper, Python binding, v.v.

Chọn ngôn ngữ nào để lập trình OpenCV?

OpenCV hiện tại hỗ trợ nhiều ngôn ngữ, mỗi ngôn ngữ có thế mạnh riêng, vậy thì tùy theo nhu cầu mà chọn ngôn ngữ cho phù hợp.

C++: Đây là ngôn ngữ phổ biến nhất hiện tại vì nhanh, nhiều option, nếu bạn có IDE là Visual Studio quá tốt. Các thiết lập của nó rất hữu ích cho sản phẩm sau này, mặc dù ban đầu mới đụng tay khá phức tạp

Python: Ngôn ngữ được dùng nhiều để demo / test OpenCV do tính ngắn gọn, ít phải thiết lập. Bên cạnh đó, nếu dùng Python thì cũng có thể code được trên nhiều hệ điều hành.

Android: Hiện tích hợp sẵn camera, tiện lợi nên có thể sớm trở thành xu hướng của OpenCV 

Java: Nhanh và đa nền tảng, tương tự C++

C#: Code tiện lợi, dễ dàng, có thư viện đa nền tảng là EmguCV hỗ trợ. Có một điểm trừ là EmguCV yêu cầu người dùng phải copy toàn bộ file *.dll của lib đi kèm với ứng dụng nên làm ứng dụng sẽ khá nặng.

Tùy theo nhu cầu và tính chất của công việc / dự án mà bạn hãy chọn ngôn ngữ phù hợp. Ví dụ có thể xử lý hình ảnh bằng C++, thiết kế UX / UI thì chuyển sang C# cho dễ thiết kế. Riêng demo chương trình có thể chạy ngay bằng Python hoặc android. Ngôn ngữ nào cũng có điểm cộng điểm trừ, hãy cân nhắc tuỳ project cho phù hợp.

Cách setup OpenCV[4]

Đầu tiên, tải OpenCV tại địa chỉ https://opencv.org/releases.html. Ở đây, tác giả sẽ sử dụng OpenCV cho windows (Win pack)

Sau khi tải xong, click vào file vừa tải và tiến hành cài đặt. Trong ví dụ này, mình sẽ cài đặt OpenCV tại ổ E

Sau khi cài đặt xong, thư mục OpenCV sẽ xuất hiện tại ổ E:

Cài đặt OpenCV cho Python

Sau khi cài đặt xong OpenCV, trong thư mục build của openCV, thư viện OpenCV của python đã được chuẩn bị sẵn.

Copy file cv2.pyd vào trong Lib/site-packages của thư mục gốc của Python2.7

Thư viện OpenCV cho python sử dụng numpy. Để cài đặt numpy, hãy cài đặt pip và sử dụng pip để cài đặt numpy.

Tải file get-pip.py tại địa chỉ: https://bootstrap.pypa.io/get-pip.py

Cài đặt pip: python get-pip.py
Cài đặt numpy: pip install numpy

Tư liệu tham khảo:

[1] https://developer.nvidia.com/opencv

[2] https://docs.opencv.org/master/  

[3] https://thigiacmaytinh.com/nen-lap-trinh-opencv-bang-ngon-ngu-nao/

Avatar photo
Duy Nguyen Hoang A fully enthusiastic boy

Clean Code: Nguyên tắc viết hàm trong lập trình…

Trong quá trình phát triển phần mềm, việc viết mã nguồn dễ đọc, dễ hiểu là yếu tố then chốt để đảm bảo code...
Avatar photo Dat Tran Thanh
3 min read

Clean Code: Nguyên tắc comment trong lập trình

Trong lập trình, code không chỉ là một tập hợp các câu lệnh để máy tính thực thi, mà còn là một hình thức...
Avatar photo Dat Tran Thanh
3 min read

Clean Code: Nguyên tắc xử lý lỗi (Error Handling)

Trong quá trình phát triển phần mềm, việc xử lý lỗi không chỉ là một phần quan trọng mà còn ảnh hưởng trực tiếp...
Avatar photo Dat Tran Thanh
4 min read

Leave a Reply

Your email address will not be published. Required fields are marked *