Δωρεάν επέκταση Chrome — αφαίρεση φόντου στη συσκευή

Βασικά επεξεργασίας εικόνας με Web Worker

Ένας Web Worker είναι ξεχωριστό πλαίσιο εκτέλεσης JavaScript που μπορεί να κάνει ακριβούς υπολογισμούς χωρίς να αναγκάζει το κύριο νήμα του επεξεργαστή να κάνει όλη τη δουλειά. Για επεξεργασία εικόνας στο πρόγραμμα περιήγησης αυτό σημαίνει ότι η ρύθμιση μοντέλου και η εκτέλεση μπορούν να τρέχουν μακριά από το νήμα που χειρίζεται κουμπιά, μηνύματα προόδου, είσοδο πινέλου και ενημερώσεις οθόνης.

Το αποτέλεσμα δεν είναι «δωρεάν επεξεργασία φόντου». Η ίδια συσκευή εξακολουθεί να κάνει τον υπολογισμό και να χρησιμοποιεί μνήμη. Το αρχιτεκτονικό όφελος είναι ο διαχωρισμός: μια βαριά λειτουργία μοντέλου είναι λιγότερο πιθανό να μπλοκάρει κάθε απόκριση διεπαφής όσο τρέχει.

Το κύριο νήμα έχει μια εργασία διεπαφής χρήστη

Μια σελίδα προγράμματος περιήγησης εκτελεί συνήθως JavaScript σε ένα κύριο νήμα. Αυτό το νήμα συντονίζει επίσης τη διάταξη, τη ζωγραφική και την εισαγωγή. Εάν το καταλαμβάνει ένας μεγάλος υπολογισμός, τα κλικ ενδέχεται να καθυστερούν, η κινούμενη εικόνα μπορεί να σταματήσει και το πρόγραμμα περιήγησης μπορεί να προειδοποιήσει ότι η σελίδα δεν ανταποκρίνεται.

Ένα πρόγραμμα επεξεργασίας εικόνας έχει πολλές ευθύνες στο κύριο νήμα πριν καν ξεκινήσει η εξαγωγή συμπερασμάτων:

Η τοποθέτηση της αριθμητικής εργασίας ενός μοντέλου τμηματοποίησης στο ίδιο νήμα θα έκανε αυτές τις εργασίες να ανταγωνίζονται άμεσα. Ένας εργαζόμενος δημιουργεί ένα πιο ξεκάθαρο όριο.

Το όριο που βασίζεται σε μηνύματα

Ο επεξεργαστής και ο εργαζόμενος δεν μοιράζονται κοινές μεταβλητές. Επικοινωνούν στέλνοντας μηνύματα. Μια απλοποιημένη ροή μοιάζει με αυτό:

  1. Ο επεξεργαστής δημιουργεί ή επαναχρησιμοποιεί έναν εργαζόμενο.
  2. Ζητάει από τον εργάτη να αρχικοποιήσει τον χρόνο εκτέλεσης και το μοντέλο συμπερασμάτων.
  3. Προετοιμάζει δεδομένα εικόνας και στέλνει αίτημα συμπερασμάτων.
  4. Ο εργαζόμενος μετατρέπει τα δεδομένα στην αναμενόμενη είσοδο του μοντέλου.
  5. Ο εργαζόμενος εκτελεί το μοντέλο και παράγει τιμές μάσκας.
  6. Στέλνει πίσω τη μάσκα ή τα δεδομένα αποτελέσματος.
  7. Το πρόγραμμα επεξεργασίας συνθέτει την προεπισκόπηση και επιτρέπει τη βελτίωση ή την εξαγωγή.

Τα μηνύματα θα πρέπει να περιλαμβάνουν αρκετό πλαίσιο για να ταιριάζουν με μια απάντηση στο σωστό αίτημα. Αυτό έχει σημασία εάν ένας χρήστης επιλέξει άλλη εικόνα πριν τελειώσει η προηγούμενη εργασία. Η διεπαφή πρέπει να αποφεύγει την εμφάνιση ενός παλιού αποτελέσματος σε μια νέα πηγή.

Αντιγραφή και μεταφορά δεδομένων εικόνας

Η αποστολή ενός μικρού μηνύματος κειμένου είναι φθηνή. Η αποστολή εκατομμυρίων τιμών pixel μπορεί να είναι ακριβή εάν το πρόγραμμα περιήγησης πρέπει να αντιγράψει ολόκληρο το buffer. Τα API Ιστού μπορούν να μεταβιβάσουν την ιδιοκτησία ορισμένων δυαδικών buffer. Ένα μεταφερόμενο buffer γίνεται διαθέσιμο στον δέκτη χωρίς να διατηρείται ένα χρησιμοποιήσιμο αντίγραφο στην πλευρά του αποστολέα.

Αυτή η βελτιστοποίηση συνοδεύεται από έναν περιορισμό σχεδιασμού: μετά τη μεταφορά, ο αποστολέας δεν μπορεί να συνεχίσει να χρησιμοποιεί την ίδια προσωρινή μνήμη σαν να έχει ακόμα τα δεδομένα. Ένα πρόγραμμα επεξεργασίας μπορεί να διατηρήσει μια ξεχωριστή αναπαράσταση οθόνης, να δημιουργήσει ένα αποκλειστικό buffer συμπερασμάτων ή να ανακατασκευάσει αυτό που χρειάζεται αργότερα.

Δεν χρησιμοποιεί κάθε υλοποίηση μεταφορά ακριβώς στα ίδια σημεία. Το γενικό μάθημα είναι ότι ο διαχωρισμός νημάτων δεν εξαφανίζει την κίνηση των δεδομένων. Οι διαστάσεις της εικόνας, το μέγεθος της προσωρινής μνήμης και ο αριθμός των μετατροπών εξακολουθούν να επηρεάζουν τον λανθάνοντα χρόνο και τη μνήμη.

Τι Easy Background Remover βάζει στον εργάτη

Το Easy Background Remover χρησιμοποιεί ένα Web Worker με χρόνο εκτέλεσης συμπερασμάτων προγράμματος περιήγησης για τμηματοποίηση στη συσκευή. Το βαρύ βήμα αυτόματης διακοπής παράγει μια μάσκα. Στη συνέχεια, το πρόγραμμα επεξεργασίας εμφανίζει το σύνθετο αποτέλεσμα και υποστηρίζει τη βελτίωση του πινέλου καμβά CPU.

Αυτός ο διαχωρισμός δίνει στις αποτυχίες ένα πιο χρήσιμο όριο. Εάν ο εργαζόμενος δεν μπορεί να προετοιμάσει ή διακοπεί κατά τη διάρκεια της εξαγωγής συμπερασμάτων, η διεπαφή μπορεί να αναφέρει ένα σφάλμα που σχετίζεται με τον εργαζόμενο αντί να βασίζεται σε μια μόνιμα παγωμένη καρτέλα ως το μόνο σήμα.

Διατηρεί επίσης κατανοητό τον ισχυρισμό τοπικής επεξεργασίας. Η αποστολή εικονοστοιχείων από μια σελίδα επέκτασης στον δικό της εργαζόμενο είναι επικοινωνία μέσα στο περιβάλλον του προγράμματος περιήγησης και όχι μεταφόρτωση σε απομακρυσμένο API αποκοπής. Η πρώτη συνεδρία μπορεί να πραγματοποιήσει ξεχωριστή λήψη του επαναχρησιμοποιήσιμου στοιχείου μοντέλου. δείτε Γιατί η πρώτη εκτέλεση λαμβάνει ένα μοντέλο.

Ένας εργαζόμενος δεν κάνει τον υπολογισμό στιγμιαία

Οι εργαζόμενοι βελτιώνουν την ανταπόκριση, όχι την ακατέργαστη ικανότητα της συσκευής. Το μοντέλο εξακολουθεί να καταναλώνει CPU, GPU ή άλλους πόρους χρόνου εκτέλεσης ανάλογα με το τι μπορεί να παρέχει το πρόγραμμα περιήγησης. Μια μεγάλη είσοδος μπορεί να διαρκέσει περισσότερο και απαιτεί περισσότερη μνήμη από μια μικρή.

Αρκετά όρια παραμένουν:

Η εκκίνηση πέντε εργαζομένων συμπερασμάτων για πέντε εικόνες δεν είναι αυτόματα πέντε φορές πιο γρήγορη. Οι εργάτες μοιράζονται το ίδιο μηχάνημα. Οι παράλληλες εργασίες μπορούν να ανταγωνίζονται για το εύρος ζώνης της μνήμης και τους πόρους εκτέλεσης, ενώ κάθε παράδειγμα μοντέλου μπορεί να έχει το δικό της κόστος μνήμης.

Η αναφορά προόδου είναι συνεργατική

Ένας εργαζόμενος μπορεί να στείλει μηνύματα κατάστασης, αλλά δεν γνωρίζει αυτόματα ποιο ποσοστό προόδου θα είναι ακριβές. Η λήψη μοντέλου, η προετοιμασία χρόνου εκτέλεσης, η προετοιμασία εισόδου, το συμπέρασμα, η μετατροπή μάσκας και η απόδοση προεπισκόπησης είναι ξεχωριστές φάσεις με διαφορετικό χρονισμό.

Ορισμένες φάσεις έχουν μετρήσιμο αριθμό byte. Μια μεμονωμένη εκτέλεση μοντέλου μπορεί να εκθέσει μόνο “ξεκίνησε” και “ολοκληρώθηκε”. Ένα ομαλό ποσοστό που προχωρά ομοιόμορφα μπορεί επομένως να είναι καλλυντικό και όχι ακριβής μέτρηση.

Το Χρήσιμο περιβάλλον εργασίας προόδου ονομάζει τη φάση όταν είναι δυνατόν: προετοιμασία μοντέλου, επεξεργασία εικόνας ή αποτέλεσμα κατασκευής. Αντιμετωπίζει επίσης την αποτυχία και την ακύρωση αντί να αφήνει ένα spinner χωρίς εξήγηση.

Η ακύρωση είναι κάτι περισσότερο από την απόκρυψη ενός spinner

Εάν ο χρήστης κλείσει μια εικόνα ή ξεκινήσει από την αρχή, η διεπαφή μπορεί να αγνοήσει την ενδεχόμενη απάντηση από το παλιό αίτημα. Η άμεση διακοπή του υποκείμενου υπολογισμού μπορεί να απαιτεί πρόσθετη υποστήριξη από το χρόνο εκτέλεσης ή τον τερματισμό και την εκ νέου δημιουργία του εργαζόμενου.

Ο τερματισμός ενός εργαζόμενου είναι αποφασιστικός, αλλά απορρίπτει την αρχική του κατάσταση. Η επόμενη εργασία μπορεί να χρειαστεί να φορτώσει και να προετοιμάσει ξανά το μοντέλο. Για μια σύντομη λειτουργία, η επισήμανση του μπαγιάτικου αποτελέσματος μπορεί να είναι φθηνότερη από το να γκρεμίσετε τα πάντα.

Η σωστή επιλογή εξαρτάται από την πίεση της μνήμης, τη διάρκεια λειτουργίας και τις δυνατότητες χρόνου εκτέλεσης. Από την πλευρά του χρήστη, ο σημαντικός κανόνας είναι ότι η μπαγιάτικη εργασία δεν πρέπει να αντικαθιστά την τρέχουσα επεξεργασία.

Τα σφάλματα πρέπει επίσης να ξεπεράσουν το όριο

Μια εξαίρεση μέσα σε έναν εργαζόμενο δεν γίνεται κανονική εξαίρεση του κύριου νήματος. Ο εργαζόμενος πρέπει να αναφέρει σφάλματα που μπορούν να χρησιμοποιηθούν και ο επεξεργαστής πρέπει να ακούει για αποτυχίες σε επίπεδο εργαζομένου.

Ο καλός χειρισμός σφαλμάτων διακρίνει τουλάχιστον:

Αυτό είναι πιο λειτουργικό από ένα γενικό “κάτι πήγε στραβά”, ειδικά όταν η πρώτη εγκατάσταση και η κανονική επεξεργασία εικόνας έχουν διαφορετικές λύσεις.

Η παραγωγή εργαζομένων είναι ακόμα μόνο μια πρώτη μάσκα

Η αρχιτεκτονική νημάτων δεν βελτιώνει από μόνη της μια διφορούμενη άκρη. Ο εργαζόμενος μπορεί να επιστρέψει μια τεχνικά έγκυρη μάσκα που δεν έχει ακόμη γούνα, διαφανές υλικό, στενούς ιμάντες ή μια επιθυμητή σκιά. Αυτές είναι ερωτήσεις κατάτμησης και πρόθεσης.

Η εργασία του συντάκτη συνεχίζεται μετά το συμπέρασμα: κλιμακώστε τη μάσκα στο λειτουργικό σύστημα συντεταγμένων, συνθέστε μια προεπισκόπηση, αφήστε τον χρήστη να τη βελτιώσει και εξάγετε την τρέχουσα κατάσταση. Ανάλυση μάσκας έναντι μεγέθους προεπισκόπησης εξηγεί γιατί αυτά τα συστήματα συντεταγμένων δεν πρέπει να συγχέονται.

Ένα συνοπτικό νοητικό μοντέλο

Σκεφτείτε τον εργαζόμενο ως τοπικό ειδικό πίσω από ένα παράθυρο μηνυμάτων:

Για την προβολή του μοντέλου των ίδιων των εικονοστοιχείων, συνεχίστε με το Τι βλέπει ένα μοντέλο αποκοπής στη συσκευή. Για μια πρακτική επισκόπηση από άκρο σε άκρο, ανατρέξτε στο Πώς λειτουργεί η αφαίρεση τοπικού φόντου.

Συνεχίστε να εξερευνάτε

Ενδιαφέρον