Share via


Руководство. Использование Пользовательское визуальное распознавание с устройством Интернета вещей для создания отчетов о визуальных состояниях

В этом примере приложения показано, как использовать Пользовательское визуальное распознавание, чтобы обучить устройство с камерой обнаруживать визуальные состояния. Этот сценарий обнаружения можно запустить на устройстве Интернета вещей с помощью экспортируемой модели ONNX.

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

Animation of a UI labeling fruit in front of the camera

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

  • Настроить пример приложения для использования собственных ресурсов Пользовательского визуального распознавания и Центра Интернета вещей.
  • Использовать приложение, чтобы обучить проект "Пользовательское визуальное распознавание".
  • Использовать приложение для оценки новых изображений в режиме реального времени и отправки результатов в Azure.

Если у вас нет подписки Azure, создайте бесплатную учетную запись, прежде чем приступить к работе.

Необходимые компоненты

  • Чтобы использовать службу "Пользовательское визуальное распознавание", понадобится создать ресурсы обучения и прогнозирования этой службы в Azure. Чтобы сделать это на портале Azure, укажите требуемые сведения в диалоговом окне на странице создания Пользовательского визуального распознавания, чтобы создать ресурс для обучения и прогнозирования.

    Важно!

    Этот проект должен быть компактным проектом классификации изображений, потому что позже мы будем экспортировать модель в ONNX.

  • Вам также потребуется создать ресурс Центра Интернета вещей в Azure.
  • Visual Studio 2015 или более поздней версии.
  • При необходимости устройство Интернета вещей под управлением ОС Windows 10 IoT Базовая версии 17763 или более поздней. Можно также запустить приложение непосредственно на компьютере.
    • Для Raspberry Pi 2 и 3 можно настроить Windows 10 непосредственно в приложении панели мониторинга Интернета вещей. На других устройствах, таких как DrangonBoard, необходимо установить ПО с помощью метода eMMC. Дополнительные сведения о настройке нового устройства см. в статье Настройка устройства в документации по Windows IoT.

Сведения о приложении визуальных оповещений

Приложение визуальных оповещений Интернета вещей работает в непрерывном цикле, переключаясь между четырьмя разными состояниями по мере необходимости:

  • Нет модели: состояние no-op. Приложение будет постоянно переходить в спящий режим на одну секунду и проверять камеру.
  • Запись обучающих изображений: в этом состоянии приложение записывает изображение и отправляет его в качестве обучающего образа в целевой проект Пользовательское визуальное распознавание. Затем приложение переходит в спящий режим на 500 мс и повторяет операцию до тех пор, пока не будет записано необходимое количество изображений. Затем оно запускает обучение модели Пользовательского визуального распознавания.
  • Ожидание обученной модели: в этом состоянии приложение вызывает API Пользовательское визуальное распознавание каждую секунду, чтобы проверка, содержит ли целевой проект обученную итерацию. При обнаружении такой модели приложение загружает соответствующую модель ONNX в локальный файл и переключается в состояние Scoring (Оценка).
  • Оценка. В этом состоянии приложение использует Windows ML для оценки одного кадра с камеры на основе локальной модели ONNX. Полученная классификация изображений отображается на экране и отправляется в виде сообщения в Центр Интернета вещей. Затем приложение переходит в спящий режим на одну секунду, прежде чем оценить новое изображение.

Изучение структуры кода

Ниже приведены файлы, которые реализуют основные функции для этого приложения.

Файл Description
MainPage.xaml Этот файл определяет пользовательский интерфейс XAML. Он содержит элемент управления веб-камеры и метки, используемые для обновления состояния.
MainPage.xaml.cs Код в этом файле управляет поведением пользовательского интерфейса XAML. В нем также содержится код обработки состояния.
CustomVision\CustomVisionServiceWrapper.cs Этот класс является программой-оболочкой, которая обрабатывает интеграцию со службой "Пользовательское визуальное распознавание".
CustomVision\CustomVisionONNXModel.cs Этот класс представляет собой программу-оболочку, которая обрабатывает интеграцию с Машинным обучением Windows для загрузки модели ONNX и оценки изображений с ее помощью.
IoTHub\IotHubWrapper.cs Этот класс представляет собой программу-оболочку, которая обрабатывает интеграцию с Центром Интернета вещей для передачи результатов оценки в Azure.

Настройка приложения визуальных оповещений

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

  1. Клонируйте или скачайте пример IoTVisualAlerts на сайте GitHub.
  2. Откройте решение IoTVisualAlerts.sln в Visual Studio.
  3. Интеграция проекта Пользовательское визуальное распознавание:
    1. В скрипте CustomVision\CustomVisionServiceWrapper.cs замените переменную ApiKey вашим ключом обучения.
    2. Затем обновите переменную Endpoint, указав URL-адрес конечной точки, связанный с ключом.
    3. Обновите переменную targetCVSProjectGuid, указав соответствующий идентификатор проекта "Пользовательское визуальное распознавание", который будет использоваться.
  4. Настройте ресурс Центр Интернета вещей:
    1. В скрипте IoTHub\IotHubWrapper.cs обновите переменную s_connectionString, указав соответствующую строку подключения для устройства.
    2. На портал Azure загрузите экземпляр Центр Интернета вещей, выберите устройства Интернета вещей в Обозреватель, выберите целевое устройство (или создайте его при необходимости) и найдите строка подключения в разделе "Основная строка Подключение ion String". Строка будет содержать имя Центра Интернета вещей, идентификатор устройства и ключ общего доступа в следующем формате: {your iot hub name}.azure-devices.net;DeviceId={your device id};SharedAccessKey={your access key}.

Выполнить приложение

Если вы используете приложение на компьютере, выберите Локальный компьютер в качестве целевого устройства в Visual Studio и x64 или x86 в качестве целевой платформы. Нажмите клавишу F5 для запуска программы. Приложение должно запуститься и отобразить прямую трансляцию с камеры и сообщение о состоянии.

При развертывании на устройстве Интернета вещей с процессором ARM необходимо выбрать ARM в качестве целевой платформы и Удаленный компьютер в качестве целевого устройства. При появлении запроса укажите IP-адрес устройства (он должен находиться в той же сети, что и ваш компьютер). Вы можете получить IP-адрес из приложения Windows IoT по умолчанию после загрузки устройства и подключения его к сети. Нажмите клавишу F5 для запуска программы.

При первом запуске приложения у него не будет никаких данных о визуальных состояниях. Отобразится сообщение о состоянии, информирующее об отсутствии модели.

Сохранение изображений для обучения

Чтобы настроить модель, необходимо переключить приложение в состояние Capturing Training Images (Запись изображений для обучения). Выполните один из следующих шагов.

  • Если вы используете приложение на компьютере, нажмите кнопку в правом верхнем углу пользовательского интерфейса.
  • Если вы используете приложение на устройстве Интернета вещей, вызовите метод EnterLearningMode на устройстве с помощью Центра Интернета вещей. Его можно вызвать с использованием записи устройства в меню Центра Интернета вещей на портале Azure или с помощью такого средства, как обозреватель устройств Центра Интернета вещей.

Когда приложение перейдет в состояние записи изображений для обучения, оно будет записывать около двух изображений каждую секунду, пока не достигнет целевого количества изображений. По умолчанию это 30 изображений, но этот параметр можно изменить, передав нужное число в качестве аргумента в метод EnterLearningMode Центра Интернета вещей.

Пока приложение записывает изображения, необходимо предоставить камере типы визуальных состояний, которые требуется обнаруживать (например, пустую комнату, комнату с людьми, пустое рабочее место, стол с игрушечным грузовиком и т. д.).

Обучение модели Пользовательского визуального распознавания

После того как приложение закончит запись изображений, оно передаст их, а затем переключится в состояние Waiting For Trained Model (Ожидание обученной модели). На этом этапе перейдите на веб-сайт Пользовательского визуального распознавания и создайте модель на основе новых изображений для обучения. На анимации ниже показан пример такого процесса.

Animation: tagging multiple images of bananas

Чтобы повторить этот процесс для собственного сценария, выполните следующие действия.

  1. Войдите на веб-сайт службы Пользовательское визуальное распознавание.
  2. Найдите целевой проект, в котором должны быть все изображения для обучения, переданные приложением.
  3. Выберите соответствующие изображения для каждого визуального состояния, которое необходимо идентифицировать, и вручную примените к ним тег.
    • Например, если требуется различать пустую комнату и комнату с людьми, рекомендуется пометить пять или более изображений с людьми в качестве нового класса People и пометить пять или более изображений без людей в виде тега Negative. Это поможет модели различать два состояния.
    • Еще один пример. Если требуется оценить, насколько заполнена полка, вы можете использовать такие теги, как EmptyShelf, PartiallyFullShelf и FullShelf.
  4. По завершении нажмите кнопку Train (Обучить).
  5. После завершения обучения приложение обнаружит, что доступна обученная итерация. Будет запущен процесс экспорта обученной модели в ONNX и ее скачивания на устройство.

Использование обученной модели

После того как приложение загрузит обученную модель, оно перейдет в состояние Scoring (Оценка) и начнет оценивать изображения с камеры в непрерывном цикле.

Для каждого записанного изображения приложение отобразит подходящий тег на экране. Если визуальное состояние не распознается, отобразится состояние No Matches (Нет совпадений). Приложение также отправляет эти сообщения в Центр Интернета вещей, и при обнаружении класса в сообщении будет содержаться метка, оценка достоверности и свойство с именем detectedClassAlert, которое клиенты Центра Интернета вещей могут использовать для ускорения маршрутизации сообщений на основе свойств.

Кроме того, в примере используется библиотека Sense HAT. Она помогает определить, когда обучение выполняется на Raspberry Pi с модулем Sense HAT. Модуль можно использовать для отображения выходных данных (например, все индикаторы будут загораться красным при обнаружении класса или могут быть неактивными при отсутствии совпадения).

Повторное использование приложения

Если вы хотите вернуть приложение в исходное состояние, это можно сделать, нажав кнопку в правом верхнем углу пользовательского интерфейса или вызвав метод DeleteCurrentModel в Центре Интернета вещей.

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

Если вы запускаете приложение на устройстве и вам нужно снова получить IP-адрес (например, для удаленного подключения с помощью удаленного клиента Windows IoT), можно вызвать метод GetIpAddress в Центре Интернета вещей.

Очистка ресурсов

Проект "Пользовательское визуальное распознавание" можно удалить, если его поддержка больше не требуется. На веб-сайте Пользовательское визуальное распознавание перейдите к проектам и выберите значок корзины в новом проекте.

Screenshot of a panel labeled My New Project with a trash can icon

Следующие шаги

В этом учебнике вы настроили и запустили приложение, которое обнаруживает сведения о визуальном состоянии на устройстве Интернета вещей и отправляет результаты в Центр Интернета вещей. Ознакомьтесь с исходным кодом глубже и выполните одно из предлагаемых изменений ниже.

  • Добавьте метод Центра Интернета вещей, чтобы переключить приложение непосредственно в состояние Waiting For Trained Model (Ожидание обученной модели). Таким образом, модель можно обучить с помощью изображений, которые не записываются самим устройством, а затем отправить новую модель на устройство по команде.
  • Чтобы создать панель мониторинга Power BI для визуализации оповещений Центра Интернета вещей, отправленных из примера, следуйте указаниям, приведенным в этом учебнике.
  • Чтобы создать приложение логики, которое реагирует на оповещения Центра Интернета вещей при обнаружении визуальных состояний, ознакомьтесь с этим учебником.