Tugas MediaPipe Image Segmenter memungkinkan Anda membagi gambar menjadi beberapa area berdasarkan kategori yang telah ditentukan untuk menerapkan efek visual seperti pemburaman latar belakang. Petunjuk ini menunjukkan cara menggunakan Image Segmenter dengan bahasa Python. Untuk mengetahui informasi selengkapnya tentang kemampuan, model, dan opsi konfigurasi tugas ini, lihat Ringkasan.
Contoh kode
Kode contoh untuk Image Segmenter memberikan implementasi lengkap tugas ini di Python sebagai referensi Anda. Kode ini membantu Anda menguji tugas ini dan mulai membangun aplikasi pemisah gambar Anda sendiri. Anda dapat melihat, menjalankan, dan mengedit kode contoh Image Segmenter hanya menggunakan browser web.
Penyiapan
Bagian ini menjelaskan langkah-langkah utama untuk menyiapkan lingkungan pengembangan dan project kode Anda secara khusus untuk menggunakan Image Segmenter. Untuk informasi umum tentang menyiapkan lingkungan pengembangan untuk menggunakan tugas MediaPipe, termasuk persyaratan versi platform, lihat Panduan penyiapan untuk Python. Anda dapat meninjau kode sumber untuk contoh ini di GitHub
Paket
Tugas MediaPipe Image Segmenter memerlukan paket mediapipe
. Anda dapat menginstal
dependensi yang diperlukan dengan perintah berikut:
$ python -m pip install mediapipe
Impor
Impor class berikut untuk mengakses fungsi tugas Image Segmenter:
import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import vision
Model
Tugas MediaPipe Image Segmenter memerlukan model terlatih yang kompatibel dengan tugas ini. Untuk mengetahui informasi selengkapnya tentang model terlatih yang tersedia untuk Image Segmenter, lihat bagian Model ringkasan tugas.
Pilih dan download model, lalu simpan dalam direktori project Anda:
model_path = '/absolute/path/to/model.tflite'
Tentukan jalur model dalam parameter Nama Model, seperti yang ditunjukkan di bawah ini:
base_options = BaseOptions(model_asset_path=model_path)
Membuat tugas
Tugas MediaPipe Image Segmenter menggunakan fungsi create_from_options
untuk
menyiapkan tugas. Fungsi create_from_options
menerima nilai
untuk opsi konfigurasi yang akan ditangani. Untuk mengetahui informasi selengkapnya tentang konfigurasi tugas,
lihat Opsi konfigurasi.
Contoh ini juga menunjukkan variasi konstruksi tugas untuk gambar, file video, dan streaming video live.
Gambar
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:
Live stream
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:
Opsi konfigurasi
Tugas ini memiliki opsi konfigurasi berikut untuk aplikasi Python:
Nama Opsi | Deskripsi | Rentang Nilai | Nilai Default |
---|---|---|---|
running_mode |
Menetapkan mode berjalan untuk tugas. Ada tiga
mode: GAMBAR: Mode untuk input gambar tunggal. VIDEO: Mode untuk frame video yang didekode. LIVE_STREAM: Mode untuk live stream data input, seperti dari kamera. Dalam mode ini, resultListener harus dipanggil untuk menyiapkan pemroses guna menerima hasil secara asinkron. |
{IMAGE, VIDEO, LIVE_STREAM } |
IMAGE |
output_category_mask |
Jika ditetapkan ke True , output akan menyertakan mask segmentasi
sebagai gambar uint8, dengan setiap nilai piksel menunjukkan nilai kategori
pemenang. |
{True, False } |
False |
output_confidence_masks |
Jika ditetapkan ke True , output akan menyertakan mask segmentasi
sebagai gambar nilai float, dengan setiap nilai float mewakili peta skor
keyakinan kategori. |
{True, False } |
True |
display_names_locale |
Menetapkan bahasa label yang akan digunakan untuk nama tampilan yang diberikan dalam
metadata model tugas, jika tersedia. Default-nya adalah en untuk
bahasa Inggris. Anda dapat menambahkan label yang dilokalkan ke metadata model kustom
menggunakan TensorFlow Lite Metadata Writer API |
Kode lokalitas | id |
result_callback |
Menetapkan pemroses hasil untuk menerima hasil segmentasi
secara asinkron saat pemisah gambar berada dalam mode LIVE_STREAM .
Hanya dapat digunakan jika mode berjalan disetel ke LIVE_STREAM |
T/A | T/A |
Menyiapkan data
Siapkan input Anda sebagai file gambar atau array numpy,
lalu konversikan ke objek mediapipe.Image
. Jika input Anda adalah file video
atau live stream dari webcam, Anda dapat menggunakan library eksternal seperti
OpenCV untuk memuat frame input sebagai array
numpy.
Gambar
# 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)
Live stream
# 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)
Untuk contoh kode yang menunjukkan persiapan data untuk Image Segmenter, lihat contoh kode.
Menjalankan tugas
Image Segmenter menggunakan fungsi segment
, segment_for_video
, dan segment_async
untuk memicu inferensi. Untuk segmentasi gambar, hal ini melibatkan
prapemrosesan data input, menjalankan model segmentasi, dan pascapemrosesan
output model mentah ke mask yang tersegmentasi.
Contoh kode berikut menunjukkan cara menjalankan pemrosesan dengan model tugas.
Gambar
# 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)
Live stream
# 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)
Perhatikan hal berikut:
- Saat berjalan dalam mode video atau mode live stream, Anda juga harus memberikan stempel waktu frame input ke tugas Image Segmenter.
- Saat berjalan dalam model gambar atau video, tugas Image Segmenter akan memblokir thread saat ini hingga selesai memproses gambar atau frame input.
Untuk contoh yang lebih lengkap tentang cara menjalankan inferensi Image Segmenter, lihat contoh kode.
Menangani dan menampilkan hasil
Image Segmenter menghasilkan daftar data Image
. Jika
output_type
adalah CATEGORY_MASK
, output-nya adalah daftar
yang berisi satu mask tersegmentasi sebagai gambar uint8. Piksel menunjukkan
indeks kategori yang dikenali dari gambar input. Jika output_type
adalah
CONFIDENCE_MASK
, output-nya adalah vektor dengan ukuran jumlah kategori. Setiap mask yang tersegmentasi adalah gambar float dalam rentang [0,1]
, yang mewakili skor keyakinan piksel yang termasuk dalam kategori.
Bagian berikut menunjukkan contoh data output dari tugas ini:
Keyakinan kategori
Gambar berikut menunjukkan visualisasi output tugas untuk mask
keyakinan kategori. Output mask keyakinan berisi nilai float antara
[0, 1]
.
Output mask keyakinan kategori dan gambar asli. Gambar sumber dari set data Pascal VOC 2012.
Nilai kategori
Gambar berikut menunjukkan visualisasi output tugas untuk mask nilai kategori. Rentang mask kategori adalah [0, 255]
dan setiap nilai piksel
mewakili indeks kategori pemenang dari output model. Indeks kategori
pemenang memiliki skor tertinggi di antara kategori yang dapat dikenali model.
Output mask kategori dan gambar asli. Gambar sumber dari set data Pascal VOC 2012.