המשימה 'פילוח תמונות אינטראקטיבי' ב-MediaPipe מקבלת מיקום בתמונה, מעריכה את הגבולות של אובייקט במיקום הזה ומחזירה את הפיצול של האובייקט כנתוני תמונה. בהוראות הבאות מוסבר איך להשתמש בכלי לחלוקת תמונות אינטראקטיביות עם אפליקציות ל-Android. דוגמת הקוד שמתוארת בהוראות האלה זמינה ב-GitHub. מידע נוסף על היכולות, המודלים והאפשרויות להגדרה של המשימה הזו זמין בסקירה הכללית.
קוד לדוגמה
דוגמת הקוד של MediaPipe Tasks היא הטמעה פשוטה של אפליקציה לחלוקת תמונות אינטראקטיביות לקטעים ל-Android. הדוגמה פועלת עם תמונות שנבחרו מהגלריה במכשיר.
אפשר להשתמש באפליקציה כנקודת התחלה לאפליקציית Android משלכם, או להיעזר בה כשמשנים אפליקציה קיימת. קוד הדוגמה של הכלי לחלוקת תמונות אינטראקטיביות מתארח ב-GitHub.
מורידים את הקוד
בהוראות הבאות מוסבר איך ליצור עותק מקומי של קוד הדוגמה באמצעות כלי שורת הפקודה git.
כדי להוריד את הקוד לדוגמה:
- משכפלים את מאגר git באמצעות הפקודה הבאה:
git clone https://github.com/google-ai-edge/mediapipe-samples
- אפשר גם להגדיר את מכונה של git כך שתשתמש ב-sparse checkout, כך שיישארו רק הקבצים של אפליקציית הדוגמה Interactive Image Segmenter:
cd mediapipe git sparse-checkout init --cone git sparse-checkout set examples/interactive_segmentation/android
אחרי שיוצרים גרסה מקומית של קוד הדוגמה, אפשר לייבא את הפרויקט ל-Android Studio ולהריץ את האפליקציה. להוראות, אפשר לעיין במדריך ההגדרה ל-Android.
רכיבים מרכזיים
הקבצים הבאים מכילים את הקוד החשוב לאפליקציה לדוגמה של פילוח תמונות:
- InteractiveSegmentationHelper.kt – הפונקציה הזו מפעילה את המשימה 'חלוקת תמונות למקטעים אינטראקטיביים' ומטפלת בבחירת המודל ובבחירת הנציג.
- OverlayView.kt – טיפול בתוצאות הפילוח ועיצוב שלהן.
הגדרה
בקטע הזה מתוארים השלבים העיקריים להגדרת סביבת הפיתוח ופרויקטי הקוד לשימוש ב-Interactive Image Segmenter. למידע כללי על הגדרת סביבת הפיתוח לשימוש במשימות של MediaPipe, כולל דרישות לגרסאות הפלטפורמה, אפשר לעיין במדריך ההגדרה ל-Android.
יחסי תלות
הספרייה com.google.mediapipe:tasks-vision
משמשת את הכלי Interactive Image Segmenter. מוסיפים את התלות הזו לקובץ build.gradle
של פרויקט הפיתוח של אפליקציית Android. מייבאים את יחסי התלות הנדרשים באמצעות הקוד הבא:
dependencies {
...
implementation 'com.google.mediapipe:tasks-vision:latest.release'
}
דגם
כדי לבצע את המשימה 'פילוח תמונות אינטראקטיבי' ב-MediaPipe, נדרש מודל מאומן שתואם למשימה הזו. מידע נוסף על המודלים המאומנים הזמינים לכלי 'פילוח תמונות אינטראקטיבי' זמין בקטע 'מודלים' בסקירה הכללית של המשימה.
בוחרים את המודל ומורידים אותו, ולאחר מכן שומרים אותו בספריית הפרויקט:
<dev-project-root>/src/main/assets
משתמשים ב-method BaseOptions.Builder.setModelAssetPath()
כדי לציין את הנתיב שבו המודל משתמש. השיטה הזו מוצגת בדוגמת הקוד בקטע הבא.
בקוד לדוגמה של הכלי לחלוקת תמונות אינטראקטיבית, המודל מוגדר במחלקה 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);
דוגמה מפורטת יותר להגדרת המשימה הזו מופיעה בפונקציה setupInteractiveSegmenter()
של הכיתה InteractiveSegmenterHelper
.
אפשרויות הגדרה
למשימה הזו יש את אפשרויות התצורה הבאות לאפליקציות ל-Android:
שם האפשרות | תיאור | טווח ערכים | ערך ברירת מחדל |
---|---|---|---|
outputCategoryMask |
אם הערך מוגדר כ-True , הפלט כולל מסכת פילוח כתמונה מסוג uint8, שבה כל ערך פיקסל מציין אם הפיקסל הוא חלק מהאובייקט שנמצא באזור העניין. |
{True, False } |
False |
outputConfidenceMasks |
אם הערך מוגדר כ-True , הפלט כולל מסכת פילוח בתור תמונה של ערך צף, כאשר כל ערך צף מייצג את רמת האמון שהפיקסל הוא חלק מהאובייקט שנמצא באזור העניין. |
{True, False } |
True |
displayNamesLocale |
הגדרת השפה של התוויות לשימוש בשמות התצוגה שסופקו במטא-נתונים של מודל המשימה, אם הם זמינים. ברירת המחדל היא en לאנגלית. אפשר להוסיף תוויות מותאמות לשוק המקומי למטא-נתונים של מודל מותאם אישית באמצעות TensorFlow Lite Metadata Writer API
| קוד לוקאל | en |
errorListener |
הגדרת מאזין אופציונלי לשגיאות. | לא רלוונטי | לא מוגדר |
הכנת הנתונים
הכלי Interactive Image Segmenter פועל עם תמונות, והמשימה מטפלת בעיבוד הנתונים של קלט הנתונים, כולל שינוי הגודל, סיבוב ונירמול הערכים.
צריך להמיר את קובץ התמונה של הקלט לאובייקט 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();
בקוד לדוגמה של הכלי לפילוח תמונות אינטראקטיבי, הכנת הנתונים מתבצעת בכיתה InteractiveSegmenterHelper
באמצעות הפונקציה segment()
.
הרצת המשימה
קוראים לפונקציה segment
כדי להריץ את החיזוי וליצור פלחים.
המשימה 'פילוח תמונות אינטראקטיבי' מחזירה את אזורי הפלחים שזוהו בתוך תמונה הקלט.
RegionOfInterest roi = RegionOfInterest.create( NormalizedKeypoint.create( normX * it.width, normY * it.height ) ); ImageSegmenterResult segmenterResult = interactivesegmenter.segment(image, roi);
בקוד לדוגמה של הכלי לחלוקת תמונות אינטראקטיבית, הפונקציות segment
מוגדרות בקובץ InteractiveSegmenterHelper.kt
.
טיפול בתוצאות והצגתן
לאחר הפעלת ההסקה, המשימה Interactive Image Segmenter מחזירה אובייקט ImageSegmenterResult
שמכיל את התוצאות של המשימה לחלוקת תמונות. תוכן הפלט עשוי לכלול מסכת קטגוריות, מסכת ביטחון או את שניהם, בהתאם למה שהגדרתם בהגדרה של המשימה.
בקטעים הבאים מוסבר בהרחבה על נתוני הפלט של המשימה הזו:
מסכת קטגוריה
בתמונות הבאות מוצגת תצוגה חזותית של פלט המשימה של מסכת ערכי קטגוריה, עם ציון של אזור עניין בנקודה. כל פיקסל הוא ערך uint8
שמציין אם הפיקסל הוא חלק מהאובייקט שנמצא באזור העניין. העיגול בשחור-לבן בתמונה השנייה מציין את אזור העניין שנבחר.
פלט של התמונה המקורית ומסכת הקטגוריה. תמונה ממקור מערך הנתונים Pascal VOC 2012.
מסכת ביטחון
הפלט של מסכת ביטחון מכיל ערכים של משתני צף בין [0, 1]
לכל ערוץ קלט של תמונה. ככל שהערך גבוה יותר, כך רמת הוודאות גבוהה יותר שפיסקל התמונה הוא חלק מהעצם שנמצא באזור העניין.