راهنمای تقسیم بندی تصویر تعاملی برای اندروید

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

نمونه کد

مثال کد MediaPipe Tasks یک پیاده سازی ساده از یک برنامه Interactive Image Segmenter برای اندروید است. مثال با تصاویر انتخاب شده از گالری دستگاه کار می کند.

می‌توانید از برنامه به‌عنوان نقطه شروع برای برنامه اندرویدی خود استفاده کنید یا هنگام تغییر برنامه موجود به آن مراجعه کنید. کد نمونه Interactive Image Segmenter در GitHub میزبانی می شود.

کد را دانلود کنید

دستورالعمل های زیر به شما نشان می دهد که چگونه با استفاده از ابزار خط فرمان git یک کپی محلی از کد مثال ایجاد کنید.

برای دانلود کد نمونه:

  1. با استفاده از دستور زیر مخزن git را کلون کنید:
    git clone https://github.com/google-ai-edge/mediapipe-samples
    
  2. به صورت اختیاری، نمونه git خود را برای استفاده از پرداخت پراکنده پیکربندی کنید، بنابراین فقط فایل‌های برنامه نمونه Interactive Image Segmenter را داشته باشید:
    cd mediapipe
    git sparse-checkout init --cone
    git sparse-checkout set examples/interactive_segmentation/android
    

پس از ایجاد یک نسخه محلی از کد نمونه، می توانید پروژه را به اندروید استودیو وارد کرده و برنامه را اجرا کنید. برای دستورالعمل‌ها، به راهنمای راه‌اندازی برای Android مراجعه کنید.

اجزای کلیدی

فایل های زیر حاوی کد حیاتی برای این برنامه نمونه تقسیم بندی تصویر هستند:

  • InteractiveSegmentationHelper.kt - کار Interactive Image Segmenter را راه اندازی می کند و مدل و انتخاب نماینده را مدیریت می کند.
  • OverlayView.kt - نتایج تقسیم‌بندی را مدیریت و قالب‌بندی می‌کند.

برپایی

این بخش مراحل کلیدی را برای راه‌اندازی محیط توسعه و پروژه‌های کد برای استفاده از بخش‌بندی تصویر تعاملی توضیح می‌دهد. برای اطلاعات کلی در مورد تنظیم محیط توسعه خود برای استفاده از وظایف MediaPipe، از جمله الزامات نسخه پلت فرم، به راهنمای راه اندازی برای Android مراجعه کنید.

وابستگی ها

بخش تصویر تعاملی از کتابخانه com.google.mediapipe:tasks-vision استفاده می کند. این وابستگی را به فایل build.gradle پروژه توسعه برنامه اندروید خود اضافه کنید. وابستگی های مورد نیاز را با کد زیر وارد کنید:

dependencies {
    ...
    implementation 'com.google.mediapipe:tasks-vision:latest.release'
}

مدل

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

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

<dev-project-root>/src/main/assets

از متد BaseOptions.Builder.setModelAssetPath() برای تعیین مسیر استفاده شده توسط مدل استفاده کنید. این روش در مثال کد در قسمت بعدی نشان داده شده است.

در کد نمونه Interactive Image Segmenter، مدل در کلاس InteractiveSegmenterHelper.kt در تابع setupInteractiveSegmenter() تعریف شده است.

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

برای ایجاد کار می توانید از تابع createFromOptions استفاده کنید. تابع createFromOptions گزینه های پیکربندی شامل انواع خروجی ماسک را می پذیرد. برای اطلاعات بیشتر در مورد گزینه های پیکربندی، به نمای کلی پیکربندی مراجعه کنید.

InteractiveSegmenterOptions options =
  InteractiveSegmenterOptions.builder()
    .setBaseOptions(
      BaseOptions.builder().setModelAssetPath("model.tflite").build())
    .setOutputCategoryMask(true)
    .setOutputConfidenceMasks(false)
    .setResultListener((result, inputImage) -> {
         // Process the segmentation result here.
    })
    .setErrorListener((result, inputImage) -> {
         // Process the segmentation errors here.
    })    .build();
interactivesegmenter = InteractiveSegmenter.createFromOptions(context, options);

برای مثال دقیق تر از تنظیم این کار، تابع کلاس InteractiveSegmenterHelper setupInteractiveSegmenter() را ببینید.

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

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

نام گزینه شرح محدوده ارزش مقدار پیش فرض
outputCategoryMask اگر روی True تنظیم شود، خروجی شامل یک ماسک تقسیم بندی به عنوان یک تصویر uint8 است، که در آن هر مقدار پیکسل نشان می دهد که آیا پیکسل بخشی از شی واقع در ناحیه مورد نظر است یا خیر. { True, False } False
outputConfidenceMasks اگر روی True تنظیم شود، خروجی شامل یک ماسک تقسیم بندی به عنوان یک تصویر مقدار شناور است، که در آن هر مقدار شناور نشان دهنده اطمینان است که پیکسل بخشی از شی واقع در ناحیه مورد نظر است. { True, False } True
displayNamesLocale زبان برچسب‌ها را برای استفاده برای نام‌های نمایشی ارائه شده در فراداده مدل کار، در صورت وجود، تنظیم می‌کند. پیش فرض برای انگلیسی en است. با استفاده از TensorFlow Lite Metadata Writer API می‌توانید برچسب‌های محلی را به ابرداده یک مدل سفارشی اضافه کنید. کد محلی en
errorListener یک شنونده خطای اختیاری را تنظیم می کند. N/A تنظیم نشده

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

تقسیم‌کننده تصویر تعاملی با تصاویر کار می‌کند و وظیفه پیش‌پردازش ورودی داده‌ها، از جمله تغییر اندازه، چرخش و عادی‌سازی مقدار را انجام می‌دهد. شما باید تصویر ورودی را به یک شی com.google.mediapipe.framework.image.MPImage قبل از ارسال آن به کار تبدیل کنید.

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.
Image mpImage = new BitmapImageBuilder(bitmap).build();

در کد مثال Interactive Image Segmenter، آماده سازی داده در کلاس InteractiveSegmenterHelper توسط تابع segment() مدیریت می شود.

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

برای اجرای پیش‌بینی و تولید بخش‌ها، تابع segment را فراخوانی کنید. تکلیف Interactive Image Segmenter نواحی بخش شناسایی شده در تصویر ورودی را برمی گرداند.

RegionOfInterest roi = RegionOfInterest.create(
    NormalizedKeypoint.create(
        normX * it.width,
        normY * it.height
    )
);

ImageSegmenterResult segmenterResult = interactivesegmenter.segment(image, roi);

در کد مثال Interactive Image Segmenter، توابع segment در فایل InteractiveSegmenterHelper.kt تعریف شده اند.

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

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

بخش‌های زیر اطلاعات خروجی این کار را بیشتر توضیح می‌دهند:

ماسک دسته

تصاویر زیر تجسمی از خروجی کار را برای یک ماسک مقدار مقوله با ناحیه نقطه مورد علاقه نشان می دهد. هر پیکسل یک مقدار uint8 است که نشان می دهد آیا پیکسل بخشی از شی واقع در ناحیه مورد نظر است یا خیر. دایره سیاه و سفید روی تصویر دوم ناحیه مورد نظر انتخاب شده را نشان می دهد.

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

ماسک اعتماد به نفس

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