OpenCV là gì? Đây là câu hỏi được nhiều người đặt ra trong bối cảnh Computer Vision (Thị giác máy tính) đang ngày càng cho thấy tầm quan trọng của mình. Khi nói tới Computer Vision, có một bộ công cụ phần mềm vô cùng mạnh mẽ và thu hút cộng đồng người dùng đông đảo trên toàn cầu: đó chính là OpenCV. Trong bài viết này, Kiến Thức Phần Mềm sẽ cung cấp cho bạn những thông tin thiết yếu liên quan tới OpenCV.
OpenCV là gì?
OpenCV là dạng viết tắt của cụm từ “Open Source Computer Vision Library” – một thư viện nguồn mở dành cho Machine Learning và Computer Vision. OpenCV được tạo ra để phân tích và học máy theo thời gian thực cũng như xử lý hình ảnh, video. Hiện bộ công cụ OpenCV còn được bổ sung tính năng tăng tốc GPU theo real-time. Đối tượng chính của OpenCV đó là các ứng dụng theo thời gian thực (real-time applications).
Ưu điểm OpenCV đó là nó cung cấp hơn 2.500 thuật toán cổ điển và hiện đại, tất cả đều được tối ưu hóa cho học máy và thị giác máy tính. Thư viện nguồn mở này có giấy phép BSD, vì vậy nó được phát hành miễn phí dành cho cả mục đích học tập và thương mại.
OpenCV tương thích với nhiều nền tảng như Windows, macOS, Linux, Android, iOS và các ngôn ngữ lập trình khác nhau như Java, Python, C hay C++. Thư viện này có khả năng tận dụng tối đa khả năng sẵn có của phần cứng, từ đó đảm bảo các ứng dụng máy tính đạt được hiệu suất cao nhất.
Ngày nay, OpenCV được sử dụng rộng rãi trong nhiều lĩnh vực khác nhau như:
- Hình ảnh street view
- Kiểm soát và theo dõi tự động
- Robot và xe ô tô tự lái
- Phân tích và xử lý hình ảnh y học
- Tìm kiếm và khôi phục hình ảnh hoặc video
- Nghệ thuật sắp đặt tương tác
- Phim – cấu trúc 3D từ các chuyển động
Lịch sử ra đời của OpenCV
OpenCV ra đời vào năm 1999, do Gary Bradski đến từ Intel sáng tạo nên. Sau đó đến năm 2000 thì phiên bản đầu tiên của OpenCV được phát hành. Năm 2005, người ta đã ứng dụng OpenCV trong chiếc xe Stanley – chiếc xe giành giải vô địch cuộc thi DARPA Grand Challenge. Từ đó tới nay, OpenCV đã ngày một phát triển và được ứng dụng trong nhiều lĩnh vực của cuộc sống.
Cùng với cuộc chạy đua của các công ty công nghệ trong việc sử dụng computer vision, OpenCV đã xây dựng được một cộng đồng người dùng vô cùng hùng hậu đến từ khắp nơi trên thế giới. Nhu cầu sử dụng OpenCV đang gia tăng chóng mặt và được đa dạng hóa từ interactive art cho tới khai thác web map, khai thác mỏ, robotic cao cấp…
Những cấu trúc module của OpenCV là gì?
Cấu trúc module là gói có chứa các static libraries (thư viện liên kết tĩnh) hoặc shared libraries (thư viện liên kết động). Sau đây là một số module có trong OpenCV:
- Core functionality (core): Đây là module nhỏ gọn cho phép xác định các cấu trúc dữ liệu cơ bản. Trong đó bao gồm những tính năng cơ bản mà tất cả các module khác đều cần đến.
- Image Processing (imgproc): Imgproc là module xử lý hình ảnh của OpenCV. Trong đó có chuyển đổi không gian màu, phép biến đổi hình học, lọc hình ảnh tuyến tính và phi tuyến, biểu đồ…
- Video Analysis (video): Trong module phân tích video, bạn có thể tìm thấy các thuật toán như tách nền, tính toán chuyển động, theo dõi vật thể…
- Camera Calibration and 3D Reconstruction (calib3d): Module này bao gồm các thuật toán liên như tái tạo 3D, dự đoán kiểu dáng, hình học đa chiều cơ bản, thư tín âm thanh nổi…
- Object Detection (objdetect): Module này cho phép nhận dạng đối tượng và mô phỏng các predefined classes (hàm được định nghĩa sẵn)…
- 2D Features Framework (features2d): Đây là module chứa các thuật toán phát hiện các đặc trưng của bộ nhận diện, thông số đối chọi, bộ truy xuất thông số…
- …
Những ứng dụng tuyệt vời của OpenCV là gì?
Xử lý hình ảnh
OpenCV cung cấp hầu hết các công cụ xử lý hình ảnh cơ bản để hỗ trợ bạn trong quá trình viết thuật toán cho computer vision. Một số chức năng xử lý hình ảnh của OpenCV gồm phân tích hình dạng, chuyển đổi màu sắc, biến đổi hình học, lọc hình ảnh…
Xây dựng GUI
OpenCV được tích hợp module có tên highgui cho phép xử lý mọi hoạt động của giao diện người dùng (GUI). Module highgui giúp bạn kiểm tra hình ảnh/video bằng cách tạo một cửa sổ hiển thị để bạn có thể căn chỉnh ảnh hoặc video sao cho phù hợp trước khi chuyển sang bước tiếp theo.
Phân tích video
Thư viện mở OpenCV còn cung cấp tính năng phân tích video, giúp bạn xử lý các tác vụ như tạo mô hình theo dõi video, giám sát các đối tượng khác nhau trong video, phân tích chuyển động của các khung hình liên tiếp…
Bên cạnh đó, bạn còn có thể sử dụng OpenCV để xử lý sự ổn định của video – một yếu tố cực kỳ quan trọng. Trên thực tế, mọi thiết bị hiện đại trước khi trình chiếu tới người dùng đều phải trải qua các kỹ thuật xử lý video.
Tái tạo 3D
Đối với computer vision, tái tạo 3D đóng vai trò cực kỳ thiết yếu. OpenCV cung cấp cho các bạn thuật toán cần thiết kế tìm ra mối liên hệ giữa đối tượng này với đối tượng khác trong tập hợp hình 2D. Từ đó tính toán vị trí và tái tạo lại cảnh 3D từ các hình ảnh 2D đó.
Phát hiện đối tượng
Phát hiện đối tượng tức là tìm ra vị trí của một đối tượng nào đó xuất hiện trong hình ảnh nhất định. Tuy nhiên phát hiện đối tượng chỉ cho biết vị trí chứ không thể phân loại đối tượng. Trong nhiều hệ thống computer vision, tính năng phát hiện vị trí đối tượng đóng vai trò then chốt.
Giả sử như bạn đang muốn xây dựng phần mềm nhận diện áo. Phần mềm này sẽ chỉ ra vị trí cụ thể của chiếc áo từ một hình ảnh nhất định được cung cấp. Tuy nhiên phần mềm đó có thể sẽ không chỉ ra được những điểm đặc trưng của chiếc áo như kích cỡ, màu sắc, kiểu dáng (trừ khi được thiết lập).
Nhận dạng khuôn mặt để tìm ra đối tượng
Nhận dạng khuôn mặt được hiểu đơn giản là việc phát hiện ra khuôn mặt của ai đó từ một hình ảnh cụ thể. Nếu muốn phát triển hệ thống sinh trắc học thực tế cho phép phát hiện khuôn mặt trước ống kính máy ảnh, bạn cần đến tính năng nhận diện đặc điểm để dò tìm vị trí khuôn mặt. Sau đó dựa trên các đặc điểm đã thu nhập được, bạn có thể tạo nên phần mềm cho phép nhận diện khuôn mặt và phát hiện đối tượng chính xác.
Khai thác tính năng
Từ một khung cảnh cụ thể nào đó, cơ quan thị giác của con người có thể trích xuất và truy xuất những đặc điểm nổi bật nhất của khung cảnh. Đây là nền tảng để thiết kế nên các trình trích xuất các đặc điểm nổi bật nhất từ một hình ảnh cụ thể.
Học máy
OpenCV được tích hợp 1 loại module cung cấp đa dạng các thuật toán học máy (machine learning). Trong đó có Neural Networks, Decision Trees, Support Vector Machines, K-Nearest Neighbors, Bayes Classifier…
Các thuật toán machine learning ngày nay đang được ứng dụng phổ biến để phát triển và hoàn thiện những hệ thống tìm kiếm trực quan, nhận diện khuôn mặt, phân loại hình ảnh, nhận dạng đối tượng…
Phân tích hình dạng
Trong computer vision, khái niệm hình dạng rất quan trọng và được đề cao. OpenCV có khả năng phát hiện ra nhiều hình dạng khác nhau có trong một hình ảnh nhất định. Bước này có ý nghĩa then chốt trong nhiều thuật toán. Bạn có thể sử dụng các thuật toán có trong module của OpenCV để trích xuất nhiều hình dạng khác nhau, tính toán sự biến đổi hình dạng và điểm tương đồng giữa hình dạng của các đối tượng.
Nhận dạng văn bản
OpenCV còn được tích hợp một loại module khác cung cấp các thuật toán nhằm phát hiện, nhận dạng và xử lý văn bản. Nhận dạng văn bản tức là việc phát hiện ra nội dung dưới dạng văn bản trong một số ngữ cảnh. Bao gồm quét dữ liệu để số hóa, nhận dạng biển chỉ đường, nhận diện bảng tên…
Nhiếp ảnh điện toán
Việc áp dụng các kỹ thuật xử lý hình ảnh hiện đại nhằm nâng cao chất lượng hình ảnh được gọi chung là nhiếp ảnh điện toán. Nhờ có nhiếp ảnh điện toán mà bạn có thể thao tác và xử lý các dữ liệu hình ảnh ngay trên phần mềm, từ đó giảm nhẹ vai trò của các phương pháp chụp ảnh và các quy trình quang học.
Những ngôn ngữ lập trình mà OpenCV hỗ trợ là gì?
Như đã nói ở trên, bạn có thể lập trình OpenCV bằng nhiều ngôn ngữ khác nhau. Tùy vào nhu cầu và thói quen lập trình mà bạn hãy lựa chọn ngôn ngữ thích hợp nhất.
- C++: Ngôn ngữ này cung cấp nhiều option và được sử dụng phổ biến. Nếu bạn sử dụng Visual Studio làm IDE thì nên sử dụng C++. Mặc dù khi tiếp xúc ban đầu khá phức tạp tuy nhiên các thiết lập của C++ đem đến nhiều lợi ích khi phát triển sản phẩm trong tương lai.
- Python: OpenCV Python là gì? OpenCV-Python có ưu điểm là không cần thiết lập nhiều, ngắn gọn. Vì vậy thường được sử dụng để test OpenCV. Python cũng cho phép lập trình trên nhiều hệ điều hành.
- Android: Có thể trở thành xu hướng nhờ sự tiện lợi và được tích hợp sẵn camera.
- Java: Khá giống với C++ với thế mạnh là tốc độ nhanh chóng và tính đa nền tảng.
- C#: Ưu điểm của C# là được hỗ trợ bởi thư viện đa nền tảng EmguCV, cho phép code nhanh chóng và tiện lợi.
Hướng dẫn chi tiết các bước setup OpenCV
Bước 1: Đầu tiên bạn truy cập trang OpenCV download và tải bản OpenCV tương thích với nền tảng đang sử dụng.
Bước 2: Giải nén file vừa tải vào thư mục bạn mong muốn.
Setup OpenCV cho Python
Bước 1: Ở file opencv vừa giải nén thành công và điều hướng tới build > python > 2.7 > x86.
Bước 2: Tại đây bạn sẽ thấy file cv2.pyd. Tiếp theo mở thư mục gốc Python27 > Lib > site-packages và copy paste file cv2.pyd tại đây.
Bước 3: Để sử dụng OpenCV cho python, bạn cần dùng numpy. Như vậy bạn cần cài đặt pip bằng cách tải tệp get-pip.py sau đó mới cài đặt được numpy.
Setup OpenCV cho C++
Bước 1: Tải và cài đặt các công cụ CMake và Mingw.
Bước 2: Tiếp theo bạn mở CMake lên, tại mục “Where is the source code”, bạn click vào Browse Source và chọn thư mục vừa cài đặt OpenCV.
Tại mục “Where to build the binaries”, bạn click vào Browse Build và chọn thư mục dùng để build. Cuối cùng nhấn vào Configure. Tại cửa sổ cmake-gui vừa xuất hiện, bạn chọn MinGW Makefiles làm generator và tick vào tùy chọn Use default native compilers. Nhấn Finish để hoàn tất.
Bước 3: Tại khung config, bạn bỏ tick ở mục ENABLE_PRECOMPILED_HEADERS. Cuối cùng nhấn nút Generate để tạo.
Bước 4: Sau khi CMake được hoàn tất, từ thư viện MinGW bạn tiến hành thực hiện lệnh mingw32-make. Bạn cũng có thể chạy lệnh mingw32-make -j4 để tăng tốc và chạy trên 4 core của CPU.
Nếu gặp lỗi trong quá trình build module videoio. Bạn hãy mở tệp cap_dshow.cpp, sau đó copy và paste đoạn code sau ở đầu của file:
#define STRSAFE_NO_DEPRECATE
Hy vọng rằng bạn đã biết được khái niệm OpenCV là gì cũng như các ứng dụng tuyệt vời của OpenCV. Trong thời đại công nghệ 4.0, OpenCV ngày càng được ứng dụng phổ biến trong mọi khía cạnh của cuộc sống. Đừng quên tìm đọc những bài viết về chủ đề liên quan trên website kienthucphanmem.com nhé.