Tác vụ Trình phân đoạn hình ảnh tương tác MediaPipe lấy một vị trí trong hình ảnh, ước tính ranh giới của đối tượng tại vị trí đó và trả về dữ liệu phân đoạn cho đối tượng dưới dạng dữ liệu hình ảnh. Những 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 với các ứng dụng Android. Bạn có thể xem ví dụ về mã được mô tả trong các hướng dẫn này trên GitHub. Để biết thêm thông tin về các tính năng, mô hình và tuỳ 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ã
Ví dụ về mã MediaPipe Tasks là cách triển khai đơn giản của ứng dụng Trình phân đoạn hình ảnh tương tác dành cho Android. Ví dụ này hoạt động với các hình ảnh được chọn trong thư viện thiết bị.
Bạn có thể sử dụng ứng dụng này làm điểm xuất phát cho ứng dụng Android của riêng mình hoặc tham khảo ứng dụng này khi sửa đổi một ứng dụng hiện có. Mã ví dụ về Trình phân đoạn hình ảnh tương tác được lưu trữ trên GitHub.
Tải mã xuống
Hướng dẫn sau đây cho bạn biết cách tạo bản sao cục bộ của mã ví dụ bằng công cụ dòng lệnh git.
Cách tải mã mẫu xuống:
- Sao chép kho lưu trữ git bằng lệnh sau:
git clone https://github.com/google-ai-edge/mediapipe-samples
- Bạn có thể định cấu hình thực thể git để sử dụng tính năng kiểm tra thư mục thưa, nhờ đó, bạn chỉ có các tệp cho ứng dụng mẫu Trình phân đoạn hình ảnh tương tác:
cd mediapipe git sparse-checkout init --cone git sparse-checkout set examples/interactive_segmentation/android
Sau khi tạo phiên bản cục bộ của mã ví dụ, bạn có thể nhập dự án vào Android Studio và chạy ứng dụng. Để biết hướng dẫn, hãy xem Hướng dẫn thiết lập cho Android.
Các thành phần chính
Các tệp sau đây chứa mã quan trọng cho ứng dụng ví dụ về phân đoạn hình ảnh này:
- InteractiveSegmentationHelper.kt – Khởi chạy tác vụ Trình phân đoạn hình ảnh tương tác và xử lý mô hình cũng như lựa chọn uỷ quyền.
- OverlayView.kt – Xử lý và định dạng kết quả phân đoạn.
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à dự án mã để sử dụng Trình 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 cho việc sử dụng các tác vụ 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 Android.
Phần phụ thuộc
Trình phân đoạn hình ảnh tương tác sử dụng thư viện com.google.mediapipe:tasks-vision
. Thêm phần phụ thuộc này vào tệp build.gradle
của dự án phát triển ứng dụng Android. Nhập các phần phụ thuộc bắt buộc bằng mã sau:
dependencies {
...
implementation 'com.google.mediapipe:tasks-vision:latest.release'
}
Mẫu
Tác vụ Trình phân đoạn hình ảnh tương tác của MediaPipe yêu cầu một mô hình đã 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 đã huấn luyện hiện có cho Trình phân đoạn hình ảnh tương tác, hãy xem phần Mô hình trong phần tổng quan về tác vụ.
Chọn và tải mô hình xuống, sau đó lưu trữ mô hình đó trong thư mục dự án:
<dev-project-root>/src/main/assets
Sử dụng phương thức BaseOptions.Builder.setModelAssetPath()
để chỉ định đường dẫn mà mô hình sử dụng. Phương thức này được thể hiện trong ví dụ về mã ở phần tiếp theo.
Trong mã ví dụ của Trình phân đoạn hình ảnh tương tác, mô hình được xác định trong lớp InteractiveSegmenterHelper.kt
trong hàm setupInteractiveSegmenter()
.
Tạo việc cần làm
Bạn có thể sử dụng hàm createFromOptions
để tạo tác vụ. Hàm createFromOptions
chấp nhận các tuỳ chọn cấu hình, bao gồm cả các loại đầu ra mặt nạ. Để biết thêm thông tin về các tuỳ chọn cấu hình, hãy xem phần Tổng quan về cấu hình.
InteractiveSegmenterOptions options = InteractiveSegmenterOptions.builder() .setBaseOptions( BaseOptions.builder().setModelAssetPath("model.tflite").build()) .setOutputCategoryMask(true) .setOutputConfidenceMasks(false) .setResultListener((result, inputImage) -> { // Process the segmentation result here. }) .setErrorListener(exception -> { // Process the segmentation errors here. }) .build(); interactivesegmenter = InteractiveSegmenter.createFromOptions(context, options);
Để biết ví dụ chi tiết hơn về cách thiết lập tác vụ này, hãy xem hàm setupInteractiveSegmenter()
của lớp InteractiveSegmenterHelper
.
Các lựa chọn về cấu hình
Tác vụ này có các tuỳ chọn cấu hình sau đây cho ứng dụng Android:
Tên tuỳ chọn | Mô tả | Phạm vi giá trị | Giá trị mặc định |
---|---|---|---|
outputCategoryMask |
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 uint8, trong đó mỗi giá trị pixel cho biết liệu pixel đó có phải là một phần của đối tượng nằm trong khu vực quan tâm hay không. |
{True, False } |
False |
outputConfidenceMasks |
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ị dấu phẩy động, trong đó mỗi giá trị dấu phẩy động thể hiện độ tin cậy rằng pixel là một phần của đối tượng nằm trong khu vực quan tâm. |
{True, False } |
True |
displayNamesLocale |
Đặ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 tác vụ, nếu có. 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 ghi siêu dữ liệu TensorFlow Lite
| Mã ngôn ngữ | vi |
errorListener |
Đặt trình nghe lỗi không bắt buộc. | Không áp dụng | Chưa đặt |
Chuẩn bị dữ liệu
Công cụ phân đoạn hình ảnh tương tác hoạt động với hình ảnh và tác vụ này xử lý quá trình xử lý trước đầu vào dữ liệu, bao gồm cả việc đổi kích thước, xoay và chuẩn hoá giá trị.
Bạn cần chuyển đổi hình ảnh đầu vào thành đối tượng com.google.mediapipe.framework.image.MPImage
trước khi truyền hình ảnh đó vào tác vụ.
import com.google.mediapipe.framework.image.BitmapImageBuilder; import com.google.mediapipe.framework.image.MPImage; // Load an image on the user’s device as a Bitmap object using BitmapFactory. // Convert an Android’s Bitmap object to a MediaPipe’s Image object. MPImage mpImage = new BitmapImageBuilder(bitmap).build();
Trong mã ví dụ về Trình phân đoạn hình ảnh tương tác, việc chuẩn bị dữ liệu được xử lý trong lớp InteractiveSegmenterHelper
bằng hàm segment()
.
Chạy tác vụ
Gọi hàm segment
để chạy tính năng dự đoán và tạo các phân đoạn.
Tác vụ Trình phân đoạn hình ảnh tương tác trả về các vùng phân đoạn đã xác định trong hình ảnh đầu vào.
RegionOfInterest roi = RegionOfInterest.create( NormalizedKeypoint.create( normX * it.width, normY * it.height ) ); ImageSegmenterResult segmenterResult = interactivesegmenter.segment(image, roi);
Trong mã ví dụ về Trình phân đoạn hình ảnh tương tác, các hàm segment
được xác định trong tệp InteractiveSegmenterHelper.kt
.
Xử lý và hiển thị kết quả
Khi chạy quy trình suy luận, tác vụ Trình phân đoạn hình ảnh tương tác sẽ trả về một đối tượng ImageSegmenterResult
chứa kết quả của tác vụ phân đoạn. Nội dung của kết quả 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 nội dung bạn đặt khi định cấu hình tác vụ.
Các phần sau đây giải thích thêm về dữ liệu đầu ra của tác vụ này:
Mặt nạ danh mục
Các hình ảnh sau đây cho thấy hình ảnh trực quan của kết quả tác vụ cho mặt nạ giá trị danh mục với một khu vực điểm quan tâm được chỉ định. Mỗi pixel là một giá trị uint8
cho biết liệu pixel đó có thuộc đối tượng nằm trong 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.
Kết quả đầ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ị float trong khoảng [0, 1]
cho mỗi kênh đầu vào hình ảnh. Giá trị càng cao thì độ tin cậy càng cao rằng pixel hình ảnh là một phần của đối tượng nằm trong khu vực quan tâm.