You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
IoT-For-Beginners/translations/bg/5-retail/lessons/2-check-stock-device/wio-terminal-object-detecto...

7.9 KiB

Извикване на вашия детектор на обекти от IoT устройство - Wio Terminal

След като вашият детектор на обекти е публикуван, той може да бъде използван от вашето IoT устройство.

Копирайте проекта за класификатор на изображения

Голяма част от вашия детектор на наличности е същата като класификатора на изображения, който създадохте в предишен урок.

Задача - копирайте проекта за класификатор на изображения

  1. Свържете вашата ArduCam към Wio Terminal, следвайки стъпките от урок 2 на производствения проект.

    Може също да искате да фиксирате камерата в една позиция, например като окачите кабела върху кутия или консерва, или като закрепите камерата към кутия с двойнозалепваща лента.

  2. Създайте изцяло нов проект за Wio Terminal, използвайки PlatformIO. Наречете този проект stock-counter.

  3. Повторете стъпките от урок 2 на производствения проект, за да заснемете изображения от камерата.

  4. Повторете стъпките от урок 2 на производствения проект, за да извикате класификатора на изображения. Голяма част от този код ще бъде използвана повторно за откриване на обекти.

Променете кода от класификатор към детектор на изображения

Кодът, който използвахте за класифициране на изображения, е много подобен на кода за откриване на обекти. Основната разлика е URL адресът, който се извиква и който сте получили от Custom Vision, както и резултатите от извикването.

Задача - променете кода от класификатор към детектор на изображения

  1. Добавете следната директива за включване в началото на файла main.cpp:

    #include <vector>
    
  2. Преименувайте функцията classifyImage на detectStock, както името на функцията, така и извикването ѝ във функцията buttonPressed.

  3. Над функцията detectStock декларирайте праг, за да филтрирате всички открития с ниска вероятност:

    const float threshold = 0.3f;
    

    За разлика от класификатора на изображения, който връща само един резултат за всеки етикет, детекторът на обекти ще върне множество резултати, така че всички с ниска вероятност трябва да бъдат филтрирани.

  4. Над функцията 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);
        }
    }
    

    Тази функция приема списък с предсказания и ги отпечатва в серийния монитор.

  5. Във функцията 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.

  6. Качете и стартирайте кода си. Насочете камерата към обекти на рафт и натиснете бутон 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.

    4 консерви доматено пюре на рафт с предсказания за 4 открития с вероятности 35.8%, 33.5%, 25.7% и 16.6%

💁 Можете да намерите този код в папката code-detect/wio-terminal.

😀 Вашата програма за брояч на наличности беше успешна!


Отказ от отговорност:
Този документ е преведен с помощта на AI услуга за превод Co-op Translator. Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия изходен език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален превод от човек. Не носим отговорност за каквито и да е недоразумения или погрешни интерпретации, произтичащи от използването на този превод.