Tugas MediaPipe Interactive Image Segmenter mengambil lokasi dalam gambar, memperkirakan batas objek di lokasi tersebut, dan mengembalikan segmentasi untuk objek sebagai data gambar. Petunjuk ini menunjukkan cara menggunakan Segmentasi Gambar Interaktif dengan Android. Contoh kode yang dijelaskan dalam petunjuk ini tersedia di GitHub. Untuk mengetahui informasi selengkapnya terkait kemampuan, model, dan opsi konfigurasi. tugas ini, lihat Ringkasan.
Contoh kode
Contoh kode Tugas MediaPipe adalah implementasi sederhana dari Interactive Image Segmenter untuk Android. Contoh ini berfungsi dengan gambar yang dipilih dari galeri perangkat.
Anda dapat menggunakan aplikasi ini sebagai titik awal untuk aplikasi Android Anda sendiri, atau merujuk ke sana saat memodifikasi aplikasi yang ada. Kode contoh Segmentasi Gambar Interaktif dihosting di GitHub.
Mendownload kode
Petunjuk berikut menunjukkan cara membuat salinan lokal dari contoh kode menggunakan alat command line git.
Untuk mendownload kode contoh:
- Clone repositori git menggunakan perintah berikut:
git clone https://github.com/google-ai-edge/mediapipe-samples
- Secara opsional, konfigurasikan instance git Anda untuk menggunakan checkout sparse,
sehingga Anda hanya memiliki file untuk aplikasi contoh Interactive Image Segmenter:
cd mediapipe git sparse-checkout init --cone git sparse-checkout set examples/interactive_segmentation/android
Setelah membuat versi lokal dari kode contoh, Anda dapat mengimpor project ke Android Studio dan menjalankan aplikasi. Untuk mendapatkan petunjuk, lihat Panduan Penyiapan untuk Android.
Komponen utama
File berikut berisi kode penting untuk gambar ini aplikasi contoh segmentasi:
- InteractiveSegmentationHelper.kt - Melakukan inisialisasi tugas Interactive Image Segmenter serta menangani model dan delegasi pilihan.
- OverlayView.kt - Menangani dan memformat hasil segmentasi.
Penyiapan
Bagian ini menjelaskan langkah-langkah utama untuk menyiapkan lingkungan pengembangan dan project kode untuk menggunakan Interactive Image Segmenter. Untuk informasi umum tentang menyiapkan lingkungan pengembangan untuk menggunakan tugas MediaPipe, termasuk persyaratan versi platform, lihat Panduan penyiapan untuk Android.
Dependensi
Interactive Image Segmenter menggunakan library com.google.mediapipe:tasks-vision
. Tambahkan ini
dependensi ke file build.gradle
dari
Project pengembangan aplikasi Android. Impor dependensi yang dibutuhkan dengan
kode berikut:
dependencies {
...
implementation 'com.google.mediapipe:tasks-vision:latest.release'
}
Model
Tugas Segmentasi Gambar Interaktif MediaPipe memerlukan model terlatih yang kompatibel dengan tugas Anda. Untuk informasi selengkapnya tentang model terlatih yang tersedia untuk Segmentasi Gambar Interaktif, lihat ringkasan tugas bagian Model.
Pilih dan download model, lalu simpan dalam direktori project Anda:
<dev-project-root>/src/main/assets
Gunakan metode BaseOptions.Builder.setModelAssetPath()
untuk menetapkan jalur
yang digunakan oleh model. Metode ini ditampilkan dalam contoh kode di halaman berikutnya
bagian.
Di Segmentasi Gambar Interaktif
kode contoh,
model ini ditentukan di class InteractiveSegmenterHelper.kt
dalam fungsi setupInteractiveSegmenter()
.
Membuat tugas
Anda dapat menggunakan fungsi createFromOptions
untuk membuat tugas. Tujuan
Fungsi createFromOptions
menerima opsi konfigurasi termasuk
jenis output mask. Untuk informasi selengkapnya tentang konfigurasi
opsi, lihat Ringkasan Konfigurasi.
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);
Untuk contoh selengkapnya tentang cara menyiapkan tugas ini, lihat
InteractiveSegmenterHelper
fungsi setupInteractiveSegmenter()
class.
Opsi konfigurasi
Tugas ini memiliki opsi konfigurasi berikut untuk aplikasi Android:
Nama Opsi | Deskripsi | Rentang Nilai | Nilai Default |
---|---|---|---|
outputCategoryMask |
Jika ditetapkan ke True , output akan menyertakan mask segmentasi
sebagai gambar uint8, di mana setiap nilai piksel menunjukkan apakah piksel tersebut adalah bagian dari
objek yang terletak di area yang diinginkan. |
{True, False } |
False |
outputConfidenceMasks |
Jika ditetapkan ke True , output akan menyertakan mask segmentasi
sebagai gambar nilai {i>float<i}, dengan setiap nilai {i>float<i} mewakili tingkat keyakinan
bahwa piksel adalah bagian dari objek yang terletak di area yang diinginkan. |
{True, False } |
True |
displayNamesLocale |
Menyetel bahasa label yang akan digunakan untuk nama tampilan yang diberikan di
metadata model tugas, jika tersedia. Defaultnya adalah en untuk
Bahasa Inggris. Anda dapat menambahkan label yang dilokalkan ke metadata model kustom
menggunakan TensorFlow Lite Metadata Writer API
| Kode lokal | id |
errorListener |
Menetapkan pemroses error opsional. | T/A | Tidak ditetapkan |
Menyiapkan data
Interactive Image Segmenter bekerja dengan gambar, dan tugasnya menangani input data
pra-pemrosesan, termasuk pengubahan ukuran, rotasi, dan normalisasi nilai.
Anda perlu mengonversi gambar input menjadi
Objek com.google.mediapipe.framework.image.MPImage
sebelum meneruskannya ke
tugas Anda.
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();
RegionOfInterest roi = RegionOfInterest.create( NormalizedKeypoint.create( normX * it.width, normY * it.height ) ); ImageSegmenterResult segmenterResult = interactivesegmenter.segment(image, roi);
Dalam kode contoh Interactive Image Segmenter, fungsi segment
ditentukan di bagian
InteractiveSegmenterHelper.kt
.
Menangani dan menampilkan hasil
Setelah menjalankan inferensi, tugas Interactive Image Segmenter akan menampilkan
Objek ImageSegmenterResult
yang berisi hasil dari
tugas segmentasi. Konten {i>output<i} dapat
mencakup {i>category mask<i},
masker, atau keduanya, tergantung pada
apa yang Anda tetapkan ketika
mengonfigurasi tugas.
Bagian berikut menjelaskan lebih lanjut data output dari tugas ini:
Masker kategori
Gambar berikut menunjukkan visualisasi output tugas untuk suatu kategori
mask nilai dengan area minat yang ditunjukkan. Setiap piksel adalah uint8
nilai yang menunjukkan apakah piksel adalah bagian dari objek yang terletak di area
minat tertentu. Lingkaran hitam putih pada gambar kedua menunjukkan gambar yang dipilih
area minat tertentu.
Output mask kategori dan gambar asli. Gambar sumber dari Pascal VOC 2012 set data.
Masker keyakinan
Output untuk samaran berisi nilai float antara [0, 1]
untuk
setiap saluran input gambar. Nilai yang lebih tinggi menunjukkan
kepercayaan yang lebih tinggi bahwa
piksel gambar adalah bagian dari objek yang terletak di area menarik.