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

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

קוד לדוגמה

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

הגדרה

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

חבילות JavaScript

הקוד של מקטע התמונות זמין דרך MediaPipe @mediapipe/tasks-vision חבילת NPM. אפשר למצוא ולהוריד את הספריות האלה מקישורים שכלולים בפלטפורמה מדריך ההגדרה.

ניתן להתקין את החבילות הנדרשות עם הקוד הבא לצורך Staging מקומי באמצעות הפקודה הבאה:

npm install --save @mediapipe/tasks-vision

אם רוצים לייבא את קוד המשימה דרך רשת להעברת תוכן (CDN) מוסיפים את הקוד הבא לתג בקובץ ה-HTML:

<head>
  <script src="https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision/vision_bundle.js"
    crossorigin="anonymous"></script>
</head>

דגם

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

בוחרים מודל ומורידים אותו, ולאחר מכן מאחסנים אותו בספריית הפרויקט:

<dev-project-root>/app/shared/models/

יצירת המשימה

אפשר להשתמש באחת מהפונקציות createFrom...() של פילוח התמונות כדי להכין את המשימה להפעלת ההסקה. שימוש בcreateFromModelPath() בפונקציה עם נתיב יחסי או מוחלט לקובץ המודל שעבר אימון. אם המודל כבר נטען לזיכרון, אפשר להשתמש אמצעי תשלום אחד (createFromModelBuffer()).

הקוד לדוגמה שלמטה מדגים את השימוש בפונקציה createFromOptions() כדי: נגדיר את המשימה. הפונקציה createFromOptions מאפשרת להתאים אישית פילוח של תמונות עם אפשרויות הגדרה. למידע נוסף על המשימה להגדרות אישיות, ראו אפשרויות הגדרה.

הקוד הבא מדגים איך יוצרים ומגדירים משימה באמצעות פרמטרים מותאמים אישית אפשרויות:

runningMode = "IMAGE";

async function createImageSegmenter() {
  const vision = await FilesetResolver.forVisionTasks(
    "https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@latest/wasm"
  );

  imageSegmenter = await ImageSegmenter.createFromOptions(vision, {
    baseOptions: {
      modelAssetPath:
        "https://storage.googleapis.com/mediapipe-assets/deeplabv3.tflite?generation=1661875711618421",
    },
    outputCategoryMask: true,
    outputConfidenceMasks: false
    runningMode: runningMode
  });
}
createImageSegmenter();

יישום מלא יותר של יצירת המשימה 'פילוח תמונות' זמין במאמר קוד לדוגמה.

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

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

שם האפשרות תיאור טווח ערכים ערך ברירת מחדל
outputCategoryMask אם המדיניות מוגדרת לערך True, הפלט כולל מסיכת פילוח כמו תמונת uint8, שבה כל ערך של פיקסל מציין את הקטגוריה המנצחת. עם ערך מסוים. {True, False} False
outputConfidenceMasks אם המדיניות מוגדרת לערך True, הפלט כולל מסיכת פילוח כתמונה עם ערך צף, שבו כל ערך צף מייצג את מהימנות מפת הניקוד של הקטגוריה. {True, False} True
displayNamesLocale מגדיר את השפה של תוויות שישמשו לשמות לתצוגה שסופקו של מודל המשימה, אם יש כאלה. ברירת המחדל היא en עבור אנגלית. אפשר להוסיף תוויות שמותאמות לשוק המקומי למטא-נתונים של מודל מותאם אישית באמצעות TensorFlow Lite Metadata Writer API קוד שפה en
resultListener מגדיר את אוזן התוצאות לקבל את תוצאות הפילוח באופן אסינכרוני כאשר פילוח התמונות נמצא במצב LIVE_STREAM. אפשר להשתמש באפשרות הזו רק כשמצב הריצה מוגדר ל-LIVE_STREAM לא רלוונטי לא רלוונטי

הכנת נתונים

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

קריאות ל-method segment() של 'פלח התמונות' ו-segmentForVideo() פועלות באופן סינכרוני ולחסום את ה-thread של ממשק המשתמש. אם מפלחים אובייקטים פריימים של וידאו ממצלמה של מכשיר, כל משימת פילוח חוסמת את של שרשור. כדי למנוע זאת, תוכלו להטמיע עובדי אינטרנט ולהפעיל אותם segment() וגם segmentForVideo() בשרשור אחר.

הרצת המשימה

'פלח התמונות' משתמש בשיטה segment() במצב תמונה השיטה segmentForVideo() במצב video כדי להפעיל מסקנות. 'פלח של תמונות' מחזיר לקריאה חוזרת (callback) את הקטעים שזוהו כנתוני תמונה שמגדירים כשמריצים מסקנות למשימה.

הקוד הבא מדגים איך מבצעים עיבוד באמצעות מודל המשימה:

תמונה

const image = document.getElementById("image") as HTMLImageElement;
imageSegmenter.segment(image, callback);
  

Video

async function renderLoop(): void {
  const video = document.getElementById("video");
  let startTimeMs = performance.now();

  imageSegmenter.segmentForVideo(video, startTimeMs, callbackForVideo);

  requestAnimationFrame(() => {
    renderLoop();
  });
}

יישום מקיף יותר של הרצת המשימה 'פילוח תמונות' זמין במאמר קוד לדוגמה.

טיפול בתוצאות והצגתן

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

בחלקים הבאים מוצגות דוגמאות לנתוני הפלט מהמשימה:

ודאות הקטגוריה

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

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

ערך הקטגוריה

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

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

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