# IoT ডিভাইস থেকে স্টক পরীক্ষা করুন ![এই পাঠের একটি স্কেচনোট ওভারভিউ](../../../../../translated_images/lesson-20.0211df9551a8abb300fc8fcf7dc2789468dea2eabe9202273ac077b0ba37f15e.bn.jpg) > স্কেচনোট: [নিত্য নারাসিমহান](https://github.com/nitya)। বড় সংস্করণের জন্য ছবিতে ক্লিক করুন। ## লেকচারের আগে কুইজ [লেকচারের আগে কুইজ](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/39) ## ভূমিকা পূর্ববর্তী পাঠে আপনি খুচরা বিক্রয়ে অবজেক্ট ডিটেকশনের বিভিন্ন ব্যবহার সম্পর্কে শিখেছেন। এছাড়াও, আপনি শিখেছেন কিভাবে একটি অবজেক্ট ডিটেক্টর প্রশিক্ষণ দিয়ে স্টক সনাক্ত করতে হয়। এই পাঠে আপনি শিখবেন কিভাবে আপনার IoT ডিভাইস থেকে অবজেক্ট ডিটেক্টর ব্যবহার করে স্টক গণনা করতে হয়। এই পাঠে আমরা আলোচনা করব: * [স্টক গণনা](../../../../../5-retail/lessons/2-check-stock-device) * [আপনার IoT ডিভাইস থেকে অবজেক্ট ডিটেক্টর কল করা](../../../../../5-retail/lessons/2-check-stock-device) * [বাউন্ডিং বক্স](../../../../../5-retail/lessons/2-check-stock-device) * [মডেল পুনরায় প্রশিক্ষণ](../../../../../5-retail/lessons/2-check-stock-device) * [স্টক গণনা](../../../../../5-retail/lessons/2-check-stock-device) > 🗑 এটি এই প্রকল্পের শেষ পাঠ। তাই এই পাঠ এবং অ্যাসাইনমেন্ট শেষ করার পর, আপনার ক্লাউড পরিষেবাগুলি পরিষ্কার করতে ভুলবেন না। অ্যাসাইনমেন্ট সম্পন্ন করতে পরিষেবাগুলি প্রয়োজন হবে, তাই প্রথমে তা শেষ করুন। > > প্রয়োজনে [আপনার প্রকল্প পরিষ্কার করার গাইড](../../../clean-up.md) দেখুন। ## স্টক গণনা অবজেক্ট ডিটেক্টর ব্যবহার করে স্টক পরীক্ষা করা যায়, যেমন স্টক গণনা করা বা স্টক সঠিক স্থানে আছে কিনা তা নিশ্চিত করা। ক্যামেরাযুক্ত IoT ডিভাইসগুলো দোকানের বিভিন্ন স্থানে স্থাপন করা যেতে পারে, বিশেষ করে সেই জায়গাগুলোতে যেখানে পণ্য পুনরায় মজুদ করা গুরুত্বপূর্ণ। উদাহরণস্বরূপ, যদি একটি ক্যামেরা এমন একটি তাকের দিকে তাক করা থাকে যেখানে ৮টি টমেটো পেস্টের ক্যান রাখা যায়, এবং অবজেক্ট ডিটেক্টর ৭টি ক্যান সনাক্ত করে, তাহলে একটি ক্যান অনুপস্থিত এবং তা পুনরায় মজুদ করতে হবে। ![একটি তাকের উপর ৭টি টমেটো পেস্টের ক্যান](../../../../../translated_images/stock-7-cans-tomato-paste.f86059cc573d7becaa89a0eafb9d2cd7e2fe37405a530fe565990e2333d0e4a1.bn.png) উপরের ছবিতে, একটি অবজেক্ট ডিটেক্টর একটি তাকের উপর ৭টি টমেটো পেস্টের ক্যান সনাক্ত করেছে যেখানে ৮টি ক্যান রাখা যায়। IoT ডিভাইসটি শুধু পুনরায় মজুদের প্রয়োজনীয়তার নোটিফিকেশনই পাঠাতে পারে না, বরং অনুপস্থিত আইটেমটির অবস্থান সম্পর্কেও তথ্য দিতে পারে, যা রোবট ব্যবহার করে তাক পুনরায় মজুদ করার ক্ষেত্রে গুরুত্বপূর্ণ। > 💁 দোকানের ধরন এবং পণ্যের জনপ্রিয়তার উপর নির্ভর করে, শুধুমাত্র একটি ক্যান অনুপস্থিত থাকলে পুনরায় মজুদ নাও হতে পারে। আপনার পণ্য, গ্রাহক এবং অন্যান্য মানদণ্ডের উপর ভিত্তি করে একটি অ্যালগরিদম তৈরি করতে হবে। ✅ আর কোন পরিস্থিতিতে আপনি অবজেক্ট ডিটেকশন এবং রোবট একত্রিত করতে পারেন? কখনও কখনও তাকের উপর ভুল পণ্য থাকতে পারে। এটি হতে পারে পুনরায় মজুদ করার সময় মানুষের ভুল, অথবা গ্রাহকরা একটি পণ্য কেনার সিদ্ধান্ত পরিবর্তন করে প্রথম পাওয়া স্থানে রেখে দিলে। যদি এটি একটি নষ্ট না হওয়া পণ্য হয়, যেমন টিনজাত খাবার, এটি বিরক্তিকর। কিন্তু যদি এটি একটি নষ্টযোগ্য পণ্য হয়, যেমন হিমায়িত বা ঠাণ্ডা পণ্য, তবে এটি বিক্রয়ের অযোগ্য হয়ে যেতে পারে কারণ এটি কতক্ষণ ফ্রিজের বাইরে ছিল তা জানা অসম্ভব। অবজেক্ট ডিটেকশন ব্যবহার করে অপ্রত্যাশিত আইটেম সনাক্ত করা যায় এবং দ্রুত তা সংশোধন করার জন্য একটি মানব বা রোবটকে সতর্ক করা যায়। ![টমেটো পেস্টের তাকের উপর একটি ভুল বেবি কর্নের ক্যান](../../../../../translated_images/stock-rogue-corn.be1f3ada8c4578544641af66671c1711a4c02297f14cc7f503354dae0d30a954.bn.png) উপরের ছবিতে, একটি বেবি কর্নের ক্যান টমেটো পেস্টের তাকের উপর রাখা হয়েছে। অবজেক্ট ডিটেক্টর এটি সনাক্ত করেছে, যা IoT ডিভাইসকে একটি মানব বা রোবটকে ক্যানটি সঠিক স্থানে ফেরত পাঠানোর জন্য নোটিফিকেশন পাঠাতে সক্ষম করে। ## আপনার IoT ডিভাইস থেকে অবজেক্ট ডিটেক্টর কল করুন আপনি পূর্ববর্তী পাঠে প্রশিক্ষণ দেওয়া অবজেক্ট ডিটেক্টরটি আপনার IoT ডিভাইস থেকে কল করতে পারেন। ### কাজ - আপনার অবজেক্ট ডিটেক্টরের একটি ইটারেশন প্রকাশ করুন ইটারেশনগুলো Custom Vision পোর্টাল থেকে প্রকাশ করা হয়। 1. [CustomVision.ai](https://customvision.ai) এ Custom Vision পোর্টাল চালু করুন এবং সাইন ইন করুন যদি এটি ইতিমধ্যে খোলা না থাকে। তারপর আপনার `stock-detector` প্রকল্পটি খুলুন। 1. উপরের অপশন থেকে **Performance** ট্যাবটি নির্বাচন করুন। 1. পাশে থাকা *Iterations* তালিকা থেকে সর্বশেষ ইটারেশনটি নির্বাচন করুন। 1. ইটারেশনের জন্য **Publish** বোতামটি নির্বাচন করুন। ![পাবলিশ বোতাম](../../../../../translated_images/custom-vision-object-detector-publish-button.34ee379fc650ccb9856c3868d0003f413b9529f102fc73c37168c98d721cc293.bn.png) 1. *Publish Model* ডায়ালগে, *Prediction resource* সেট করুন `stock-detector-prediction` রিসোর্সে যা আপনি পূর্ববর্তী পাঠে তৈরি করেছিলেন। নাম `Iteration2` রাখুন এবং **Publish** বোতামটি নির্বাচন করুন। 1. প্রকাশিত হওয়ার পরে, **Prediction URL** বোতামটি নির্বাচন করুন। এটি প্রেডিকশন API-এর বিস্তারিত দেখাবে, যা আপনার IoT ডিভাইস থেকে মডেলটি কল করার জন্য প্রয়োজন। নিচের অংশটি *If you have an image file* নামে লেবেল করা আছে, এবং এটি আপনার প্রয়োজনীয় তথ্য। দেখানো URL-এর একটি কপি নিন, যা এরকম কিছু হবে: ```output https://.api.cognitive.microsoft.com/customvision/v3.0/Prediction//detect/iterations/Iteration2/image ``` যেখানে `` হবে আপনার Custom Vision রিসোর্স তৈরি করার সময় ব্যবহৃত অবস্থান, এবং `` হবে একটি দীর্ঘ ID যা অক্ষর এবং সংখ্যার সমন্বয়ে গঠিত। এছাড়াও *Prediction-Key* মানের একটি কপি নিন। এটি একটি সুরক্ষিত কী যা মডেলটি কল করার সময় পাস করতে হবে। শুধুমাত্র এই কী পাস করা অ্যাপ্লিকেশনগুলো মডেলটি ব্যবহার করতে পারবে, অন্য কোনো অ্যাপ্লিকেশন প্রত্যাখ্যাত হবে। ![প্রেডিকশন API ডায়ালগ, যেখানে URL এবং কী দেখানো হয়েছে](../../../../../translated_images/custom-vision-prediction-key-endpoint.30c569ffd0338864f319911f052d5e9b8c5066cb0800a26dd6f7ff5713130ad8.bn.png) ✅ যখন একটি নতুন ইটারেশন প্রকাশিত হয়, তখন এর একটি ভিন্ন নাম থাকে। আপনি কীভাবে IoT ডিভাইসটি ব্যবহার করা ইটারেশন পরিবর্তন করবেন বলে মনে করেন? ### কাজ - আপনার IoT ডিভাইস থেকে অবজেক্ট ডিটেক্টর কল করুন নিম্নলিখিত গাইড অনুসরণ করে আপনার IoT ডিভাইস থেকে অবজেক্ট ডিটেক্টর ব্যবহার করুন: * [Arduino - Wio Terminal](wio-terminal-object-detector.md) * [Single-board computer - Raspberry Pi/Virtual device](single-board-computer-object-detector.md) ## বাউন্ডিং বক্স অবজেক্ট ডিটেক্টর ব্যবহার করার সময়, আপনি শুধুমাত্র সনাক্তকৃত অবজেক্টগুলোর ট্যাগ এবং সম্ভাব্যতাগুলোই পাবেন না, বরং অবজেক্টগুলোর বাউন্ডিং বক্সও পাবেন। এগুলো সেই এলাকা নির্ধারণ করে যেখানে অবজেক্ট ডিটেক্টর একটি নির্দিষ্ট সম্ভাব্যতাসহ অবজেক্টটি সনাক্ত করেছে। > 💁 বাউন্ডিং বক্স হলো একটি বক্স যা সনাক্তকৃত অবজেক্টের এলাকা নির্ধারণ করে, অর্থাৎ অবজেক্টের সীমানা নির্ধারণ করে। Custom Vision-এর **Predictions** ট্যাবে প্রেডিকশনের ফলাফলে বাউন্ডিং বক্সগুলো সেই ছবিতে আঁকা থাকে যা প্রেডিকশনের জন্য পাঠানো হয়েছিল। ![একটি তাকের উপর ৪টি টমেটো পেস্টের ক্যান, যেখানে ৪টি সনাক্তকরণের জন্য প্রেডিকশন দেখানো হয়েছে](../../../../../translated_images/custom-vision-stock-prediction.942266ab1bcca3410ecdf23643b9f5f570cfab2345235074e24c51f285777613.bn.png) উপরের ছবিতে, ৪টি টমেটো পেস্টের ক্যান সনাক্ত করা হয়েছে। ফলাফলে প্রতিটি সনাক্তকৃত অবজেক্টের জন্য একটি লাল বর্গাকার চিহ্নিত করা হয়েছে, যা ছবির বাউন্ডিং বক্স নির্দেশ করে। ✅ Custom Vision-এ প্রেডিকশন খুলুন এবং বাউন্ডিং বক্সগুলো দেখুন। বাউন্ডিং বক্স ৪টি মান দ্বারা সংজ্ঞায়িত হয় - top, left, height এবং width। এই মানগুলো ০-১ স্কেলে থাকে, যা ছবির আকারের শতাংশ হিসেবে অবস্থানগুলো উপস্থাপন করে। ছবির উপরের বাম কোণ (০,০) অবস্থান হিসেবে ধরা হয়, তাই top মানটি উপরের দিক থেকে দূরত্ব নির্দেশ করে, এবং বাউন্ডিং বক্সের নিচের অংশটি top এবং height এর যোগফল। ![একটি টমেটো পেস্টের ক্যানের চারপাশে একটি বাউন্ডিং বক্স](../../../../../translated_images/bounding-box.1420a7ea0d3d15f71e1ffb5cf4b2271d184fac051f990abc541975168d163684.bn.png) উপরের ছবিটি ৬০০ পিক্সেল চওড়া এবং ৮০০ পিক্সেল লম্বা। বাউন্ডিং বক্সটি ৩২০ পিক্সেল নিচ থেকে শুরু হয়, যা top মান ০.৪ (৮০০ x ০.৪ = ৩২০) নির্দেশ করে। বাম দিক থেকে বাউন্ডিং বক্সটি ২৪০ পিক্সেল দূরে শুরু হয়, যা left মান ০.৪ (৬০০ x ০.৪ = ২৪০) নির্দেশ করে। বাউন্ডিং বক্সের উচ্চতা ২৪০ পিক্সেল, যা height মান ০.৩ (৮০০ x ০.৩ = ২৪০) নির্দেশ করে। বাউন্ডিং বক্সের প্রস্থ ১২০ পিক্সেল, যা width মান ০.২ (৬০০ x ০.২ = ১২০) নির্দেশ করে। | কোঅর্ডিনেট | মান | | ---------- | ----: | | Top | ০.৪ | | Left | ০.৪ | | Height | ০.৩ | | Width | ০.২ | ০-১ স্কেলের শতাংশ মান ব্যবহার করার ফলে ছবির আকার যাই হোক না কেন, বাউন্ডিং বক্সটি সর্বদা ০.৪ অংশ নিচে এবং বামে শুরু হয় এবং উচ্চতার ০.৩ এবং প্রস্থের ০.২ অংশ জুড়ে থাকে। আপনি বাউন্ডিং বক্স এবং সম্ভাব্যতাগুলো একত্রিত করে সনাক্তকরণের নির্ভুলতা মূল্যায়ন করতে পারেন। উদাহরণস্বরূপ, একটি অবজেক্ট ডিটেক্টর একাধিক অবজেক্ট সনাক্ত করতে পারে যা একে অপরের সাথে ওভারল্যাপ করে, যেমন একটি ক্যানের ভিতরে আরেকটি ক্যান সনাক্ত করা। আপনার কোড বাউন্ডিং বক্সগুলো পরীক্ষা করতে পারে, বুঝতে পারে যে এটি অসম্ভব, এবং যেকোনো অবজেক্ট যা উল্লেখযোগ্যভাবে ওভারল্যাপ করে তা উপেক্ষা করতে পারে। ![একটি টমেটো পেস্টের ক্যানের উপর দুটি ওভারল্যাপ করা বাউন্ডিং বক্স](../../../../../translated_images/overlap-object-detection.d431e03cae75072a2760430eca7f2c5fdd43045bfd72dadcbf12711f7cd6c2ae.bn.png) উপরের উদাহরণে, একটি বাউন্ডিং বক্স ৭৮.৩% সম্ভাব্যতাসহ একটি টমেটো পেস্টের ক্যান নির্দেশ করে। একটি দ্বিতীয় বাউন্ডিং বক্স সামান্য ছোট এবং প্রথম বাউন্ডিং বক্সের ভিতরে ৬৪.৩% সম্ভাব্যতাসহ রয়েছে। আপনার কোড বাউন্ডিং বক্সগুলো পরীক্ষা করতে পারে, দেখে যে তারা সম্পূর্ণ ওভারল্যাপ করেছে, এবং নিম্ন সম্ভাব্যতাকে উপেক্ষা করতে পারে কারণ একটি ক্যানের ভিতরে আরেকটি থাকা সম্ভব নয়। ✅ এমন একটি পরিস্থিতি কল্পনা করুন যেখানে একটি অবজেক্টের ভিতরে আরেকটি অবজেক্ট সনাক্ত করা বৈধ হতে পারে? ## মডেল পুনরায় প্রশিক্ষণ ইমেজ ক্লাসিফায়ারের মতো, আপনি আপনার IoT ডিভাইস থেকে সংগৃহীত ডেটা ব্যবহার করে আপনার মডেল পুনরায় প্রশিক্ষণ দিতে পারেন। এই বাস্তব-জগতের ডেটা ব্যবহার করে নিশ্চিত করা যাবে যে আপনার মডেলটি IoT ডিভাইস থেকে ব্যবহারের সময় ভালোভাবে কাজ করে। তবে, ইমেজ ক্লাসিফায়ারের মতো শুধুমাত্র একটি ইমেজ ট্যাগ করা সম্ভব নয়। পরিবর্তে, আপনাকে মডেল দ্বারা সনাক্তকৃত প্রতিটি বাউন্ডিং বক্স পর্যালোচনা করতে হবে। যদি বক্সটি ভুল জিনিসের চারপাশে থাকে তবে এটি মুছে ফেলতে হবে, যদি এটি ভুল স্থানে থাকে তবে এটি সামঞ্জস্য করতে হবে। ### কাজ - মডেল পুনরায় প্রশিক্ষণ 1. নিশ্চিত করুন যে আপনি আপনার IoT ডিভাইস ব্যবহার করে বিভিন্ন ইমেজ সংগ্রহ করেছেন। 1. **Predictions** ট্যাব থেকে একটি ইমেজ নির্বাচন করুন। আপনি সনাক্তকৃত অবজেক্টগুলোর বাউন্ডিং বক্সগুলো লাল রঙে দেখতে পাবেন। 1. প্রতিটি বাউন্ডিং বক্স পর্যালোচনা করুন। প্রথমে এটি নির্বাচন করুন এবং আপনি একটি পপ-আপে ট্যাগ দেখতে পাবেন। প্রয়োজনে বাউন্ডিং বক্সের কোণগুলো ব্যবহার করে আকার সামঞ্জস্য করুন। যদি ট্যাগটি ভুল হয়, **X** বোতামটি ব্যবহার করে এটি সরান এবং সঠিক ট্যাগ যোগ করুন। যদি বাউন্ডিং বক্সে কোনো অবজেক্ট না থাকে, তবে এটি ট্র্যাশক্যান বোতামটি ব্যবহার করে মুছে ফেলুন। 1. সম্পন্ন হলে এডিটরটি বন্ধ করুন এবং ইমেজটি **Predictions** ট্যাব থেকে **Training Images** ট্যাবে চলে যাবে। সমস্ত প্রেডিকশনগুলোর জন্য এই প্রক্রিয়াটি পুনরাবৃত্তি করুন। 1. **Train** বোতামটি ব্যবহার করে আপনার মডেল পুনরায় প্রশিক্ষণ দিন। প্রশিক্ষণ সম্পন্ন হলে, ইটারেশনটি প্রকাশ করুন এবং আপনার IoT ডিভাইসটি নতুন ইটারেশনের URL ব্যবহার করতে আপডেট করুন। 1. আপনার কোড পুনরায় ডিপ্লয় করুন এবং আপনার IoT ডিভাইস পরীক্ষা করুন। ## স্টক গণনা সনাক্তকৃত অবজেক্টের সংখ্যা এবং বাউন্ডিং বক্সের সংমিশ্রণ ব্যবহার করে, আপনি একটি তাকের উপর স্টক গণনা করতে পারেন। ### কাজ - স্টক গণনা নিম্নলিখিত গাইড অনুসরণ করে আপনার IoT ডিভাইস থেকে অবজেক্ট ডিটেক্টরের ফলাফল ব্যবহার করে স্টক গণনা করুন: * [Arduino - Wio Terminal](wio-terminal-count-stock.md) * [Single-board computer - Raspberry Pi/Virtual device](single-board-computer-count-stock.md) --- ## 🚀 চ্যালেঞ্জ আপনি কি ভুল স্টক সনাক্ত করতে পারেন? আপনার মডেলটি একাধিক অবজেক্টে প্রশিক্ষণ দিন, তারপর আপনার অ্যাপটি আপডেট করুন যাতে এটি ভুল স্টক সনাক্ত হলে আপনাকে সতর্ক করে। এটি আরও এগিয়ে নিয়ে যান এবং একই তাকের উপর স্টক সনাক্ত করুন, এবং দেখুন কিছু ভুল স্থানে রাখা হয়েছে কিনা বাউন্ডিং বক্সের সীমা নির্ধারণ করে। ## লেকচারের পরে কুইজ [লেকচারের পরে কুইজ](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/40) ## পর্যালোচনা ও স্ব-অধ্যয়ন * Microsoft Docs-এ [Out of stock detection at the edge pattern guide](https://docs.microsoft.com/hybrid/app-solutions/pattern-out-of-stock-at-edge?WT.mc_id=academic-17441-jabenn) থেকে একটি সম্পূর্ণ স্টক সনাক্তকরণ সিস্টেম কীভাবে স্থাপন করবেন তা শিখুন। * IoT এবং ক্লাউড পরিষেবাগুলোর সমন্বয়ে খুচরা সমাধান তৈরি করার অন্যান্য উপায় শিখুন এই [Behind the scenes of a retail solution - Hands On! ভিডিওটি YouTube-এ](https://www.youtube.com/watch?v=m3Pc300x2Mw) দেখে। ## অ্যাসাইনমেন্ট [আপনার অবজেক্ট ডিটেক্টর এজে ব্যবহার করুন](assignment.md) --- **অস্বীকৃতি**: এই নথিটি AI অনুবাদ পরিষেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনুবাদ করা হয়েছে। আমরা যথাসম্ভব সঠিক অনুবাদ প্রদানের চেষ্টা করি, তবে অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। মূল ভাষায় থাকা নথিটিকে প্রামাণিক উৎস হিসেবে বিবেচনা করা উচিত। গুরুত্বপূর্ণ তথ্যের জন্য, পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদ ব্যবহারের ফলে কোনো ভুল বোঝাবুঝি বা ভুল ব্যাখ্যা হলে আমরা তার জন্য দায়ী থাকব না।