מדריך אינטראקטיבי לפילוח תמונות ב-Python

המשימה 'פילוח תמונות אינטראקטיבי' של MediaPipe מקבלת מיקום בתמונה ומעריך את הגבולות של של אובייקט במיקום הזה, והחזרת הפילוח של האובייקט בתור תמונה . ההוראות האלה מראות איך להשתמש ב'פלח התמונות האינטראקטיבי' ב-Python בשפת היעד. מידע נוסף על היכולות, המודלים וההגדרות האישיות אפשרויות במשימה הזאת, ראו סקירה כללית.

קוד לדוגמה

הקוד לדוגמה של 'פלח תמונות אינטראקטיבי' מספק הטמעה מלאה של ב-Python, לעיונך. הקוד הזה עוזר לכם לבדוק את המשימה הזו ולקבל התחלתם ליצור אפליקציה אינטראקטיבית משלכם לפילוח תמונות. אפשר להציג, להפעיל ולערוך את פילוח התמונות האינטראקטיבי קוד לדוגמה באמצעות דפדפן האינטרנט בלבד.

הגדרה

בקטע הזה מתוארים השלבים העיקריים להגדרת סביבת הפיתוח פרויקטי קוד שמותאמים במיוחד לשימוש ב'פלח תמונות אינטראקטיבי'. למידע כללי על להגדיר את סביבת הפיתוח לשימוש במשימות של 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

אפשרויות תצורה

המשימה הזו כוללת את אפשרויות ההגדרה הבאות לאפליקציות Python:

שם האפשרות תיאור טווח ערכים ערך ברירת מחדל
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

הכנת נתונים

מכינים את הקלט כקובץ תמונה או כמערך נומרי, ואז ממירים אותו לאובייקט 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)
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 ערך שמציין אם הפיקסל הוא חלק מהאובייקט שנמצא באזור עניין. העיגול בשחור-לבן בתמונה השנייה מציין את הבחירה תחום עניין (AOI).

פלט של התממה של התמונה והקטגוריה המקורית. תמונת המקור מ- פסקל VOC 2012 של הכיתובים.

מסכת ביטחון

הפלט של מסיכת סמך מכיל ערכים צפים בין [0, 1] ל- בכל ערוץ קלט של תמונה. ערכים גבוהים יותר מצביעים על ודאות גבוהה יותר פיקסל התמונה הוא חלק מהאובייקט שנמצא באזור העניין.