यदि आप कभी भी कंप्यूटर विज़न के साथ प्रयोग करना चाहते हैं लेकिन आपके पास एक जटिल विकास वातावरण स्थापित करने का समय नहीं है, तो यह ट्यूटोरियल आपके लिए है। कुछ स्थितियों में कंप्यूटर विज़न भौतिक सेंसर का एक बढ़िया विकल्प हो सकता है - खासकर जब चीजों को गिनने की बात आती है।
इस ट्यूटोरियल में, मैं आपको एक डेमो एप्लिकेशन के बारे में बताऊंगा जिसे हमने जारी किया है जो वाहनों की गिनती करके वर्तमान भीड़ को मापने के लिए लंदन के ट्रैफिक कैमरों का उपयोग करता है। यह एक पुन: प्रयोज्य प्रोजेक्ट टेम्पलेट पर आधारित है जिसे हमने प्रोजेक्ट को दोहराने में आपकी सहायता के लिए बनाया है। फिर मैं आपको दिखाऊंगा कि प्रोजेक्ट की अपनी प्रति बनाने के लिए इस टेम्पलेट का उपयोग कैसे करें और इसे क्विक्स में कैसे चलाएं - इवेंट स्ट्रीमिंग अनुप्रयोगों को विकसित करने और चलाने के लिए एक उपकरण।
कंप्यूटर विज़न एप्लिकेशन का हमारा डेमो संस्करण कॉन्फ्लुएंट क्लाउड (एक सेवा के रूप में पूरी तरह से प्रबंधित अपाचे काफ्का) में होस्ट किए गए एक संदेश ब्रोकर का भी उपयोग करता है, लेकिन ट्यूटोरियल का पालन करने के लिए कॉन्फ्लुएंट क्लाउड खाता होना अनिवार्य नहीं है।
यहां बताया गया है कि अंतिम परिणाम कैसा दिखना चाहिए:
आप इस डेमो संस्करण का लाइव प्रयोग निम्नलिखित पते पर कर सकते हैं: https://app-demo-computervisiondemo-prod.deployments.quix.ai/
यह ऐप क्या कर रहा है?
ऐप वाहनों की गिनती करने और भीड़भाड़ के स्तर का अनुमान लगाने के लिए लंदन के ट्रैफिक कैमरों (जिन्हें "जैम कैम" भी कहा जाता है) से लाइव फीड का उपयोग कर रहा है। इसके बाद यह लंदन के मानचित्र पर यह दिखाने के लिए दृश्य संकेतकों का उपयोग करता है कि कहां भीड़भाड़ हो रही है। वाहनों की गणना छवियों में वस्तु का पता लगाने के लिए एमएल मॉडल का उपयोग करके की जाती है (सेंसर या जीपीएस डेटा के बजाय)।
ऑब्जेक्ट डिटेक्शन मॉडल वाहनों को विभिन्न प्रकारों में वर्गीकृत करता है, और आप इन प्रकारों के आधार पर डेटा को फ़िल्टर कर सकते हैं।
उदाहरण के लिए, आप केवल उन बसों की संख्या देखने के लिए "ऑब्जेक्ट चुनें" ड्रॉपडाउन का उपयोग कर सकते हैं जिन्हें सभी ट्रैफ़िक कैमरों ने वर्तमान समय में पता लगाया है।
ध्यान दें कि एप्लिकेशन दिन भर में देखे गए सभी वाहनों की गणना नहीं करता है, केवल वर्तमान समय में (उस पर बाद में अधिक जानकारी)।
कंजेशन निर्धारित करने के लिए ऑब्जेक्ट डिटेक्शन का उपयोग क्यों करें?
क्योंकि अन्य तरीके हमेशा विश्वसनीय नहीं होते हैं। उदाहरण के लिए, 2020 में, बर्लिन स्थित एक कलाकार एक ठेले और 99 सेकंड-हैंड फोन के अलावा स्प्री नदी के मुख्य पुलों में से एक पर "वर्चुअल" ट्रैफिक जाम बनाने में कामयाब रहा। इसके बाद Google मानचित्र ने कर्तव्यनिष्ठापूर्वक उस क्षेत्र को मानचित्र पर अत्यधिक भीड़भाड़ वाले क्षेत्र के रूप में प्रदर्शित किया।
इस कारण से, जीपीएस-आधारित भीड़ अनुमान को बढ़ाने के लिए अक्सर अन्य प्रकार के डेटा का उपयोग किया जाता है। इसमें ऐतिहासिक पैटर्न, सेंसर डेटा, निर्धारित बंद पर नगरपालिका फ़ीड और उपयोगकर्ता द्वारा रिपोर्ट की गई घटनाएं शामिल हैं। हालाँकि, सबसे विश्वसनीय क्रॉस-रेफरेंस में से एक ट्रैफिक कैमरों से प्राप्त भीड़भाड़ की दृश्य पहचान है ( यह मानते हुए कि सीगल दृश्य को अवरुद्ध नहीं कर रहा है )।
त्रुटिपूर्ण सीगल के बावजूद, कंप्यूटर विज़न का उपयोग अब सरकारी संगठनों द्वारा ट्रैफ़िक डेटा को बढ़ाने और ट्रैफ़िक वॉल्यूम अनुमानों की सटीकता बढ़ाने के लिए किया जा रहा है। उदाहरण के लिए, पिछले साल 22 सितंबर को, स्टैटिस्टिक्स कनाडा ने " ट्रैफ़िक कैमरा इमेजरी से ट्रैफ़िक वॉल्यूम अनुमान: वास्तविक समय ट्रैफ़िक डेटा स्ट्रीम की ओर" शीर्षक से एक पेपर प्रकाशित किया था, जिसमें कनाडाई ट्रैफ़िक कैमरे से समय- समय पर वाहन गणना निकालने के लिए एक कंप्यूटर विज़न-आधारित प्रणाली प्रस्तुत की गई थी। कल्पना.
अब क्विक्स के साथ, आपको ऐसा कुछ आज़माने के लिए अनुसंधान वैज्ञानिकों की एक टीम की आवश्यकता नहीं है। कोई भी सक्षम डेवलपर इसे आज़मा सकता है और मिनटों में चालू हो सकता है। हालाँकि, इस मामले में, हम 5 मिनट के बजाय 60 मिनट की बात कर रहे हैं। आख़िरकार यह एक बड़ी परियोजना है!
प्रोजेक्ट को पुन: प्रस्तुत करने के लिए, आपको दो चीज़ों की आवश्यकता होगी:
लंदन एपीआई के लिए ट्रैफ़िक के लिए एक एपीआई कुंजी (अधिक जानकारी के लिए इस प्रोजेक्ट का दस्तावेज़ देखें)
एक मुफ़्त क्विक्स खाता - यदि आपने अभी तक एक नहीं बनाया है, तो आप अभी साइन अप कर सकते हैं (आप इसे मौजूदा Google, GitHub या Microsoft खाते के साथ कुछ ही क्लिक में कर सकते हैं)।
प्रोजेक्ट (और हमारे किसी भी डेमो एप्लिकेशन) की प्रतिलिपि प्राप्त करने के लिए कई प्रमुख चरण हैं:
GitHub से हमारे कंप्यूटर विज़न डेमो रिपॉजिटरी को फोर्क करें।
इससे आपके लिए प्रोजेक्ट के अपने संस्करण को अनुकूलित करना आसान हो जाएगा लेकिन फिर भी अपस्ट्रीम सुधारों से लाभ होगा।
क्विक्स क्लाउड में एक प्रोजेक्ट बनाएं , फिर एक नया विकास वातावरण बनाएं और इसे अपने फोर्क से लिंक करें।
यह आपको अपने खाते के अंतर्गत क्विक्स क्लाउड में एप्लिकेशन चलाने और अपडेट करने की अनुमति देगा।
टीएफएल कैमरा एपीआई और गूगल मैप्स जैसी बाहरी सेवाओं के लिए क्रेडेंशियल अपडेट करें।
एपीआई कुंजी जैसे रहस्य प्रोजेक्ट प्रतियों में स्थानांतरित नहीं किए जाते हैं, इसलिए आपको इन्हें स्वयं जोड़ना होगा।
आपके द्वारा बुनियादी बातें सेट कर लेने के बाद, हम कोड पर गहराई से विचार करेंगे और देखेंगे कि आप इसे कैसे अनुकूलित कर सकते हैं।
कोड पर नियंत्रण पाने के लिए, आइए सबसे पहले कंप्यूटर विज़न डेमो रिपॉजिटरी को फोर्क करें। क्लोन के बजाय कांटा क्यों? क्योंकि, बाद में आप उस कोड को अपने क्विक्स वातावरण में लाएंगे, और कांटा का उपयोग करना आपके वातावरण को सिंक्रनाइज़ रखने का सबसे आसान तरीका है। आप प्रोजेक्ट टेम्पलेट में हमारे द्वारा किए गए किसी भी अपस्ट्रीम परिवर्तन को भी प्राप्त करने में सक्षम होंगे।
सरलता के लिए, मैं मान रहा हूँ कि आपके पास पहले से ही एक GitHub खाता है। हालाँकि, हो सकता है कि आप इस प्रोजेक्ट के लिए एक विशिष्ट Git उपयोगकर्ता बनाना चाहें। बाद में आप क्विक्स एसएसएच को रिपॉजिटरी तक पहुंच प्रदान करेंगे, और एक अलग उपयोगकर्ता होना यह सुनिश्चित करने का एक अच्छा तरीका है कि क्विक्स के पास उससे अधिक पहुंच न हो जितनी उसे होनी चाहिए।
सुनिश्चित करें कि आपने सभी शाखाओं को फोर्क कर दिया है (गिटहब के फोर्क विज़ार्ड में, " केवल मुख्य शाखा की प्रतिलिपि बनाएँ" का चयन रद्द करें)। ऐसा इसलिए है, क्योंकि यदि आप एक परीक्षण खाते का उपयोग कर रहे हैं, तो आपको क्विक्स क्लाउड में विकास वातावरण बनाने के लिए एक वैकल्पिक शाखा की आवश्यकता होगी।
इससे पहले कि आप क्विक्स में एक वातावरण बना सकें, आपको पहले एक प्रोजेक्ट बनाना होगा। प्रोजेक्ट निर्माण विज़ार्ड के दौरान, आपसे प्रारंभिक वातावरण जोड़ने के लिए कहा जाएगा। एक बार जब आपको चीजें समझ आ जाएं तो आप बाद में और परिवेश जोड़ सकते हैं।
एक प्रोजेक्ट बनाने और एक वातावरण को अपने फोर्क्ड रेपो से जोड़ने के लिए, इन चरणों का पालन करें:
क्विक्स में लॉग इन करें और + नया प्रोजेक्ट पर क्लिक करें।
अपने प्रोजेक्ट को " माई कंप्यूटर विज़न डेमो " (या कुछ इसी तरह) नाम दें और अपने खुद के Git रेपो से कनेक्ट करें चुनें।
अगली स्क्रीन पर, आपको क्विक्स एसएसएच कुंजी को अपने रेपो में जोड़ने के बारे में कुछ निर्देश देखने चाहिए - उन निर्देशों का पालन करें। इस कुंजी को जोड़ने से क्विक्स आपके रेपो को क्विक्स वातावरण के साथ स्वचालित रूप से सिंक्रनाइज़ करने में सक्षम हो जाता है
अगली स्क्रीन पर, आपसे एक वातावरण बनाने के लिए कहा जाएगा - वातावरण आपको समानांतर में विभिन्न शाखाओं से कोड तैनात करने में सक्षम बनाता है।
पर्यावरण नाम के लिए ' tutorial
' दर्ज करें और अपने फोर्कड रेपो से ' tutorial
' शाखा का चयन करें।
प्रोजेक्ट निर्माण विज़ार्ड में अगले चरणों के माध्यम से जारी रखें।
विज़ार्ड आपसे पूछेगा कि आप किस संदेश ब्रोकर का उपयोग करना चाहते हैं। प्रोजेक्ट का मूल संस्करण संदेश ब्रोकर के रूप में कॉन्फ्लुएंट क्लाउड का उपयोग करता है। यदि आप कॉन्फ्लुएंट क्लाउड का उपयोग करना चाहते हैं, तो आपके पास पहले एक खाता होना चाहिए - जिस स्थिति में आप अपने कॉन्फ्लुएंट क्लाउड से कनेक्ट का चयन करेंगे और अपनी साख दर्ज करेंगे।
हालाँकि, कॉन्फ्लुएंट क्लाउड का उपयोग करना अनिवार्य नहीं है। इस ट्यूटोरियल के लिए, आप डिफ़ॉल्ट क्विक्स संदेश ब्रोकर के साथ भी जुड़े रह सकते हैं।
एक बार जब आप विज़ार्ड पूरा कर लें, तो पाइपलाइन पृष्ठ पर जाएँ (यदि यह पहले से खुला नहीं है)। आपको एक मानक चेतावनी दिखाई देगी कि आपका क्विक्स वातावरण स्रोत भंडार के साथ समन्वयित नहीं है (क्योंकि वातावरण खाली शुरू होता है)।
अपने फोर्कड रेपो से नवीनतम कोड खींचने के लिए सिंक पर्यावरण बटन पर क्लिक करें। ध्यान दें : सिंक प्रक्रिया द्विदिशात्मक है, इसलिए यदि आप अपने वातावरण में कुछ कोड बदलते हैं, तो यह इसे स्रोत रेपो पर भी वापस भेज देगा।
उम्मीद है कि सिंक सफल रहा. यदि यह काम करता है, तो आप देखेंगे कि आपकी सभी सेवाएँ पाइपलाइन पृष्ठ पर बनना शुरू हो गई हैं।
बहुत सारी सेवाएँ हैं, इसलिए सभी सेवाओं को बनने और चलने में कुछ मिनट लगेंगे।
ध्यान दें, S3 सेवा डिफ़ॉल्ट रूप से बंद हो जाती है क्योंकि उसे काम करने के लिए आपको अपने स्वयं के AWS खाते की आवश्यकता होगी। लेकिन वैसे भी यह इस ट्यूटोरियल के लिए वास्तव में आवश्यक नहीं है।
पाइपलाइन पृष्ठ पर पूरी पाइपलाइन देखने के लिए, कैनवास के खाली हिस्से पर कहीं भी क्लिक करें और खींचें और दाईं ओर स्क्रॉल करें, या Ctrl / ⌘ दबाए रखें और ज़ूम आउट करने के लिए अपने माउस व्हील का उपयोग करें।
तब तक स्क्रॉल करें जब तक आपको "प्रोजेक्ट फ्रंट एंड" नामक सेवा दिखाई न दे।
"प्रोजेक्ट फ्रंट एंड" सेवा नाम के आगे नीले लॉन्च आइकन पर क्लिक करें।
अब आपको कंप्यूटर विज़न ऐप की अपनी प्रति देखनी चाहिए, जो खेलने के लिए तैयार है।
पाइपलाइन में कई सेवाएँ शामिल हैं, लेकिन आर्किटेक्चर को तीन मुख्य खंडों में विभाजित किया जा सकता है जैसा कि निम्नलिखित चित्र में दिखाया गया है:
सेवाओं का पहला सेट (1-3) लंदन के ट्रैफ़िक कैमरों में टैप करता है, प्रत्येक मॉनिटर किए गए सड़क खंड पर वाहनों की पहचान करता है।
सेवाओं का दूसरा सेट (4-7) प्रत्येक सड़क खंड पर वाहन के प्रकारों का चालू कुल योग रखता है, और किसी दिए गए फ़्रेम में पाए गए वाहनों की अधिकतम संख्या को लॉग करता है। फिर इस डेटा को बफ़र किया जाता है और REST API सेवा को पास कर दिया जाता है ताकि डेटा किसी भी बाहरी सेवा तक पहुंच योग्य हो जो इसका अनुरोध करना चाहता है।
अंतिम सेवा (8), एक फ्रंट एंड को होस्ट करती है जो समग्र वाहन आंकड़ों के लिए एक REST एपीआई का सर्वेक्षण करती है और सभी ट्रैफिक कैमरों (ऐसे वीडियो फ्रेम) से लाइव कच्चे डेटा के लिए एक वेबसॉकेट पर सुनती है जो क्विक्स में एक विषय से आता है। मतदान और वास्तविक समय के डेटा के इस संयोजन का उपयोग लंदन के मानचित्र पर यातायात के स्तर को देखने के लिए किया जाता है।
मैं व्यक्तिगत सेवाओं की विशिष्टताओं के बारे में बहुत अधिक विस्तार में नहीं जाऊंगा क्योंकि दस्तावेज़ीकरण पहले से ही उस पर अच्छा काम करता है। लेकिन यदि आप यह देखना चाहते हैं कि वे कैसे काम करते हैं, तो यहां दस्तावेज़ के लिंक के साथ कुछ संदर्भ जानकारी दी गई है।
यदि आप सेवा के नाम पर क्लिक करते हैं तो आप क्विक्स रीड-ओनली वातावरण में चल रही वास्तविक सेवा को देख सकते हैं, जिसमें रनटाइम लॉग और डेटा वंशावली भी शामिल है।
सेवा का नाम | विवरण |
---|---|
टीएफएल एपीआई कुंजी और "अनुरोध" पायथन लाइब्रेरी का उपयोग करके, टीएफएल एपीआई एंडपॉइंट से कैमरा फ़ीड पुनर्प्राप्त करता है। | |
Tfl API द्वारा प्रदान की गई वीडियो फ़ाइलों से फ़्रेम निकालता है। दस्तावेज़ीकरण , स्रोत कोड | |
फ़्रेम ग्रैबर से फ़्रेम लेता है और प्रत्येक फ़्रेम में ऑब्जेक्ट का पता लगाता है। | |
कुल वाहनों की गणना करता है. | |
एक दिन की समयावधि में अधिकतम वाहनों की गणना करता है। | |
डेटा बफर डेटा एपीआई सेवा पर लोड को कम करने के लिए एक सेकंड का डेटा बफर प्रदान करता है। | |
एक REST API सेवा जो दो समापन बिंदु प्रदान करती है। दस्तावेज़ीकरण , स्रोत कोड | |
एक फ्रंट एंड होस्ट करता है जो नए डेटा के लिए एपीआई की जांच करता है। दस्तावेज़ीकरण , स्रोत कोड |
मैं यहां जिस बात पर ध्यान केंद्रित करना चाहता हूं वह आपको यह दिखाना है कि प्रोजेक्ट को अपनी आवश्यकताओं के अनुसार कैसे अनुकूलित किया जाए ।
प्रोजेक्ट को अनुकूलित करने में आपकी सहायता के लिए, मैं आपको दिखाऊंगा कि बैक एंड में एकत्रीकरण तर्क में एक छोटा सा बदलाव कैसे करें और उस नई जानकारी को फ्रंट एंड में कैसे प्रस्तुत करें।
उसके बाद, मैं आपको कुछ बाहरी संसाधनों के बारे में बताऊंगा जो आपको वाहन गिनती और ऑब्जेक्ट ट्रैकिंग जैसे अधिक शक्तिशाली कार्य करने में मदद करेंगे। लेकिन पहले हमें थोड़ा सा एडमिनिस्ट्रेशन करना होगा, जैसे ताज़ा एप्लिकेशन रहस्य जोड़ना।
प्रोजेक्ट टेम्प्लेट कुछ डिफ़ॉल्ट क्रेडेंशियल्स के साथ कॉन्फ़िगर किया गया है, लेकिन प्रोजेक्ट की अपनी प्रति को काम में लाने के लिए आपको उन्हें बदलने की आवश्यकता होगी। आपको इनमें से प्रत्येक क्रेडेंशियल को अपने प्रोजेक्ट में एक रहस्य के रूप में परिभाषित करने की आवश्यकता होगी। रहस्य इस प्रकार हैं.
क्विक्स में सिग्नलआर हब के साथ संचार करने के लिए फ्रंट एंड के लिए एक बियरर टोकन (गुप्त कुंजी: ' bearerToken
')
आपकी Tfl API कुंजी (गुप्त कुंजी: ' tfl_api_key
')
फ्रंट एंड बैक एंड से डेटा पुनर्प्राप्त करने और प्रस्तुत करने के लिए क्विक्स ( वेबसॉकेट एपीआई के माध्यम से) के साथ संचार करने के लिए सिग्नलआर क्लाइंट लाइब्रेरी का उपयोग करता है। इस एपीआई को क्लाइंट एप्लिकेशन को प्रमाणित करने के लिए एक बियरर टोकन की आवश्यकता होती है।
इस ट्यूटोरियल के लिए, आप अपने बियरर टोकन के रूप में उपयोग करने के लिए एक क्विक्स व्यक्तिगत एक्सेस टोकन बनाएंगे। फिर आप इस टोकन को अपने वातावरण में संग्रहीत करने के लिए एक रहस्य बनाएंगे (हां, यह थोड़ा जटिल है, लेकिन आपको इसे केवल एक बार करना होगा)।
#व्यक्तिगत एक्सेस टोकन प्राप्त करना
यहां बताया गया है कि आप क्विक्स में व्यक्तिगत एक्सेस टोकन कैसे प्राप्त करते हैं।
शीर्ष दाईं ओर अपना प्रोफ़ाइल मेनू खोलें, और व्यक्तिगत एक्सेस टोकन चुनें।
दिखाई देने वाले संवाद में, टोकन जेनरेट करें पर क्लिक करें और अपने व्यक्तिगत एक्सेस टोकन को नोटपैड या किसी अन्य अस्थायी भंडारण स्थान पर पेस्ट करें - आपको अगले चरण के लिए इसकी आवश्यकता होगी।
क्विक्स पोर्टल में, एप्लिकेशन पेज खोलें और क्विक्स आईडीई खोलने के लिए सेंटीमेंट डेमो यूआई पर क्लिक करें।
वेरिएबल अनुभाग (नीचे बाईं ओर) में, रहस्य प्रबंधन पर क्लिक करें।
दिखाई देने वाले साइडबार में, + नया रहस्य पर क्लिक करें, और गुप्त कुंजी के रूप में " bearerToken
" दर्ज करें।
"डिफ़ॉल्ट" और "ट्यूटोरियल" कॉलम में, अपने व्यक्तिगत एक्सेस टोकन को प्रत्येक सेल में मान के रूप में पेस्ट करें जिसे आपने पिछले चरण में बनाया था।
यह मानते हुए कि आपने टीएफएल एपीआई पोर्टल के साथ पंजीकरण कर लिया है, आपको सबसे पहले एक रहस्य के रूप में अपनी खुद की टीएफएल एपीआई कुंजी भी जोड़नी होगी।
tfl_api_key
' कुंजी के साथ एक रहस्य जोड़ें।
अभी, आप पिछले 24 घंटों में प्रति कैमरे देखे गए वाहनों की अधिकतम संख्या ही देख सकते हैं। उदाहरण के लिए, आइए किंग्स क्रॉस और स्विंटन स्ट्रीट के कैमरे से लिए गए इस वीडियो फ्रेम के नीचे प्रदर्शित डेटा की जांच करें
हमें नहीं पता कि 11 वाहनों के उस समूह को कब देखा गया था, बस यह अवलोकन पिछले 24 घंटों में किसी समय किया गया था।
लेकिन क्या पूरे लंदन के लिए समान डेटा देखना दिलचस्प नहीं होगा? यानी किसी एक समय में लंदन के कैमरों द्वारा देखे गए वाहनों की संयुक्त अधिकतम संख्या क्या है? और सभी कैमरों द्वारा देखी गई बसों की अधिकतम संख्या क्या है?
इन सवालों का जवाब देने के लिए, हम कुछ इस तरह दिखने वाले डेटा को समाप्त करना चाहते हैं
{"24hmax_vehicles_allcams": 680.0, "24hmax_buses_allcams": 131.0, "24hmax_cars_allcams": 522.0, "24hmax_trucks_allcams": 94.0, "24hmax_motorcycles_allcams": 4.0}
ध्यान दें कि हम यहां कुल वाहन संख्या के बारे में बात नहीं कर रहे हैं (मैं उस पर बाद में चर्चा करूंगा), बस पिछले 24 घंटों में लंदन के ट्रैफिक कैमरों द्वारा देखे गए सबसे अधिक वाहनों का एक स्नैपशॉट है।
यह डेटा प्राप्त करने के लिए, आपको निम्नलिखित परिवर्तन करने होंगे
पिछले 24 घंटों में देखे गए प्रत्येक वाहन प्रकार के लिए अधिकतम प्राप्त करें (केवल सभी वाहनों के लिए नहीं)।
नवीनतम अधिकतम को संग्रहीत करें, उन सभी को एकत्रित करें (सभी कैमरों में)।
जब विभिन्न कैमरों द्वारा नई अधिकतम सीमा देखी जाए तो एकत्रीकरण को लगातार ताज़ा करें।
फिर, आप डेटा को फ्रंट एंड में प्रस्तुत कर रहे हैं ताकि यह कुछ इस तरह दिखे:
मैंने इसके लिए पहले ही कुछ कोड बना लिया है, लेकिन इससे पहले कि आप इसका परीक्षण करें, आपको नए एकत्रीकरण आते ही उन्हें संग्रहीत करने के लिए एक जगह की आवश्यकता होगी। इस उदाहरण में, मैं आपको दिखाऊंगा कि स्टोर करने के लिए एक नए काफ्का विषय का उपयोग कैसे करें आंकड़ा।
बिल्कुल निश्चित नहीं कि विषय क्या है? अपाचे काफ्का दस्तावेज़ीकरण एक अच्छा प्रारंभिक बिंदु है, लेकिन संक्षेप में, विषयों को फ़ाइल सिस्टम में एक फ़ोल्डर के समान वर्णित किया गया है, और घटनाएं (संदेश के रूप में) उस फ़ोल्डर में फ़ाइलें हैं। आप सीखेंगे कि क्विक्स यूआई में इसे कैसे बनाया जाए - जो एक बहुत ही सरल प्रक्रिया है।
क्विक्स पोर्टल में एक विषय बनाने के लिए इन चरणों का पालन करें:
क्विक्स पोर्टल में, विषय पृष्ठ खोलें और शीर्ष दाएं कोने में नया जोड़ें पर क्लिक करें।
दिखाई देने वाले संवाद में, " max-vehicles-agg " जैसा नाम दर्ज करें, डिफ़ॉल्ट सेटिंग्स को वैसे ही छोड़ दें और Done पर क्लिक करें।
अब, आपको इस विषय को लिखने के लिए बैकएंड में कोड को अपडेट करना होगा। जिस सेवा को आपको बदलने की आवश्यकता है उसे " मैक्स व्हीकल विंडो " कहा जाता है। यह एक पायथन सेवा है जो क्विक्स स्ट्रीम और पांडास पायथन लाइब्रेरी का उपयोग करके डेटा एकत्र करती है।
सामान्य तौर पर सेवाओं का संपादन करते समय, आपके पास हमेशा दो विकल्प होते हैं।
अपने स्थानीय आईडीई को संपादित करें और परीक्षण करें, फिर अपने बदलावों को प्रतिबद्ध करें और अपने फोर्कड रेपो में डालें।
ऑनलाइन क्विक्स आईडीई में संपादित करें और परीक्षण करें।
क्विक्स आईडीई थोड़ा तेज़ हो सकता है क्योंकि सभी निर्भरताएँ आपके लिए स्थापित हैं और आपको एक नया वर्चुअल वातावरण स्थापित करने की आवश्यकता नहीं है। यह आपके परिवर्तनों को स्वचालित रूप से आगे बढ़ाता है, जिससे चीज़ें थोड़ी तेज़ हो सकती हैं। इस उदाहरण के लिए, मैं क्विक्स आईडीई का उपयोग करूंगा।
समय बचाने के लिए, मैंने इसके लिए पहले से ही कुछ कोड बना लिया है, इसलिए आपको बस इसे संबंधित फ़ाइल में पेस्ट करना होगा।
मैक्स वाहन विंडो सेवा को संपादित करने के लिए:
एप्लिकेशन पर नेविगेट करें, और क्विक्स आईडीई खोलने के लिए मैक्स व्हीकल विंडो पर क्लिक करें।
ध्यान दें, क्विक्स उपयोगकर्ता इंटरफ़ेस में, प्रत्येक सेवा के लिए कोडबेस को "एप्लिकेशन" के रूप में संदर्भित किया जाता है, लेकिन वास्तव में यह एक स्व-निहित फ़ोल्डर है जो एक विशेष सेवा के लिए कोड संग्रहीत करता है (जो सभी कंप्यूटर विज़न ऐप को पावर देने के लिए मिलकर काम करते हैं) .
यदि यह पहले से खुला नहीं है, तो इसे क्विक्स आईडीई में खोलने के लिए बाईं ओर के फ़ाइल मेनू में main.py
पर क्लिक करें।
दूसरी विंडो में, हमारे ट्यूटोरियल रेपो से इस फ़ाइल को खोलें, फिर सभी मौजूदा कोड को प्रतिस्थापित करते हुए कोड को कॉपी और पेस्ट करें। कोड टिप्पणियों से आपको यह समझने में मदद मिलेगी कि मैंने क्या परिवर्तन किए हैं।
नए कोड में " आउटपुट2 " नामक एक नया पर्यावरण चर होने की उम्मीद है जो आपके द्वारा पहले बनाए गए नए आउटपुट विषय का नाम संग्रहीत करता है, तो चलिए वह नया चर बनाते हैं।
अब, आपको बस अपने परिवर्तनों को सहेजने और तैनात करने की आवश्यकता है।
अपने परिवर्तनों को सहेजने के लिए, प्रतिबद्ध पर क्लिक करें।
पुन: तैनात करने से पहले, संशोधन को टैग करना एक अच्छा विचार है ताकि यह बताना आसान हो कि तैनाती कोड के किस संस्करण का उपयोग कर रही है।
टैग आइकन पर क्लिक करके कमिट को टैग करें और इसे एक नाम दें... कुछ इस तरह "न्यू एग्रीगेशन"।
यदि आप दोबारा जांचना चाहते हैं कि नया कोड काम करता है, तो ऊपर दाईं ओर रन पर क्लिक करें।
सेवा को पुनः तैनात करने के लिए, शीर्ष दाईं ओर परिनियोजन ड्रॉपडाउन खोलें, और " मौजूदा तैनाती संपादित करें " चुनें, फिर " पुनः तैनात करें " पर क्लिक करें।
विषय का निरीक्षण करने के लिए, क्विक्स पोर्टल खोलें, विषय पृष्ठ पर जाएँ और आपके द्वारा पहले बनाए गए " मैक्स-वाहन-एजीजी " विषय पर क्लिक करें।
प्रत्येक विषय में एक दृश्य होता है जिसे "डेटा एक्सप्लोरर दृश्य" कहा जाता है जो आपको किसी विषय के माध्यम से बहने वाले संदेशों का निरीक्षण करने देता है।
अब आपको “ SELECT STREAMS ” अनुभाग में एक सक्रिय स्ट्रीम देखनी चाहिए।
स्ट्रीम " एग्रीगेट_डेटा " चुनें (या इसे जो भी कहा जाए)
फिर चयन पैरामीटर्स... अनुभाग में सभी उपलब्ध मापदंडों का चयन करें।
अंत में, तालिका दृश्य चुनें ताकि आप अपना चयनित डेटा देख सकें।
ध्यान दें कि नया डेटा तुरंत नहीं आ सकता है क्योंकि टीएफएल कैमरा फ़ीड सेवा में टीएफएल एपीआई की दर सीमा से बचने के लिए एक वैरिएबल स्लीप टाइमर है। आप इसे "sleep_interval" पर्यावरण चर में कॉन्फ़िगर कर सकते हैं। लेखन के समय, इसे डिफ़ॉल्ट रूप से 60 सेकंड पर सेट किया गया था।
यदि आप टीएफएल कैमरा फ़ीड परिनियोजन के लॉग का निरीक्षण करते हैं, तो आपको देखना चाहिए कि यह टाइमर कब सक्रिय हुआ है। जब आप दोबारा डेटा आते हुए देखते हैं, तो वापस जाकर अपने विषय की जांच करना सुरक्षित होता है
यदि आप फ्रंट एंड कोड को बदलने से परेशान हैं, तो आप इस भाग को छोड़ सकते हैं। क्विक्स मुख्य रूप से एक बैक एंड टूल है लेकिन हमने एक फ्रंट एंड घटक जोड़ा है ताकि आप एक पूरी तरह कार्यात्मक मिनी एप्लिकेशन बना सकें। इस अनुभाग में, आप एकत्रीकरण प्रदर्शित करने के लिए फ्रंट एंड को अपडेट करने जा रहे हैं।
अब, आइए हमारे द्वारा बनाए गए नए समुच्चय को बैक एंड में शामिल करने के लिए यूआई सेवा को अपडेट करें। एक अनुस्मारक के रूप में, यहां बताया गया है कि जब आपका काम पूरा हो जाए तो यह कैसा दिखना चाहिए।
यह सुंदर नहीं है, लेकिन यह हमें आवश्यक जानकारी देता है। यूआई को अपडेट करने के लिए, आपको निम्नलिखित फ़ाइलों को संपादित करना होगा:
' app.component.ts
' जो फ्रंट एंड के लिए डेटा सब्सक्रिप्शन का प्रबंधन करता है:
' app.component.html
' जो पेज पर जानकारी के लेआउट को परिभाषित करता है।
आइए app.component.ts
से शुरू करें। क्विक्स पोर्टल में, एप्लिकेशन पर नेविगेट करें, और क्विक्स आईडीई खोलने के लिए टीएफएल इमेज प्रोसेसिंग यूआई ("प्रोजेक्ट फ्रंट एंड" के रूप में तैनात) पर क्लिक करें।
डेटा सब्सक्रिप्शन अपडेट किया जा रहा है
यहां, हम विषय संदर्भों को थोड़ा हैक और हार्ड-कोड करने जा रहे हैं। उत्पादन में इसे चर के साथ नियंत्रित किया जाना चाहिए, लेकिन यह डेमो को सरल बनाता है।
एप्लिकेशन फ़ाइलें अनुभाग में, ./src/app/app.component.ts
खोलें।
निम्नलिखित ब्लॉक का पता लगाएं (पंक्ति 213 के बाद):
subscribeToData() { this.connection.invoke('SubscribeToParameter', this._topicName, this._streamId, 'image'); this.connection.invoke('SubscribeToParameter', this._topicName, this._streamId, 'lat'); this.connection.invoke('SubscribeToParameter', this._topicName, this._streamId, 'lon'); this.connection.invoke('SubscribeToParameter', 'max-vehicles', '*', 'max_vehicles'); this.connection.invoke('SubscribeToParameter', 'image-vehicles', '*', '*');
और ब्लॉक के नीचे निम्नलिखित अतिरिक्त पंक्ति:
this.connection.invoke('SubscribeToParameter', 'max-vehicles-agg', '*', '*'); // new line
यह विषय की सदस्यता शुरू करेगा और संदेश में सभी मापदंडों को पढ़ेगा (पैरामीटरडेटा क्विक्स एपीआई में एक विशिष्ट डेटा प्रकार है और यह आम तौर पर संख्यात्मक डेटा से बना होता है।)
इसके बाद, 'selectedMarker: Marker | undefined;
पंक्ति का पता लगाएं 'selectedMarker: Marker | undefined;
' (पंक्ति 43 या उसके आसपास) और उसके नीचे निम्नलिखित नई पंक्ति जोड़ें।
latestMessageMaxAgg: ParameterData | undefined;
यह पंक्ति एक नए वेरिएबल को प्रारंभ करती है जिसका उपयोग आप संदेशों से डेटा संग्रहीत करने के लिए करेंगे।
अब, जब भी किसी नए संदेश का पता चलता है तो वेरिएबल को डेटा असाइन करें।
सबसे पहले, निम्नलिखित ब्लॉक का पता लगाएं (पंक्ति 108 के बाद):
if (data.topicName === "image-vehicles") { key = data.streamId; if (data.numericValues['vehicles']) markerData.count = data.numericValues['vehicles'][0]; if (data.numericValues[this.parameterId]) markerData.value = data.numericValues[this.parameterId][0]; }
इसके नीचे निम्नलिखित ब्लॉक जोड़ें:
if (data.topicName === 'max-vehicles-agg') { this.latestMessageMaxAgg = data; }
अब, यदि संदेश ' max-vehicles-agg
' नामक विषय से आता है, तो फ्रंट एंड संदेश में सभी डेटा लेगा और इसे वेरिएबल latestMessageMaxAgg
में डाल देगा।
अब जब हमारे पास वेरिएबल तक पहुंच है, तो आइए इसकी सामग्री को फ्रंट एंड में प्रस्तुत करें।
फ्रंट एंड टेम्प्लेट को अपडेट किया जा रहा है
अब, अंततः उस डेटा को प्रस्तुत करने का समय आ गया है जो हमने फ्रंट एंड को उपलब्ध कराया है।
./src/app/app.component.html
खोलें।
निम्नलिखित div का पता लगाएं जो रंगीन ट्रैफ़िक घनत्व पैमाने को प्रस्तुत करता है (पंक्ति 85 के बाद):
<div> <p class="mat-caption text-body mb-1">Traffic density</p>
इसके ठीक ऊपर, निम्नलिखित कोड ब्लॉक जोड़ें।
<div *ngIf="latestMessageMaxAgg"> <h4 _ngcontent-kap-c49="" class="mb-2">Combined Maximums Across All London Cameras</h4> <table> <tbody> <tr><td><strong>All vehicles:</strong></td> <td> {{ latestMessageMaxAgg?.numericValues?.['combined_max_vehicles_for_all_cameras']?.at(0) }} </td> </tr> <tr><td><strong>Cars:</strong></td> <td> {{ latestMessageMaxAgg?.numericValues?.['combined_max_cars_for_all_cameras']?.at(0) }} </td> </tr> <tr><td><strong>Buses:</strong></td> <td> {{ latestMessageMaxAgg?.numericValues?.['combined_max_buses_for_all_cameras']?.at(0) }} </td> </tr> <tr><td><strong>Trucks:</strong></td> <td> {{ latestMessageMaxAgg?.numericValues?.['combined_max_trucks_for_all_cameras']?.at(0) }} </td> </tr> <tr><td><strong>Motorcycles:</strong></td> <td> {{ latestMessageMaxAgg?.numericValues?.['combined_max_motorbikes_for_all_cameras']?.at(0) }} </td> </tr> </tbody> </table> </div>
यह आपके द्वारा पहले बनाए गए latestMessageMaxAgg
वेरिएबल से डेटा निकालता है और सबसे हालिया संदेश से डेटा प्रदर्शित करता है (" at(0)
" के माध्यम से चयनित)। यह डेटा को वैकल्पिक भी बनाता है ताकि आपको कोई त्रुटि संदेश न मिले कि डेटा गायब है।
यदि आप पहले इसे अपनी स्थानीय मशीन पर परीक्षण करना चाहते हैं, तो आप क्विक्स आईडीई में किए गए परिवर्तनों को खींच सकते हैं (क्विक्स उन्हें स्वचालित रूप से पुश करता है) और फ्रंट एंड सर्विस रीडमी में दिए गए निर्देशों का पालन कर सकते हैं।
टीएफएल इमेज प्रोसेसिंग यूआई सेवा को फिर से तैनात करने के लिए, उसी प्रक्रिया का पालन करें जो आपने मैक्स वाहन सेवा को फिर से तैनात करते समय किया था।
यदि कुछ भी गलत होता है, तो याद रखें कि लॉग में त्रुटि आउटपुट देखने से पहले आपको सेवा को हटाना पड़ सकता है और इसे फिर से तैनात करना पड़ सकता है।
जैसा कि आपने शायद देखा होगा, ऐप वास्तव में समय के साथ वाहनों की गिनती नहीं कर रहा है, बल्कि किसी दिए गए वीडियो फ्रेम में देखे गए वाहनों की संख्या की गिनती कर रहा है।
ऐसा इसलिए है क्योंकि हम YOLOv8 की पूर्ण क्षमताओं का उपयोग नहीं कर रहे हैं। हम केवल ऑब्जेक्ट डिटेक्शन का उपयोग कर रहे हैं, लेकिन वाहनों की ठीक से गिनती करने के लिए, आपको ऑब्जेक्ट ट्रैकिंग का उपयोग करने की आवश्यकता होगी। समस्या यह है कि ऑब्जेक्ट ट्रैकिंग के लिए अधिक मेमोरी की आवश्यकता होती है, जो क्विक्स फ्री प्लान में उपलब्ध नहीं है। यह डेमो सबसे छोटे "नैनो" YOLO मॉडल का उपयोग करता है, लेकिन चार अन्य आकार उपलब्ध हैं, जिनमें YOLOv8x सबसे शक्तिशाली है। यदि आप बड़े मॉडल का उपयोग करते हैं, तो आप वाहन ट्रैकिंग और गिनती के लिए अच्छे परिणाम प्राप्त कर सकते हैं।
यहां इसे मेरी स्थानीय मशीन (एक अच्छे जीपीयू के साथ) पर टीएफएल कैमरा फ़ीड पर चलाने के प्रयास का एक स्क्रीनशॉट है।
मैंने सड़क पर दोनों दिशाओं में जाने वाले वाहनों की गिनती करने के लिए कुछ अन्य पुस्तकालयों (जैसे रोबोफ़्लो से पर्यवेक्षण ) के संयोजन में YOLO का उपयोग किया।
समान परिणाम कैसे प्राप्त करें, इसके बारे में अधिक जानकारी के लिए निम्नलिखित संसाधन देखें:
YOLOv8 का उपयोग करके वस्तुओं को ट्रैक और गिनें (roboflow.com)
ज्यूपिटर नोटबुक का उपयोग करके कंप्यूटर विज़न का उपयोग करके वाहन गिनती पर एक उत्कृष्ट प्राइमर।
YOLOv8 वस्तु का पता लगाना और गिनती करना | डस्टिन लियू द्वारा | सितम्बर, 2023 | डेटा संचालित निवेशक
रोबोफ़्लो नोटबुक के अनुकूलित स्ट्रीमलिट संस्करण का एक पूर्वाभ्यास (पहले से लिंक किए गए लेख में चर्चा की गई है) - आप इसे ऑनलाइन भी आज़मा सकते हैं।
यहां तक पहुंचने के लिए बधाई. मुझे आशा है कि आप इसे सफलतापूर्वक अनुकूलित करने में सक्षम थे। यदि आपके पास कोई समस्या है, तो हमारे सामुदायिक मंच पर एक प्रश्न पोस्ट करना सुनिश्चित करें और हम में से कोई एक उस पर सीधे विचार करेगा।
जैसा कि आप देख सकते हैं, क्विक्स में जटिल एप्लिकेशन को तैनात करना और चलाना काफी सरल है। ये डेमो स्व-निहित होने के लिए डिज़ाइन किए गए हैं, इसलिए हम फ्रंट एंड को भी होस्ट करते हैं। हालाँकि, उत्पादन परिदृश्य में, आप शायद अपना फ्रंट एंड कहीं और चलाना चाहेंगे। क्विक्स वास्तव में इवेंट स्ट्रीम को संसाधित करने और जटिल गणनाओं को बेहद प्रभावी तरीके से निष्पादित करने में उत्कृष्ट है। यह बड़े पैमाने पर डेटा को संसाधित करने के लिए अपाचे काफ्का की शक्तियों का लाभ उठाता है, जबकि इसकी कुछ कमजोरियों (जैसे संसाधन प्रबंधन और कॉन्फ़िगरेशन जटिलता) को दूर करता है। बेशक, यदि आपके पास पहले से ही अपना स्वयं का काफ्का उदाहरण है, या कंफ्लुएंट क्लाउड का उपयोग कर रहे हैं, तो आप उसका भी उपयोग कर सकते हैं। क्विक्स आपके ईवेंट स्ट्रीम को वास्तविक समय में व्यवस्थित करने और संसाधित करने में आपकी सहायता करने के लिए मौजूद है।
टॉमस न्यूबॉयर (सीटीओ और क्विक्स के सह-संस्थापक) द्वारा
यहाँ भी प्रकाशित किया गया है.