Nhiệm vụ của Trình phân đoạn hình ảnh MediaPipe cho phép bạn chia hình ảnh thành các vùng dựa trên để áp dụng hiệu ứng hình ảnh như làm mờ nền. Các hướng dẫn này sẽ cho bạn biết cách sử dụng Trình phân đoạn hình ảnh bằng ngôn ngữ Python. Cho thông tin khác về tính năng, kiểu máy và tuỳ chọn cấu hình của nhiệm vụ này, hãy xem phần Tổng quan.
Ví dụ về mã
Mã ví dụ cho Trình phân đoạn hình ảnh cung cấp cách triển khai hoàn chỉnh trình phân đoạn này công việc bằng Python để bạn tham khảo. Mã này giúp bạn kiểm thử công việc này và bắt đầu tạo ứng dụng phân đoạn hình ảnh của riêng bạn. Bạn có thể xem, chạy và chỉnh sửa Trình phân đoạn hình ảnh mã ví dụ 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à mã dự án cụ thể để sử dụng Trình phân đoạn hình ảnh. Để biết thông tin chung về thiết lập môi trường phát triển để sử dụng các tác vụ MediaPipe, bao gồm 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 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 MediaPipe cần có gói mediapipe
. Bạn có thể cài đặt
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 hàm tác vụ của Trình phân đoạn hình ảnh:
import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import vision
Mẫu
Nhiệm vụ về Trình phân đoạn hình ảnh MediaPipe cần có một mô hình đã qua đào tạo tương thích với công việc. Để biết thêm thông tin về các mô hình đã huấn luyện hiện có cho Trình phân đoạn hình ảnh, hãy xem phần Mô hình tổng quan về nhiệm vụ.
Chọn và tải mô hình xuống rồi lưu trữ mô hình đó trong thư mục dự án:
model_path = '/absolute/path/to/model.tflite'
Chỉ định đường dẫn của mô hình trong thông số Tên mô hình, như được hiển thị dưới đây:
base_options = BaseOptions(model_asset_path=model_path)
Tạo việc cần làm
Tác vụ Trình phân đoạn hình ảnh MediaPipe sử dụng hàm create_from_options
để
thiết lập việc cần làm. Hàm create_from_options
chấp nhận các giá trị
để biết các tuỳ chọn cấu hình cần xử lý. Để biết thêm thông tin về cấu hình tác vụ,
hãy xem phần Tuỳ chọn cấu hình.
Những mẫu này cũng cho thấy các biến thể của quá trình tạo tác vụ đối với hình ảnh, tệp video và luồng video trực tiếp.
Bài đăng có hình ảnh
BaseOptions = mp.tasks.BaseOptions ImageSegmenter = mp.tasks.vision.ImageSegmenter ImageSegmenterOptions = mp.tasks.vision.ImageSegmenterOptions VisionRunningMode = mp.tasks.vision.RunningMode # Create a image segmenter instance with the image mode: options = ImageSegmenterOptions( base_options=BaseOptions(model_asset_path='/path/to/model.task'), running_mode=VisionRunningMode.IMAGE, output_category_mask=True) with ImageSegmenter.create_from_options(options) as segmenter:
Video
BaseOptions = mp.tasks.BaseOptions ImageSegmenter = mp.tasks.vision.ImageSegmenter ImageSegmenterOptions = mp.tasks.vision.ImageSegmenterOptions VisionRunningMode = mp.tasks.vision.RunningMode # Create a image segmenter instance with the video mode: options = ImageSegmenterOptions( base_options=BaseOptions(model_asset_path='/path/to/model.task'), running_mode=VisionRunningMode.VIDEO, output_category_mask=True) with ImageSegmenter.create_from_options(options) as segmenter:
Sự kiện phát trực tiếp
BaseOptions = mp.tasks.BaseOptions ImageSegmenter = mp.tasks.vision.ImageSegmenter ImageSegmenterOptions = mp.tasks.vision.ImageSegmenterOptions VisionRunningMode = mp.tasks.vision.RunningMode # Create a image segmenter instance with the live stream mode: def print_result(result: List[Image], output_image: Image, timestamp_ms: int): print('segmented masks size: {}'.format(len(result))) options = ImageSegmenterOptions( base_options=BaseOptions(model_asset_path='/path/to/model.task'), running_mode=VisionRunningMode.VIDEO, output_category_mask=True) with ImageSegmenter.create_from_options(options) as segmenter:
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 cho các ứng dụng Python:
Tên lựa chọn | Mô tả | Khoảng giá trị | Giá trị mặc định |
---|---|---|---|
running_mode |
Thiết lập chế độ chạy cho tác vụ. Có ba
chế độ: HÌNH ẢNH: Chế độ cho đầu vào một hình ảnh. VIDEO: Chế độ cho các khung đã giải mã của video. LIVE_STREAM: Chế độ phát trực tiếp đầu vào chẳng hạn như từ máy ảnh. Trong chế độ này, ResultsListener phải là để thiết lập trình nghe để nhận kết quả một cách không đồng bộ. |
{IMAGE, VIDEO, LIVE_STREAM } |
IMAGE |
output_category_mask |
Nếu bạn đặ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 uint8, trong đó mỗi giá trị pixel cho biết danh mục chiến thắng
giá trị. |
{True, False } |
False |
output_confidence_masks |
Nếu bạn đặ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ị độ tin cậy
bản đồ điểm số của danh mục. |
{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 về mô hình của công việc (nếu có). Mặc định là en cho
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 TensorFlow Lite Metadata Writer API |
Mã ngôn ngữ | vi |
result_callback |
Thiết lập trình nghe kết quả để nhận kết quả phân đoạn
không đồng bộ khi trình phân đoạn hình ảnh đang ở chế độ LIVE_STREAM .
Chỉ sử dụng được khi bạn đặt chế độ chạy thành LIVE_STREAM |
Không áp dụng | Không áp dụng |
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 thành đối tượng mediapipe.Image
. Nếu nội dung bạn nhập là tệp video
hoặc phát trực tiếp trên webcam, thì bạn có thể dùng thư viện bên ngoài như
OpenCV để tải các khung đầu vào của bạn dưới dạng numpy
mảng.
Bài đăng có hình ảnh
# 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)
Video
# Use OpenCV’s VideoCapture to load the input video. # Load the frame rate of the video using OpenCV’s CV_CAP_PROP_FPS # You need the frame rate to calculate the timestamp for each frame. # Loop through each frame in the video using VideoCapture#read() # Convert the frame received from OpenCV to a MediaPipe’s Image object. mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=numpy_frame_from_opencv)
Sự kiện phát trực tiếp
# Use OpenCV’s VideoCapture to start capturing from the webcam. # Create a loop to read the latest frame from the camera using VideoCapture#read() # Convert the frame received from OpenCV to a MediaPipe’s Image object. mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=numpy_frame_from_opencv)
Để xem ví dụ về mã cho thấy việc chuẩn bị dữ liệu cho Trình phân đoạn hình ảnh, hãy xem mã ví dụ.
Chạy tác vụ
Trình phân đoạn hình ảnh sử dụng segment
, segment_for_video
và segment_async
để kích hoạt suy luận. Đối với phân đoạn hình ảnh, việc này bao gồm
xử lý trước dữ liệu đầu vào, chạy mô hình phân đoạn và hậu xử lý
mô hình thô đầu ra cho các mặt nạ được phân đoạn.
Các ví dụ về mã sau đây minh hoạ cách thực thi quá trình xử lý bằng mô hình tác vụ.
Bài đăng có hình ảnh
# Perform image segmentation on the provided single image. # The image segmenter must be created with the image mode. segmented_masks = segmenter.segment(mp_image)
Video
# Perform image segmentation on the provided single image. # The image segmenter must be created with the video mode. segmented_masks = segmenter.segment_for_video(mp_image, frame_timestamp_ms)
Sự kiện phát trực tiếp
# Send live image data to perform image segmentation. # The results are accessible via the `result_callback` provided in # the `ImageSegmenterOptions` object. # The image segmenter must be created with the live stream mode. segmenter.segment_async(mp_image, frame_timestamp_ms)
Xin lưu ý những điều sau:
- Khi chạy ở chế độ video hoặc chế độ phát trực tiếp, bạn cũng phải cung cấp cho tác vụ Trình phân đoạn hình ảnh dấu thời gian của khung nhập.
- Khi chạy trong hình ảnh hoặc mô hình video, tác vụ Trình phân đoạn hình ảnh sẽ chặn luồng hiện tại cho đến khi xử lý xong hình ảnh đầu vào hoặc khung.
Để có ví dụ hoàn chỉnh hơn về cách chạy suy luận của Trình phân đoạn hình ảnh, hãy xem mã ví dụ.
Xử lý và hiện kết quả
Trình phân đoạn hình ảnh sẽ xuất ra một danh sách dữ liệu Image
. Nếu
output_type
là CATEGORY_MASK
, kết quả là một danh sách
chứa mặt nạ đơn phân đoạn dưới dạng hình ảnh uint8. Pixel biểu thị
chỉ mục danh mục được công nhận của hình ảnh đầu vào. Nếu output_type
là
CONFIDENCE_MASK
, đầu ra là một vectơ có kích thước là số danh mục. Một
mặt nạ được phân đoạn là một hình ảnh nổi trong phạm vi [0,1]
, biểu thị
điểm số tin cậy của pixel thuộc danh mục.
Các phần sau đây trình bày ví dụ về dữ liệu đầu ra của tác vụ này:
Độ tin cậy của 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 danh mục
mặt nạ tin cậy. Đầu ra mặt nạ tin cậy chứa các giá trị số thực giữa
[0, 1]
.
Đầu ra mặt nạ tin cậy cho danh mục và hình ảnh gốc. Hình ảnh nguồn từ Pascal VOC 2012 tập dữ liệu.
Giá trị 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 danh mục
mặt nạ giá trị. Phạm vi mặt nạ danh mục là [0, 255]
và mỗi giá trị pixel
biểu thị chỉ mục danh mục chiến thắng của đầu ra của mô hình. Hạng mục chiến thắng
chỉ mục có điểm cao nhất trong số các danh mục mà mô hình có thể nhận ra.
Đầu ra mặt nạ danh mục và hình ảnh gốc. Hình ảnh nguồn từ Pascal VOC 2012 tập dữ liệu.