|
|
<!--
|
|
|
CO_OP_TRANSLATOR_METADATA:
|
|
|
{
|
|
|
"original_hash": "1c9e5fa8b7be726c75a97232b1e41c97",
|
|
|
"translation_date": "2025-08-28T10:48:29+00:00",
|
|
|
"source_file": "5-retail/lessons/2-check-stock-device/README.md",
|
|
|
"language_code": "bg"
|
|
|
}
|
|
|
-->
|
|
|
# Проверка на наличности от IoT устройство
|
|
|
|
|
|

|
|
|
|
|
|
> Скица от [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 консерви доматено пюре на рафт, който може да побере 8 консерви. IoT устройството не само може да изпрати известие за необходимостта от презареждане, но дори може да даде индикация за местоположението на липсващия артикул, което е важна информация, ако използвате роботи за презареждане на рафтовете.
|
|
|
|
|
|
> 💁 В зависимост от магазина и популярността на артикула, презареждането вероятно няма да се случи, ако липсва само една консерва. Ще трябва да изградите алгоритъм, който определя кога да се презарежда въз основа на вашите продукти, клиенти и други критерии.
|
|
|
|
|
|
✅ В какви други сценарии бихте могли да комбинирате разпознаването на обекти и роботи?
|
|
|
|
|
|
Понякога на рафтовете може да има грешни наличности. Това може да бъде човешка грешка при презареждане или клиенти, които променят решението си за покупка и поставят артикул обратно на първото налично място. Когато става въпрос за непреходни артикули като консервирани храни, това е неудобство. Ако става въпрос за преходни артикули като замразени или охладени продукти, това може да означава, че продуктът вече не може да бъде продаден, тъй като може да е невъзможно да се определи колко време артикулът е бил извън фризера.
|
|
|
|
|
|
Разпознаването на обекти може да се използва за откриване на неочаквани артикули, като отново уведомява човек или робот да върне артикула веднага щом бъде открит.
|
|
|
|
|
|

|
|
|
|
|
|
На изображението по-горе консерва бебешка царевица е поставена на рафта до доматеното пюре. Детекторът на обекти е открил това, позволявайки на IoT устройството да уведоми човек или робот да върне консервата на правилното й място.
|
|
|
|
|
|
## Извикване на детектора на обекти от вашето IoT устройство
|
|
|
|
|
|
Детекторът на обекти, който обучихте в последния урок, може да бъде извикан от вашето IoT устройство.
|
|
|
|
|
|
### Задача - публикуване на итерация на вашия детектор на обекти
|
|
|
|
|
|
Итерациите се публикуват от портала Custom Vision.
|
|
|
|
|
|
1. Стартирайте портала Custom Vision на [CustomVision.ai](https://customvision.ai) и влезте, ако все още не сте го отворили. След това отворете вашия проект `stock-detector`.
|
|
|
|
|
|
1. Изберете раздела **Performance** от опциите в горната част.
|
|
|
|
|
|
1. Изберете последната итерация от списъка *Iterations* отстрани.
|
|
|
|
|
|
1. Натиснете бутона **Publish** за итерацията.
|
|
|
|
|
|

|
|
|
|
|
|
1. В диалога *Publish Model* задайте *Prediction resource* на ресурса `stock-detector-prediction`, който създадохте в последния урок. Оставете името като `Iteration2` и натиснете бутона **Publish**.
|
|
|
|
|
|
1. След като бъде публикувано, натиснете бутона **Prediction URL**. Това ще покаже подробности за API за предсказания, които ще ви трябват, за да извикате модела от вашето IoT устройство. Долната секция е обозначена *If you have an image file*, и това са подробностите, които ви трябват. Вземете копие на URL адреса, който ще изглежда като:
|
|
|
|
|
|
```output
|
|
|
https://<location>.api.cognitive.microsoft.com/customvision/v3.0/Prediction/<id>/detect/iterations/Iteration2/image
|
|
|
```
|
|
|
|
|
|
Където `<location>` ще бъде местоположението, което сте използвали при създаването на вашия ресурс за Custom Vision, а `<id>` ще бъде дълъг идентификатор, съставен от букви и цифри.
|
|
|
|
|
|
Също така вземете копие на стойността *Prediction-Key*. Това е защитен ключ, който трябва да предадете, когато извиквате модела. Само приложения, които предават този ключ, имат право да използват модела, всички други приложения се отхвърлят.
|
|
|
|
|
|

|
|
|
|
|
|
✅ Когато се публикува нова итерация, тя ще има различно име. Как мислите, че бихте променили итерацията, която IoT устройството използва?
|
|
|
|
|
|
### Задача - извикване на детектора на обекти от вашето IoT устройство
|
|
|
|
|
|
Следвайте съответното ръководство по-долу, за да използвате детектора на обекти от вашето IoT устройство:
|
|
|
|
|
|
* [Arduino - Wio Terminal](wio-terminal-object-detector.md)
|
|
|
* [Едноплатков компютър - Raspberry Pi/Виртуално устройство](single-board-computer-object-detector.md)
|
|
|
|
|
|
## Ограничителни кутии
|
|
|
|
|
|
Когато използвате детектора на обекти, не само получавате откритите обекти с техните етикети и вероятности, но също така получавате ограничителните кутии на обектите. Те определят къде детекторът на обекти е открил обекта с дадената вероятност.
|
|
|
|
|
|
> 💁 Ограничителна кутия е кутия, която определя областта, съдържаща открития обект, кутия, която определя границата за обекта.
|
|
|
|
|
|
Резултатите от предсказание в раздела **Predictions** в Custom Vision имат ограничителните кутии, начертани върху изображението, което е изпратено за предсказание.
|
|
|
|
|
|

|
|
|
|
|
|
На изображението по-горе са открити 4 консерви доматено пюре. В резултатите червен квадрат е наложен върху всяко открито изображение, показвайки ограничителната кутия за изображението.
|
|
|
|
|
|
✅ Отворете предсказанията в Custom Vision и разгледайте ограничителните кутии.
|
|
|
|
|
|
Ограничителните кутии се определят с 4 стойности - горна, лява, височина и ширина. Тези стойности са в мащаб от 0-1, представляващи позициите като процент от размера на изображението. Началната точка (позиция 0,0) е горният ляв ъгъл на изображението, така че горната стойност е разстоянието от горната част, а долната част на ограничителната кутия е горната плюс височината.
|
|
|
|
|
|

|
|
|
|
|
|
Горното изображение е 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 от ширината.
|
|
|
|
|
|
Можете да използвате ограничителните кутии, комбинирани с вероятностите, за да оцените колко точно е откриването. Например, детекторът на обекти може да открие множество обекти, които се припокриват, например откриване на една консерва вътре в друга. Вашият код може да разгледа ограничителните кутии, да разбере, че това е невъзможно, и да игнорира всички обекти, които имат значително припокриване с други обекти.
|
|
|
|
|
|

|
|
|
|
|
|
В горния пример една ограничителна кутия показва предсказана консерва доматено пюре с вероятност 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 и облачни услуги, като гледате това [видео за задкулисие на търговско решение - Hands On! в YouTube](https://www.youtube.com/watch?v=m3Pc300x2Mw).
|
|
|
|
|
|
## Задача
|
|
|
|
|
|
[Използвайте вашия детектор на обекти на ръба](assignment.md)
|
|
|
|
|
|
---
|
|
|
|
|
|
**Отказ от отговорност**:
|
|
|
Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. |