Panduan segmentasi gambar interaktif untuk Android

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:

  1. Clone repositori git menggunakan perintah berikut:
    git clone https://github.com/google-ai-edge/mediapipe-samples
    
  2. 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:

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 users device as a Bitmap object using BitmapFactory.

// Convert an Androids Bitmap object to a MediaPipes 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.