Besplatno proširenje za Chrome — izrezi na uređaju

Osnove obrade slika u Web Workeru

Web Worker je zaseban kontekst izvršavanja JavaScripta koji može izvršiti skupe kalkulacije bez da glavni nit urednika obavi sav posao. Za obradu slika u pretraživaču, to znači da podešavanje modela i zaključivanje mogu pobjeći od niti odgovorne za dugmad, poruke o napretku, unos četkice i ažuriranja ekrana.

Rezultat nije „besplatna pozadinska obrada“. Isti uređaj i dalje obavlja računanje i koristi memoriju. Prednost arhitekture je razdvajanje: manja je vjerovatnoća da će teška operacija modela blokirati svaki odgovor interfejsa dok se izvodi.

Glavna nit ima zadatak korisničkog sučelja

Stranica pretraživača obično pokreće JavaScript na glavnoj niti. Ta nit također koordinira raspored, slikanje i unos. Ako ga zauzme jedno dugačko izračunavanje, klikovi mogu biti odloženi, animacija može prestati, a pretraživač može upozoriti da stranica ne reagira.

Uređivač slika ima puno odgovornosti glavne niti prije nego što zaključivanje uopće počne:

Stavljanje numeričkog rada modela segmentacije na istu nit učinilo bi da se ti zadaci direktno nadmeću. Radnik stvara jasniju granicu.

Granica zasnovana na poruci

Urednik i radnik ne dijele obične varijable. Oni komuniciraju slanjem poruka. Pojednostavljeni tok izgleda ovako:

  1. Urednik kreira ili ponovo koristi radnika.
  2. Traži od radnika da inicijalizira vrijeme izvođenja zaključivanja i model.
  3. Priprema slikovne podatke i šalje zahtjev za zaključivanjem.
  4. Radnik pretvara podatke u očekivani ulaz modela.
  5. Radnik pokreće model i proizvodi vrijednosti maske.
  6. Šalje masku ili podatke o rezultatu nazad.
  7. Editor sastavlja pregled i omogućava preciziranje ili izvoz.

Poruke bi trebale uključivati ​​dovoljno konteksta da odgovaraju odgovoru na ispravan zahtjev. Ovo je važno ako korisnik odabere drugu sliku prije nego što prethodni posao završi. Interfejs mora izbjegavati prikazivanje starog rezultata preko novog izvora.

Kopiranje i prijenos slikovnih podataka

Slanje male tekstualne poruke je jeftino. Slanje miliona vrijednosti piksela može biti skupo ako pretraživač mora kopirati cijeli bafer. Umjesto toga, Web API-ji mogu prenijeti vlasništvo nad određenim binarnim baferima. Preneseni bafer postaje dostupan primaocu bez zadržavanja upotrebljivog duplikata na strani pošiljaoca.

Ta optimizacija dolazi s ograničenjem dizajna: nakon prijenosa, pošiljatelj ne može nastaviti koristiti isti bafer kao da još uvijek posjeduje podatke. Editor može zadržati zaseban prikaz prikaza, kreirati namjenski bafer zaključivanja ili rekonstruirati ono što mu treba kasnije.

Ne koristi svaka implementacija transfer na potpuno istim mjestima. Opća lekcija je da odvajanje niti ne čini da kretanje podataka nestane. Dimenzije slike, veličina bafera i broj konverzija i dalje utiču na kašnjenje i memoriju.

Šta Easy Background Remover stavlja u radnika

Easy Background Remover koristi Web Worker sa vremenom izvođenja za zaključivanje pretraživača za segmentaciju na uređaju. Teški automatski korak rezanja proizvodi masku. Editor tada prikazuje sastavljeni rezultat i podržava prečišćavanje kista CPU-a.

Ovo razdvajanje daje neuspjesima korisniju granicu. Ako se radnik ne može inicijalizirati ili ruši tokom zaključivanja, sučelje može prijaviti grešku u vezi s radnikom umjesto da se oslanja na trajno zamrznutu karticu kao jedini signal.

To također čini tvrdnju o lokalnoj obradi razumljivom. Slanje piksela sa stranice ekstenzije sopstvenom radniku je komunikacija unutar okruženja pretraživača, a ne otpremanje na API za udaljeno isključivanje. Prva sesija može zasebno preuzeti materijal za višekratnu upotrebu; pogledajte Zašto prvo pokretanje preuzima model.

Radnik ne čini računanje trenutnim

Radnici poboljšavaju odzivnost, a ne sposobnost sirovih uređaja. Model i dalje troši CPU, GPU ili druge runtime resurse prema onome što pretraživač može pružiti. Veliki ulaz i dalje može trajati duže i zahtijevati više memorije od malog.

Ostaje nekoliko ograničenja:

Pokretanje pet inferencija za pet slika nije automatski pet puta brže. Radnici dijele istu mašinu. Paralelni poslovi se mogu takmičiti za memorijski propusni opseg i izvršne resurse, dok svaka instanca modela može snositi vlastitu cijenu memorije.

Izvještavanje o napretku je kooperativno

Radnik može slati statusne poruke, ali ne zna automatski koji će postotak napretka biti tačan. Preuzimanje modela, inicijalizacija vremena izvođenja, priprema unosa, zaključivanje, konverzija maske i renderiranje pregleda su odvojene faze s različitim vremenskim rasporedom.

Neke faze imaju mjerljiv broj bajtova. Izvršenje jednog modela može izložiti samo “započeto” i “završeno”. Lagani postotak koji ravnomjerno napreduje stoga može biti kozmetički, a ne precizno mjerenje.

Korisno korisničko sučelje napretka imenuje faze kada je to moguće: priprema modela, obrada slike ili rezultat izgradnje. Također se bavi neuspjehom i otkazivanjem umjesto da ostavlja spinner bez objašnjenja.

Otkazivanje je više od skrivanja spinnera

Ako korisnik zatvori sliku ili počne ispočetka, sučelje može zanemariti eventualni odgovor zastarjelog zahtjeva. Zaustavljanje osnovnog izračunavanja može zahtijevati dodatnu podršku iz vremena izvođenja ili prekid i ponovno kreiranje radnika.

Ukidanje radnika je odlučujuće, ali odbacuje njegovo inicijalizirano stanje. Sljedeći posao će možda morati ponovo učitati i inicijalizirati model. Za kratku operaciju, označavanje rezultata može biti jeftinije od rušenja svega.

Ispravan izbor zavisi od pritiska memorije, trajanja rada i mogućnosti rada. Iz perspektive korisnika, važno je pravilo da zastarjeli rad ne smije prepisati trenutnu izmjenu.

Greške također moraju prijeći granicu

Izuzetak unutar radnika ne postaje normalan izuzetak glavne niti. Radnik mora prijaviti upotrebljive greške, a urednik treba da sluša greške na nivou radnika.

Dobro rukovanje greškama razlikuje barem:

Ovo je djelotvornije od generičkog „nešto je pošlo po zlu“, posebno kada prvo pokretanje i normalna obrada slike imaju različite lijekove.

Izlaz radnika je još uvijek samo prva maska

Arhitektura niti ne poboljšava dvosmislenu ivicu sama po sebi. Radnik može vratiti tehnički ispravnu masku kojoj još nedostaje krzno, prozirni materijal, uske trake ili željena sjena. To su pitanja o segmentaciji i namjeri.

Posao urednika se nastavlja nakon zaključivanja: skalirajte masku u radni koordinatni sistem, sastavite pregled, pustite korisniku da ga precizira i izvezite trenutno stanje. Rezolucija maske u odnosu na veličinu pregleda objašnjava zašto se ti koordinatni sistemi ne bi trebali brkati.

Sažeti mentalni model

Zamislite radnika kao lokalnog stručnjaka iza prozora za poruke:

Za prikaz modela samih piksela, nastavite sa Šta vidi model izreza na uređaju. Za praktičan pregled od kraja do kraja, pogledajte Kako funkcionira lokalno uklanjanje pozadine.

Nastavite istraživati

Zanimljivo