Web Worker basi di trasfurmazioni di l’imaghjini
Un Web Worker hè un cuntestu d’esekzione JavaScript separatu chì pò fà calculi caru senza fà chì u filu principale di l’editore faci tuttu u travagliu. Per u processu di l’imaghjini di u navigatore, questu significa chì a configurazione di u mudellu è l’inferenza pò scappà da u filu rispunsevuli di i buttoni, i missaghji di prugressu, l’input di pennelli è l’aghjurnamenti di u screnu.
U risultatu ùn hè micca “trattamentu di fondu liberu”. U listessu dispusitivu faci sempre u calculu è usa memoria. U benefiziu architettonicu hè a separazione: una operazione di mudellu pesante hè menu prubabile di bluccà ogni risposta di l’interfaccia mentre corre.
U filu principale hà un travagliu d’interfaccia d’utilizatore
Una pagina di navigatore normalmente esegue JavaScript in un filu principale. Ddu filu coordina ancu u layout, pittura è input. Se un calculu longu l’occupa, i clicchi ponu esse ritardati, l’animazione pò piantà, è u navigatore pò avvistà chì a pagina ùn risponde micca.
Un editore d’imaghjini hà assai rispunsabilità di u filu principale prima ancu di principià l’inferenza:
- riceve una selezzione di fugliale, incolla, o goccia;
- decodificà è mostra una maghjina;
- aghjurnà i stati di prugressu è errore;
- disegnà a tela di anteprima;
- manighjà Aggiungi è sguassà u muvimentu di a spazzola;
- preparanu l’azzioni di scaricamentu o clipboard.
Metà u travagliu numericu di un mudellu di segmentazione nantu à u stessu filu faria questi compiti cumpetenu direttamente. Un travagliadore crea un cunfini più chjaru.
U cunfini basatu in missaghju
L’editore è u travagliu ùn sparte micca variàbili ordinali. Si cumunicanu mandendu missaghji. Un flussu simplificatu s’assumiglia cusì:
- L’editore crea o reutiliza un travagliadore.
- Hè dumandatu à u travagliu per inizializà u runtime di inferenza è u mudellu.
- Prepara i dati di l’imaghjini è manda una dumanda di inferenza.
- U travagliadore cunvertisce i dati in l’input previstu di u mudellu.
- U travagliadore corre u mudellu è pruduce valori mascara.
- Si manda a mascara o dati risultu daretu.
- L’editore composite l’anteprima è permette a raffinazione o l’esportazione.
I missaghji duveranu include abbastanza cuntestu per currisponde à una risposta à a dumanda curretta. Questu importa se un utilizatore sceglie un’altra maghjina prima chì u travagliu precedente finisci. L’interfaccia deve evità di vede un vechju risultatu nantu à una nova fonte.
Copia è trasferimentu di dati di l’imaghjini
Mandà un picculu missaghju testu hè prezzu. Mandate milioni di valori di pixel pò esse caru se u navigatore hà da copià tuttu u buffer. L’API Web ponu trasfiriri a pruprietà di certi buffers binari invece. Un buffer trasferitu diventa dispunibule per u ricevitore senza mantene un duplicatu utilizzabile da u latu di u mittente.
Questa ottimisazione vene cun una limitazione di cuncepimentu: dopu u trasferimentu, u mittente ùn pò micca cuntinuà aduprà u listessu buffer cum’è s’ellu possede ancu e dati. Un editore pò mantene una rappresentazione di visualizazione separata, creà un buffer di inferenza dedicatu, o ricustruisce ciò chì hà bisognu dopu.
Ùn ogni implementazione usa u trasferimentu in esattamente i stessi lochi. A lezioni generale hè chì a separazione di filu ùn face micca sparisce u muvimentu di dati. E dimensioni di l’imaghjini, a dimensione di u buffer, è u numeru di cunversione anu sempre affettanu a latenza è a memoria.
Chì Easy Background Remover mette in u travagliadore
Easy Background Remover usa un Web Worker cù un runtime di inferenza di navigatore per a segmentazione in u dispositivu. U pesante passu di cutout automaticu produce una maschera. L’editore poi mostra u risultatu cumpostu è sustene u raffinamentu di u pennello CPU-canvas.
Questa separazione dà i fallimenti un cunfini più utile. Se u travagliadore ùn pò micca inizializà o crash durante l’inferenza, l’interfaccia pò signalà un errore legatu à u travagliu invece di confià in una tabulazione congelata permanentemente cum’è l’unicu signale.
Mantene ancu comprensibile l’affirmazione di trasfurmazioni lucali. Invià pixel da una pagina di estensione à u so propiu travagliadore hè cumunicazione in l’ambiente di u navigatore, micca un upload à una API di cutout remota. A prima sessione pò scaricà separatamente l’assetu mudellu reutilizable; vede Perchè a prima corsa scarica un mudellu.
Un travagliadore ùn faci micca u calculu istantaneu
I travagliadori migliurà a reattività, micca a capacità di u dispusitivu crudu. U mudellu cunsuma ancu CPU, GPU, o altre risorse di runtime secondu ciò chì u navigatore pò furnisce. Un grande input pò ancu piglià più longu è esige più memoria cà un picculu.
Restanu parechji limiti:
- l’inizializazione di u mudellu hà un costu veru;
- i buffer di pixel occupanu memoria da i dui lati se copiati;
- ridimensionamentu è furmatu di cunversione piglià tempu;
- i dispusitivi di poca memoria ponu luttà cù grandi imagine;
- più travagliadori ponu aumentà a disputa invece di riduce;
- L’aghjurnamenti di l’esportazione è di u canvas ponu ancu implicà u filu principale.
Cumincià cinque travagliadori di inferenza per cinque imagine ùn hè micca automaticamente cinque volte più veloce. I travagliadori sparte a stessa macchina. I travaglii paralleli ponu cumpete per a larghezza di banda di memoria è e risorse di esecuzione, mentre chì ogni esempiu di mudellu pò purtà u so propiu costu di memoria.
U rapportu di u prugressu hè cooperativu
Un travagliadore pò mandà messagi di statutu, ma ùn sapi micca automaticamente quale percentuale di prugressu si sentenu precisu. U scaricamentu di mudelli, l’inizializazione di u runtime, a preparazione di l’input, l’inferenza, a cunversione di maschere è a rendering di anteprima sò fasi separati cù timing differente.
Alcune fasi anu cunti di byte misurabili. Una sola esecuzione di mudellu pò esse solu “iniziatu” è “finitu”. Un percentualità liscia chì avanza uniformemente pò dunque esse cusmetichi piuttostu cà una misura precisa.
U prugressu utile UI nomina a fase quandu hè pussibule: preparazione di mudellu, trasfurmazioni di l’imaghjini, o risultatu di custruzzione. Si tratta ancu di fallimentu è annullamentu invece di lascià un spinner senza spiegazione.
L’annullamentu hè più cà ammuccià un spinner
Se l’utilizatore chjude una maghjina o ricomincia, l’interfaccia pò ignurà a risposta eventuale da a dumanda obsoleta. L’arrestu immediata di a computazione sottostante pò esse bisognu di supportu supplementu da u runtime o finisce è ricreà u travagliu.
A fine di un travagliadore hè decisivu, ma scarta u so statu inizializatu. U prossimu travagliu pò avè bisognu di carricà è inizializza di novu u mudellu. Per una corta operazione, marcà u risultatu stale pò esse più prezzu di sbattà tuttu.
A scelta curretta dipende da a pressione di memoria, a durata di l’operazione è e capacità di runtime. Da a perspettiva di l’utilizatori, a regula impurtante hè chì u travagliu stancu ùn deve micca soprascrivite l’editu attuale.
L’errori anu ancu bisognu di attraversà u cunfini
Un’eccezzioni in un travagliadore ùn diventa micca un’eccezzioni normale di filu principale. U travagliadore deve signalà l’errore utilizable, è l’editore deve esse à sente per i fallimenti à livellu di u travagliu.
Una bona gestione di l’errore distingue almenu:
- asset mudellu indisponibile;
- l’inizializazione di u mudellu hà fiascatu;
- a decodificazione di l’imaghjini o a preparazione di input falluta;
- inferenza falluta;
- u travagliadore hà firmatu inesperu;
- u risultatu ùn appartene più à a dumanda attuale.
Questu hè più azzione cà un genericu “qualcosa andò male”, soprattuttu quandu a prima installazione è u processatu di l’imagine normale anu rimedii diffirenti.
A pruduzzioni di i travagliadori hè sempre solu una prima maschera
L’architettura di filu ùn migliurà micca un bordu ambiguu per sè stessu. U travagliadore pò rinvià una maschera tecnicamente valida chì manca sempre di fur, materiale trasparente, cinturini stretti, o una ombra desiderata. Quessi sò dumande di segmentazione è intenzioni.
U travagliu di l’editore riprende dopu à l’inferenza: scala a maschera in u sistema di coordenate di travagliu, composite una vista previa, lasciate à l’utilizatore raffinà, è esportà u statu attuale. Risoluzione di maschera vs dimensione di anteprima spiega perchè quelli sistemi di coordenate ùn deve esse cunfusu.
Un mudellu mentale concisu
Pensate à u travagliadore cum’è un specialistu lucale daretu à una finestra di messagiu:
- l’editore pussede l’interazzione;
- u travagliadore pussede u travagliu di inferenza pesante;
- dati di l’imaghjini binari attraversanu un cunfini definitu;
- u travagliadore torna una maschera, micca un ghjudiziu finitu annantu à ogni bordu;
- l’editore resta rispunsevuli di u statu attuale, rivisione, raffinamentu è esportazione.
Per a vista di u mudellu di i pixelli stessi, cuntinueghja cù Ciò chì vede un mudellu di cutout in u dispositivu. Per una panoramica pratica di punta à punta, vede Cumu funziona a rimozione di u fondu locale.