Hướng dẫn về phân đoạn hình ảnh tương tác dành cho Python

Tác vụ của Công cụ phân đoạn hình ảnh tương tác MediaPipe lấy một vị trí trong một hình ảnh, ước tính ranh giới của một đối tượng tại vị trí đó và trả về phân đoạn cho đối tượng dưới dạng dữ liệu hình ảnh. Các hướng dẫn này cho bạn biết cách sử dụng Trình phân đoạn hình ảnh tương tác bằng ngôn ngữ Python. Để biết thêm thông tin về các tính năng, mô hình và lựa chọn cấu hình của tác vụ này, hãy xem phần Tổng quan.

Ví dụ về mã

Mã ví dụ cho Công cụ phân đoạn hình ảnh tương tác cung cấp cách triển khai đầy đủ của tác vụ này trong Python để bạn tham khảo. Mã này giúp bạn thử nghiệm công việc này và bắt đầu xây dựng ứng dụng phân đoạn hình ảnh tương tác của riêng bạn. Bạn có thể xem, chạy và chỉnh sửa mã ví dụ của Công cụ phân đoạn hình ảnh tương tác chỉ bằng trình duyệt web.

Thiết lập

Phần này mô tả các bước chính để thiết lập môi trường phát triển và lập trình cho các dự án cụ thể để sử dụng Công cụ phân đoạn hình ảnh tương tác. Để biết thông tin chung về cách thiết lập môi trường phát triển nhằm sử dụng các tác vụ của MediaPipe, bao gồm cả các yêu cầu về phiên bản nền tảng, hãy xem Hướng dẫn thiết lập cho Python. Bạn có thể xem lại mã nguồn cho ví dụ này trên GitHub

Gói

Tác vụ Trình phân đoạn hình ảnh tương tác MediaPipe cần có gói mediapipe. Bạn có thể cài đặt các phần phụ thuộc bắt buộc bằng lệnh sau:

$ python -m pip install mediapipe

Nhập

Nhập các lớp sau để truy cập vào các chức năng tác vụ của Trình phân đoạn hình ảnh tương tác:

import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import vision

Mẫu

Tác vụ Phân đoạn hình ảnh tương tác MediaPipe cần có một mô hình đã qua huấn luyện tương thích với tác vụ này. Để biết thêm thông tin về các mô hình đã được huấn luyện hiện có cho Công cụ phân đoạn hình ảnh tương tác, hãy xem phần Mô hình tổng quan về tác vụ.

Chọn và tải mô hình xuống rồi lưu trữ trong thư mục dự án của bạn:

model_path = '/absolute/path/to/model.tflite'

Chỉ định đường dẫn của mô hình trong tham số model_asset_path như minh hoạ dưới đây:

base_options = BaseOptions(model_asset_path=model_path)

Tạo việc cần làm

Tác vụ có Phân đoạn hình ảnh tương tác MediaPipe sử dụng hàm create_from_options để thiết lập tác vụ đó. Hàm create_from_options chấp nhận các giá trị cho các tuỳ chọn cấu hình cần xử lý. Để biết thêm thông tin về các lựa chọn cấu hình, hãy xem phần Lựa chọn cấu hình. Mã sau đây minh hoạ cách tạo và định cấu hình tác vụ này.

BaseOptions = mp.tasks.BaseOptions
InteractiveSegmenter = mp.tasks.vision.InteractiveSegmenter
InteractiveSegmenterOptions = mp.tasks.vision.InteractiveSegmenterOptions
VisionRunningMode = mp.tasks.vision.RunningMode

# Create a image segmenter instance with the image mode:
options = InteractiveSegmenterOptions(
    base_options=BaseOptions(model_asset_path='/path/to/model.task'),
    running_mode=VisionRunningMode.IMAGE,
    output_type=InteractiveSegmenterOptions.OutputType.CATEGORY_MASK)
with InteractiveSegmenter.create_from_options(options) as segmenter:
# segmenter is initialized and ready to use

Các lựa chọn về cấu hình

Tác vụ này có các lựa chọn cấu hình sau đây cho các ứng dụng Python:

Tên lựa chọn Nội dung mô tả Khoảng giá trị Giá trị mặc định
output_category_mask Nếu bạn đặt thành True, thì kết quả sẽ bao gồm một mặt nạ phân đoạn dưới dạng hình ảnh uint8, trong đó mỗi giá trị pixel cho biết liệu pixel có thuộc đối tượng nằm ở khu vực quan tâm hay không. {True, False} False
output_confidence_masks Nếu được đặt thành True, kết quả sẽ bao gồm một mặt nạ phân đoạn dưới dạng hình ảnh giá trị số thực, trong đó mỗi giá trị số thực biểu thị niềm tin rằng pixel là một phần của đối tượng nằm ở khu vực quan tâm. {True, False} True
display_names_locale Đặt ngôn ngữ của nhãn để sử dụng cho tên hiển thị được cung cấp trong siêu dữ liệu của mô hình của tác vụ, nếu có. Giá trị mặc định là en đối với tiếng Anh. Bạn có thể thêm nhãn đã bản địa hoá vào siêu dữ liệu của mô hình tuỳ chỉnh bằng cách sử dụng API Trình viết siêu dữ liệu TensorFlow Lite Mã ngôn ngữ vi

Chuẩn bị dữ liệu

Chuẩn bị dữ liệu đầu vào dưới dạng tệp hình ảnh hoặc mảng numpy, sau đó chuyển đổi dữ liệu đó thành đối tượng mediapipe.Image.

# Load the input image from an image file.
mp_image = mp.Image.create_from_file('/path/to/image')

# Load the input image from a numpy array.
mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=numpy_image)

Để xem ví dụ về mã cho thấy việc chuẩn bị dữ liệu cho Công cụ phân đoạn hình ảnh tương tác, hãy xem ví dụ về mã.

Chạy tác vụ

Trình phân đoạn hình ảnh tương tác sử dụng hàm segment để kích hoạt thông tin dự đoán. Đối với hoạt động phân đoạn hình ảnh, hoạt động này bao gồm việc xử lý trước dữ liệu đầu vào, chạy mô hình phân đoạn và xử lý hậu kỳ đầu ra của mô hình thô cho các mặt nạ được phân đoạn.

Ví dụ về mã sau đây cho thấy cách thực thi quá trình xử lý bằng mô hình tác vụ.

RegionOfInterest = vision.InteractiveSegmenterRegionOfInterest
# Perform image segmentation on the provided single image.
# The image segmenter must be created with the image mode.
roi = RegionOfInterest(format=RegionOfInterest.Format.KEYPOINT,
                          keypoint=NormalizedKeypoint(x, y))
segmented_masks = segmenter.segment(mp_image, roi)

Để biết ví dụ hoàn chỉnh hơn về cách chạy dự đoán của Trình phân đoạn hình ảnh tương tác, hãy xem ví dụ về mã.

Xử lý và hiển thị kết quả

Kết quả đầu ra của Trình phân đoạn hình ảnh tương tác là một danh sách dữ liệu Image và có thể bao gồm mặt nạ danh mục, mặt nạ tin cậy hoặc cả hai, tuỳ thuộc vào chế độ bạn đặt khi định cấu hình tác vụ. Nếu bạn thiết lập output_category_mask thành True, kết quả sẽ là danh sách chứa mặt nạ phân đoạn đơn dưới dạng hình ảnh uint8. Giá trị pixel cho biết liệu nó có thuộc đối tượng tại khu vực quan tâm hay không. Chỉ mục danh mục được công nhận của hình ảnh đầu vào. Nếu bạn đặt output_confidence_masks thành True, kết quả sẽ là danh sách các kênh chứa giá trị pixel trong phạm vi [0,1] biểu thị điểm số tin cậy của pixel thuộc đối tượng tại khu vực quan tâm.

Các phần sau đây giải thích thêm về dữ liệu đầu ra của nhiệm vụ này:

Mặt nạ danh mục

Các hình ảnh sau đây minh hoạ kết quả đầu ra của tác vụ cho một mặt nạ giá trị danh mục với khu vực điểm quan tâm được biểu thị. Mỗi pixel là một giá trị uint8 cho biết liệu pixel có thuộc đối tượng nằm ở khu vực quan tâm hay không. Vòng tròn đen trắng trên hình ảnh thứ hai cho biết khu vực quan tâm đã chọn.

Đầu ra của mặt nạ danh mục và hình ảnh gốc. Hình ảnh nguồn từ tập dữ liệu Pascal VOC 2012.

Mặt nạ tin cậy

Đầu ra của mặt nạ tin cậy chứa các giá trị số thực giữa [0, 1] đối với từng kênh đầu vào hình ảnh. Giá trị cao hơn cho thấy độ tin cậy cao hơn rằng pixel hình ảnh là một phần của đối tượng nằm ở khu vực quan tâm.