الدليل التفاعلي للصور في Android

تأخذ مهمة أداة تقسيم الصور التفاعلية MediaPipe موقعًا في صورة، وتقدر حدود كائنًا في هذا الموقع، وتُرجع تجزئة الكائن على أنه بيانات الصور. توضّح لك هذه التعليمات كيفية استخدام "أداة تقسيم الصور التفاعلية" مع تطبيقات Android يتوفر مثال الرمز الموضَّح في هذه التعليمات على GitHub. مزيد من المعلومات حول الإمكانات والنماذج وخيارات الضبط هذه المهمة، راجع نظرة عامة.

مثال على الرمز البرمجي

مثال رمز "مهام MediaPipe" هو تنفيذ بسيط لأداة تقسيم الصور التفاعلية تطبيق Android. يعمل هذا المثال مع الصور المحددة من معرض الجهاز.

يمكنك استخدام التطبيق كنقطة بداية لتطبيق Android الخاص بك، أو الرجوع إليه عند تعديل تطبيق حالي. تتم استضافة رمز نموذج أداة تقسيم الصور التفاعلية على GitHub.

تنزيل الرمز

توضّح لك التعليمات التالية كيفية إنشاء نسخة على الجهاز من هذا المثال. باستخدام أداة سطر الأوامر git.

لتنزيل نموذج الرمز:

  1. استنساخ مستودع git باستخدام الأمر التالي:
    git clone https://github.com/google-ai-edge/mediapipe-samples
    
  2. يمكنك اختياريًا ضبط مثيل git لاستخدام عملية الدفع المتناثر لذلك ليست لديك سوى ملفات تطبيق نموذج أداة تقسيم الصور التفاعلية:
    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);

للحصول على مثال أكثر تفصيلاً حول إعداد هذه المهمة، يمكنك الاطّلاع على InteractiveSegmenterHelper الفئة setupInteractiveSegmenter().

خيارات الإعداد

تتضمّن هذه المهمة خيارات الضبط التالية لتطبيقات Android:

اسم الخيار الوصف نطاق القيمة القيمة الافتراضية
outputCategoryMask في حال ضبط القيمة على True، سيشمل الناتج قناع تصنيف إلى شرائح. كصورة uint8، حيث تشير كل قيمة بكسل إلى ما إذا كانت وحدة البكسل جزءًا من الكائن الموجود في المنطقة محل الاهتمام. {True, False} False
outputConfidenceMasks في حال ضبط القيمة على True، سيشمل الناتج قناع تصنيف إلى شرائح. كصورة قيمة عائمة، حيث تمثل كل قيمة عائمة الثقة أن البكسل هو جزء من الكائن الموجود في المنطقة محط الاهتمام. {True, False} True
displayNamesLocale لتعيين لغة التسميات لاستخدامها في الأسماء المعروضة المقدمة في بيانات التعريف لنموذج المهمة، إن وجد. القيمة التلقائية هي en لمدة الإنجليزية. يمكنك إضافة تصنيفات مترجَمة إلى البيانات الوصفية لنموذج مخصّص. باستخدام 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 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);

في رمز نموذج أداة تقسيم الصور التفاعلية، يتم تحديد الدوال segment في InteractiveSegmenterHelper.kt الملف.

التعامل مع العملاء وعرض النتائج

عند تشغيل الاستنتاج، تعرض مهمة أداة تقسيم الصور التفاعلية الكائن ImageSegmenterResult الذي يحتوي على نتائج تصنيف المشروعات. قد يتضمن محتوى المخرج قناع فئة أو قناع الثقة أو كليهما بناءً على ما قمت بتعيينه ضبط المهمة.

توضح الأقسام التالية بيانات الإخراج من هذه المهمة بشكل أكبر:

قناع الفئة

تعرض الصور التالية تصورًا لمخرجات المهمة لفئة ما قناع قيمة مع تحديد منطقة نقطة اهتمام. كل بكسل هو uint8 تشير إلى ما إذا كانت وحدة البكسل جزءًا من الكائن الموجود في منطقة معين. تشير الدائرة البيضاء والأسود في الصورة الثانية إلى الصورة المحددة محط الاهتمام.

إخراج قناع الصورة الأصلي والفئة: صورة المصدر من Pascal VOC 2012 مجموعة البيانات

قناع الثقة

يحتوي ناتج قناع الثقة على قيم عائمة بين [0, 1] لـ كل قناة إدخال صورة. تشير القيم الأعلى إلى زيادة ثقة بكسل الصورة هو جزء من الكائن الموجود في المنطقة محل الاهتمام.