यदि आप कभी भी कंप्यूटर विज़न के साथ प्रयोग करना चाहते हैं लेकिन आपके पास एक जटिल विकास वातावरण स्थापित करने का समय नहीं है, तो यह ट्यूटोरियल आपके लिए है। कुछ स्थितियों में कंप्यूटर विज़न भौतिक सेंसर का एक बढ़िया विकल्प हो सकता है - खासकर जब चीजों को गिनने की बात आती है। इस ट्यूटोरियल में, मैं आपको एक डेमो एप्लिकेशन के बारे में बताऊंगा जिसे हमने जारी किया है जो वाहनों की गिनती करके वर्तमान भीड़ को मापने के लिए लंदन के ट्रैफिक कैमरों का उपयोग करता है। यह एक पुन: प्रयोज्य प्रोजेक्ट टेम्पलेट पर आधारित है जिसे हमने प्रोजेक्ट को दोहराने में आपकी सहायता के लिए बनाया है। फिर मैं आपको दिखाऊंगा कि प्रोजेक्ट की अपनी प्रति बनाने के लिए इस टेम्पलेट का उपयोग कैसे करें और इसे क्विक्स में कैसे चलाएं - इवेंट स्ट्रीमिंग अनुप्रयोगों को विकसित करने और चलाने के लिए एक उपकरण। कंप्यूटर विज़न एप्लिकेशन का हमारा डेमो संस्करण (एक सेवा के रूप में पूरी तरह से प्रबंधित अपाचे काफ्का) में होस्ट किए गए एक संदेश ब्रोकर का भी उपयोग करता है, लेकिन ट्यूटोरियल का पालन करने के लिए कॉन्फ्लुएंट क्लाउड खाता होना अनिवार्य नहीं है। कॉन्फ्लुएंट क्लाउड यहां बताया गया है कि अंतिम परिणाम कैसा दिखना चाहिए: आप इस डेमो संस्करण का लाइव प्रयोग निम्नलिखित पते पर कर सकते हैं: https://app-demo-computervisiondemo-prod.deployments.quix.ai/ यह ऐप क्या कर रहा है? ऐप वाहनों की गिनती करने और भीड़भाड़ के स्तर का अनुमान लगाने के लिए लंदन के ट्रैफिक कैमरों (जिन्हें "जैम कैम" भी कहा जाता है) से लाइव फीड का उपयोग कर रहा है। इसके बाद यह लंदन के मानचित्र पर यह दिखाने के लिए दृश्य संकेतकों का उपयोग करता है कि कहां भीड़भाड़ हो रही है। वाहनों की गणना छवियों में वस्तु का पता लगाने के लिए एमएल मॉडल का उपयोग करके की जाती है (सेंसर या जीपीएस डेटा के बजाय)। ऑब्जेक्ट डिटेक्शन मॉडल वाहनों को विभिन्न प्रकारों में वर्गीकृत करता है, और आप इन प्रकारों के आधार पर डेटा को फ़िल्टर कर सकते हैं। उदाहरण के लिए, आप केवल उन बसों की संख्या देखने के लिए "ऑब्जेक्ट चुनें" ड्रॉपडाउन का उपयोग कर सकते हैं जिन्हें सभी ट्रैफ़िक कैमरों ने वर्तमान समय में पता लगाया है। ध्यान दें कि एप्लिकेशन दिन भर में देखे गए सभी वाहनों की गणना नहीं करता है, केवल वर्तमान समय में (उस पर बाद में अधिक जानकारी)। कंजेशन निर्धारित करने के लिए ऑब्जेक्ट डिटेक्शन का उपयोग क्यों करें? क्योंकि अन्य तरीके हमेशा विश्वसनीय नहीं होते हैं। उदाहरण के लिए, 2020 में, बर्लिन स्थित एक कलाकार एक ठेले और 99 सेकंड-हैंड फोन के अलावा स्प्री नदी के मुख्य पुलों में से एक पर में कामयाब रहा। इसके बाद Google मानचित्र ने कर्तव्यनिष्ठापूर्वक उस क्षेत्र को मानचित्र पर अत्यधिक भीड़भाड़ वाले क्षेत्र के रूप में प्रदर्शित किया। "वर्चुअल" ट्रैफिक जाम बनाने इस कारण से, जीपीएस-आधारित भीड़ अनुमान को बढ़ाने के लिए अक्सर अन्य प्रकार के डेटा का उपयोग किया जाता है। इसमें ऐतिहासिक पैटर्न, सेंसर डेटा, निर्धारित बंद पर नगरपालिका फ़ीड और उपयोगकर्ता द्वारा रिपोर्ट की गई घटनाएं शामिल हैं। हालाँकि, सबसे विश्वसनीय क्रॉस-रेफरेंस में से एक ट्रैफिक कैमरों से प्राप्त भीड़भाड़ की दृश्य पहचान है ( )। यह मानते हुए कि सीगल दृश्य को अवरुद्ध नहीं कर रहा है त्रुटिपूर्ण सीगल के बावजूद, कंप्यूटर विज़न का उपयोग अब सरकारी संगठनों द्वारा ट्रैफ़िक डेटा को बढ़ाने और ट्रैफ़िक वॉल्यूम अनुमानों की सटीकता बढ़ाने के लिए किया जा रहा है। उदाहरण के लिए, पिछले साल 22 सितंबर को, स्टैटिस्टिक्स कनाडा ने " समय पर वाहन गणना निकालने के लिए एक कंप्यूटर विज़न-आधारित प्रणाली प्रस्तुत की गई थी। कल्पना. ट्रैफ़िक कैमरा इमेजरी से ट्रैफ़िक वॉल्यूम अनुमान: वास्तविक समय ट्रैफ़िक डेटा स्ट्रीम की ओर" शीर्षक से एक पेपर प्रकाशित किया था, जिसमें कनाडाई ट्रैफ़िक कैमरे से समय- अब क्विक्स के साथ, आपको ऐसा कुछ आज़माने के लिए अनुसंधान वैज्ञानिकों की एक टीम की आवश्यकता नहीं है। कोई भी सक्षम डेवलपर इसे आज़मा सकता है और मिनटों में चालू हो सकता है। हालाँकि, इस मामले में, हम 5 मिनट के बजाय 60 मिनट की बात कर रहे हैं। आख़िरकार यह एक बड़ी परियोजना है! प्रोजेक्ट को पुन: प्रस्तुत करने के लिए, आपको दो चीज़ों की आवश्यकता होगी: के लिए एक एपीआई कुंजी (अधिक जानकारी के लिए इस देखें) लंदन एपीआई के लिए ट्रैफ़िक प्रोजेक्ट का दस्तावेज़ एक मुफ़्त क्विक्स खाता - यदि आपने अभी तक एक नहीं बनाया है, तो आप कर सकते हैं (आप इसे मौजूदा Google, GitHub या Microsoft खाते के साथ कुछ ही क्लिक में कर सकते हैं)। अभी साइन अप प्रोजेक्ट की अपनी प्रति प्राप्त करना प्रोजेक्ट (और हमारे किसी भी डेमो एप्लिकेशन) की प्रतिलिपि प्राप्त करने के लिए कई प्रमुख चरण हैं: GitHub से हमारे फोर्क करें। कंप्यूटर विज़न डेमो रिपॉजिटरी को इससे आपके लिए प्रोजेक्ट के अपने संस्करण को अनुकूलित करना आसान हो जाएगा लेकिन फिर भी अपस्ट्रीम सुधारों से लाभ होगा। , फिर एक नया विकास वातावरण बनाएं और इसे अपने फोर्क से लिंक करें। क्विक्स क्लाउड में एक प्रोजेक्ट बनाएं यह आपको अपने खाते के अंतर्गत क्विक्स क्लाउड में एप्लिकेशन चलाने और अपडेट करने की अनुमति देगा। टीएफएल कैमरा एपीआई और गूगल मैप्स जैसी बाहरी सेवाओं के लिए क्रेडेंशियल अपडेट करें। एपीआई कुंजी जैसे रहस्य प्रोजेक्ट प्रतियों में स्थानांतरित नहीं किए जाते हैं, इसलिए आपको इन्हें स्वयं जोड़ना होगा। आपके द्वारा बुनियादी बातें सेट कर लेने के बाद, हम कोड पर गहराई से विचार करेंगे और देखेंगे कि आप इसे कैसे अनुकूलित कर सकते हैं। कंप्यूटर विज़न डेमो रिपॉजिटरी को फोर्क करना कोड पर नियंत्रण पाने के लिए, आइए सबसे पहले कंप्यूटर विज़न डेमो रिपॉजिटरी को फोर्क करें। क्लोन के बजाय कांटा क्यों? क्योंकि, बाद में आप उस कोड को अपने क्विक्स वातावरण में लाएंगे, और कांटा का उपयोग करना आपके वातावरण को सिंक्रनाइज़ रखने का सबसे आसान तरीका है। आप प्रोजेक्ट टेम्पलेट में हमारे द्वारा किए गए किसी भी अपस्ट्रीम परिवर्तन को भी प्राप्त करने में सक्षम होंगे। सरलता के लिए, मैं मान रहा हूँ कि आपके पास पहले से ही एक GitHub खाता है। हालाँकि, हो सकता है कि आप इस प्रोजेक्ट के लिए एक विशिष्ट Git उपयोगकर्ता बनाना चाहें। बाद में आप क्विक्स एसएसएच को रिपॉजिटरी तक पहुंच प्रदान करेंगे, और एक अलग उपयोगकर्ता होना यह सुनिश्चित करने का एक अच्छा तरीका है कि क्विक्स के पास उससे अधिक पहुंच न हो जितनी उसे होनी चाहिए। अपने वेब ब्राउज़र में GitHub खोलें, कंप्यूटर विज़न डेमो रिपॉजिटरी ( ) पर जाएँ और https://github.com/quixio/computer-vision-demo Fork पर क्लिक करें। सुनिश्चित करें कि आपने सभी शाखाओं को फोर्क कर दिया है (गिटहब के फोर्क विज़ार्ड में, " बनाएँ" का चयन रद्द करें)। ऐसा इसलिए है, क्योंकि यदि आप एक परीक्षण खाते का उपयोग कर रहे हैं, तो आपको क्विक्स क्लाउड में विकास वातावरण बनाने के लिए एक वैकल्पिक शाखा की आवश्यकता होगी। केवल मुख्य शाखा की प्रतिलिपि क्विक्स में एक नया विकास वातावरण बनाना इससे पहले कि आप क्विक्स में एक वातावरण बना सकें, आपको पहले एक प्रोजेक्ट बनाना होगा। प्रोजेक्ट निर्माण विज़ार्ड के दौरान, आपसे प्रारंभिक वातावरण जोड़ने के लिए कहा जाएगा। एक बार जब आपको चीजें समझ आ जाएं तो आप बाद में और परिवेश जोड़ सकते हैं। एक प्रोजेक्ट बनाने और एक वातावरण को अपने फोर्क्ड रेपो से जोड़ने के लिए, इन चरणों का पालन करें: क्विक्स में लॉग इन करें और + पर क्लिक करें। नया प्रोजेक्ट अपने प्रोजेक्ट को " " (या कुछ इसी तरह) नाम दें और चुनें। माई कंप्यूटर विज़न डेमो अपने खुद के 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 एपीआई कुंजी जोड़ रहा हूँ यह मानते हुए कि आपने के साथ पंजीकरण कर लिया है, आपको सबसे पहले एक रहस्य के रूप में अपनी खुद की टीएफएल एपीआई कुंजी भी जोड़नी होगी। टीएफएल एपीआई पोर्टल रहस्य जोड़ने के लिए, पिछले अनुभाग के समान चरणों का पालन करने की आवश्यकता है, लेकिन इस बार ' ' कुंजी के साथ एक रहस्य जोड़ें। tfl_api_key पूरे लंदन में देखे जाने वाले वाहनों की संयुक्त अधिकतम संख्या प्राप्त करने के लिए बैक एंड को अपडेट किया जा रहा है अभी, आप पिछले 24 घंटों में देखे गए वाहनों की अधिकतम संख्या ही देख सकते हैं। उदाहरण के लिए, आइए किंग्स क्रॉस और स्विंटन स्ट्रीट के कैमरे से लिए गए इस वीडियो फ्रेम के नीचे प्रदर्शित डेटा की जांच करें प्रति कैमरे वर्तमान में, यह सोचता है कि फ़्रेम में 5 वाहन हैं। हालाँकि, कैमरे द्वारा अब तक देखी गई सबसे अधिक गाड़ियाँ (एक ही फ्रेम में) 11 गाड़ियाँ हैं। हमें नहीं पता कि 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 अनुभाग में, एक नया पर्यावरण चर जोड़ने के लिए पर क्लिक करें, वेरिएबल +जोड़ें दिखाई देने वाले संवाद में, वेरिएबल प्रकार के रूप में चयन करें, वेरिएबल को "आउटपुट2" नाम दें और आपके द्वारा बनाए गए विषय को डिफ़ॉल्ट मान के रूप में चुनें (उदाहरण के लिए " ") आउटपुट विषय का मैक्स-वाहन-एजीजी अब, आपको बस अपने परिवर्तनों को सहेजने और तैनात करने की आवश्यकता है। अपने परिवर्तनों को सहेजने के लिए, पर क्लिक करें। प्रतिबद्ध पुन: तैनात करने से पहले, संशोधन को टैग करना एक अच्छा विचार है ताकि यह बताना आसान हो कि तैनाती कोड के किस संस्करण का उपयोग कर रही है। टैग आइकन पर क्लिक करके कमिट को टैग करें और इसे एक नाम दें... कुछ इस तरह "न्यू एग्रीगेशन"। यदि आप दोबारा जांचना चाहते हैं कि नया कोड काम करता है, तो ऊपर दाईं ओर पर क्लिक करें। रन सेवा को पुनः तैनात करने के लिए, शीर्ष दाईं ओर परिनियोजन ड्रॉपडाउन खोलें, और " " चुनें, फिर " " पर क्लिक करें। मौजूदा तैनाती संपादित करें पुनः तैनात करें विषय का निरीक्षण करने के लिए, क्विक्स पोर्टल खोलें, पृष्ठ पर जाएँ और आपके द्वारा पहले बनाए गए " " विषय पर क्लिक करें। विषय मैक्स-वाहन-एजीजी प्रत्येक विषय में एक दृश्य होता है जिसे "डेटा एक्सप्लोरर दृश्य" कहा जाता है जो आपको किसी विषय के माध्यम से बहने वाले संदेशों का निरीक्षण करने देता है। अब आपको “ ” अनुभाग में एक सक्रिय स्ट्रीम देखनी चाहिए। SELECT STREAMS स्ट्रीम " " चुनें (या इसे जो भी कहा जाए) एग्रीगेट_डेटा फिर अनुभाग में सभी उपलब्ध चयन करें। चयन पैरामीटर्स... मापदंडों का अंत में, चुनें ताकि आप अपना चयनित डेटा देख सकें। तालिका दृश्य ध्यान दें कि नया डेटा तुरंत नहीं आ सकता है क्योंकि सेवा में टीएफएल एपीआई की दर सीमा से बचने के लिए एक वैरिएबल स्लीप टाइमर है। आप इसे "sleep_interval" पर्यावरण चर में कॉन्फ़िगर कर सकते हैं। लेखन के समय, इसे डिफ़ॉल्ट रूप से 60 सेकंड पर सेट किया गया था। टीएफएल कैमरा फ़ीड यदि आप परिनियोजन के लॉग का निरीक्षण करते हैं, तो आपको देखना चाहिए कि यह टाइमर कब सक्रिय हुआ है। जब आप दोबारा डेटा आते हुए देखते हैं, तो वापस जाकर अपने विषय की जांच करना सुरक्षित होता है टीएफएल कैमरा फ़ीड मानचित्र और नए एकत्रीकरण प्रदर्शित करने के लिए फ्रंट एंड को अपडेट किया जा रहा है यदि आप फ्रंट एंड कोड को बदलने से परेशान हैं, तो आप इस भाग को छोड़ सकते हैं। क्विक्स मुख्य रूप से एक बैक एंड टूल है लेकिन हमने एक फ्रंट एंड घटक जोड़ा है ताकि आप एक पूरी तरह कार्यात्मक मिनी एप्लिकेशन बना सकें। इस अनुभाग में, आप एकत्रीकरण प्रदर्शित करने के लिए फ्रंट एंड को अपडेट करने जा रहे हैं। नए एकत्रीकरण डेटा को फ्रंट एंड में प्रदर्शित करें अब, आइए हमारे द्वारा बनाए गए नए समुच्चय को बैक एंड में शामिल करने के लिए यूआई सेवा को अपडेट करें। एक अनुस्मारक के रूप में, यहां बताया गया है कि जब आपका काम पूरा हो जाए तो यह कैसा दिखना चाहिए। यह सुंदर नहीं है, लेकिन यह हमें आवश्यक जानकारी देता है। यूआई को अपडेट करने के लिए, आपको निम्नलिखित फ़ाइलों को संपादित करना होगा: ' ' जो फ्रंट एंड के लिए डेटा सब्सक्रिप्शन का प्रबंधन करता है: app.component.ts <repo_root>/TfL इमेज प्रोसेसिंग UI/src/app/app.component.ts ' ' जो पेज पर जानकारी के लेआउट को परिभाषित करता है। app.component.html <repo_root>/TfL इमेज प्रोसेसिंग UI/src/app/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 यह विषय की सदस्यता शुरू करेगा और संदेश में सभी मापदंडों को पढ़ेगा (पैरामीटरडेटा क्विक्स एपीआई में एक है और यह आम तौर पर संख्यात्मक डेटा से बना होता है।) विशिष्ट डेटा प्रकार इसके बाद, पंक्ति का पता लगाएं ' (पंक्ति 43 या उसके आसपास) और उसके नीचे निम्नलिखित नई पंक्ति जोड़ें। 'selectedMarker: Marker | undefined; 'selectedMarker: Marker | undefined; 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 का उपयोग किया। पर्यवेक्षण समान परिणाम कैसे प्राप्त करें, इसके बारे में अधिक जानकारी के लिए निम्नलिखित संसाधन देखें: (roboflow.com) YOLOv8 का उपयोग करके वस्तुओं को ट्रैक और गिनें ज्यूपिटर नोटबुक का उपयोग करके कंप्यूटर विज़न का उपयोग करके वाहन गिनती पर एक उत्कृष्ट प्राइमर। YOLOv8 वस्तु का पता लगाना और गिनती करना | डस्टिन लियू द्वारा | सितम्बर, 2023 | डेटा संचालित निवेशक रोबोफ़्लो नोटबुक के अनुकूलित स्ट्रीमलिट संस्करण का एक पूर्वाभ्यास (पहले से लिंक किए गए लेख में चर्चा की गई है) - सकते हैं। आप इसे ऑनलाइन भी आज़मा निष्कर्ष यहां तक पहुंचने के लिए बधाई. मुझे आशा है कि आप इसे सफलतापूर्वक अनुकूलित करने में सक्षम थे। यदि आपके पास कोई समस्या है, तो हमारे पर एक प्रश्न पोस्ट करना सुनिश्चित करें और हम में से कोई एक उस पर सीधे विचार करेगा। सामुदायिक मंच जैसा कि आप देख सकते हैं, क्विक्स में जटिल एप्लिकेशन को तैनात करना और चलाना काफी सरल है। ये डेमो स्व-निहित होने के लिए डिज़ाइन किए गए हैं, इसलिए हम फ्रंट एंड को भी होस्ट करते हैं। हालाँकि, उत्पादन परिदृश्य में, आप शायद अपना फ्रंट एंड कहीं और चलाना चाहेंगे। क्विक्स वास्तव में इवेंट स्ट्रीम को संसाधित करने और जटिल गणनाओं को बेहद प्रभावी तरीके से निष्पादित करने में उत्कृष्ट है। यह बड़े पैमाने पर डेटा को संसाधित करने के लिए अपाचे काफ्का की शक्तियों का लाभ उठाता है, जबकि इसकी कुछ कमजोरियों (जैसे संसाधन प्रबंधन और कॉन्फ़िगरेशन जटिलता) को दूर करता है। बेशक, यदि आपके पास पहले से ही अपना स्वयं का काफ्का उदाहरण है, या कंफ्लुएंट क्लाउड का उपयोग कर रहे हैं, तो आप उसका भी उपयोग कर सकते हैं। क्विक्स आपके ईवेंट स्ट्रीम को वास्तविक समय में व्यवस्थित करने और संसाधित करने में आपकी सहायता करने के लिए मौजूद है। क्विक्स में क्विक्स वातावरण को कैसे प्रबंधित किया जाता है, इसके बारे में अधिक जानने के लिए, देखें। क्विक्स दस्तावेज़ में संबंधित अनुभाग एक और पूर्ण कार्यात्मक डेमो ऐप देखने के लिए, हमारे क्यों आज़माएं जो चैट संदेशों पर लाइव भावना विश्लेषण करने के लिए उपयोग करता है। चैट ऐप डेमो को हगिंग फेस ट्रांसफॉर्मर्स लाइब्रेरी का (सीटीओ और क्विक्स के सह-संस्थापक) द्वारा टॉमस न्यूबॉयर भी प्रकाशित किया गया है. यहाँ