Ücretsiz Chrome uzantısı — cihazdaki kesikler

Web Worker görüntü işlemenin temelleri

Web Çalışanı, tüm işi editörün ana iş parçacığının yapmasına gerek kalmadan pahalı hesaplamalar gerçekleştirebilen ayrı bir JavaScript yürütme bağlamıdır. Tarayıcı görüntü işleme için bu, model kurulumunun ve çıkarımın düğmelerden, ilerleme mesajlarından, fırça girişinden ve ekran güncellemelerinden sorumlu iş parçacığından kaçabileceği anlamına gelir.

Sonuç “ücretsiz arka planda işleme” değildir. Aynı cihaz hala hesaplamayı gerçekleştiriyor ve hafızayı kullanıyor. Mimari faydası ayırmadır: Ağır bir model işleminin, çalışırken her arayüz yanıtını engelleme olasılığı daha düşüktür.

Ana iş parçacığının bir kullanıcı arayüzü işi var

Bir tarayıcı sayfası normalde JavaScript’i ana iş parçacığında çalıştırır. Bu iş parçacığı aynı zamanda düzeni, boyamayı ve girişi de koordine eder. Uzun bir hesaplama onu meşgul ederse, tıklamalar gecikmiş gibi hissedilebilir, animasyon durabilir ve tarayıcı, sayfanın yanıt vermediği konusunda uyarıda bulunabilir.

Bir görüntü düzenleyicinin, çıkarım başlamadan önce birçok ana iş parçacığı sorumluluğu vardır:

Bir segmentasyon modelinin sayısal çalışmasını aynı iş parçacığına koymak, bu görevlerin doğrudan rekabet etmesini sağlayacaktır. Bir işçi daha net bir sınır oluşturur.

Mesaja dayalı sınır

Editör ve işçi sıradan değişkenleri paylaşmazlar. Mesaj göndererek iletişim kurarlar. Basitleştirilmiş bir akış şuna benzer:

  1. Düzenleyici bir çalışan oluşturur veya yeniden kullanır.
  2. Çalışandan çıkarım çalışma zamanını ve modelini başlatmasını ister.
  3. Görüntü verilerini hazırlar ve çıkarım isteği gönderir.
  4. Çalışan, verileri modelin beklenen girdisine dönüştürür.
  5. Çalışan modeli çalıştırır ve maske değerlerini üretir.
  6. Maskeyi veya sonuç bilgisini geri gönderir.
  7. Düzenleyici önizlemeyi birleştirir ve iyileştirmeyi veya dışa aktarmayı etkinleştirir.

Mesajlar, yanıtı doğru istekle eşleştirmek için yeterli bağlam içermelidir. Bu, kullanıcının önceki iş bitmeden başka bir görüntü seçmesi durumunda önemlidir. Arayüz, eski bir sonucu yeni bir kaynak üzerinde görüntülemekten kaçınmalıdır.

Görüntü verilerinin kopyalanması ve aktarılması

Küçük bir kısa mesaj göndermek ucuzdur. Tarayıcının arabelleğin tamamını kopyalaması gerekiyorsa milyonlarca piksel değerinin gönderilmesi pahalı olabilir. Web API’leri bunun yerine belirli ikili arabelleklerin sahipliğini aktarabilir. Aktarılan arabellek, gönderen tarafta kullanılabilir bir kopya tutulmadan alıcının kullanımına sunulur.

Bu optimizasyon bir tasarım kısıtlamasıyla birlikte gelir: Aktarımdan sonra gönderen, sanki hâlâ verinin sahibiymiş gibi aynı arabelleği kullanmaya devam edemez. Bir editör ayrı bir görüntü temsilini koruyabilir, özel bir çıkarım arabelleği oluşturabilir veya ihtiyaç duyduğu şeyi daha sonra yeniden oluşturabilir.

Her uygulama aktarımı tam olarak aynı yerlerde kullanmaz. Genel ders, iş parçacığı ayrımının veri hareketini ortadan kaldırmadığıdır. Görüntü boyutları, arabellek boyutu ve dönüşüm sayısı hâlâ gecikmeyi ve belleği etkiliyor.

Easy Background Remover işçiye ne katıyor?

Easy Background Remover, cihaz içi segmentasyon için tarayıcı çıkarımı çalışma zamanına sahip bir Web Çalışanı kullanır. Ağır otomatik kesme adımı bir maske üretir. Düzenleyici daha sonra birleştirilmiş sonucu görüntüler ve CPU tuval fırçası iyileştirmesini destekler.

Bu ayırma, arızalara daha kullanışlı bir sınır sağlar. Çalışan çıkarım sırasında başlatılamazsa veya çökerse arayüz, tek sinyal olarak kalıcı olarak dondurulmuş bir sekmeye güvenmek yerine çalışanla ilgili bir hatayı rapor edebilir.

Aynı zamanda yerel işleme iddiasını da anlaşılır kılar. Bir uzantı sayfasından kendi çalışanına piksel göndermek, uzaktan kesme API’sine yükleme değil, tarayıcı ortamında iletişimdir. İlk oturum, yeniden kullanılabilir model varlığını ayrı olarak indirebilir; Neden ilk çalıştırmada bir model indirilir? konusuna bakın.

Bir işçi anında hesaplama yapmaz

Çalışanlar ham cihaz kapasitesini değil yanıt verme yeteneğini geliştirir. Model, tarayıcının sağlayabileceği kapasiteye göre CPU, GPU veya diğer çalışma zamanı kaynaklarını tüketmeye devam ediyor. Büyük bir giriş, küçük bir girişten daha uzun sürebilir ve daha fazla bellek gerektirebilir.

Birkaç sınırlama kaldı:

Beş görüntü için beş çıkarım çalışanını başlatmak otomatik olarak beş kat daha hızlı değildir. İşçiler aynı makineyi paylaşıyor. Paralel işler bellek bant genişliği ve yürütme kaynakları için rekabet edebilirken, her model örneği kendi bellek maliyetini taşıyabilir.

İlerleme raporlaması işbirlikçidir

Bir çalışan durum mesajları gönderebilir ancak hangi ilerleme yüzdesinin doğru olduğunu otomatik olarak bilemez. Model indirme, çalışma zamanı başlatma, giriş hazırlama, çıkarım, maske dönüştürme ve önizleme oluşturma, farklı zamanlamalara sahip ayrı aşamalardır.

Bazı aşamaların ölçülebilir bayt sayıları vardır. Tek bir modelin yürütülmesi yalnızca “başlamış” ve “bitmiş” ifadelerini ortaya çıkarabilir. Bu nedenle, düzgün bir şekilde ilerleyen düzgün bir yüzde, kesin bir ölçümden ziyade kozmetik olabilir.

Yararlı ilerleme kullanıcı arayüzü, mümkün olduğunda aşamayı adlandırır: modelin hazırlanması, görüntünün işlenmesi veya sonucun oluşturulması. Ayrıca, bir döndürücüyü hiçbir açıklama yapmadan bırakmak yerine başarısızlık ve iptal durumlarını da ele alır.

İptal, bir döndürücüyü saklamaktan daha fazlasıdır

Kullanıcı bir görüntüyü kapatırsa veya baştan başlarsa arayüz, güncelliğini kaybetmiş isteğin nihai yanıtını göz ardı edebilir. Temel hesaplamanın hemen durdurulması, çalışma zamanından ek destek alınmasını veya çalışanın sonlandırılıp yeniden oluşturulmasını gerektirebilir.

Bir çalışanın sonlandırılması belirleyicidir ancak başlatılmış durumunu iptal eder. Bir sonraki işin modeli yeniden yüklemesi ve başlatması gerekebilir. Kısa bir operasyon için sonucu bayat olarak işaretlemek her şeyi yıkmaktan daha ucuz olabilir.

Doğru seçim, bellek basıncına, işlem süresine ve çalışma zamanı yeteneklerine bağlıdır. Kullanıcı açısından önemli kural, eskimiş çalışmanın mevcut düzenlemenin üzerine yazılmamasıdır.

Hataların da sınırı geçmesi gerekiyor

Bir çalışanın içindeki bir istisna, normal bir ana iş parçacığı istisnası haline gelmez. Çalışan kullanılabilir hataları bildirmeli ve editör, çalışan düzeyindeki hataları dinlemelidir.

İyi hata yönetimi en azından şunları ayırt eder:

Bu, özellikle ilk çalıştırma kurulumu ve normal görüntü işlemenin farklı çözümleri olduğunda, genel bir “bir şeyler ters gitti” ifadesinden daha uygulanabilir bir yöntemdir.

İşçi çıktısı hâlâ yalnızca ilk maskedir

İş parçacığı mimarisi belirsiz bir kenarı tek başına iyileştirmez. İşçi, kürkü, şeffaf materyali, dar askıları veya istenilen gölgesi bulunmayan, teknik olarak geçerli bir maskeyi iade edebilir. Bunlar segmentasyon ve niyet sorularıdır.

Editörün işi çıkarımdan sonra devam eder: maskeyi çalışma koordinat sistemine göre ölçeklendirin, bir ön izleme oluşturun, kullanıcının onu düzeltmesine izin verin ve mevcut durumu dışa aktarın. Maske çözünürlüğü ve önizleme boyutu, bu koordinat sistemlerinin neden karıştırılmaması gerektiğini açıklıyor.

Kısa ve öz bir zihinsel model

Çalışanı bir mesaj penceresinin ardındaki yerel bir uzman olarak düşünün:

Modelin piksellere ilişkin görünümü için Cihazdaki kesme modelinin gördüğü şey ile devam edin. Uçtan uca pratik bir genel bakış için Yerel arka planı kaldırmanın işleyişi konusuna bakın.