Asas pemprosesan imej Web Worker
Pengiraan berat pada benang utama menjadikan halaman lambat. Web Worker menjalankan inferens model pada benang berasingan supaya butang dan pratonton kekal berguna.
Bagi anda, editor masih bergerak balas sementara topeng dikira.
Benang utama mempunyai tugas antara muka pengguna
Halaman penyemak imbas biasanya menjalankan JavaScript pada urutan utama. Benang itu juga menyelaraskan susun atur, lukisan dan input. Jika satu pengiraan yang panjang menempatinya, klik mungkin terasa tertangguh, animasi boleh berhenti dan penyemak imbas mungkin memberi amaran bahawa halaman itu tidak bertindak balas.
Editor imej mempunyai banyak tanggungjawab utas utama sebelum inferens bermula:
- terima pemilihan fail, tampal atau lepas;
- menyahkod dan memaparkan imej;
- kemas kini kemajuan dan keadaan ralat;
- lukis kanvas pratonton;
- mengendalikan Tambah dan Padam pergerakan berus;
- sediakan tindakan muat turun atau papan keratan.
Meletakkan kerja berangka model segmentasi pada urutan yang sama akan menjadikan tugasan tersebut bersaing secara langsung. Seorang pekerja mencipta sempadan yang lebih jelas.
Sempadan berasaskan mesej
Editor dan pekerja tidak berkongsi pembolehubah biasa. Mereka berkomunikasi dengan menghantar mesej. Aliran yang dipermudahkan kelihatan seperti ini:
- Editor mencipta atau menggunakan semula pekerja.
- Ia meminta pekerja untuk memulakan masa jalan dan model inferens.
- Ia menyediakan data imej dan menghantar permintaan inferens.
- Pekerja menukar data kepada input jangkaan model.
- Pekerja menjalankan model dan menghasilkan nilai topeng.
- Ia menghantar semula topeng atau data hasil.
- Editor menyusun pratonton dan membolehkan penghalusan atau eksport.
Mesej harus mengandungi konteks yang mencukupi untuk memadankan respons kepada permintaan yang betul. Ini penting jika pengguna memilih imej lain sebelum tugas sebelumnya selesai. Antara muka mesti mengelak daripada memaparkan hasil lama berbanding sumber baharu.
Menyalin dan memindahkan data imej
Menghantar mesej teks kecil adalah murah. Menghantar berjuta-juta nilai piksel boleh menjadi mahal jika penyemak imbas perlu menyalin keseluruhan penimbal. API Web boleh memindahkan pemilikan penimbal binari tertentu sebaliknya. Penampan yang dipindahkan menjadi tersedia kepada penerima tanpa mengekalkan pendua yang boleh digunakan di sebelah penghantar.
Pengoptimuman itu datang dengan kekangan reka bentuk: selepas pemindahan, pengirim tidak boleh terus menggunakan penimbal yang sama seolah-olah ia masih memiliki data. Editor boleh mengekalkan perwakilan paparan yang berasingan, mencipta penimbal inferens khusus atau membina semula perkara yang diperlukan kemudian.
Tidak setiap pelaksanaan menggunakan pemindahan di tempat yang sama. Pelajaran umum ialah pemisahan benang tidak membuat pergerakan data hilang. Dimensi imej, saiz penimbal dan bilangan penukaran masih mempengaruhi kependaman dan memori.
Apa yang Easy Background Remover letakkan pada pekerja
Easy Background Remover menggunakan Pekerja Web dengan masa jalan inferens penyemak imbas untuk pembahagian pada peranti. Langkah pemotongan automatik yang berat menghasilkan topeng. Editor kemudian memaparkan hasil gabungan dan menyokong penghalusan berus CPU-kanvas.
Pemisahan ini memberikan kegagalan sempadan yang lebih berguna. Jika pekerja tidak boleh memulakan atau ranap semasa inferens, antara muka boleh melaporkan ralat berkaitan pekerja dan bukannya bergantung pada tab beku kekal sebagai satu-satunya isyarat.
Ia juga memastikan tuntutan pemprosesan tempatan dapat difahami. Menghantar piksel dari halaman sambungan kepada pekerjanya sendiri ialah komunikasi dalam persekitaran penyemak imbas, bukan muat naik ke API potongan jauh. Sesi pertama boleh memuat turun aset model boleh guna semula secara berasingan; lihat Mengapa larian pertama memuat turun model.
Seorang pekerja tidak membuat pengiraan segera
Pekerja meningkatkan daya tindak balas, bukan keupayaan peranti mentah. Model masih menggunakan CPU, GPU atau sumber masa jalan lain mengikut perkara yang boleh disediakan oleh penyemak imbas. Input yang besar masih boleh mengambil masa yang lebih lama dan memerlukan lebih banyak memori daripada yang kecil.
Beberapa had kekal:
- permulaan model mempunyai kos sebenar;
- penampan piksel menduduki memori pada kedua-dua belah jika disalin;
- mengubah saiz dan menukar format mengambil masa;
- peranti memori rendah mungkin bergelut dengan imej besar;
- lebih ramai pekerja boleh meningkatkan perbalahan dan bukannya mengurangkannya;
- kemas kini eksport dan kanvas masih boleh melibatkan urutan utama.
Memulakan lima pekerja inferens untuk lima imej tidak secara automatik lima kali lebih pantas. Pekerja berkongsi mesin yang sama. Pekerjaan selari boleh bersaing untuk jalur lebar memori dan sumber pelaksanaan, manakala setiap contoh model mungkin membawa kos memorinya sendiri.
Pelaporan kemajuan adalah bekerjasama
Pekerja boleh menghantar mesej status, tetapi ia tidak secara automatik mengetahui peratusan kemajuan yang akan dirasakan tepat. Muat turun model, permulaan masa jalan, penyediaan input, inferens, penukaran topeng dan pemaparan pratonton adalah fasa berasingan dengan pemasaan yang berbeza.
Sesetengah fasa mempunyai kiraan bait yang boleh diukur. Pelaksanaan model tunggal hanya boleh mendedahkan “dimulakan” dan “selesai”. Oleh itu, peratusan lancar yang maju secara seragam boleh menjadi kosmetik dan bukannya ukuran yang tepat.
UI kemajuan berguna menamakan fasa apabila boleh: menyediakan model, memproses imej atau hasil binaan. Ia juga mengendalikan kegagalan dan pembatalan dan bukannya meninggalkan pemutar tanpa penjelasan.
Pembatalan adalah lebih daripada menyembunyikan pemutar
Jika pengguna menutup imej atau memulakan semula, antara muka boleh mengabaikan respons akhirnya daripada permintaan yang sudah lapuk. Menghentikan pengiraan asas dengan serta-merta mungkin memerlukan sokongan tambahan daripada masa jalan atau menamatkan dan mencipta semula pekerja.
Menamatkan pekerja adalah penting, tetapi ia membuang keadaan permulaannya. Kerja seterusnya mungkin perlu memuatkan dan memulakan model sekali lagi. Untuk operasi yang singkat, menandakan hasil basi boleh menjadi lebih murah daripada meruntuhkan segala-galanya.
Pilihan yang betul bergantung pada tekanan memori, tempoh operasi dan keupayaan masa jalan. Dari perspektif pengguna, peraturan penting ialah kerja basi tidak boleh menimpa suntingan semasa.
Ralat perlu melepasi sempadan juga
Pengecualian di dalam pekerja tidak menjadi pengecualian utas utama biasa. Pekerja mesti melaporkan ralat yang boleh digunakan dan editor harus mendengar kegagalan peringkat pekerja.
Pengendalian ralat yang baik membezakan sekurang-kurangnya:
- model aset tidak tersedia;
- permulaan model gagal;
- penyahkod imej atau penyediaan input gagal;
- inferens gagal;
- pekerja berhenti tanpa diduga;
- hasil tidak lagi tergolong dalam permintaan semasa.
Ini lebih boleh diambil tindakan daripada “sesuatu telah berlaku” generik terutamanya apabila persediaan jalan pertama dan pemprosesan imej biasa mempunyai penyelesaian yang berbeza.
Keluaran pekerja masih hanya topeng pertama
Seni bina benang tidak menambah baik kelebihan yang tidak jelas dengan sendirinya. Pekerja boleh memulangkan topeng sah dari segi teknikal yang masih terlepas bulu, bahan lutsinar, tali sempit atau bayang yang diingini. Itu adalah soalan segmentasi dan niat.
Tugas editor disambung semula selepas inferens: skala topeng ke dalam sistem koordinat yang berfungsi, gubah pratonton, biarkan pengguna memperhalusinya dan mengeksport keadaan semasa. Resolusi topeng vs saiz pratonton menerangkan sebab sistem koordinat tersebut tidak boleh dikelirukan.
Model mental yang ringkas
Fikirkan pekerja itu sebagai pakar tempatan di sebalik tetingkap mesej:
- editor memiliki interaksi;
- pekerja memiliki tugas inferens yang berat;
- data imej binari melintasi sempadan yang ditentukan;
- pekerja memulangkan topeng, bukan penghakiman selesai tentang setiap tepi;
- editor tetap bertanggungjawab untuk keadaan semasa, semakan, penghalusan dan eksport.
Untuk paparan model terhadap piksel itu sendiri, teruskan dengan Apa yang dilihat oleh model potongan pada peranti. Untuk gambaran keseluruhan praktikal hujung ke hujung, lihat Cara pengalihan keluar latar belakang setempat berfungsi.