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

وظیفه 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(exception -> {
         // Process the segmentation errors here.
    })    
    .build();
interactivesegmenter = InteractiveSegmenter.createFromOptions(context, options);
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 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);