Tugas Segmentasi Gambar MediaPipe memungkinkan Anda membagi gambar ke dalam wilayah berdasarkan kategori untuk menerapkan efek visual seperti pemburaman latar belakang. Ini petunjuk menunjukkan cara menggunakan Image Segmenter dengan bahasa Python. Sebagai informasi lebih lanjut tentang kemampuan, model, dan opsi konfigurasi dari tugas ini, lihat Ringkasan.
Contoh kode
Kode contoh untuk Segmentasi Gambar menyediakan penerapan lengkap dari di Python untuk referensi Anda. Kode ini membantu Anda menguji tugas ini dan mendapatkan membuat aplikasi pengelompok gambar Anda sendiri. Anda dapat melihat, menjalankan, dan edit Segmentasi Gambar kode contoh hanya dengan menggunakan {i>browser<i} web.
Penyiapan
Bagian ini menjelaskan langkah-langkah utama untuk menyiapkan lingkungan pengembangan dan kode project secara khusus untuk menggunakan Segmentasi Gambar. 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 Segmentasi Gambar:
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 Anda. Untuk informasi selengkapnya tentang model terlatih yang tersedia untuk Segmentasi Gambar, lihat bagian ringkasan tugas, yaitu Models.
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 menangani opsi konfigurasi. Untuk informasi lebih lanjut
tentang konfigurasi tugas,
lihat Opsi konfigurasi.
Contoh-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
moda: IMAGE: Mode untuk input gambar tunggal. VIDEO: Mode untuk frame video yang didekode. LIVE_STREAM: Mode untuk live stream input besar, seperti dari kamera. Dalam mode ini, resultListener harus dipanggil untuk menyiapkan pemroses yang akan 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 kategori pemenang
dengan sejumlah nilai. |
{True, False } |
False |
output_confidence_masks |
Jika ditetapkan ke True , output akan menyertakan mask segmentasi
sebagai gambar nilai {i>float<i}, dengan setiap nilai {i>float<i} mewakili tingkat keyakinan
skor kategori kategori. |
{True, False } |
True |
display_names_locale |
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 |
result_callback |
Menetapkan pemroses hasil untuk menerima hasil segmentasi
secara asinkron saat pembagi gambar berada dalam mode LIVE_STREAM .
Hanya dapat digunakan saat mode lari disetel ke LIVE_STREAM |
T/A | T/A |
Menyiapkan data
Siapkan input Anda sebagai
file gambar atau array numpy,
lalu konversikan menjadi objek mediapipe.Image
. Jika input Anda adalah file video
atau melakukan live stream dari webcam, Anda dapat menggunakan library eksternal seperti
OpenCV untuk memuat frame input sebagai 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 Segmentasi Gambar, lihat contoh kode.
Menjalankan tugas
Segmentasi Gambar menggunakan segment
, segment_for_video
, dan segment_async
fungsi untuk memicu inferensi. Untuk segmentasi gambar, diperlukan
pra-pemrosesan data, menjalankan model segmentasi, dan pascapemrosesan,
output model mentah ke mask 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 dalam mode video atau mode live stream, Anda juga harus berikan stempel waktu {i>frame<i} input ke tugas Image Segmenter.
- Saat berjalan dalam model gambar atau video, tugas Segmentasi Gambar akan memblokir utas saat ini hingga selesai memproses gambar input atau {i>frame<i}.
Untuk contoh yang lebih lengkap dari menjalankan inferensi Segmentasi Gambar, lihat contoh kode.
Menangani dan menampilkan hasil
Segmentasi Gambar menghasilkan daftar data Image
. Jika
output_type
adalah CATEGORY_MASK
, output-nya adalah daftar
yang berisi mask bersegmen tunggal sebagai gambar uint8. Piksel menunjukkan
indeks kategori gambar input yang dikenali. Jika output_type
adalah
CONFIDENCE_MASK
, output-nya adalah vektor dengan ukuran nomor kategori. Masing-masing
mask yang tersegmentasi adalah gambar mengambang dalam rentang [0,1]
, yang menunjukkan
skor keyakinan piksel yang termasuk dalam kategori tersebut.
Bagian berikut menunjukkan contoh data output dari tugas ini:
Tingkat keyakinan kategori
Gambar berikut menunjukkan visualisasi output tugas untuk suatu kategori
masker untuk kepercayaan diri. Output samaran berisi nilai float antara
[0, 1]
.
Output masker keyakinan kategori dan gambar asli. Gambar sumber dari Pascal VOC 2012 set data.
Nilai kategori
Gambar berikut menunjukkan visualisasi output tugas untuk suatu kategori
mask nilai. Rentang mask kategori adalah [0, 255]
dan setiap nilai piksel
mewakili indeks kategori pemenang dari output model. Kategori pemenang
memiliki skor tertinggi di antara kategori yang dapat dikenali model.
Output mask kategori dan gambar asli. Gambar sumber dari Pascal VOC 2012 set data.