Поделиться через


Руководство. Классификация изображений в пограничной системе с помощью Пользовательского визуального распознавания

Область применения:Флажок IoT Edge 1.5 IoT Edge 1.5

Внимание

IoT Edge 1.5 LTS является поддерживаемым выпуском. IoT Edge 1.4 LTS заканчивается жизнью с 12 ноября 2024 года. Если вы используете более ранний выпуск, см. статью Обновление IoT Edge.

Azure IoT Edge делает решения Интернета вещей более эффективными путем перемещения рабочих нагрузок из облака в край. Эта возможность хорошо подходит для служб, обрабатывающих большие объемы данных, таких как модели компьютерного зрения. Azure AI Пользовательское визуальное распознавание позволяет создавать пользовательские классификаторы изображений и развертывать их на устройствах в качестве контейнеров. Вместе эти две службы позволяют пользователям находить аналитические сведения от изображений или видеопотоков без передачи всех данных вне сайта. Пользовательское визуальное распознавание предоставляет классификатор, который сравнивает изображения с обученной моделью для создания выводов.

Например, Custom Vision на устройстве IoT Edge может определить, имеет ли шоссе более высокий или более низкий трафик, чем обычно, или если в парковочном гараже есть свободные парковочные места в ряду. Эти сведения можно использовать совместно с другой службой для принятия мер.

В этом руководстве описано следующее:

  • Создание классификатора изображений с помощью Пользовательского визуального распознавания.
  • Разработка модуля Edge IoT, который запрашивает веб-сервер Custom Vision на устройстве.
  • Отправьте результаты классификатора изображений в Центр Интернета вещей.

Схема рассматриваемой в руководстве архитектуры, а также размещение и развертывание классификатора

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

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

Совет

Это руководство представляет собой упрощенную версию примера проекта пользовательского визуального распознавания и Azure IoT Edge в Raspberry Pi 3. Он выполняется на облачной виртуальной машине и использует статические образы для обучения и тестирования классификатора изображений, что помогает кому-то новому в Пользовательском визуальном распознавании в IoT Edge. Пример проекта использует физическое оборудование и настраивает прямую трансляцию с камеры для обучения и тестирования классификатора изображений, что полезно для кого-то, изучающего более детальный, реалистичный сценарий.

Создание классификатора изображений с помощью Пользовательского визуального распознавания

Чтобы создать классификатор изображений, создайте проект Пользовательского визуального распознавания и предоставьте обучающие образы. Дополнительные сведения о шагах в этом разделе см. в статье Как создать классификатор с помощью Пользовательской службы визуального распознавания.

После создания и обучения классификатора образа экспортируйте его в виде контейнера Docker и разверните его на устройстве IoT Edge.

Создание нового проекта

  1. В веб-браузере перейдите на веб-страницу Пользовательской службы визуального распознавания.

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

  3. Выберите Создать проект.

  4. Создайте проект со следующими значениями:

    Поле Значение
    Имя. Укажите имя проекта, например EdgeTreeClassifier.
    Описание Необязательное описание проекта.
    Ресурс Выберите одну из групп ресурсов Azure, включающую ресурс службы "Пользовательское визуальное распознавание", или создайте группу, если вы ее еще не добавили.
    Типы проектов Категория
    Типы классификации Multiclass (single tag per image) (Многоклассовая классификация (один тег на изображение))
    Домены General (compact) (Общий (компактный))
    Возможности экспорта Основные платформы (TensorFlow, CoreML, ONNX, ...)
  5. Выберите Создать проект.

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

Для создания классификатора изображений требуется набор обучающих образов и тестовых образов.

  1. Клонируйте или скачайте примеры изображений из репозитория Cognitive-CustomVision-Windows на локальном компьютере разработки.

    git clone https://github.com/Microsoft/Cognitive-CustomVision-Windows.git
    
  2. Вернитесь к проекту Пользовательского визуального распознавания и щелкните Добавить изображения.

  3. Перейдите в репозиторий git, клонированный локально, и перейдите к первой папке изображений Cognitive-CustomVision-Windows / Samples / Images / Hemlock. Выберите все 10 изображений в папке и нажмите кнопку "Открыть".

  4. Добавьте тег hemlock в эту группу изображений, а затем нажмите ВВОД, чтобы применить тег.

  5. Нажмите кнопку Upload 10 files (Передать 10 файлов).

    Передача файлов с тегом hemlock в Пользовательскую службу визуального распознавания

  6. Когда изображения успешно загрузятся, нажмите кнопку Готово.

  7. Щелкните Добавить изображения снова.

  8. Перейдите ко второй папке изображений Cognitive-CustomVision-Windows / Samples / Images / Japanese Cherry. Выберите все 10 изображений в папке, а затем откройте.

  9. Добавьте тэг japanese cherry для этой группы изображений и нажмите клавишу ВВОД для применения тега.

  10. Нажмите кнопку Upload 10 files (Передать 10 файлов). Когда изображения успешно загрузятся, нажмите кнопку Готово.

  11. После добавления тегов и отправки обоих наборов изображений выберите "Обучение ", чтобы обучить классификатор.

Экспорт классификатора

  1. После тренировки классификатора щелкните Экспортировать на странице производительности классификатора.

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

  2. Выберите DockerFile в качестве платформы.

  3. Укажите Linux при выборе версии.

  4. Выберите Экспорт.

  5. После завершения экспорта выберите "Скачать " и сохранить пакет .zip локально на компьютере. Извлеките все файлы из пакета. Используйте эти файлы для создания модуля IoT Edge, содержащего сервер классификации изображений.

Когда достигнете этого момента, вы закончили создание и обучение вашего проекта Пользовательского визуального распознавания. Экспортированные файлы будут использоваться в следующем разделе, но веб-страница Пользовательского визуального распознавания готова.

Создание решения IoT Edge

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

Создание нового решения

Решение — это логический способ разработки и организации нескольких модулей для одного развертывания IoT Edge. Решение содержит код для одного или нескольких модулей и манифест развертывания, который объявляет, как настроить их на устройстве IoT Edge. Создайте решение с помощью средства разработки программы разработки Azure IoT Edge (CLI). Самый простой способ использования средства — запуск контейнера разработки IoT Edge с помощью Docker.

  1. Создайте каталог с именем классификатора и перейдите в каталог.

    mkdir CustomVisionSolution
    cd CustomVisionSolution
    
  2. Выполните команду iotedgedev tool init , чтобы создать новое решение IoT Edge. В контейнере Docker для разработки IoT Edge введите следующую команду:

    iotedgedev solution init --template python --module classifier
    

    Сценарий инициализации решения iotedgedev предлагает выполнить несколько шагов, включая следующие:

    • Аутентификация в Azure
    • Выбор подписки Azure
    • Выбор или создание группы ресурсов
    • Выбор или создание Центр Интернета вещей Azure
    • Выбор или создание устройства Azure IoT Edge

    Команда создает новое решение IoT Edge с модулем с именем классификатора в текущем рабочем каталоге.

  3. Откройте решение в Visual Studio Code.

Добавление классификатора изображений

Шаблон модуля Python в Visual Studio Code содержит пример кода, который можно запустить для тестирования IoT Edge. Этот код не будет использоваться в этом сценарии. Вместо этого выполните действия, описанные в этом разделе, чтобы заменить пример кода контейнером классификатора изображений, который был экспортирован ранее.

  1. В обозревателе файлов перейдите к скачанному и извлеченному пакету Пользовательского визуального распознавания. Скопируйте все содержимое из извлеченного пакета. Это должны быть две папки, app и azureml, и два файла, Dockerfile и README.

  2. В обозревателе файлов перейдите в каталог, в котором вы сообщили Visual Studio Code создать решение Edge IoT.

  3. Откройте папку модуля классификатора. Если вы использовали предложенные имена в предыдущем разделе, структура папок будет выглядеть так: CustomVisionSolution / modules / classifier.

  4. Вставьте файлы в папку classifier.

  5. Вернитесь к окну Visual Studio Code. В рабочей области решения теперь должны отображаться файлы классификатора изображений в папке модуля.

  6. Замените исходный файл Dockerfile.amd64 файлом Dockerfile из пакета пользовательского визуального распознавания путем удаления исходного файла Dockerfile.amd64 и переименования Dockerfile в Dockerfile.amd64.

  7. Сохранение изменений.

Создание моделируемого модуля камеры

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

В этом разделе вы добавляете новый модуль к тому же CustomVisionSolution и предоставляете код для создания моделируемой камеры.

  1. Используйте средство iotedgedev , добавив новый модуль в решение. Команда создает новую папку с именем cameracapture в папке модулей решения.

    iotedgedev solution add --template python cameracapture
    
  2. Откройте файл main.py в папке модулей / cameracapture.

  3. Замените весь файл следующим кодом. Этот пример кода отправляет запросы POST в службу обработки изображений, работающую в модуле классификатора. Мы предоставляем этот модуль контейнера с примером изображения для использования в запросах. Затем он упаковывает ответ в качестве сообщения Центра Интернета вещей и отправляет его в выходную очередь.

    # Copyright (c) Microsoft. All rights reserved.
    # Licensed under the MIT license. See LICENSE file in the project root for
    # full license information.
    
    import time
    import sys
    import os
    import requests
    import json
    from azure.iot.device import IoTHubModuleClient, Message
    
    # global counters
    SENT_IMAGES = 0
    
    # global client
    CLIENT = None
    
    # Send a message to IoT Hub
    # Route output1 to $upstream in deployment.template.json
    def send_to_hub(strMessage):
        message = Message(bytearray(strMessage, 'utf8'))
        CLIENT.send_message_to_output(message, "output1")
        global SENT_IMAGES
        SENT_IMAGES += 1
        print( "Total images sent: {}".format(SENT_IMAGES) )
    
    # Send an image to the image classifying server
    # Return the JSON response from the server with the prediction result
    def sendFrameForProcessing(imagePath, imageProcessingEndpoint):
        headers = {'Content-Type': 'application/octet-stream'}
    
        with open(imagePath, mode="rb") as test_image:
            try:
                response = requests.post(imageProcessingEndpoint, headers = headers, data = test_image)
                print("Response from classification service: (" + str(response.status_code) + ") " + json.dumps(response.json()) + "\n")
            except Exception as e:
                print(e)
                print("No response from classification service")
                return None
    
        return json.dumps(response.json())
    
    def main(imagePath, imageProcessingEndpoint):
        try:
            print ( "Simulated camera module for Azure IoT Edge. Press Ctrl-C to exit." )
    
            try:
                global CLIENT
                CLIENT = IoTHubModuleClient.create_from_edge_environment()
            except Exception as iothub_error:
                print ( "Unexpected error {} from IoTHub".format(iothub_error) )
                return
    
            print ( "The sample is now sending images for processing and will indefinitely.")
    
            while True:
                classification = sendFrameForProcessing(imagePath, imageProcessingEndpoint)
                if classification:
                    send_to_hub(classification)
                time.sleep(10)
    
        except KeyboardInterrupt:
            print ( "IoT Edge module sample stopped" )
    
    if __name__ == '__main__':
        try:
            # Retrieve the image location and image classifying server endpoint from container environment
            IMAGE_PATH = os.getenv('IMAGE_PATH', "")
            IMAGE_PROCESSING_ENDPOINT = os.getenv('IMAGE_PROCESSING_ENDPOINT', "")
        except ValueError as error:
            print ( error )
            sys.exit(1)
    
        if ((IMAGE_PATH and IMAGE_PROCESSING_ENDPOINT) != ""):
            main(IMAGE_PATH, IMAGE_PROCESSING_ENDPOINT)
        else: 
            print ( "Error: Image path or image-processing endpoint missing" )
    
  4. Сохраните файл main.py.

  5. Откройте файл requirements.txt.

  6. Добавьте новую строку для библиотеки, включаемой в контейнер.

    requests
    
  7. Сохраните файл requirements.txt .

Добавление тестового изображения в контейнер

Вместо того чтобы использовать реальную камеру для предоставления изображения для этого сценария, мы собираемся использовать одно тестовое изображение. Тестовое изображение включено в скачанный репозиторий GitHub, ранее описанный в этом руководстве.

  1. Выберите тестовое изображение, расположенное в каталоге по такому пути: Cognitive-CustomVision-Windows / Примеры / Изображения / Тестировать.

  2. Скопируйте файл test_image.jpg.

  3. Перейдите в каталог решения IoT Edge и вставьте тестовый образ в папку модули / cameracapture. Изображение должно находиться в той же папке, что и основной файл main.py, который вы изменили в предыдущем разделе.

  4. В Visual Studio Code откройте файл Dockerfile.amd64 для модуля cameracapture.

  5. После строки, которая устанавливает рабочий каталог, WORKDIR /app, добавьте следующую строку кода:

    ADD ./test_image.jpg .
    
  6. Сохраните файл Dockerfile.

Подготовка манифеста развертывания

До сих пор в этом руководстве вы обучили пользовательскую модель визуального распознавания для классификации изображений деревьев и упаковали эту модель в виде модуля IoT Edge. Затем вы создали второй модуль, который запрашивает сервер классификации изображений и сообщает результаты в Центр Интернета вещей. Теперь вы готовы создать манифест развертывания, который сообщает устройству IoT Edge, как запустить и выполнить эти два модуля вместе.

Расширение Edge IoT для Visual Studio Code предоставляет шаблон в каждом решении Edge IoT, помогающем создать манифест развертывания.

  1. Откройте файл deployment.template.json в папке решения.

  2. Задайте учетные данные реестра для модулей в манифесте развертывания.

    "registryCredentials": {
        "<registryName>": {
            "username": "<AcrUsername>",
            "password": "<AcrPassword>",
            "address": "<registryName>.azurecr.io"
        }
    }
    

    Замените <registryName> именем реестра контейнеров Azure и замените <AcrUsername> и<AcrPassword> именем пользователя и пароля для реестра. Эти значения можно найти в разделе "Ключи доступа" реестра контейнеров Azure на портале Azure.

  3. Найдите раздел модулей, который содержит три модуля: два, которые вы создали, модуль классификатор и модуль захвата камеры, а также третий, включенный по умолчанию, датчик температуры.

  4. Удалите модуль tempSensor со всеми его параметрами. Этот модуль предоставляет примеры данных для тестовых сценариев, но в этом развертывании не требуется.

  5. Если дали модулю классификации изображений имя, отличное от classifier, проверьте имя и убедитесь, что все буквы строчные. Модуль cameracapture вызывает модуль классификатора с помощью библиотеки запросов, которая форматирует все запросы в нижнем регистре, и IoT Edge учитывает регистр.

  6. Для каждого системного модуля edgeAgent и edgeHub измените значение createOptions на строковую версию. Рассмотрим пример.

    "createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
    
  7. Для каждого системного модуля edgeAgent и edgeHub измените версию образа на последнюю версию 1.5. Рассмотрим пример.

    "image": "mcr.microsoft.com/azureiotedge-agent:1.5",
    "image": "mcr.microsoft.com/azureiotedge-hub:1.5",
    
  8. Обновите параметр createOptions для модуля классификатора до строковой версии. Рассмотрим пример.

    "createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
    
  9. Обновите параметр createOptions для модуля cameracapture со следующим кодом JSON. Эта информация создает переменные среды в контейнере модуля, которые извлекаются в процессе main.py. Включение этой информации в манифест развертывания позволяет изменять образ или конечную точку доступа без перестраивания образа модуля.

    "createOptions": "{\"Env\":[\"IMAGE_PATH=test_image.jpg\",\"IMAGE_PROCESSING_ENDPOINT=http://classifier/image\"]}"
    

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

    Например, конфигурация классификатора и камеры должна быть аналогичной:

    "modules": {
        "classifier": {
            "version": "1.0",
            "type": "docker",
            "status": "running",
            "restartPolicy": "always",
            "settings": {
                "image": "${MODULES.classifier}",
                "createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
            }
        },
        "cameracapture": {
            "version": "1.0",
            "type": "docker",
            "status": "running",
            "restartPolicy": "always",
            "settings": {
                "image": "${MODULES.cameracapture}",
                "createOptions": "{\"Env\":[\"IMAGE_PATH=test_image.jpg\",\"IMAGE_PROCESSING_ENDPOINT=http://classifier/image\"]}"
            }
        }
    }
    
  10. Сохраните файл deployment.template.json.

Создание и отправка решения IoT Edge

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

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

Сначала создайте и отправьте решение в реестр контейнеров.

  1. В Visual Studio Code откройте интегрированный терминал, последовательно выбрав элементы Вид>Терминал.

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

    docker login -u <AcrUsername> -p <AcrPassword> <AcrLoginServer>
    

    Возможно, вы получите предупреждение системы безопасности, рекомендуемое использовать --password-stdin. Для рабочих сценариев это лучшая методика, но мы не будем рассматривать ее в этом учебнике. Дополнительные сведения см. в описании команды docker login в справочнике.

  3. Используйте Dockerfile модуля для создания и тега образа Docker модуля.

    docker build --rm -f "<DockerFilePath>" -t <ImageNameAndTag> "<ContextPath>" 
    

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

    
    # Build and tag the image for an Azure Container Registry. Replace <AcrRegistryName> with your own registry name.
    
    docker build --rm -f "./modules/classifier/Dockerfile.amd64" -t <AcrRegistryName>.azurecr.io/classifier:0.0.1-amd64 "./modules/classifier"
    docker build --rm -f "./modules/cameracapture/Dockerfile.amd64" -t <AcrRegistryName>.azurecr.io/cameracapture:0.0.1-amd64 "./modules/cameracapture"
    

Образ Docker модуля push

Предоставьте учетные данные реестра контейнеров Docker, чтобы он смог отправить образ контейнера в хранилище в реестре.

  1. Войдите в Docker с помощью учетных данных Реестр контейнеров Azure (ACR).

    docker login -u <AcrUsername> -p <AcrPassword> <AcrLoginServer>
    

    Возможно, вы получите предупреждение системы безопасности, рекомендуемое использовать --password-stdin. Хотя это рекомендуемая практика для рабочих сценариев, она выходит за рамки этого руководства. Дополнительные сведения см. в описании команды docker login в справочнике.

  2. Войдите в Реестр контейнеров Azure. Чтобы использовать команду, необходимо az. Эта команда запрашивает имя пользователя и пароль, найденные в реестре контейнеров в разделах> "Параметры доступа".

    az acr login -n <AcrRegistryName>
    

    Совет

    Если вы вы выполнили вход в любой момент в этом руководстве, повторите docker и Реестр контейнеров Azure выполнить вход, чтобы продолжить.

  3. Отправьте образ модуля в локальный реестр или реестр контейнеров.

    docker push <ImageName>
    

    Рассмотрим пример.

    # Push the Docker image to an Azure Container Registry. Replace <AcrRegistryName> with your Azure Container Registry name.
    
    az acr login --name <AcrRegistryName>
    docker push <AcrRegistryName>.azurecr.io/classifier:0.0.1-amd64
    docker push <AcrRegistryName>.azurecr.io/cameracapture:0.0.1-amd64
    

Обновление шаблона развертывания

Обновите файл deployment.template.json, указав местоположение образа из реестра контейнеров. Измените значение изображения на то, которое вы отправили в реестр. Например, замените <AcrRegistryName> именем реестра в значениях изображений для модулей классификатора и захвата изображения с камеры:

"classifier": {
    "version": "1.0",
    "type": "docker",
    "status": "running",
    "restartPolicy": "always",
    "settings": {
        "image": "<AcrRegistryName>.azurecr.io/classifier:0.0.1-amd64",
        "createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
    },
    "cameracapture": {
        "version": "1.0",
        "type": "docker",
        "status": "running",
        "restartPolicy": "always",
        "settings": {
            "image": "<AcrRegistryName>.azurecr.io/cameracapture:0.0.1-amd64",
            "createOptions": "{\"Env\":[\"IMAGE_PATH=test_image.jpg\",\"IMAGE_PROCESSING_ENDPOINT=http://classifier/image\"]}"
        }
    }
}

Окончательный манифест развертывания выглядит примерно так:

{
  "$schema-template": "4.0.0",
  "modulesContent": {
    "$edgeAgent": {
      "properties.desired": {
        "schemaVersion": "1.1",
        "runtime": {
          "type": "docker",
          "settings": {
            "minDockerVersion": "v1.25",
            "loggingOptions": "",
            "registryCredentials": {
              "<AcrRegistryName>": {
                "username": "<AcrUserName>",
                "password": "<AcrPassword>",
                "address": "<AcrRegistryName>.azurecr.io"
              }
            }
          }
        },
        "systemModules": {
          "edgeAgent": {
            "type": "docker",
            "settings": {
              "image": "mcr.microsoft.com/azureiotedge-agent:1.5",
              "createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
            }
          },
          "edgeHub": {
            "type": "docker",
            "status": "running",
            "restartPolicy": "always",
            "settings": {
              "image": "mcr.microsoft.com/azureiotedge-hub:1.5",
              "createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
            }
          }
        },
        "modules": {
          "classifier": {
            "version": "1.0",
            "type": "docker",
            "status": "running",
            "restartPolicy": "always",
            "settings": {
              "image": "<AcrRegistryName>.azurecr.io/classifier:0.0.1-amd64",
              "createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
            }
          },
          "cameracapture": {
            "version": "1.0",
            "type": "docker",
            "status": "running",
            "restartPolicy": "always",
            "settings": {
              "image": "<AcrRegistryName>.azurecr.io/cameracapture:0.0.1-amd64",
              "createOptions": "{\"Env\":[\"IMAGE_PATH=test_image.jpg\",\"IMAGE_PROCESSING_ENDPOINT=http://classifier/image\"]}"
            }
          }
        }
      }
    },
    "$edgeHub": {
      "properties.desired": {
        "schemaVersion": "1.2",
        "routes": {
          "sensorToclassifier": "FROM /messages/modules/tempSensor/outputs/temperatureOutput INTO BrokeredEndpoint(\"/modules/classifier/inputs/input1\")",
          "classifierToIoTHub": "FROM /messages/modules/classifier/outputs/* INTO $upstream",
          "cameracaptureToIoTHub": "FROM /messages/modules/cameracapture/outputs/* INTO $upstream"
        },
        "storeAndForwardConfiguration": {
          "timeToLiveSecs": 7200
        }
      }
    }
  }
}

Развертывание модулей на устройстве

Убедитесь, что созданные образы контейнеров хранятся в реестре контейнеров. Затем разверните их на устройстве с помощью манифеста развертывания deployment.template.json подготовленного для вашего сценария.

Используйте команду набора модулей Azure CLI IoT Edge для развертывания модулей в Центр Интернета вещей Azure. Например, чтобы развернуть модули, определенные в файлеdeployment.template.json, в IoT Hub <IotHubName> для устройства <IoT Edge>, используйте следующую команду. Замените значения для имени концентратора, идентификатора устройства и входа Центр Интернета вещей строка подключения собственным.

az iot edge set-modules --hub-name <IotHubName> --device-id <DeviceName> --content ./deployment.template.json --login "HostName=my-iot-hub.azure-devices.net;SharedAccessKeyName=iothubowner;SharedAccessKey=<SharedAccessKey>"

Совет

Вы можете найти Центр Интернета вещей строка подключения включая общий ключ доступа в портал Azure. Перейдите к параметрам Центр Интернета вещей >>>

Убедитесь, что устройство IoT Edge запущено.

Разверните меню Модули для своего устройства, чтобы просмотреть список развернутых и запущенных модулей. Нажмите кнопку обновления. Вы увидите новый модуль classifier и модуль cameracapture, работающие вместе с $edgeAgent и $edgeHub.

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

iotedge list

Для запуска модулей может потребоваться несколько минут. Среда выполнения IoT Edge должна получить новый манифест развертывания, извлечь образы модулей из среды выполнения контейнеров, а затем запустить каждый новый модуль.

Просмотр результатов классификации

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

iotedge logs cameracapture

Например, выходные данные должны отображаться следующим образом:

admin@vm:~$ iotedge logs cameracapture
Simulated camera module for Azure IoT Edge. Press Ctrl-C to exit.
The sample is now sending images for processing and will indefinitely.
Response from classification service: (200) {"created": "2023-07-13T17:38:42.940878", "id": "", "iteration": "", "predictions": [{"boundingBox": null, "probability": 1.0, "tagId": "", "tagName": "hemlock"}], "project": ""}

Total images sent: 1
Response from classification service: (200) {"created": "2023-07-13T17:38:53.444884", "id": "", "iteration": "", "predictions": [{"boundingBox": null, "probability": 1.0, "tagId": "", "tagName": "hemlock"}], "project": ""}

Примечание.

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

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

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

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

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

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

Удаление ресурсов Azure

Удаление ресурсов и групп ресурсов Azure является необратимым. Будьте внимательны, чтобы случайно не удалить не ту группу ресурсов или не те ресурсы. Если вы создали Центр Интернета вещей в существующей группе ресурсов с ресурсами, которые необходимо сохранить, удалите только сам ресурс Центра Интернета вещей, а не группу ресурсов.

Удаление ресурсов:

  1. Войдите на портал Azure и щелкните Группы ресурсов.
  2. Выберите группу ресурсов, содержащую тестовые ресурсы IoT Edge.
  3. Просмотрите список ресурсов, содержащихся в группе ресурсов. Если вы хотите удалить их все, щелкните Удалить группу ресурсов. Если вы хотите удалить только некоторые из них, можно выбрать каждый ресурс, чтобы удалить их по отдельности.

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

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

Перейдите к следующим руководствам, чтобы узнать о других способах, которые Azure IoT Edge поможет вам превратить данные в бизнес-аналитику на границе.