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

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

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

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

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

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

الطرود

تتطلّب مهمة MediaPipe Interactive Image Segmenter حزمة 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

خيارات الضبط

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

اسم الخيار الوصف نطاق القيمة القيمة التلقائية
output_category_mask في حال ضبط القيمة على True، يتضمّن الإخراج قناع تقسيم كصورة uint8، حيث تشير كل قيمة بكسل إلى ما إذا كان البكسل جزءًا من الجسم الموجود في منطقة الاهتمام. {True, False} False
output_confidence_masks في حال ضبطه على True، يتضمّن الناتج قناع تقسيم كصورة قيمة عائمة، حيث تمثّل كل قيمة عائمة ثقة بأنّ البكسل هو جزء من الجسم الواقع في منطقة الاهتمام. {True, False} True
display_names_locale لضبط لغة التصنيفات لاستخدامها في الأسماء المعروضة المقدَّمة في البيانات الوصفية لنموذج المهمة، في حال توفّرها. القيمة التلقائية هي en لعبارة English. يمكنك إضافة تصنيفات مترجَمة إلى البيانات الوصفية لنموذج مخصّص باستخدام واجهة برمجة التطبيقات TensorFlow Lite Metadata Writer 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] لكل قناة إدخال صورة. تشير القيم الأعلى إلى ثقة أكبر بأنّ بكسل الصورة هو جزء من الجسم الواقع في منطقة الاهتمام.