# Проверка наличия товара с помощью IoT-устройства ![Скетчноут с обзором урока](../../../../../translated_images/lesson-20.0211df9551a8abb300fc8fcf7dc2789468dea2eabe9202273ac077b0ba37f15e.ru.jpg) > Скетчноут от [Nitya Narasimhan](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-устройства с камерами могут быть размещены по всему магазину для мониторинга товара, начиная с ключевых зон, где важно своевременное пополнение, например, в местах, где хранятся небольшие количества товаров высокой стоимости. Например, если камера направлена на полки, которые могут вместить 8 банок томатной пасты, а детектор объектов обнаруживает только 7 банок, то одна банка отсутствует и требует пополнения. ![7 банок томатной пасты на полке, 4 на верхнем ряду, 3 на нижнем](../../../../../translated_images/stock-7-cans-tomato-paste.f86059cc573d7becaa89a0eafb9d2cd7e2fe37405a530fe565990e2333d0e4a1.ru.png) На изображении выше детектор объектов обнаружил 7 банок томатной пасты на полке, которая может вместить 8 банок. IoT-устройство может не только отправить уведомление о необходимости пополнения, но и указать местоположение отсутствующего товара, что особенно важно, если вы используете роботов для пополнения полок. > 💁 В зависимости от магазина и популярности товара, пополнение, вероятно, не будет происходить, если отсутствует только одна банка. Вам нужно будет разработать алгоритм, который определяет, когда необходимо пополнение, основываясь на вашем ассортименте, клиентах и других критериях. ✅ В каких еще сценариях можно комбинировать детекцию объектов и роботов? Иногда на полках может оказаться неправильный товар. Это может быть результатом человеческой ошибки при пополнении или того, что покупатели передумали и положили товар в первое попавшееся место. Если это непортящийся товар, например консервированные продукты, это просто неудобство. Если это портящийся товар, например замороженные или охлажденные продукты, это может означать, что товар больше нельзя продавать, так как невозможно определить, сколько времени он находился вне морозильника. Детекция объектов может использоваться для обнаружения неожиданных товаров, снова уведомляя человека или робота о необходимости вернуть товар на правильное место. ![Банка детской кукурузы на полке с томатной пастой](../../../../../translated_images/stock-rogue-corn.be1f3ada8c4578544641af66671c1711a4c02297f14cc7f503354dae0d30a954.ru.png) На изображении выше банка детской кукурузы была помещена на полку рядом с томатной пастой. Детектор объектов обнаружил это, позволяя IoT-устройству уведомить человека или робота о необходимости вернуть банку на ее правильное место. ## Вызов детектора объектов с IoT-устройства Детектор объектов, который вы обучили в прошлом уроке, можно вызвать с вашего IoT-устройства. ### Задача - публикация итерации детектора объектов Итерации публикуются через портал Custom Vision. 1. Откройте портал Custom Vision на [CustomVision.ai](https://customvision.ai) и войдите в систему, если он еще не открыт. Затем откройте ваш проект `stock-detector`. 1. Выберите вкладку **Performance** в верхнем меню. 1. Выберите последнюю итерацию из списка *Iterations* на боковой панели. 1. Нажмите кнопку **Publish** для итерации. ![Кнопка публикации](../../../../../translated_images/custom-vision-object-detector-publish-button.34ee379fc650ccb9856c3868d0003f413b9529f102fc73c37168c98d721cc293.ru.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, а `` — длинный идентификатор, состоящий из букв и цифр. Также скопируйте значение *Prediction-Key*. Это защищенный ключ, который необходимо передать при вызове модели. Только приложения, передающие этот ключ, могут использовать модель, все остальные будут отклонены. ![Диалог API предсказаний, показывающий URL и ключ](../../../../../translated_images/custom-vision-prediction-key-endpoint.30c569ffd0338864f319911f052d5e9b8c5066cb0800a26dd6f7ff5713130ad8.ru.png) ✅ Когда публикуется новая итерация, она будет иметь другое имя. Как вы думаете, как можно изменить итерацию, которую использует IoT-устройство? ### Задача - вызов детектора объектов с IoT-устройства Следуйте соответствующему руководству ниже, чтобы использовать детектор объектов с вашего IoT-устройства: * [Arduino - Wio Terminal](wio-terminal-object-detector.md) * [Одноплатный компьютер - Raspberry Pi/Виртуальное устройство](single-board-computer-object-detector.md) ## Границы объектов Когда вы используете детектор объектов, вы получаете не только обнаруженные объекты с их метками и вероятностями, но также границы объектов. Они определяют, где детектор объектов обнаружил объект с заданной вероятностью. > 💁 Граница объекта — это рамка, которая определяет область, содержащую обнаруженный объект, рамка, задающая границы объекта. Результаты предсказания во вкладке **Predictions** в Custom Vision имеют границы, нарисованные на изображении, которое было отправлено для предсказания. ![4 банки томатной пасты на полке с предсказаниями для 4 обнаружений: 35.8%, 33.5%, 25.7% и 16.6%](../../../../../translated_images/custom-vision-stock-prediction.942266ab1bcca3410ecdf23643b9f5f570cfab2345235074e24c51f285777613.ru.png) На изображении выше были обнаружены 4 банки томатной пасты. В результатах красный квадрат наложен на каждый объект, который был обнаружен на изображении, указывая границы для изображения. ✅ Откройте предсказания в Custom Vision и посмотрите на границы объектов. Границы объектов определяются с помощью 4 значений — верх, левый край, высота и ширина. Эти значения находятся в диапазоне от 0 до 1, представляя позиции как процент от размера изображения. Начало координат (позиция 0,0) находится в верхнем левом углу изображения, поэтому значение "верх" — это расстояние от верха, а нижняя граница объекта — это верх плюс высота. ![Граница вокруг банки томатной пасты](../../../../../translated_images/bounding-box.1420a7ea0d3d15f71e1ffb5cf4b2271d184fac051f990abc541975168d163684.ru.png) Изображение выше имеет ширину 600 пикселей и высоту 800 пикселей. Граница начинается на 320 пикселей вниз, что дает значение "верх" 0.4 (800 x 0.4 = 320). Слева граница начинается на 240 пикселей, что дает значение "левый край" 0.4 (600 x 0.4 = 240). Высота границы составляет 240 пикселей, что дает значение "высота" 0.3 (800 x 0.3 = 240). Ширина границы составляет 120 пикселей, что дает значение "ширина" 0.2 (600 x 0.2 = 120). | Координата | Значение | | ---------- | -------: | | Верх | 0.4 | | Левый край | 0.4 | | Высота | 0.3 | | Ширина | 0.2 | Использование процентных значений от 0 до 1 означает, что независимо от того, как масштабируется изображение, граница начинается на 0.4 от начала и вниз, и составляет 0.3 от высоты и 0.2 от ширины. Вы можете использовать границы объектов в сочетании с вероятностями для оценки точности обнаружения. Например, детектор объектов может обнаружить несколько объектов, которые перекрываются, например, обнаружив одну банку внутри другой. Ваш код может проверить границы объектов, понять, что это невозможно, и игнорировать любые объекты, которые значительно перекрываются с другими. ![Две границы перекрывают банку томатной пасты](../../../../../translated_images/overlap-object-detection.d431e03cae75072a2760430eca7f2c5fdd43045bfd72dadcbf12711f7cd6c2ae.ru.png) В приведенном выше примере одна граница указывает на предсказанную банку томатной пасты с вероятностью 78.3%. Вторая граница немного меньше и находится внутри первой границы с вероятностью 64.3%. Ваш код может проверить границы, увидеть, что они полностью перекрываются, и игнорировать более низкую вероятность, так как невозможно, чтобы одна банка находилась внутри другой. ✅ Можете ли вы придумать ситуацию, когда допустимо обнаружение одного объекта внутри другого? ## Переобучение модели Как и с классификатором изображений, вы можете переобучить вашу модель, используя данные, собранные вашим 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) * [Одноплатный компьютер - Raspberry Pi/Виртуальное устройство](single-board-computer-count-stock.md) --- ## 🚀 Задание Можете ли вы обнаружить неправильный товар? Обучите вашу модель на нескольких объектах, затем обновите ваше приложение, чтобы оно уведомляло вас, если обнаружен неправильный товар. Может быть, даже пойдите дальше и обнаружьте товар, стоящий рядом на одной полке, и проверьте, не был ли он помещен в неправильное место, определяя ограничения на границы объектов. ## Викторина после лекции [Викторина после лекции](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/40) ## Обзор и самостоятельное изучение * Узнайте больше о том, как спроектировать систему обнаружения отсутствующего товара, из [руководства по шаблону обнаружения отсутствующего товара на краю на Microsoft Docs](https://docs.microsoft.com/hybrid/app-solutions/pattern-out-of-stock-at-edge?WT.mc_id=academic-17441-jabenn) * Узнайте другие способы создания комплексных решений для розничной торговли, комбинируя различные IoT и облачные сервисы, посмотрев [видео "За кулисами розничного решения - Практика!" на YouTube](https://www.youtube.com/watch?v=m3Pc300x2Mw). ## Задание [Используйте ваш детектор объектов на краю](assignment.md) --- **Отказ от ответственности**: Этот документ был переведен с помощью сервиса автоматического перевода [Co-op Translator](https://github.com/Azure/co-op-translator). Несмотря на наши усилия обеспечить точность, автоматические переводы могут содержать ошибки или неточности. Оригинальный документ на его родном языке следует считать авторитетным источником. Для получения критически важной информации рекомендуется профессиональный перевод человеком. Мы не несем ответственности за любые недоразумения или неправильные интерпретации, возникшие в результате использования данного перевода.