Web Worker इमेज प्रक्रियेची मूलतत्त्वे
मुख्य थ्रेडवरील जड गणना पृष्ठ मंद करते. Web Worker मॉडेल इन्फरन्स वेगळ्या थ्रेडवर चालवतो जेणेकरून बटणे आणि पूर्वावलोकन वापरण्यायोग्य राहतात.
तुम्हाला असे वाटते की मास्क मोजला जात असतानाही एडिटर प्रतिसाद देत राहतो.
मुख्य थ्रेडमध्ये वापरकर्ता-इंटरफेस कार्य आहे
ब्राउझर पृष्ठ सामान्यत: मुख्य थ्रेडवर JavaScript चालवते. तो थ्रेड लेआउट, पेंटिंग आणि इनपुट देखील समन्वयित करतो. एक लांब गणनेने ते व्यापल्यास, क्लिक्स विलंबित वाटू शकतात, ॲनिमेशन थांबू शकते आणि ब्राउझर चेतावणी देऊ शकतो की पृष्ठ प्रतिसाद देत नाही.
अनुमान सुरू होण्यापूर्वी इमेज एडिटरकडे अनेक मुख्य-थ्रेड जबाबदाऱ्या असतात:
- फाइल निवड, पेस्ट किंवा ड्रॉप प्राप्त करा;
- डीकोड आणि प्रतिमा प्रदर्शित करा;
- प्रगती आणि त्रुटी स्थिती अद्यतनित करा;
- पूर्वावलोकन कॅनव्हास काढा;
- ब्रशची हालचाल जोडा आणि पुसून टाका;
- डाउनलोड किंवा क्लिपबोर्ड क्रिया तयार करा.
सेगमेंटेशन मॉडेलचे संख्यात्मक कार्य एकाच धाग्यावर टाकल्यास ती कार्ये थेट स्पर्धा करू शकतील. एक कार्यकर्ता एक स्पष्ट सीमा तयार करतो.
संदेश-आधारित सीमा
संपादक आणि कार्यकर्ता सामान्य चल सामायिक करत नाहीत. ते संदेश पाठवून संवाद साधतात. एक सरलीकृत प्रवाह असे दिसते:
- संपादक कार्यकर्ता तयार करतो किंवा पुन्हा वापरतो.
- हे कामगाराला अनुमान रनटाइम आणि मॉडेल सुरू करण्यास सांगते.
- ते प्रतिमा डेटा तयार करते आणि एक अनुमान विनंती पाठवते.
- कार्यकर्ता डेटाला मॉडेलच्या अपेक्षित इनपुटमध्ये रूपांतरित करतो.
- कार्यकर्ता मॉडेल चालवतो आणि मुखवटा मूल्ये तयार करतो.
- ते मास्क किंवा परिणाम डेटा परत पाठवते.
- संपादक पूर्वावलोकन संमिश्रित करतो आणि परिष्करण किंवा निर्यात सक्षम करतो.
योग्य विनंतीला प्रतिसाद मिळण्यासाठी संदेशांमध्ये पुरेसा संदर्भ समाविष्ट असावा. मागील काम पूर्ण होण्यापूर्वी वापरकर्त्याने दुसरी प्रतिमा निवडल्यास हे महत्त्वाचे आहे. इंटरफेसने नवीन स्त्रोतावर जुना परिणाम प्रदर्शित करणे टाळले पाहिजे.
इमेज डेटा कॉपी आणि ट्रान्सफर करणे
लहान मजकूर संदेश पाठवणे स्वस्त आहे. ब्राउझरला संपूर्ण बफर कॉपी करणे आवश्यक असल्यास लाखो पिक्सेल मूल्ये पाठवणे महाग असू शकते. वेब API त्याऐवजी विशिष्ट बायनरी बफरची मालकी हस्तांतरित करू शकतात. प्रेषकाच्या बाजूने वापरण्यायोग्य डुप्लिकेट न ठेवता हस्तांतरित बफर प्राप्तकर्त्यासाठी उपलब्ध होते.
ते ऑप्टिमायझेशन डिझाइनच्या मर्यादांसह येते: हस्तांतरणानंतर, प्रेषक समान बफर वापरणे चालू ठेवू शकत नाही जसे की त्याच्याकडे डेटा आहे. संपादक वेगळे प्रदर्शन प्रतिनिधित्व राखून ठेवू शकतो, एक समर्पित अनुमान बफर तयार करू शकतो किंवा त्याला नंतर आवश्यक असलेली पुनर्रचना करू शकतो.
प्रत्येक अंमलबजावणी अगदी त्याच ठिकाणी हस्तांतरण वापरत नाही. सामान्य धडा असा आहे की थ्रेड वेगळे केल्याने डेटाची हालचाल अदृश्य होत नाही. प्रतिमा परिमाणे, बफर आकार आणि रूपांतरणांची संख्या अद्याप विलंबता आणि मेमरी प्रभावित करते.
काय Easy Background Remover कामगारामध्ये ठेवतो
Easy Background Remover ऑन-डिव्हाइस विभाजनासाठी ब्राउझर अनुमान रनटाइमसह वेब वर्कर वापरते. जड स्वयंचलित कटआउट चरण एक मुखवटा तयार करते. संपादक नंतर संमिश्र परिणाम प्रदर्शित करतो आणि CPU-कॅनव्हास ब्रश शुद्धीकरणास समर्थन देतो.
हे पृथक्करण अपयशांना अधिक उपयुक्त सीमा देते. जर कार्यकर्ता निष्कर्ष काढू शकत नाही किंवा क्रॅश होऊ शकत नाही, तर इंटरफेस केवळ सिग्नल म्हणून कायमस्वरूपी गोठलेल्या टॅबवर अवलंबून न राहता कामगार-संबंधित त्रुटी नोंदवू शकतो.
हे स्थानिक-प्रोसेसिंग दावा देखील समजण्यायोग्य ठेवते. एक्स्टेंशन पेजवरून स्वतःच्या कार्यकर्त्याला पिक्सेल पाठवणे हे ब्राउझर वातावरणातील संवाद आहे, रिमोट API वर अपलोड नाही. पहिल्या सत्रात पुन्हा वापरता येण्याजोग्या मॉडेलची मालमत्ता स्वतंत्रपणे डाउनलोड केली जाऊ शकते; पहा प्रथम रन एखादे मॉडेल का डाउनलोड करते.
कार्यकर्ता गणना त्वरित करत नाही
कामगार प्रतिसाद सुधारतात, कच्च्या उपकरणाची क्षमता नाही. ब्राउझर काय देऊ शकतो त्यानुसार मॉडेल अजूनही CPU, GPU किंवा इतर रनटाइम संसाधने वापरतो. मोठ्या इनपुटला अद्याप जास्त वेळ लागू शकतो आणि लहानपेक्षा जास्त मेमरी आवश्यक आहे.
अनेक मर्यादा शिल्लक आहेत:
- मॉडेल इनिशिएलायझेशनची वास्तविक किंमत आहे;
- कॉपी केल्यास पिक्सेल बफर दोन्ही बाजूंनी मेमरी व्यापतात;
- आकार बदलणे आणि स्वरूप रूपांतरण वेळ लागतो;
- कमी-मेमरी डिव्हाइसेस मोठ्या प्रतिमांसह संघर्ष करू शकतात;
- अधिक कामगार विवाद कमी करण्याऐवजी वाढवू शकतात;
- निर्यात आणि कॅनव्हास अद्यतनांमध्ये अद्याप मुख्य थ्रेडचा समावेश असू शकतो.
पाच प्रतिमांसाठी पाच अनुमान कामगार सुरू करणे आपोआप पाचपट जलद होत नाही. कामगार समान मशीन सामायिक करतात. समांतर नोकऱ्या मेमरी बँडविड्थ आणि अंमलबजावणी संसाधनांसाठी स्पर्धा करू शकतात, तर प्रत्येक मॉडेल उदाहरणाची स्वतःची मेमरी किंमत असू शकते.
प्रगती अहवाल सहकारी आहे
कार्यकर्ता स्थिती संदेश पाठवू शकतो, परंतु प्रगती टक्केवारी किती अचूक वाटेल हे आपोआप कळत नाही. मॉडेल डाउनलोड, रनटाइम इनिशिएलायझेशन, इनपुट तयारी, अनुमान, मुखवटा रूपांतरण आणि पूर्वावलोकन प्रस्तुतीकरण हे वेगवेगळ्या वेळेसह वेगळे टप्पे आहेत.
काही टप्प्यांमध्ये मोजता येण्याजोग्या बाइट संख्या असतात. एकल मॉडेल अंमलबजावणी केवळ “सुरू” आणि “पूर्ण” उघड करू शकते. एक गुळगुळीत टक्केवारी जी एकसमान प्रगती करते ती अचूक मोजमाप करण्याऐवजी कॉस्मेटिक असू शकते.
उपयुक्त प्रगती UI जेव्हा शक्य असेल तेव्हा टप्प्याला नाव देते: मॉडेल तयार करणे, प्रतिमा प्रक्रिया करणे किंवा परिणाम तयार करणे. हे कोणतेही स्पष्टीकरण न देता स्पिनर सोडण्याऐवजी अपयश आणि रद्द करणे देखील हाताळते.
रद्द करणे हे स्पिनरला लपवण्यापेक्षा जास्त आहे
जर वापरकर्त्याने प्रतिमा बंद केली किंवा ती पुन्हा सुरू केली, तर इंटरफेस कालबाह्य विनंतीच्या अंतिम प्रतिसादाकडे दुर्लक्ष करू शकतो. अंतर्निहित गणना ताबडतोब थांबवण्यासाठी रनटाइममधून अतिरिक्त समर्थनाची आवश्यकता असू शकते किंवा कार्यकर्ता समाप्त करणे आणि पुन्हा तयार करणे आवश्यक आहे.
कामगाराला संपवणे निर्णायक आहे, परंतु ते त्याची आरंभिक स्थिती टाकून देते. पुढील कामासाठी मॉडेल पुन्हा लोड करणे आणि आरंभ करणे आवश्यक असू शकते. लहान ऑपरेशनसाठी, परिणाम शिळा चिन्हांकित करणे सर्वकाही फाडून टाकण्यापेक्षा स्वस्त असू शकते.
योग्य निवड मेमरी प्रेशर, ऑपरेशन कालावधी आणि रनटाइम क्षमतांवर अवलंबून असते. वापरकर्त्याच्या दृष्टीकोनातून, महत्त्वाचा नियम असा आहे की जुने काम सध्याचे संपादन ओव्हरराईट करू नये.
चुका देखील सीमा ओलांडणे आवश्यक आहे
कामगारातील अपवाद हा सामान्य मुख्य-थ्रेड अपवाद बनत नाही. कामगाराने वापरण्यायोग्य त्रुटींची तक्रार करणे आवश्यक आहे आणि संपादकाने कामगार-स्तरीय अपयशांचे ऐकले पाहिजे.
चांगली त्रुटी हाताळणी किमान फरक करते:
- मॉडेल मालमत्ता अनुपलब्ध;
- मॉडेल आरंभ अयशस्वी;
- प्रतिमा डीकोड किंवा इनपुट तयार करणे अयशस्वी;
- अनुमान अयशस्वी;
- कामगार अनपेक्षितपणे थांबला;
- परिणाम यापुढे वर्तमान विनंतीशी संबंधित नाही.
सामान्य “काहीतरी चूक झाली” पेक्षा हे अधिक कृती करण्यायोग्य आहे, विशेषत: जेव्हा प्रथम-रन सेटअप आणि सामान्य प्रतिमा प्रक्रियेत भिन्न उपाय असतात.
कामगार आउटपुट अजूनही फक्त पहिला मुखवटा आहे
थ्रेड आर्किटेक्चर स्वतःच एक अस्पष्ट किनार सुधारत नाही. कामगार तांत्रिकदृष्ट्या वैध मास्क परत करू शकतो जो अद्याप फर, पारदर्शक सामग्री, अरुंद पट्ट्या किंवा इच्छित सावली गमावत नाही. ते विभाजन आणि हेतू प्रश्न आहेत.
अनुमान काढल्यानंतर संपादकाचे काम पुन्हा सुरू होते: मुखवटा कार्यरत समन्वय प्रणालीमध्ये स्केल करा, पूर्वावलोकन संयोजित करा, वापरकर्त्याला ते परिष्कृत करू द्या आणि वर्तमान स्थिती निर्यात करा. मुखवटा रिझोल्यूशन वि पूर्वावलोकन आकार स्पष्ट करते की त्या समन्वय प्रणालींमध्ये गोंधळ का होऊ नये.
एक संक्षिप्त मानसिक मॉडेल
संदेश विंडोच्या मागे स्थानिक तज्ञ म्हणून कार्यकर्त्याचा विचार करा:
- संवादाचे मालक संपादक आहेत;
- कार्यकर्त्याकडे जड अनुमान कार्य आहे;
- बायनरी प्रतिमा डेटा परिभाषित सीमा ओलांडतो;
- कार्यकर्ता मुखवटा परत करतो, प्रत्येक काठाबद्दल पूर्ण निर्णय नाही;
- वर्तमान स्थिती, पुनरावलोकन, परिष्करण आणि निर्यात यासाठी संपादक जबाबदार असतो.
स्वतः पिक्सेलच्या मॉडेलच्या दृश्यासाठी, डिव्हाइसवरील कटआउट मॉडेल काय पाहते सह सुरू ठेवा. एंड-टू-एंड व्यावहारिक विहंगावलोकन साठी, पहा स्थानिक पार्श्वभूमी काढणे कसे कार्य करते.