HomeComputer VisionMachine LearningAI DeploymentOther PostsAbout
AI Deployment
Gọi hàm Python trên C++ với OpenCV
Viet Anh Ng.
March 31, 2020
2 min

Có nhiều khi chúng ta cần gọi một hàm xử lý ảnh hoặc chạy mô hình học máy trên code Python từ C++. Lý do rất đơn giản, có thể là vì bạn muốn dùng luôn code Python, hoặc bạn chưa có thời gian chuyển sang code C++. Bài viết này sẽ hướng dẫn các bạn cách khởi tạo object và gọi đến phương thức Python từ code C++ và truyền ảnh dạng cv::Mat vào để xử lý.

Giả sử mình có đoạn code Python dưới đây. Đoạn code này là một đoạn xử lý ảnh đơn giản, tuy nhiên trong trường hợp của bạn có thể là một class cho mô hình học máy. Việc chuyển sang code C++ có thể tốn kha khá thời gian và kéo đến những rắc rối không cần thiết. Chúng ta sẽ thực hiện lưu đoạn code này dưới tên image_processing.py và thực hiện khởi tạo và gọi luôn hàm xử lý process_img(self, img) từ code C++.

Chúng ta sẽ sử dụng thư viện Boost để tương tác với Python. Để cài đặt trên Ubuntu - Debian gõ lệnh sau:

Cài đặt OpenCV trên Python:

Để bắt đầu, include các thư viện cần thiết vào file main.cpp. Ở đây chúng ta sẽ cần đến thư viện Boost để tương tác với Python và chuyển đổi dữ liệu qua lại giữa cv::Mat và Numpy.

Tiếp đó viết hàm chuyển từ kiểu dữ liệu cv::Mat sang Numpy array (kiểu dữ liệu để lưu ảnh của OpenCV trên Python):

Hàm để chuyển ngược từ Numpy array sang cv::Mat để lấy ảnh đầu ra:

Hàm khởi tạo môi trường Python. Ở đây bạn có thể chỉ đến môi trường bạn đang sử dụng bằng cách bỏ comment phần Set your python location. và sửa đường dẫn đến môi trường Python cần dùng.

Toàn bộ đoạn code xử lý chính trong hàm main() như sau. Đoạn code này sẽ khởi tạo một instance của class SimpleImageProccessor và gọi phương thức process_img() để xử lý và lấy ảnh đầu ra.

Cuối cùng bạn cần viết CMake file cho project này. Tham khảo tại đây.

Để lấy toàn bộ source code của bài viết, các bạn clone Github repo sau: https://github.com/vietanhdev/cpp-call-python-opencv. Biên dịch và chạy thử:

Kết quả thu được sẽ như hình dưới:

Cpp call python
Cpp call python

Lưu ý: Trên đây là hướng dẫn biên dịch và sử dụng với Python 2. Để dùng Python 3 bạn cần tự biên dịch và cài đặt Boost với Python 3 và sửa lại CMakeLists.txt cho phù hợp.


Tags

Viet Anh Ng.

AI Developer / Blogger

Hi! I'm a software engineer. I love AI technologies and currently, I'm using machine learning to build awesome software products.

Expertise

AI
Deep Learning
Computer Vision

Social Media

githubtwitterwebsite

Related Posts

Lọc ảnh (Image Filtering)
September 29, 2018
9 min
© 2020, All Rights Reserved.

Quick Links

About this siteContact

Social Media