7.9 KiB
Извикване на вашия детектор на обекти от IoT устройство - Wio Terminal
След като вашият детектор на обекти е публикуван, той може да бъде използван от вашето IoT устройство.
Копирайте проекта за класификатор на изображения
Голяма част от вашия детектор на наличности е същата като класификатора на изображения, който създадохте в предишен урок.
Задача - копирайте проекта за класификатор на изображения
-
Свържете вашата ArduCam към Wio Terminal, следвайки стъпките от урок 2 на производствения проект.
Може също да искате да фиксирате камерата в една позиция, например като окачите кабела върху кутия или консерва, или като закрепите камерата към кутия с двойнозалепваща лента.
-
Създайте изцяло нов проект за Wio Terminal, използвайки PlatformIO. Наречете този проект
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%
💁 Може да се наложи да настроите
threshold
на подходяща стойност за вашите изображения.Ще можете да видите заснетото изображение и тези стойности в раздела Predictions в Custom Vision.
💁 Можете да намерите този код в папката code-detect/wio-terminal.
😀 Вашата програма за брояч на наличности беше успешна!
Отказ от отговорност:
Този документ е преведен с помощта на AI услуга за превод Co-op Translator. Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия изходен език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален превод от човек. Не носим отговорност за каквито и да е недоразумения или погрешни интерпретации, произтичащи от използването на този превод.