Основи на обработката на изображения с Web Worker
Web Worker е отделен JavaScript контекст, който може да върши тежки изчисления, без главният нишка на редактора да носи цялата работа. При браузърна обработка на изображения това означава, че подготовката на модела и inference могат да минават на заден план.
Резултатът не е „безплатна обработка на фона“. Същото устройство все още изчислява и използва памет. Архитектурната полза е разделянето: тежката операция е по-малко вероятно да блокира всеки отговор на интерфейса.
Основната нишка има задача за потребителски интерфейс
Страницата на браузър обикновено изпълнява JavaScript в главна нишка. Тази нишка също координира оформлението, рисуването и въвеждането. Ако едно дълго изчисление го заема, кликванията може да се забавят, анимацията може да спре и браузърът може да предупреди, че страницата не реагира.
Редакторът на изображения има много отговорности за основната нишка, преди изводът дори да започне:
- получаване на избор на файл, поставяне или пускане;
- декодиране и показване на изображение;
- актуализиране на напредъка и състоянията на грешки;
- начертайте платното за визуализация;
- дръжка за движение на четката за добавяне и изтриване;
- подгответе действия за изтегляне или клипборд.
Поставянето на числената работа на модела за сегментиране в една и съща нишка би накарало тези задачи да се конкурират директно. Работникът създава по-ясна граница.
Граница, базирана на съобщение
Редакторът и работникът не споделят обикновени променливи. Те комуникират чрез изпращане на съобщения. Опростеният поток изглежда така:
- Редакторът създава или повторно използва работник.
- Той иска от работника да инициализира времето за изпълнение на извода и модела.
- Подготвя данни за изображения и изпраща заявка за извод.
- Работникът преобразува данните в очаквания вход на модела.
- Работникът стартира модела и създава стойности на маската.
- Изпраща обратно маската или данните за резултата.
- Редакторът съставя визуализацията и позволява прецизиране или експортиране.
Съобщенията трябва да включват достатъчно контекст, за да отговарят на отговора на правилната заявка. Това има значение, ако потребителят избере друго изображение, преди да приключи предишната задача. Интерфейсът трябва да избягва показването на стар резултат върху нов източник.
Копиране и прехвърляне на данни за изображения
Изпращането на малко текстово съобщение е евтино. Изпращането на милиони пикселни стойности може да бъде скъпо, ако браузърът трябва да копира целия буфер. Вместо това уеб API могат да прехвърлят собствеността върху определени двоични буфери. Прехвърленият буфер става достъпен за получателя, без да запазва използваем дубликат от страната на подателя.
Тази оптимизация идва с ограничение на дизайна: след прехвърлянето подателят не може да продължи да използва същия буфер, сякаш все още притежава данните. Редакторът може да запази отделно представяне на дисплея, да създаде специален буфер за изводи или да реконструира това, от което се нуждае по-късно.
Не всяка реализация използва прехвърляне на абсолютно същите места. Общият урок е, че разделянето на нишки не кара движението на данни да изчезне. Размерите на изображението, размерът на буфера и броят на реализациите все още влияят върху латентността и паметта.
Какво Easy Background Remover поставя в работника
Easy Background Remover използва Web Worker с време за изпълнение на изводи на браузъра за сегментиране на устройството. Тежката автоматична стъпка на изрязване създава маска. Редакторът след това показва съставния резултат и поддържа усъвършенстване на четката на платното на процесора.
Това разделяне дава на провалите по-полезна граница. Ако работникът не може да се инициализира или се срине по време на извод, интерфейсът може да докладва грешка, свързана с работника, вместо да разчита на постоянно замразен раздел като единствен сигнал.
Той също така поддържа твърдението за локална обработка разбираемо. Изпращането на пиксели от страница с разширение до нейния собствен работник е комуникация в средата на браузъра, а не качване в API за отдалечено изрязване. Първата сесия може отделно да изтегли актива на модела за многократна употреба; вижте Защо първото стартиране изтегля модел.
Работникът не прави изчисленията мигновени
Работниците подобряват отзивчивостта, а не необработените възможности на устройството. Моделът все още консумира CPU, GPU или други ресурси за изпълнение според това, което браузърът може да предостави. Големият вход може да отнеме повече време и да изисква повече памет от малък.
Остават няколко ограничения:
- инициализацията на модела има реална цена;
- пикселните буфери заемат памет от двете страни, ако се копират;
- преоразмеряването и конвертирането на формат отнемат време;
- устройствата с ниска памет може да се борят с големи изображения;
- повече работници могат да увеличат раздора, вместо да го намалят;
- експортирането и актуализациите на платното все още могат да включват основната нишка.
Стартирането на пет работни извода за пет изображения не е автоматично пет пъти по-бързо. Работниците споделят една и съща машина. Паралелните задания могат да се конкурират за честотна лента на паметта и ресурси за изпълнение, докато всеки екземпляр на модела може да носи собствена цена на паметта.
Отчитането на напредъка е съвместно
Работникът може да изпраща съобщения за състоянието, но не знае автоматично какъв процент на напредъка ще се почувства точен. Изтеглянето на модела, инициализацията по време на изпълнение, подготовката на входа, изводът, преобразуването на маската и изобразяването на предварителен преглед са отделни фази с различно време.
Някои фази имат измерим брой байтове. Едно изпълнение на модел може да изложи само „започнато“ и „завършено“. Следователно плавен процент, който напредва равномерно, може да бъде по-скоро козметичен, отколкото прецизно измерване.
Полезният потребителски интерфейс за напредък назовава фазата, когато е възможно: подготовка на модел, обработка на изображение или резултат от изграждане. Той също така се справя с неуспех и анулиране, вместо да оставя спинер без обяснение.
Анулирането е нещо повече от скриване на спинер
Ако потребителят затвори изображение или започне отначало, интерфейсът може да игнорира евентуалния отговор от остарялата заявка. Незабавното спиране на основното изчисление може да изисква допълнителна поддръжка от средата за изпълнение или прекратяване и повторно създаване на работника.
Прекратяването на работник е решаващо, но то отхвърля инициализираното му състояние. Следващата задача може да се наложи отново да зареди и инициализира модела. За кратка операция маркирането на резултата като остарял може да бъде по-евтино от събарянето на всичко.
Правилният избор зависи от натиска на паметта, продължителността на работа и възможностите за изпълнение. От гледна точка на потребителя важното правило е остарялата работа да не презаписва текущата редакция.
Грешките също трябва да преминат границата
Изключение вътре в работник не се превръща в нормално изключение от основната нишка. Работникът трябва да докладва за използваеми грешки, а редакторът трябва да слуша за грешки на ниво работник.
Доброто обработване на грешки отличава поне:
- моделът не е наличен;
- неуспешна инициализация на модела;
- неуспешно декодиране на изображение или подготовка за въвеждане;
- изводът е неуспешен;
- работник спря неочаквано;
- резултатът вече не принадлежи към текущата заявка.
Това е по-полезно за действие от общото „нещо се обърка“, особено когато настройката при първо стартиране и нормалната обработка на изображения имат различни решения.
Работният резултат все още е само първа маска
Архитектурата на нишката не подобрява двусмисленото предимство сама по себе си. Работникът може да върне технически валидна маска, на която все още липсват козина, прозрачен материал, тесни презрамки или желана сянка. Това са въпроси за сегментиране и намерение.
Работата на редактора се възобновява след извод: мащабирайте маската в работната координатна система, съставете предварителен преглед, оставете потребителя да го прецизира и експортирайте текущото състояние. Резолюция на маската спрямо размер на предварителен преглед обяснява защо тези координатни системи не трябва да се бъркат.
Кратък умствен модел
Мислете за работника като за местен специалист зад прозорец със съобщения:
- редакторът притежава взаимодействието;
- работникът притежава тежката задача за извод;
- данните за двоично изображение пресичат определена граница;
- работникът връща маска, а не завършена преценка за всеки ръб;
- редакторът остава отговорен за текущото състояние, преглед, усъвършенстване и експортиране.
За изгледа на модела на самите пиксели, продължете с Какво вижда изрязан модел на устройство. За цялостен практически преглед вижте Как работи локалното премахване на фон.