دليل تقسيم الصور التفاعلي في بايثون

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

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

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

ضبط إعدادات الجهاز

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

الطرود

تتطلّب مهمة MediaPipe التفاعلية لتقسيم الصور التفاعلية حزمة mediapipe. يمكنك تثبيت التبعيات المطلوبة باستخدام الأمر التالي:

$ python -m pip install mediapipe

عمليات الاستيراد

قم باستيراد الفئات التالية للوصول إلى وظائف مهمة أداة تقسيم الصور التفاعلية:

import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import vision

الطراز

تحتاج مهمة أداة تقسيم الصور التفاعلية MediaPipe إلى نموذج مدرَّب متوافق مع هذه المهمة. لمزيد من المعلومات حول النماذج المدربة المتاحة لأداة تقسيم الصور التفاعلية، راجِع قسم النماذج نظرة عامة على المهام.

حدد النموذج ونزّله ثم قم بتخزينه في دليل المشروع:

model_path = '/absolute/path/to/model.tflite'

حدِّد مسار النموذج ضمن معلَمة model_asset_path، كما هو موضّح أدناه:

base_options = BaseOptions(model_asset_path=model_path)

إنشاء المهمة

تستخدم مهمة MediaPipe التفاعلية لتقسيم الصور التفاعلية الدالة create_from_options لإعداد المهمة. تقبل الدالة create_from_options قيمًا لخيارات الضبط التي يجب معالجتها. لمزيد من المعلومات حول خيارات الضبط، راجِع خيارات الضبط. يوضح الرمز التالي كيفية إنشاء هذه المهمة وتكوينها.

BaseOptions = mp.tasks.BaseOptions
InteractiveSegmenter = mp.tasks.vision.InteractiveSegmenter
InteractiveSegmenterOptions = mp.tasks.vision.InteractiveSegmenterOptions
VisionRunningMode = mp.tasks.vision.RunningMode

# Create a image segmenter instance with the image mode:
options = InteractiveSegmenterOptions(
    base_options=BaseOptions(model_asset_path='/path/to/model.task'),
    running_mode=VisionRunningMode.IMAGE,
    output_type=InteractiveSegmenterOptions.OutputType.CATEGORY_MASK)
with InteractiveSegmenter.create_from_options(options) as segmenter:
# segmenter is initialized and ready to use

خيارات الضبط

تتضمن هذه المهمة خيارات التهيئة التالية لتطبيقات بايثون:

اسم الخيار الوصف نطاق القيمة القيمة التلقائية
output_category_mask في حال ضبط هذه السمة على True، ستتضمّن الناتج قناع تقسيم على شكل صورة uint8، حيث تشير كل قيمة بكسل إلى ما إذا كان البكسل جزءًا من العنصر الواقع في المنطقة محط الاهتمام. {True, False} False
output_confidence_masks في حال ضبط هذه القيمة على True، يشتمل الناتج على قناع تصنيف على أنّه صورة ذات قيمة عائمة، حيث تمثل كل قيمة عائمة مستوى الثقة بأنّ وحدة البكسل هي جزء من الكائن في المنطقة محط الاهتمام. {True, False} True
display_names_locale تحدِّد هذه السياسة لغة التصنيفات التي سيتم استخدامها للأسماء المعروضة في البيانات الوصفية لنموذج المهمة، إذا كان ذلك متاحًا. الإعداد التلقائي هو en للغة الإنجليزية. يمكنك إضافة تصنيفات مترجَمة إلى البيانات الوصفية لنموذج مخصّص باستخدام TensorFlow Lite Metadata Scriptr API. رمز اللغة en

إعداد البيانات

جهِّز الإدخال كملف صورة أو صفيفة numpy، ثم حوّلها إلى كائن mediapipe.Image.

# Load the input image from an image file.
mp_image = mp.Image.create_from_file('/path/to/image')

# Load the input image from a numpy array.
mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=numpy_image)

للاطّلاع على مثال الرمز البرمجي الذي يعرض طريقة تحضير بيانات أداة تقسيم الصور التفاعلية، راجِع مثال الرمز البرمجي.

تنفيذ المهمة

تستخدم "أداة تقسيم الصور التفاعلية" الدالة segment لعرض الاستنتاجات. ولتصنيف الصور، يشمل ذلك المعالجة المسبقة لبيانات الإدخال وتشغيل نموذج التصنيف ثم المعالجة اللاحقة لمخرجات النموذج الأولي للأقنعة المقسّمة.

يوضّح مثال الرمز البرمجي التالي كيفية تنفيذ المعالجة باستخدام نموذج المهمة.

RegionOfInterest = vision.InteractiveSegmenterRegionOfInterest
# Perform image segmentation on the provided single image.
# The image segmenter must be created with the image mode.
roi = RegionOfInterest(format=RegionOfInterest.Format.KEYPOINT,
                          keypoint=NormalizedKeypoint(x, y))
segmented_masks = segmenter.segment(mp_image, roi)

للاطّلاع على مثال أكثر اكتمالاً لتشغيل استنتاجات أداة تقسيم الصور التفاعلية، يمكنك الاطّلاع على مثال الرمز البرمجي.

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

نتائج المخرجات لميزة "أداة تقسيم الصور التفاعلية" هي قائمة تضم بيانات Image، وقد تتضمن قناع فئة أو أقنعة ثقة أو كليهما، وذلك بناءً على ما تم ضبطه عند ضبط المهمة. في حال ضبط output_category_mask على True، يكون الناتج قائمة تحتوي على قناع واحد مقسّم إلى صورة uint8. وتشير قيمة البكسل إلى ما إذا كان جزءًا من الكائن في المنطقة محل الاهتمام. فهرس فئة معروف للصورة المدخلة. في حال ضبط output_confidence_masks على True، يكون الناتج قائمة بالقنوات التي تحتوي على قيم وحدات بكسل ضمن النطاق [0,1] والتي تمثل درجة ثقة البكسل الذي ينتمي إلى العنصر في المنطقة محط الاهتمام.

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

قناع الفئة

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

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

قناع الثقة

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