تأخذ مهمة "أداة تقسيم الصور التفاعلية" من MediaPipe موقعًا في صورة، وتُقدّر حدود عنصر في ذلك الموقع، وتُعيد تقسيم العنصر على هيئة بيانات صورة. توضِّح لك هذه التعليمات كيفية استخدام أداة "تقسيم الصور التفاعلية" مع تطبيقات Android. يتوفّر مثال الرمز البرمجي الموضّح في هذه التعليمات على GitHub. لمزيد من المعلومات عن الإمكانات والنماذج وخيارات الضبط لهذه المهمة، اطّلِع على نظرة عامة.
مثال على الرمز البرمجي
مثال التعليمات البرمجية لـ MediaPipe Tasks هو تطبيق بسيط لقسمة الصور التفاعلي على نظام التشغيل Android. يعمل المثال مع الصور التي يتم اختيارها من معرض الصور على الجهاز.
يمكنك استخدام التطبيق كنقطة بداية لتطبيق Android الخاص بك، أو الرجوع إليه عند تعديل تطبيق حالي. يتم استضافة مثال رمز "أداة تقسيم الصور التفاعلية" على 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" وتشغيل التطبيق. للحصول على التعليمات، اطّلِع على دليل الإعداد لنظام التشغيل Android.
المكونات الرئيسية
تحتوي الملفات التالية على الرمز البرمجي المهم لهذا المثال على تطبيق معالجة الصور:
- InteractiveSegmentationHelper.kt: تُستخدَم لإعداد مهمة "أداة تقسيم الصور التفاعلية" ومعالجة اختيار النموذج والوكيل.
- OverlayView.kt: تُستخدَم هذه الفئة لمعالجة نتائج التقسيم وتنسيقها.
ضبط إعدادات الجهاز
يصف هذا القسم الخطوات الرئيسية لإعداد بيئة التطوير و مشاريع الرموز البرمجية لاستخدام أداة "تقسيم الصور التفاعلي". للحصول على معلومات عامة عن إعداد بيئة التطوير لاستخدام مهام MediaPipe، بما في ذلك متطلبات إصدار النظام الأساسي، يُرجى الاطّلاع على دليل الإعداد لنظام التشغيل Android.
التبعيات
تستخدِم أداة "تقسيم الصور التفاعلية" مكتبة com.google.mediapipe:tasks-vision
. أضِف هذا الاعتماد إلى ملف build.gradle
في
مشروع تطوير تطبيق Android. استورِد العناصر التابعة المطلوبة باستخدام
الرمز التالي:
dependencies {
...
implementation 'com.google.mediapipe:tasks-vision:latest.release'
}
الطراز
تتطلّب مهمة "أداة تقسيم الصور التفاعلية" من MediaPipe نموذجًا مدرَّبًا متوافقًا مع هذه المهمة. لمزيد من المعلومات عن النماذج المدربة المتاحة لأداة "تقسيم الصور التفاعلي"، اطّلِع على قسم "النماذج" ضمن النظرة العامة على المهمة.
اختَر النموذج ونزِّله، ثم احفظه في دليل مشروعك:
<dev-project-root>/src/main/assets
استخدِم الطريقة BaseOptions.Builder.setModelAssetPath()
لتحديد المسار
الذي يستخدمه النموذج. يتم عرض هذه الطريقة في مثال الرمز البرمجي في القسم التالي.
في مثال التعليمات البرمجية لميزة "تقسيم الصور التفاعلي"، يتم تعريف النموذج في فئة 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);
للحصول على مثال أكثر تفصيلاً لإعداد هذه المهمة، اطّلِع على دالة setupInteractiveSegmenter()
في فئة
InteractiveSegmenterHelper
.
خيارات الضبط
تتضمّن هذه المهمة خيارات الضبط التالية لتطبيقات Android:
اسم الخيار | الوصف | نطاق القيمة | القيمة التلقائية |
---|---|---|---|
outputCategoryMask |
في حال ضبط القيمة على True ، يتضمّن الإخراج قناع تقسيم
كصورة uint8، حيث تشير كل قيمة بكسل إلى ما إذا كان البكسل جزءًا من
الجسم الموجود في منطقة الاهتمام. |
{True, False } |
False |
outputConfidenceMasks |
في حال ضبطه على True ، يتضمّن الناتج قناع تقسيم
كصورة قيمة عائمة، حيث تمثّل كل قيمة عائمة ثقة
بأنّ البكسل هو جزء من الجسم الواقع في منطقة الاهتمام. |
{True, False } |
True |
displayNamesLocale |
لضبط لغة التصنيفات لاستخدامها في الأسماء المعروضة المقدَّمة في
البيانات الوصفية لنموذج المهمة، في حال توفّرها. القيمة التلقائية هي en لعبارة
English. يمكنك إضافة تصنيفات مترجَمة إلى البيانات الوصفية لنموذج مخصّص
باستخدام واجهة برمجة التطبيقات TensorFlow Lite Metadata Writer API.
| رمز اللغة | en |
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();
في مثال رمز "أداة تقسيم الصور التفاعلية"، تتم معالجة إعداد البيانات في فئة
InteractiveSegmenterHelper
باستخدام الدالة segment()
.
تنفيذ المهمة
استخدِم الدالة segment
لتنفيذ التوقّعات وإنشاء الشرائح.
تُعيد مهمة "أداة تقسيم الصور التفاعلية" مناطق الشرائح المحدّدة ضمن
الصورة المُدخلة.
RegionOfInterest roi = RegionOfInterest.create( NormalizedKeypoint.create( normX * it.width, normY * it.height ) ); ImageSegmenterResult segmenterResult = interactivesegmenter.segment(image, roi);
في مثال التعليمات البرمجية لخدمة "تقسيم الصور التفاعلي"، يتم تعريف دوال segment
في ملف
InteractiveSegmenterHelper.kt
.
معالجة النتائج وعرضها
عند تنفيذ الاستنتاج، تُعرِض مهمة "أداة تقسيم الصور التفاعلية" عنصرًا من نوع
ImageSegmenterResult
يحتوي على نتائج مهمة
التقسيم. قد يتضمّن محتوى الإخراج قناعًا للفئة أو
قناعًا للثقة أو كليهما، وذلك استنادًا إلى ما ضبطته عند
ضبط المهمة.
توضّح الأقسام التالية بيانات الإخراج من هذه المهمة بشكل أكبر:
قناع الفئة
تعرض الصور التالية عرضًا مرئيًا لمنتج المهمة لقناع قيمة
الفئة مع الإشارة إلى منطقة نقطة الاهتمام. كل بكسل هو uint8
قيمة تشير إلى ما إذا كان البكسل جزءًا من الجسم المُدرَج في منطقة
الاهتمام. تشير الدائرة السوداء والبيضاء في الصورة الثانية إلى
منطقة الاهتمام المحدّدة.
الصورة الأصلية ونتيجة قناع الفئة الصورة المصدر من مجموعة بيانات Pascal VOC 2012.
قناع الثقة
يحتوي الناتج لقناع الثقة على قيم عائمة تتراوح بين [0, 1]
لكل قناة إدخال صورة. تشير القيم الأعلى إلى ثقة أكبر بأنّ بكسل الصورة هو جزء من الجسم الواقع في منطقة الاهتمام.