مقدمات پردازش تصویر با Web Worker
Web Worker اجازه میدهد مرورگر تصویر را در نخ جدا پردازش کند تا رابط قفل نشود. Easy Background Remover از چنین پردازش محلیای بهره میبرد.
لازم نیست خودتان worker را تنظیم کنید — بخشی از پیادهسازی فنی است.
موضوع اصلی دارای یک کار رابط کاربری است
یک صفحه مرورگر معمولاً جاوا اسکریپت را روی یک رشته اصلی اجرا می کند. آن رشته همچنین چیدمان، نقاشی و ورودی را هماهنگ می کند. اگر یک محاسبه طولانی آن را اشغال کند، کلیکها ممکن است تاخیر داشته باشند، انیمیشن متوقف شود و مرورگر ممکن است هشدار دهد که صفحه پاسخ نمیدهد.
یک ویرایشگر تصویر حتی قبل از شروع پردازش، مسئولیتهای رشته اصلی زیادی دارد:
- انتخاب، چسباندن یا رها کردن فایل را دریافت کنید.
- رمزگشایی و نمایش یک تصویر.
- به روز رسانی پیشرفت و حالت های خطا.
- بوم پیش نمایش را بکشید.
- کنترل اضافه کردن و پاک کردن حرکت قلم مو.
- اقدامات دانلود یا کلیپ بورد را آماده کنید.
قرار دادن کار عددی یک مدل تقسیمبندی روی یک رشته، باعث میشود که این وظایف مستقیماً با هم رقابت کنند. یک کارگر مرز واضح تری ایجاد می کند.
مرز مبتنی بر پیام
ویرایشگر و کارگر متغیرهای معمولی را به اشتراک نمی گذارند. آنها با ارسال پیام ارتباط برقرار می کنند. یک جریان ساده شده به این صورت است:
- ویرایشگر یک کارگر ایجاد می کند یا دوباره استفاده می کند.
- از کارگر می خواهد که زمان اجرا و مدل پردازش را مقداردهی اولیه کند.
- داده های تصویر را آماده می کند و درخواست پردازش می فرستد.
- کارگر داده ها را به ورودی مورد انتظار مدل تبدیل می کند.
- کارگر مدل را اجرا می کند و مقادیر ماسک را تولید می کند.
- ماسک یا داده های نتیجه را به عقب می فرستد.
- ویرایشگر پیش نمایش را ترکیب می کند و پالایش یا صادرات را فعال می کند.
پیام ها باید دارای زمینه کافی برای مطابقت با پاسخ به درخواست صحیح باشند. اگر کاربر قبل از اتمام کار قبلی، تصویر دیگری را انتخاب کند، اهمیت دارد. رابط باید از نمایش یک نتیجه قدیمی بر روی یک منبع جدید اجتناب کند.
کپی و انتقال داده های تصویر
ارسال یک پیام کوتاه کوچک ارزان است. اگر مرورگر مجبور باشد کل بافر را کپی کند، ارسال میلیونها مقدار پیکسل میتواند گران باشد. APIهای وب می توانند در عوض مالکیت بافرهای باینری خاصی را منتقل کنند. یک بافر منتقل شده بدون حفظ یک نسخه تکراری قابل استفاده در سمت فرستنده در دسترس گیرنده قرار می گیرد.
این بهینهسازی با یک محدودیت طراحی همراه است: پس از انتقال، فرستنده نمیتواند از همان بافر استفاده کند که انگار هنوز مالک داده است. یک ویرایشگر ممکن است یک نمایش نمایش جداگانه را حفظ کند، یک بافر پردازش اختصاصی ایجاد کند یا آنچه را که بعداً نیاز دارد بازسازی کند.
هر پیاده سازی دقیقاً از انتقال در مکان های مشابه استفاده نمی کند. درس کلی این است که جداسازی نخ باعث ناپدید شدن حرکت داده ها نمی شود. ابعاد تصویر، اندازه بافر و تعداد تبدیلها همچنان بر تأخیر و حافظه تأثیر میگذارد.
آنچه Easy Background Remover در کارگر می گذارد
Easy Background Remover از Web Worker با زمان اجرای پردازش مرورگر برای تقسیمبندی روی دستگاه استفاده میکند. مرحله قطع خودکار سنگین یک ماسک تولید می کند. سپس ویرایشگر نتیجه ترکیبی را نمایش می دهد و از اصلاح CPU-canvas brush پشتیبانی می کند.
این جداسازی به شکست ها مرز مفیدتری می دهد. اگر کارگر نتواند مقداردهی اولیه کند یا در حین پردازش از کار بیفتد، رابط میتواند به جای تکیه بر یک برگه ثابت دائمی به عنوان تنها سیگنال، یک خطای مربوط به کارگر را گزارش کند.
همچنین ادعای پردازش محلی را قابل درک نگه می دارد. ارسال پیکسل ها از یک صفحه افزونه به کارگر خود، ارتباطی در محیط مرورگر است، نه آپلود در یک API قطع راه دور. جلسه اول ممکن است به طور جداگانه دارایی مدل قابل استفاده مجدد را دانلود کند. چرا اولین بار یک مدل را اجرا کنید را ببینید.
یک کارگر محاسبات را فوری نمی کند
کارگران پاسخگویی را بهبود می بخشند، نه قابلیت دستگاه خام را. این مدل همچنان CPU، GPU یا سایر منابع زمان اجرا را بر اساس آنچه مرورگر می تواند ارائه دهد مصرف می کند. یک ورودی بزرگ هنوز هم می تواند بیشتر طول بکشد و به حافظه بیشتری نسبت به یک ورودی کوچک نیاز دارد.
چندین محدودیت باقی مانده است:
- مقداردهی اولیه مدل هزینه واقعی دارد.
- بافرهای پیکسل در صورت کپی کردن، حافظه را از هر دو طرف اشغال می کنند.
- تغییر اندازه و تبدیل قالب زمان بر است.
- دستگاه های کم حافظه ممکن است با تصاویر بزرگ مشکل داشته باشند.
- کارگران بیشتر می توانند به جای کاهش اختلاف، اختلاف را افزایش دهند.
- صادرات و به روز رسانی بوم هنوز هم می تواند موضوع اصلی را شامل شود.
راه اندازی پنج کارگر پردازش برای پنج تصویر به طور خودکار پنج برابر سریعتر نیست. کارگران یک دستگاه مشترک دارند. کارهای موازی می توانند برای پهنای باند حافظه و منابع اجرایی رقابت کنند، در حالی که هر نمونه مدل ممکن است هزینه حافظه خود را داشته باشد.
گزارش پیشرفت مشارکتی است
یک کارگر میتواند پیامهای وضعیت ارسال کند، اما به طور خودکار نمیداند که چه درصدی از پیشرفت درست است. دانلود مدل، مقداردهی اولیه زمان اجرا، آماده سازی ورودی، پردازش، تبدیل ماسک و رندر پیش نمایش مراحل جداگانه ای با زمان بندی متفاوت هستند.
برخی از فازها دارای تعداد بایت قابل اندازه گیری هستند. اجرای یک مدل تنها ممکن است “شروع” و “تمام” را نشان دهد. بنابراین، یک درصد صاف که به طور یکنواخت پیشرفت می کند، می تواند به جای اندازه گیری دقیق، زیبایی باشد.
UI پیشرفت مفید در صورت امکان فاز را نامگذاری می کند: آماده سازی مدل، پردازش تصویر یا نتیجه ساخت. همچنین به جای اینکه یک اسپینر بدون توضیح باقی بماند، شکست و لغو را کنترل می کند.
لغو بیشتر از پنهان کردن یک اسپینر است
اگر کاربر تصویری را ببندد یا دوباره شروع به کار کند، رابط میتواند پاسخ نهایی درخواست قدیمی را نادیده بگیرد. توقف فوری محاسبات اساسی ممکن است نیاز به پشتیبانی اضافی از زمان اجرا یا خاتمه و ایجاد مجدد کارگر داشته باشد.
خاتمه دادن به یک کارگر تعیین کننده است، اما حالت اولیه آن را کنار می گذارد. کار بعدی ممکن است نیاز به بارگذاری مجدد و مقداردهی اولیه مدل داشته باشد. برای یک عملیات کوتاه، علامت گذاری نتیجه کهنه می تواند ارزان تر از خراب کردن همه چیز باشد.
انتخاب صحیح به فشار حافظه، مدت زمان عملیات و قابلیتهای زمان اجرا بستگی دارد. از دیدگاه کاربر، قانون مهم این است که کار قدیمی نباید ویرایش فعلی را بازنویسی کند.
خطاها نیز باید از مرز عبور کنند
یک استثنا در داخل یک کارگر به یک استثنای اصلی معمولی تبدیل نمی شود. کارگر باید خطاهای قابل استفاده را گزارش کند و ویرایشگر باید به خطاهای سطح کارگر گوش دهد.
مدیریت خوب خطا حداقل این موارد را متمایز می کند:
- دارایی مدل در دسترس نیست.
- مقداردهی اولیه مدل ناموفق بود.
- رمزگشایی تصویر یا آماده سازی ورودی ناموفق بود.
- پردازش ناموفق
- کارگر به طور غیر منتظره متوقف شد.
- نتیجه دیگر به درخواست فعلی تعلق ندارد.
این کار بیشتر از یک «اشتباهی پیش آمده» عمومی است، به خصوص زمانی که راهاندازی اولیه و پردازش تصویر معمولی راهحلهای مختلفی دارند.
خروجی کارگر هنوز فقط اولین ماسک است
معماری نخ به خودی خود یک لبه مبهم را بهبود نمی بخشد. کارگر می تواند ماسک فنی معتبری را که هنوز خز، مواد شفاف، تسمه های باریک یا سایه دلخواه را ندارد، پس دهد. اینها سوالات تقسیم بندی و هدف هستند.
کار ویرایشگر پس از پردازش از سر گرفته میشود: ماسک را در سیستم مختصات کار مقیاس کنید، یک پیشنمایش را ترکیب کنید، به کاربر اجازه دهید آن را اصلاح کند و وضعیت فعلی را صادر کند. رزولوشن ماسک در مقابل اندازه پیشنمایش توضیح میدهد که چرا آن سیستمهای مختصات نباید اشتباه گرفته شوند.
یک مدل ذهنی مختصر
کارگر را به عنوان یک متخصص محلی در پشت پنجره پیام در نظر بگیرید:
- ویرایشگر مالک تعامل است.
- کارگر صاحب وظیفه پردازش سنگین است.
- داده های تصویر باینری از یک مرز تعریف شده عبور می کنند.
- کارگر یک ماسک برمی گرداند، نه یک قضاوت تمام شده در مورد هر لبه.
- سردبیر مسئول وضعیت فعلی، بررسی، اصلاح و صادرات است.
برای مشاهده مدل از خود پیکسلها، با What an on-Device cutout model sees ادامه دهید. برای یک نمای کلی عملی، به چگونه حذف پسزمینه محلی کار میکند مراجعه کنید.