המשימה 'פילוח תמונות אינטראקטיבי' של MediaPipe מקבלת מיקום בתמונה ומעריך את הגבולות של של אובייקט במיקום הזה, והחזרת הפילוח של האובייקט בתור של נתוני תמונה. ההוראות האלה מראות איך להשתמש ב'פלח התמונות האינטראקטיבי' עם אפליקציות ל-Android. הקוד לדוגמה שמתואר בהוראות האלה זמין GitHub. מידע נוסף על היכולות, המודלים ואפשרויות ההגדרה במשימה הזאת, ראו סקירה כללית.
קוד לדוגמה
דוגמה לקוד של MediaPipe Tasks היא הטמעה פשוטה של 'פלח תמונות אינטראקטיבי' לאפליקציה ל-Android. הדוגמה פועלת עם תמונות שנבחרו מגלריית המכשיר.
אפשר להשתמש באפליקציה כנקודת התחלה של אפליקציה משלכם ל-Android, או להתייחס אליה כשמשנים אפליקציה קיימת. הקוד לדוגמה של 'פלח תמונות אינטראקטיבי' מתארח בדף GitHub.
להורדת הקוד
בהוראות הבאות מוסבר איך ליצור עותק מקומי של הדוגמה באמצעות כלי שורת הפקודה git.
כדי להוריד את הקוד לדוגמה:
- משכפלים את מאגר ה-Git באמצעות הפקודה הבאה:
git clone https://github.com/google-ai-edge/mediapipe-samples
- אפשר גם להגדיר את ה-Git למכונת ה-Git לשימוש בקופה מועטה,
יהיו לכם רק את הקבצים של האפליקציה לדוגמה של 'פלח תמונות אינטראקטיבי':
cd mediapipe git sparse-checkout init --cone git sparse-checkout set examples/interactive_segmentation/android
אחרי שיוצרים גרסה מקומית של הקוד לדוגמה, אפשר לייבא את הפרויקט אל Android Studio ולהריץ את האפליקציה. הוראות מופיעות מדריך ההגדרה ל-Android.
רכיבים מרכזיים
הקבצים הבאים מכילים את הקוד החשוב של התמונה הזו אפליקציה לדוגמה לפילוח:
- InteractiveSegmentationHelper.kt – הפעלת המשימה 'פילוח תמונות אינטראקטיבי' ומטפלת במודל ובהאצלת הגישה בחירה.
- OverlayView.kt - מטפל בתוצאות הפילוח ומעצב אותן.
הגדרה
בקטע הזה מתוארים השלבים העיקריים להגדרת סביבת הפיתוח כדי להשתמש ב'פלח תמונות אינטראקטיבי'. למידע כללי על להגדיר את סביבת הפיתוח לשימוש במשימות של MediaPipe, כולל הדרישות לגרסת הפלטפורמה. מדריך ההגדרה ל-Android.
יחסי תלות
פילוח התמונות האינטראקטיבי משתמש בספרייה com.google.mediapipe:tasks-vision
. הוספת הפריט
שתלויות בקובץ build.gradle
של
פרויקט של פיתוח אפליקציות ל-Android. לייבא את יחסי התלות הנדרשים באמצעות
את הקוד הבא:
dependencies {
...
implementation 'com.google.mediapipe:tasks-vision:latest.release'
}
דגם
למשימה 'פלח תמונות אינטראקטיבי' של MediaPipe נדרש מודל מאומן שתואם למשימה הזו. לקבלת מידע נוסף על מודלים זמינים מאומנים של פילוח תמונות אינטראקטיבי, אפשר לעיין במאמר בסקירה הכללית על המשימה בקטע 'מודלים'.
בוחרים את המודל, מורידים אותו ושומרים אותו בספריית הפרויקט:
<dev-project-root>/src/main/assets
משתמשים בשיטה BaseOptions.Builder.setModelAssetPath()
כדי לציין את הנתיב
שבו משתמש המודל. אפשר לראות את השיטה הזאת בדוגמה של הקוד
.
במקטע התמונות האינטראקטיבי
example code,
המודל מוגדר בInteractiveSegmenterHelper.kt
בפונקציה setupInteractiveSegmenter()
.
יצירת המשימה
אפשר להשתמש בפונקציה createFromOptions
כדי ליצור את המשימה.
הפונקציה createFromOptions
מקבלת אפשרויות הגדרה כולל
לבצע אנונימיזציה של סוגי הפלט. מידע נוסף על הגדרות אישיות
אפשרויות נוספות, ראו סקירה כללית של ההגדרות.
InteractiveSegmenterOptions options = InteractiveSegmenterOptions.builder() .setBaseOptions( BaseOptions.builder().setModelAssetPath("model.tflite").build()) .setOutputCategoryMask(true) .setOutputConfidenceMasks(false) .setResultListener((result, inputImage) -> { // Process the segmentation result here. }) .setErrorListener(exception -> { // Process the segmentation errors here. }) .build(); interactivesegmenter = InteractiveSegmenter.createFromOptions(context, options);
לדוגמה מפורטת יותר של הגדרת המשימה הזו אפשר למצוא
InteractiveSegmenterHelper
מחלקה setupInteractiveSegmenter()
.
אפשרויות תצורה
המשימה הזו כוללת את אפשרויות ההגדרה הבאות לאפליקציות ל-Android:
שם האפשרות | תיאור | טווח ערכים | ערך ברירת מחדל |
---|---|---|---|
outputCategoryMask |
אם המדיניות מוגדרת לערך True , הפלט כולל מסיכת פילוח
כמו תמונת uint8, שבה כל ערך של פיקסל מציין אם הפיקסל
של האובייקט שנמצא באזור העניין. |
{True, False } |
False |
outputConfidenceMasks |
אם המדיניות מוגדרת לערך True , הפלט כולל מסיכת פילוח
כתמונה עם ערך צף, שבו כל ערך צף מייצג את מהימנות
שהפיקסל הוא חלק מהעצם שממוקם באזור העניין. |
{True, False } |
True |
displayNamesLocale |
מגדיר את השפה של תוויות שישמשו לשמות לתצוגה שסופקו
של מודל המשימה, אם יש כאלה. ברירת המחדל היא en עבור
אנגלית. אפשר להוסיף תוויות שמותאמות לשוק המקומי למטא-נתונים של מודל מותאם אישית
באמצעות TensorFlow Lite Metadata Writer API
| קוד שפה | en |
errorListener |
הגדרת האזנה לשגיאות אופציונלית. | לא רלוונטי | לא מוגדר |
הכנת נתונים
פילוח התמונות האינטראקטיבי עובד עם תמונות, והמשימה מטפלת בקלט הנתונים
לפני עיבוד, כולל שינוי גודל, סיבוב ונירמול ערכים.
צריך להמיר את תמונת הקלט
אובייקט com.google.mediapipe.framework.image.MPImage
לפני העברה שלו
למשימה הזו.
import com.google.mediapipe.framework.image.BitmapImageBuilder; import com.google.mediapipe.framework.image.MPImage; // Load an image on the user’s device as a Bitmap object using BitmapFactory. // Convert an Android’s Bitmap object to a MediaPipe’s Image object. MPImage mpImage = new BitmapImageBuilder(bitmap).build();
RegionOfInterest roi = RegionOfInterest.create( NormalizedKeypoint.create( normX * it.width, normY * it.height ) ); ImageSegmenterResult segmenterResult = interactivesegmenter.segment(image, roi);
בקוד לדוגמה של 'פלח תמונות אינטראקטיבי', הפונקציות segment
מוגדרות
InteractiveSegmenterHelper.kt
חדש.
טיפול בתוצאות והצגתן
כשמריצים את ההסקה, המשימה 'פילוח תמונות אינטראקטיבי' מחזירה
אובייקט ImageSegmenterResult
שמכיל את התוצאות
היא משימת פילוח. התוכן של הפלט עשוי לכלול מסכת קטגוריה,
מסכת ביטחון, או את שניהם, בהתאם למה שתגדירו
הגדירו את המשימה.
בקטעים הבאים מוסבר עוד על נתוני הפלט מהמשימה:
מסכה של קטגוריה
בתמונות הבאות מוצג תרשים של פלט המשימה של קטגוריה
מסכת ערכים עם אזור עניין נקודתי. כל פיקסל הוא uint8
ערך שמציין אם הפיקסל הוא חלק מהאובייקט שנמצא באזור
עניין. העיגול בשחור-לבן בתמונה השנייה מציין את הבחירה
תחום עניין (AOI).
פלט של התממה של התמונה והקטגוריה המקורית. תמונת המקור מ- פסקל VOC 2012 של הכיתובים.
מסכת ביטחון
הפלט של מסיכת סמך מכיל ערכים צפים בין [0, 1]
ל-
בכל ערוץ קלט של תמונה. ערכים גבוהים יותר מצביעים על ודאות גבוהה יותר
פיקסל התמונה הוא חלק מהאובייקט שנמצא באזור העניין.