9.6 KiB
अपने IoT डिवाइस से ऑब्जेक्ट डिटेक्टर को कॉल करें - Wio Terminal
एक बार आपका ऑब्जेक्ट डिटेक्टर प्रकाशित हो जाए, तो इसे आपके IoT डिवाइस से उपयोग किया जा सकता है।
इमेज क्लासिफायर प्रोजेक्ट कॉपी करें
आपका स्टॉक डिटेक्टर ज्यादातर उसी तरह का है जैसा आपने पिछले पाठ में इमेज क्लासिफायर बनाया था।
कार्य - इमेज क्लासिफायर प्रोजेक्ट कॉपी करें
-
अपने ArduCam को Wio Terminal से कनेक्ट करें, मैन्युफैक्चरिंग प्रोजेक्ट के पाठ 2 में दिए गए चरणों का पालन करते हुए।
आप कैमरे को एक स्थिर स्थिति में भी सेट कर सकते हैं, जैसे कि केबल को किसी बॉक्स या कैन के ऊपर लटकाकर, या डबल-साइडेड टेप का उपयोग करके कैमरे को बॉक्स पर फिक्स करके।
-
PlatformIO का उपयोग करके एक नया Wio Terminal प्रोजेक्ट बनाएं। इस प्रोजेक्ट का नाम
stock-counter
रखें। -
मैन्युफैक्चरिंग प्रोजेक्ट के पाठ 2 से चरणों को दोहराएं ताकि कैमरे से इमेज कैप्चर की जा सके।
-
मैन्युफैक्चरिंग प्रोजेक्ट के पाठ 2 से चरणों को दोहराएं ताकि इमेज क्लासिफायर को कॉल किया जा सके। इस कोड का अधिकांश हिस्सा ऑब्जेक्ट्स को डिटेक्ट करने के लिए पुनः उपयोग किया जाएगा।
कोड को क्लासिफायर से इमेज डिटेक्टर में बदलें
आपने इमेज क्लासिफाई करने के लिए जो कोड उपयोग किया था, वह ऑब्जेक्ट्स को डिटेक्ट करने के कोड से बहुत मिलता-जुलता है। मुख्य अंतर वह URL है जिसे Custom Vision से प्राप्त किया गया है, और कॉल के परिणाम हैं।
कार्य - कोड को क्लासिफायर से इमेज डिटेक्टर में बदलें
-
main.cpp
फाइल के शीर्ष पर निम्नलिखित इनक्लूड डायरेक्टिव जोड़ें:#include <vector>
-
classifyImage
फंक्शन का नाम बदलकरdetectStock
रखें, फंक्शन के नाम औरbuttonPressed
फंक्शन में कॉल दोनों में। -
detectStock
फंक्शन के ऊपर एक थ्रेशहोल्ड घोषित करें ताकि कम संभावना वाले किसी भी डिटेक्शन को फ़िल्टर किया जा सके:const float threshold = 0.3f;
इमेज क्लासिफायर केवल एक टैग के लिए एक परिणाम लौटाता है, लेकिन ऑब्जेक्ट डिटेक्टर कई परिणाम लौटाता है, इसलिए कम संभावना वाले किसी भी परिणाम को फ़िल्टर करना आवश्यक है।
-
detectStock
फंक्शन के ऊपर एक फंक्शन घोषित करें जो प्रेडिक्शन्स को प्रोसेस करे:void processPredictions(std::vector<JsonVariant> &predictions) { for(JsonVariant prediction : predictions) { String tag = prediction["tagName"].as<String>(); float probability = prediction["probability"].as<float>(); char buff[32]; sprintf(buff, "%s:\t%.2f%%", tag.c_str(), probability * 100.0); Serial.println(buff); } }
यह प्रेडिक्शन्स की सूची लेता है और उन्हें सीरियल मॉनिटर पर प्रिंट करता है।
-
detectStock
फंक्शन में, प्रेडिक्शन्स के माध्यम से लूप करने वालेfor
लूप की सामग्री को निम्नलिखित से बदलें:std::vector<JsonVariant> passed_predictions; for(JsonVariant prediction : predictions) { float probability = prediction["probability"].as<float>(); if (probability > threshold) { passed_predictions.push_back(prediction); } } processPredictions(passed_predictions);
यह प्रेडिक्शन्स के माध्यम से लूप करता है, संभावना को थ्रेशहोल्ड से तुलना करता है। सभी प्रेडिक्शन्स जिनकी संभावना थ्रेशहोल्ड से अधिक होती है, उन्हें एक
list
में जोड़ा जाता है औरprocessPredictions
फंक्शन को पास किया जाता है। -
अपना कोड अपलोड करें और चलाएं। कैमरे को शेल्फ पर रखे ऑब्जेक्ट्स की ओर पॉइंट करें और C बटन दबाएं। आप सीरियल मॉनिटर में आउटपुट देखेंगे:
Connecting to WiFi.. Connected! Image captured Image read to buffer with length 17416 tomato paste: 35.84% tomato paste: 35.87% tomato paste: 34.11% tomato paste: 35.16%
💁 आपको अपने इमेज के लिए उपयुक्त थ्रेशहोल्ड को समायोजित करने की आवश्यकता हो सकती है।
आप ली गई इमेज और इन मानों को Custom Vision के Predictions टैब में देख पाएंगे।
💁 आप इस कोड को code-detect/wio-terminal फोल्डर में पा सकते हैं।
😀 आपका स्टॉक काउंटर प्रोग्राम सफल रहा!
अस्वीकरण:
यह दस्तावेज़ AI अनुवाद सेवा Co-op Translator का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता सुनिश्चित करने का प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं।