יסודות עיבוד תמונה ב־Web Worker
Web Worker מאפשר לדפדפן לעבד תמונה בשרשור נפרד כדי שהממשק לא יקפא. Easy Background Remover משתמש בעיבוד מקומי כזה.
אין צורך להגדיר workers בעצמכם.
לשרשור הראשי יש עבודה של ממשק משתמש
דף דפדפן מריץ בדרך כלל JavaScript על שרשור ראשי. השרשור הזה גם מתאם פריסה, ציור וקלט. אם חישוב אחד ארוך מעסיק אותו, קליקים עלולים להרגיש מושהים, אנימציה יכולה להפסיק, והדפדפן עשוי להזהיר שהדף אינו מגיב.
לעורך תמונות יש שפע של תחומי אחריות עיקריים עוד לפני שההסקה מתחילה:
- קבל בחירת קובץ, הדבק או שחרור;
- פענוח והצג תמונה;
- עדכון התקדמות ומצבי שגיאה;
- צייר את בד התצוגה המקדימה;
- ידית הוסף ומחק תנועת מברשת;
- הכן פעולות הורדה או לוח.
הצבת העבודה המספרית של מודל פילוח על אותו חוט תגרום למשימות הללו להתחרות ישירות. עובד יוצר גבול ברור יותר.
הגבול מבוסס ההודעה
העורך והעובד אינם חולקים משתנים רגילים. הם מתקשרים על ידי שליחת הודעות. זרימה פשוטה נראית כך:
- העורך יוצר או עושה שימוש חוזר בעובד.
- הוא מבקש מהעובד לאתחל את זמן הריצה והמודל של ההסקה.
- הוא מכין נתוני תמונה ושולח בקשת עיבוד.
- העובד ממיר את הנתונים לקלט הצפוי של המודל.
- העובד מפעיל את המודל ומפיק ערכי מסכה.
- הוא שולח את המסכה או נתוני התוצאה בחזרה.
- העורך מרכיב את התצוגה המקדימה ומאפשר חידוד או ייצוא.
הודעות צריכות לכלול מספיק הקשר כדי להתאים תגובה לבקשה הנכונה. זה משנה אם משתמש בוחר תמונה אחרת לפני סיום העבודה הקודמת. על הממשק להימנע מהצגת תוצאה ישנה על פני מקור חדש.
העתקה והעברת נתוני תמונה
שליחת הודעת טקסט קטנה היא זולה. שליחת מיליוני ערכי פיקסלים עלולה להיות יקרה אם הדפדפן צריך להעתיק את כל המאגר. ממשקי API של אינטרנט יכולים להעביר בעלות על מאגרים בינאריים מסוימים במקום זאת. מאגר מועבר הופך לזמין למקלט מבלי לשמור על כפילוי שמיש בצד השולח.
אופטימיזציה זו מגיעה עם אילוץ עיצובי: לאחר ההעברה, השולח לא יכול להמשיך להשתמש באותו מאגר כאילו הוא עדיין הבעלים של הנתונים. עורך עשוי לשמור ייצוג תצוגה נפרד, ליצור מאגר מסקנות ייעודי, או לשחזר את מה שהוא צריך מאוחר יותר.
לא כל מימוש משתמש בהעברה בדיוק באותם מקומות. הלקח הכללי הוא שהפרדת חוטים אינה גורמת להעלמת תנועת הנתונים. ממדי התמונה, גודל המאגר ומספר ההמרות עדיין משפיעים על זמן ההשהיה והזיכרון.
מה Easy Background Remover מכניס לעובד
Easy Background Remover משתמש ב-Web Worker עם זמן ריצה של הסקת הדפדפן לפילוח במכשיר. שלב החיתוך האוטומטי הכבד מייצר מסכה. לאחר מכן, העורך מציג את התוצאה המורכבת ותומך בחידוד מברשת קנבס של CPU.
הפרדה זו מעניקה לכשלים גבול שימושי יותר. אם העובד אינו יכול לאתחל או קורס במהלך ההסקה, הממשק יכול לדווח על שגיאה הקשורה לעובד במקום להסתמך על לשונית קפואה לצמיתות כאות היחיד.
זה גם שומר על תביעת העיבוד המקומי מובנת. שליחת פיקסלים מדף הרחבה לעובד שלו היא תקשורת בתוך סביבת הדפדפן, לא העלאה ל-API של חיתוך מרחוק. הפגישה הראשונה עשויה להוריד בנפרד את נכס הדגם הניתן לשימוש חוזר; ראה מדוע הפעלה ראשונה הורדת מודל.
עובד אינו מבצע חישוב מיידי
עובדים משפרים את ההיענות, לא את יכולת המכשיר הגולמי. המודל עדיין צורך מעבד, GPU או משאבי זמן ריצה אחרים בהתאם למה שהדפדפן יכול לספק. קלט גדול עדיין יכול לקחת יותר זמן ולדרוש יותר זיכרון מאשר קלט קטן.
נותרו מספר מגבלות:
- לאתחול המודל יש עלות אמיתית;
- מאגרי פיקסלים תופסים זיכרון משני הצדדים אם מועתקים;
- שינוי גודל והמרת פורמט לוקח זמן;
- מכשירים עם זיכרון נמוך עשויים להיאבק בתמונות גדולות;
- יותר עובדים יכולים להגביר את המחלוקת במקום לצמצם אותם;
- עדכוני ייצוא ועדכוני קנבס עדיין יכולים לכלול את השרשור הראשי.
הפעלת חמישה עובדי מסקנות עבור חמש תמונות אינה מהירה אוטומטית פי חמישה. העובדים חולקים את אותה מכונה. עבודות מקבילות יכולות להתחרות על רוחב פס זיכרון ומשאבי ביצוע, בעוד שכל מופע דגם עשוי לשאת בעלות הזיכרון שלו.
דיווח ההתקדמות הוא שיתוף פעולה
עובד יכול לשלוח הודעות סטטוס, אבל הוא לא יודע אוטומטית איזה אחוז ההתקדמות ירגיש מדויק. הורדת מודל, אתחול זמן ריצה, הכנת קלט, עיבוד, המרת מסיכה ועיבוד תצוגה מקדימה הם שלבים נפרדים עם תזמון שונה.
לחלק מהשלבים יש ספירת בתים ניתנת למדידה. ביצוע דגם בודד עשוי לחשוף רק “התחיל” ו"הסתיים". לכן אחוז חלק שמתקדם בצורה אחידה יכול להיות קוסמטי ולא מדידה מדויקת.
התקדמות שימושית ממשק המשתמש שם את השלב במידת האפשר: הכנת מודל, עיבוד תמונה או בניית תוצאה. זה גם מטפל בכשל וביטול במקום להשאיר ספינר ללא הסבר.
ביטול הוא יותר מאשר הסתרת ספינר
אם המשתמש סוגר תמונה או מתחיל מחדש, הממשק יכול להתעלם מהתגובה הסופית מהבקשה המיושנת. עצירה מיידית של החישוב הבסיסי עשויה לדרוש תמיכה נוספת מזמן הריצה או סיום ויצירה מחדש של העובד.
סיום עובד הוא מכריע, אך הוא מבטל את המצב האתחול שלו. ייתכן שהעבודה הבאה תצטרך לטעון ולאתחל את המודל שוב. עבור פעולה קצרה, סימון התוצאה מעופש יכול להיות זול יותר מאשר להרוס הכל.
הבחירה הנכונה תלויה בלחץ הזיכרון, משך הפעולה ויכולות זמן הריצה. מנקודת המבט של המשתמש, הכלל החשוב הוא שאסור לעבודה מיושנת לדרוס את העריכה הנוכחית.
גם שגיאות צריכות לחצות את הגבול
חריג בתוך עובד אינו הופך לחריג חוט ראשי רגיל. על העובד לדווח על שגיאות שמישות, ועל העורך להקשיב לכשלים ברמת העובד.
טיפול טוב בשגיאות מבדיל לפחות:
- נכס הדגם אינו זמין;
- אתחול המודל נכשל;
- פענוח התמונה או הכנת הקלט נכשלו;
- היסק נכשל;
- העובד נעצר באופן בלתי צפוי;
- התוצאה אינה שייכת עוד לבקשה הנוכחית.
זה יותר בר-פעולה מאשר “משהו השתבש” גנרי, במיוחד כאשר להתקנה הראשונה ולעיבוד תמונה רגיל יש פתרונות שונים.
פלט עובד הוא עדיין רק מסכה ראשונה
ארכיטקטורת חוטים אינה משפרת יתרון מעורפל בפני עצמה. העובד יכול להחזיר מסכה בעלת תוקף טכני שעדיין חסרה לו פרווה, חומר שקוף, רצועות צרות או צל רצוי. אלו שאלות פילוח וכוונות.
עבודתו של העורך מתחדשת לאחר מסקנות: קנה קנה מידה של המסכה למערכת הקואורדינטות העובדת, חיבור תצוגה מקדימה, תן למשתמש לחדד אותה וייצא את המצב הנוכחי. רזולוציית מסכה לעומת גודל תצוגה מקדימה מסביר מדוע אין לבלבל את מערכות הקואורדינטות הללו.
מודל מנטלי תמציתי
חשבו על העובד כמומחה מקומי מאחורי חלון הודעות:
- העורך הוא הבעלים של האינטראקציה;
- העובד הוא הבעלים של משימת ההסקה הכבדה;
- נתוני תמונה בינארית חוצים גבול מוגדר;
- העובד מחזיר מסכה, לא שיפוט גמור לגבי כל קצה;
- העורך נשאר אחראי למצב הנוכחי, סקירה, חידוד ויצוא.
לתצוגת הדגם של הפיקסלים עצמם, המשך עם [מה רואה דגם חיתוך במכשיר](/he/what-an-on-device-הסרת רקע-model-sees/). לסקירה מעשית מקצה לקצה, ראה כיצד עובדת הסרת רקע מקומית.