Gratis Chrome-uitbreiding — uitknipsels op die toestel

Web Worker-beeldverwerking basiese beginsels

'n Webwerker is 'n aparte JavaScript-uitvoeringskonteks wat duur berekeninge kan uitvoer sonder om die redakteur se hoofdraad al die werk te laat doen. Vir blaaierbeeldverwerking beteken dit modelopstelling en afleiding kan weghardloop van die draad wat verantwoordelik is vir knoppies, vorderingsboodskappe, kwasinvoer en skermopdaterings.

Die resultaat is nie “gratis agtergrondverwerking nie.” Dieselfde toestel voer steeds die berekening uit en gebruik geheue. Die argitektoniese voordeel is skeiding: 'n swaar modeloperasie is minder geneig om elke koppelvlakreaksie te blokkeer terwyl dit loop.

Die hoofdraad het 'n gebruikerskoppelvlak-taak

'n Blaaierbladsy loop gewoonlik JavaScript op 'n hoofdraad. Daardie draad koördineer ook uitleg, verf en insette. As een lang berekening dit in beslag neem, kan klikke vertraag voel, animasie kan stop, en die blaaier kan waarsku dat die bladsy nie reageer nie.

'n Beeldredigeerder het baie hoofdraadverantwoordelikhede voordat afleiding selfs begin:

Deur 'n segmenteringsmodel se numeriese werk op dieselfde draad te plaas, sal daardie take direk meeding. 'n Werker skep 'n duideliker grens.

Die boodskap-gebaseerde grens

Die redakteur en werker deel nie gewone veranderlikes nie. Hulle kommunikeer deur boodskappe te stuur. 'n Vereenvoudigde vloei lyk soos volg:

  1. Die redigeerder skep of hergebruik 'n werker.
  2. Dit vra die werker om die afleidingslooptyd en model te inisialiseer.
  3. Dit berei beelddata voor en stuur 'n afleidingsversoek.
  4. Die werker skakel die data om na die model se verwagte insette.
  5. Die werker bestuur die model en produseer maskerwaardes.
  6. Dit stuur die masker of resultaat data terug.
  7. Die redigeerder stel die voorskou saam en maak verfyning of uitvoer moontlik.

Boodskappe moet genoeg konteks insluit om 'n antwoord by die korrekte versoek te pas. Dit maak saak as 'n gebruiker 'n ander prent kies voordat die vorige taak klaar is. Die koppelvlak moet vermy om 'n ou resultaat oor 'n nuwe bron te vertoon.

Kopieer en dra beelddata oor

Om 'n klein teksboodskap te stuur is goedkoop. Die stuur van miljoene pixelwaardes kan duur wees as die blaaier die hele buffer moet kopieer. Web API’s kan eerder eienaarskap van sekere binêre buffers oordra. 'n Oorgeplaasde buffer word aan die ontvanger beskikbaar sonder om 'n bruikbare duplikaat aan die senderkant te behou.

Daardie optimering kom met 'n ontwerpbeperking: na oordrag kan die sender nie dieselfde buffer gebruik asof hy steeds die data besit nie. 'n Redigeerder kan 'n aparte vertoonvoorstelling behou, 'n toegewyde afleidingsbuffer skep, of later rekonstrueer wat dit nodig het.

Nie elke implementering gebruik oordrag op presies dieselfde plekke nie. Die algemene les is dat draadskeiding nie databeweging laat verdwyn nie. Beeldafmetings, buffergrootte en die aantal omskakelings beïnvloed steeds latensie en geheue.

Wat Easy Background Remover in die werker sit

Easy Background Remover gebruik 'n Webwerker met 'n blaaierafleidingslooptyd vir segmentering op die toestel. Die swaar outomatiese uitsnystap produseer 'n masker. Die redigeerder vertoon dan die saamgestelde resultaat en ondersteun SVE-doekkwasverfyning.

Hierdie skeiding gee mislukkings 'n meer bruikbare grens. As die werker nie kan inisialiseer nie of ineenstort tydens afleiding, kan die koppelvlak 'n werkerverwante fout rapporteer in plaas daarvan om op 'n permanent gevriesde oortjie as die enigste sein staat te maak.

Dit hou ook die plaaslike verwerkingseis verstaanbaar. Die stuur van pieksels vanaf 'n uitbreidingbladsy na sy eie werker is kommunikasie binne die blaaieromgewing, nie 'n oplaai na 'n afgeleë uitsny-API nie. Die eerste sessie kan die herbruikbare modelbate afsonderlik aflaai; sien Hoekom eerste hardloop 'n model aflaai.

'n Werker maak nie onmiddellik berekening nie

Werkers verbeter reaksie, nie rou toestelvermoë nie. Die model verbruik steeds SVE, GPU of ander runtime-hulpbronne volgens wat die blaaier kan verskaf. 'n Groot inset kan steeds langer neem en meer geheue benodig as 'n klein een.

Verskeie perke bly:

Om vyf afleidingswerkers vir vyf beelde te begin is nie outomaties vyf keer vinniger nie. Die werkers deel dieselfde masjien. Parallelle take kan meeding vir geheuebandwydte en uitvoeringshulpbronne, terwyl elke modelgeval sy eie geheuekoste kan dra.

Vorderingsverslagdoening is samewerkend

'n Werker kan statusboodskappe stuur, maar hy weet nie outomaties watter vorderingspersentasie akkuraat sal voel nie. Modelaflaai, runtime-inisialisering, invoervoorbereiding, afleiding, maskeromskakeling en voorskouweergawe is afsonderlike fases met verskillende tydsberekening.

Sommige fases het meetbare grepe. 'n Enkele modeluitvoering mag slegs “begin” en “klaar” blootstel. 'n Gladde persentasie wat eenvormig vorder, kan dus kosmeties eerder as 'n presiese meting wees.

Nuttige vordering UI noem die fase waar moontlik: voorbereiding van model, verwerking van beeld, of bou van resultaat. Dit hanteer ook mislukking en kansellasie in plaas daarvan om 'n draaier sonder verduideliking te laat.

Kansellasie is meer as om 'n draaier weg te steek

As die gebruiker 'n prent toemaak of oor begin, kan die koppelvlak die uiteindelike reaksie van die verouderde versoek ignoreer. Om die onderliggende berekening onmiddellik te stop, kan addisionele ondersteuning vanaf die looptyd vereis of om die werker te beëindig en te herskep.

Die beëindiging van 'n werker is deurslaggewend, maar dit gooi sy geïnisialiseerde toestand weg. Die volgende taak moet dalk die model weer laai en inisialiseer. Vir 'n kort operasie kan dit goedkoper wees om die resultaat as verouderd te merk as om alles af te breek.

Die korrekte keuse hang af van geheuedruk, werkingsduur en looptydvermoëns. Vanuit die gebruiker se perspektief is die belangrike reël dat verouderde werk nie die huidige wysiging moet oorskryf nie.

Foute moet ook die grens oorsteek

'n Uitsondering binne 'n werker word nie 'n normale hoofdraad-uitsondering nie. Die werker moet bruikbare foute rapporteer, en die redigeerder moet luister vir foute op werkervlak.

Goeie fouthantering onderskei ten minste:

Dit is meer uitvoerbaar as 'n generiese “iets het verkeerd geloop”, veral wanneer eerste-lopie-opstelling en normale beeldverwerking verskillende remedies het.

Werkeruitset is steeds net 'n eerste masker

Draadargitektuur verbeter nie op sigself 'n dubbelsinnige rand nie. Die werker kan 'n tegnies geldige masker terugbesorg wat steeds pels, deursigtige materiaal, smal bande of 'n gewenste skaduwee mis. Dit is segmenterings- en bedoelingsvrae.

Die redakteur se werk hervat na afleiding: skaal die masker in die werkende koördinaatstelsel, stel 'n voorskou saam, laat die gebruiker dit verfyn en voer die huidige toestand uit. Maskerresolusie teenoor voorskougrootte verduidelik hoekom daardie koördinaatstelsels nie verwar moet word nie.

'n Beknopte verstandelike model

Dink aan die werker as 'n plaaslike spesialis agter 'n boodskapvenster:

Vir die model se aansig van die pieksels self, gaan voort met Wat 'n uitsnymodel op die toestel sien. Vir 'n end-tot-end praktiese oorsig, sien Hoe plaaslike agtergrondverwydering werk.

Hou aan om te verken

Interessant