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/ru/5-retail/lessons/2-check-stock-device/wio-terminal-object-detecto...

7.8 KiB

Вызов детектора объектов с вашего IoT-устройства - Wio Terminal

После публикации вашего детектора объектов его можно использовать с вашего IoT-устройства.

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

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

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

  1. Подключите вашу ArduCam к Wio Terminal, следуя шагам из урока 2 проекта по производству.

    Вы также можете зафиксировать камеру в одном положении, например, подвесив кабель над коробкой или банкой, либо прикрепив камеру к коробке с помощью двустороннего скотча.

  2. Создайте новый проект для Wio Terminal с использованием PlatformIO. Назовите этот проект stock-counter.

  3. Повторите шаги из урока 2 проекта по производству для захвата изображений с камеры.

  4. Повторите шаги из урока 2 проекта по производству для вызова классификатора изображений. Большая часть этого кода будет использована для обнаружения объектов.

Измените код с классификатора на детектор изображений

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

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

  1. Добавьте следующий директиву include в начало файла 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.

😀 Ваше приложение для подсчета запасов успешно завершено!


Отказ от ответственности:
Этот документ был переведен с помощью сервиса автоматического перевода Co-op Translator. Хотя мы стремимся к точности, пожалуйста, учитывайте, что автоматические переводы могут содержать ошибки или неточности. Оригинальный документ на его родном языке следует считать авторитетным источником. Для получения критически важной информации рекомендуется профессиональный перевод человеком. Мы не несем ответственности за любые недоразумения или неправильные интерпретации, возникающие в результате использования данного перевода.