دليل تقسيم الصور في Python

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

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

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

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

يصف هذا القسم الخطوات الرئيسية لإعداد بيئة التطوير لترميز الصور خصيصًا لاستخدام أداة تقسيم الصور. للحصول على معلومات عامة عن إعداد بيئة التطوير الخاصة بك لاستخدام مهام 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'

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

base_options = BaseOptions(model_asset_path=model_path)

إنشاء المهمة

تستخدم مهمة أداة تقسيم صور MediaPipe الدالة create_from_options من أجل لإعداد المهمة. تقبل الدالة create_from_options القيم. لمعالجة خيارات التهيئة. لمزيد من المعلومات حول إعداد المهمة، راجِع خيارات الإعداد.

تُظهر هذه العينات أيضًا صيغ إنشاء المهمة للصور، وملفات الفيديو وأحداث الفيديو المباشرة.

صورة

BaseOptions = mp.tasks.BaseOptions
ImageSegmenter = mp.tasks.vision.ImageSegmenter
ImageSegmenterOptions = mp.tasks.vision.ImageSegmenterOptions
VisionRunningMode = mp.tasks.vision.RunningMode

# Create a image segmenter instance with the image mode:
options = ImageSegmenterOptions(
    base_options=BaseOptions(model_asset_path='/path/to/model.task'),
    running_mode=VisionRunningMode.IMAGE,
    output_category_mask=True)
with ImageSegmenter.create_from_options(options) as segmenter:
  

فيديو

BaseOptions = mp.tasks.BaseOptions
ImageSegmenter = mp.tasks.vision.ImageSegmenter
ImageSegmenterOptions = mp.tasks.vision.ImageSegmenterOptions
VisionRunningMode = mp.tasks.vision.RunningMode

# Create a image segmenter instance with the video mode:
options = ImageSegmenterOptions(
    base_options=BaseOptions(model_asset_path='/path/to/model.task'),
    running_mode=VisionRunningMode.VIDEO,
    output_category_mask=True)
with ImageSegmenter.create_from_options(options) as segmenter:
  

بث مباشر

BaseOptions = mp.tasks.BaseOptions
ImageSegmenter = mp.tasks.vision.ImageSegmenter
ImageSegmenterOptions = mp.tasks.vision.ImageSegmenterOptions
VisionRunningMode = mp.tasks.vision.RunningMode

# Create a image segmenter instance with the live stream mode:
def print_result(result: List[Image], output_image: Image, timestamp_ms: int):
    print('segmented masks size: {}'.format(len(result)))

options = ImageSegmenterOptions(
    base_options=BaseOptions(model_asset_path='/path/to/model.task'),
    running_mode=VisionRunningMode.VIDEO,
    output_category_mask=True)
with ImageSegmenter.create_from_options(options) as segmenter:
    

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

تشتمل هذه المهمة على خيارات الإعداد التالية لتطبيقات بايثون:

اسم الخيار الوصف نطاق القيمة القيمة الافتراضية
running_mode لضبط وضع التشغيل للمهمة. هناك ثلاثة وسائل النقل:

IMAGE: وضع إدخالات الصورة الفردية

فيديو: وضع الإطارات التي تم فك ترميزها لفيديو معيّن

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

تجهيز البيانات

قم بإعداد الإدخال كملف صورة أو صفيفة numpy، ثم تحويله إلى كائن mediapipe.Image. إذا كان الإدخال هو ملف فيديو أو البث المباشر من كاميرا الويب، يمكنك استخدام مكتبة خارجية مثل OpenCV لتحميل إطارات الإدخال بتنسيق numpy الصفائف.

صورة

# 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)
    

فيديو

# Use OpenCV’s VideoCapture to load the input video.
# Load the frame rate of the video using OpenCV’s CV_CAP_PROP_FPS
# You need the frame rate to calculate the timestamp for each frame.
# Loop through each frame in the video using VideoCapture#read()

# Convert the frame received from OpenCV to a MediaPipe’s Image object.
mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=numpy_frame_from_opencv)
    

بث مباشر

# Use OpenCV’s VideoCapture to start capturing from the webcam.
# Create a loop to read the latest frame from the camera using VideoCapture#read()

# Convert the frame received from OpenCV to a MediaPipe’s Image object.
mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=numpy_frame_from_opencv)
    

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

تنفيذ المهمة

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

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

صورة

# Perform image segmentation on the provided single image.
# The image segmenter must be created with the image mode.
segmented_masks = segmenter.segment(mp_image)
    

فيديو

# Perform image segmentation on the provided single image.
# The image segmenter must be created with the video mode.
segmented_masks = segmenter.segment_for_video(mp_image, frame_timestamp_ms)
    

بث مباشر

# Send live image data to perform image segmentation.
# The results are accessible via the `result_callback` provided in
# the `ImageSegmenterOptions` object.
# The image segmenter must be created with the live stream mode.
segmenter.segment_async(mp_image, frame_timestamp_ms)
    

يُرجى ملاحظة ما يلي:

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

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

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

تُنشئ "أداة تقسيم الصور" قائمة ببيانات Image. في حال حذف قيمة output_type هي CATEGORY_MASK، والنتيجة هي قائمة التي تحتوي على قناع مقطّع واحد كصورة uint8. تشير وحدة البكسل إلى فهرس الفئة المحددة للصورة المدخلة. إذا كانت السمة output_type CONFIDENCE_MASK، المخرج هو متجه بحجم رقم الفئة. على كل القناع المقسَّم هو صورة عائمة ضمن النطاق [0,1]، وتمثل درجة الثقة لوحدة البكسل التي تنتمي إلى الفئة.

تعرض الأقسام التالية أمثلة على بيانات الإخراج من هذه المهمة:

ثقة الفئة

تعرض الصور التالية تصورًا لمخرجات المهمة لفئة ما قناع الثقة. يحتوي ناتج قناع الثقة على قيم عائمة بين [0, 1]

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

قيمة الفئة

تعرض الصور التالية تصورًا لمخرجات المهمة لفئة ما قناع القيمة. نطاق قناع الفئة هو [0, 255] وقيمة كل قيمة بكسل. مؤشر الفئة الفائز لمخرجات النموذج. الفئة الفائزة على أعلى درجة بين الفئات التي يمكن أن يتعرف عليها النموذج.

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