راهنمای بخش بندی تصویر برای پایتون

وظیفه MediaPipe Image Segmenter به شما امکان می دهد تصاویر را بر اساس دسته های از پیش تعریف شده برای اعمال جلوه های بصری مانند محو کردن پس زمینه به مناطق تقسیم کنید. این دستورالعمل به شما نشان می دهد که چگونه از Image Segmenter با زبان پایتون استفاده کنید. برای اطلاعات بیشتر در مورد قابلیت‌ها، مدل‌ها و گزینه‌های پیکربندی این کار، به نمای کلی مراجعه کنید.

نمونه کد

کد مثال برای Image Segmenter اجرای کامل این کار را در پایتون برای مرجع شما فراهم می کند. این کد به شما کمک می کند تا این کار را آزمایش کنید و شروع به ساخت اپلیکیشن قطعه ساز تصویر خود کنید. می‌توانید کد نمونه Image Segmenter را فقط با استفاده از مرورگر وب خود مشاهده، اجرا و ویرایش کنید.

برپایی

این بخش مراحل کلیدی را برای راه اندازی محیط توسعه و پروژه های کد مخصوصاً برای استفاده از Image Segmenter توضیح می دهد. برای اطلاعات کلی در مورد تنظیم محیط توسعه خود برای استفاده از وظایف MediaPipe، از جمله الزامات نسخه پلت فرم، به راهنمای راه اندازی برای Python مراجعه کنید. می توانید کد منبع این مثال را در GitHub مرور کنید

بسته ها

وظیفه MediaPipe Image Segmenter به بسته mediapipe نیاز دارد. می توانید وابستگی های مورد نیاز را با دستور زیر نصب کنید:

$ python -m pip install mediapipe

واردات

برای دسترسی به توابع تکلیف Image Segmenter کلاس های زیر را وارد کنید:

import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import vision

مدل

وظیفه MediaPipe Image Segmenter به یک مدل آموزش دیده نیاز دارد که با این کار سازگار باشد. برای اطلاعات بیشتر در مورد مدل‌های آموزش‌دیده موجود برای Image Segmenter، بخش مدل‌های نمای کلی کار را ببینید.

مدل را انتخاب و دانلود کنید و سپس آن را در فهرست پروژه خود ذخیره کنید:

model_path = '/absolute/path/to/model.tflite'

مسیر مدل را در پارامتر Model Name مانند شکل زیر مشخص کنید:

base_options = BaseOptions(model_asset_path=model_path)

کار را ایجاد کنید

وظیفه MediaPipe Image Segmenter از create_from_options برای تنظیم کار استفاده می کند. تابع create_from_options مقادیری را برای گزینه‌های پیکربندی می‌پذیرد. برای اطلاعات بیشتر در مورد پیکربندی کار، گزینه های پیکربندی را ببینید.

این نمونه‌ها همچنین تغییرات ساختار کار را برای تصاویر، فایل‌های ویدیویی و جریان‌های ویدیویی زنده نشان می‌دهند.

تصویر

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:
  

ویدئو

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:
  

پخش زنده

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:
    

گزینه های پیکربندی

این کار دارای گزینه های پیکربندی زیر برای برنامه های پایتون است:

نام گزینه شرح محدوده ارزش مقدار پیش فرض
running_mode حالت اجرا را برای کار تنظیم می کند. سه حالت وجود دارد:

IMAGE: حالت برای ورودی های تک تصویر.

VIDEO: حالت برای فریم های رمزگشایی شده یک ویدیو.

LIVE_STREAM: حالت پخش زنده داده های ورودی، مانند دوربین. در این حالت، resultListener باید فراخوانی شود تا شنونده ای را برای دریافت نتایج به صورت ناهمزمان تنظیم کند.
{ IMAGE, VIDEO, LIVE_STREAM } IMAGE
output_category_mask اگر روی True تنظیم شود، خروجی شامل یک ماسک تقسیم بندی به عنوان یک تصویر uint8 است، که در آن هر مقدار پیکسل، مقدار دسته برنده را نشان می دهد. { True, False } False
output_confidence_masks اگر روی True تنظیم شود، خروجی شامل یک ماسک تقسیم‌بندی به‌عنوان تصویر مقدار شناور است، که در آن هر مقدار شناور نقشه امتیاز اطمینان دسته را نشان می‌دهد. { True, False } True
display_names_locale زبان برچسب‌ها را برای استفاده برای نام‌های نمایشی ارائه شده در فراداده مدل کار، در صورت وجود، تنظیم می‌کند. پیش فرض برای انگلیسی en است. با استفاده از TensorFlow Lite Metadata Writer API می‌توانید برچسب‌های محلی را به ابرداده یک مدل سفارشی اضافه کنید. کد محلی en
result_callback شنونده نتیجه را طوری تنظیم می‌کند که وقتی قطعه‌ساز تصویر در حالت پخش زنده است، نتایج تقسیم‌بندی را به صورت ناهمزمان دریافت کند. فقط زمانی قابل استفاده است که حالت اجرا روی LIVE_STREAM تنظیم شده باشد N/A N/A

داده ها را آماده کنید

ورودی خود را به عنوان یک فایل تصویری یا یک آرایه numpy آماده کنید، سپس آن را به یک شی mediapipe.Image تبدیل کنید. اگر ورودی شما یک فایل ویدیویی یا پخش زنده از یک وب کم است، می توانید از یک کتابخانه خارجی مانند OpenCV برای بارگیری فریم های ورودی خود به عنوان آرایه های ناتوان استفاده کنید.

تصویر

# 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)
    

ویدئو

# 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)
    

پخش زنده

# 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)
    

برای مثال کدی که آماده سازی داده ها را برای Image Segmenter نشان می دهد، به مثال کد مراجعه کنید.

وظیفه را اجرا کنید

Image Segmenter از توابع segment ، segment_for_video و segment_async برای استنتاج استفاده می کند. برای تقسیم بندی تصویر، این شامل پیش پردازش داده های ورودی، اجرای مدل تقسیم بندی و پس پردازش خروجی های مدل خام به ماسک های قطعه بندی شده است.

مثال های کد زیر نحوه اجرای پردازش با مدل وظیفه را نشان می دهد.

تصویر

# Perform image segmentation on the provided single image.
# The image segmenter must be created with the image mode.
segmented_masks = segmenter.segment(mp_image)
    

ویدئو

# 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)
    

پخش زنده

# 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)
    

به موارد زیر توجه کنید:

  • هنگام اجرا در حالت ویدیو یا حالت پخش زنده، باید به وظیفه Image Segmenter مهر زمانی قاب ورودی را نیز ارائه دهید.
  • هنگام اجرا در تصویر یا مدل ویدیو، وظیفه Image Segmenter رشته فعلی را مسدود می کند تا زمانی که پردازش تصویر یا فریم ورودی به پایان برسد.

برای مثال کامل‌تر از اجرای استنتاج‌های Image Segmenter، به مثال کد مراجعه کنید.

کنترل و نمایش نتایج

Image Segmenter لیستی از داده های Image را خروجی می دهد. اگر output_type CATEGORY_MASK باشد، خروجی لیستی است که حاوی ماسک تک بخش به عنوان تصویر uint8 است. پیکسل نمایه طبقه بندی تشخیص داده شده تصویر ورودی را نشان می دهد. اگر output_type CONFIDENCE_MASK باشد، خروجی یک بردار با اندازه شماره دسته است. هر ماسک قطعه بندی شده یک تصویر شناور در محدوده [0,1] است که نشان دهنده امتیاز اطمینان پیکسل متعلق به دسته است.

بخش های زیر نمونه هایی از داده های خروجی از این کار را نشان می دهد:

اعتماد به دسته

تصاویر زیر تجسمی از خروجی کار را برای ماسک اطمینان دسته بندی نشان می دهد. خروجی ماسک اطمینان حاوی مقادیر شناور بین [0, 1] است.

خروجی ماسک اطمینان تصویر اصلی و دسته. تصویر منبع از مجموعه داده پاسکال VOC 2012 .

ارزش دسته

تصاویر زیر تصویری از خروجی کار را برای ماسک مقدار دسته نشان می دهد. محدوده ماسک دسته [0, 255] است و هر مقدار پیکسل نشان دهنده شاخص دسته برنده خروجی مدل است. شاخص دسته برنده بالاترین امتیاز را در بین دسته‌هایی دارد که مدل می‌تواند تشخیص دهد.

خروجی ماسک تصویر اصلی و دسته. تصویر منبع از مجموعه داده پاسکال VOC 2012 .