מושגי מסגרת

לפני שמשתמשים ב-MediaPipe Framework, כדאי להכיר את המושגים הבאים.

העקרונות הבסיסיים

מנה

היחידה הבסיסית לזרימת נתונים. חבילה מורכבת מחותמת זמן מספרית ומצביעה משותפת על מטען ייעודי (payload) שלא ניתן לשינוי. המטען הייעודי יכול להיות כל סוג של C++, והסוג של המטען נקרא גם סוג החבילה. מנות הן סיווגי ערך ואפשר להעתיק אותן בזול. כל עותק חולק את הבעלות על המטען הייעודי (payload), עם סמנטיקה של ספירת הפניות. לכל עותק יש חותמת זמן משלו. למידע נוסף, ראו חבילה.

תרשים

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

צמתים

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

האזנות

זרם הוא חיבור בין שני צמתים, שנושא רצף של חבילות, וחותמות הזמן שלהם צריכות לעלות באופן מונוטוני.

חבילות צד

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

יציאות מנות

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

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

קלט ופלט

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

באופן דומה, יש צומתי sink שמקבלים נתונים וכותבים אותם ליעדים שונים (למשל קובץ, מאגר זיכרון וכו'), ואפליקציה יכולה גם לקבל פלט מהתרשים באמצעות callbacks.

התנהגות בזמן ריצה

משך החיים של התרשים

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

משך החיים של הצומת

יש שלוש שיטות עיקריות של משך החיים שה-framework יקרא בצומת:

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

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

מדיניות קלט

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

יש גם כללי מדיניות אחרים שמוטמעים באמצעות סוג נפרד של רכיב שנקראinputStreamHandler.

לפרטים נוספים, אפשר לעיין בסנכרון.

שידורים בזמן אמת

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