وظیفه MediaPipe Interactive Image Segmenter مکانی را در یک تصویر می گیرد، مرزهای یک شی را در آن مکان تخمین می زند، و تقسیم بندی شی را به عنوان داده تصویر برمی گرداند. این دستورالعمل ها به شما نشان می دهد که چگونه از بخش تصویر تعاملی با برنامه های اندروید استفاده کنید. نمونه کد توضیح داده شده در این دستورالعمل ها در GitHub موجود است. برای اطلاعات بیشتر در مورد قابلیتها، مدلها و گزینههای پیکربندی این کار، به نمای کلی مراجعه کنید.
نمونه کد
مثال کد MediaPipe Tasks یک پیاده سازی ساده از یک برنامه Interactive Image Segmenter برای اندروید است. مثال با تصاویر انتخاب شده از گالری دستگاه کار می کند.
میتوانید از برنامه بهعنوان نقطه شروع برای برنامه اندرویدی خود استفاده کنید یا هنگام تغییر برنامه موجود به آن مراجعه کنید. کد نمونه Interactive Image Segmenter در GitHub میزبانی می شود.
کد را دانلود کنید
دستورالعمل های زیر به شما نشان می دهد که چگونه با استفاده از ابزار خط فرمان git یک کپی محلی از کد مثال ایجاد کنید.
برای دانلود کد نمونه:
- با استفاده از دستور زیر مخزن git را کلون کنید:
git clone https://github.com/google-ai-edge/mediapipe-samples
- به صورت اختیاری، نمونه 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 میتوانید برچسبهای محلی را به ابرداده یک مدل سفارشی اضافه کنید.errorListener
داده ها را آماده کنید
تقسیمکننده تصویر تعاملی با تصاویر کار میکند و وظیفه پیشپردازش ورودی دادهها، از جمله تغییر اندازه، چرخش و عادیسازی مقدار را انجام میدهد. شما باید تصویر ورودی را به یک شی 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. MPImage mpImage = new BitmapImageBuilder(bitmap).build();
RegionOfInterest roi = RegionOfInterest.create( NormalizedKeypoint.create( normX * it.width, normY * it.height ) ); ImageSegmenterResult segmenterResult = interactivesegmenter.segment(image, roi);