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