Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Применимо к:
IoT Edge 1.5
Внимание
IoT Edge 1.5 LTS — это поддерживаемый выпуск. IoT Edge 1.4 LTS достиг срока окончания службы 12 ноября 2024 года. Если вы используете более ранний выпуск, ознакомьтесь с Update IoT Edge.
Azure IoT Edge делает решения Интернета вещей более эффективными путем перемещения рабочих нагрузок из облака в край. Эта возможность хорошо подходит для служб, обрабатывающих большие объемы данных, таких как модели компьютерного зрения. Azure AI Custom Vision позволяет создавать пользовательские классификаторы изображений и развертывать их на устройствах в качестве контейнеров. Вместе эти две службы позволяют пользователям находить аналитические сведения от изображений или видеопотоков без передачи всех данных вне сайта. Пользовательское визуальное распознавание предоставляет классификатор, который сравнивает изображения с обученной моделью для создания выводов.
Например, пользовательская система компьютерного зрения на устройстве IoT Edge может определить, является ли дорожное движение на шоссе более или менее интенсивным, чем обычно, или если в гараже есть свободные парковочные места подряд. Эти сведения можно использовать совместно с другой службой для принятия мер.
В этом руководстве описано следующее:
- Создание классификатора изображений с помощью Custom Vision.
- Разработайте модуль IoT Edge, который запрашивает веб-сервер Custom Vision на устройстве.
- Отправьте результаты классификатора изображений в IoT Hub.
Если у вас нет учетной записи Azure, создайте учетную запись free перед началом работы.
Предварительные требования
Совет
Это руководство является упрощенной версией Custom Vision и Azure IoT Edge в примере проекта Raspberry Pi 3. Он выполняется на облачной виртуальной машине и использует статические образы для обучения и тестирования классификатора изображений, что помогает пользователям, новичкам в области пользовательского визуального распознавания на IoT Edge. Пример проекта использует физическое оборудование и настраивает прямую трансляцию с камеры для обучения и тестирования классификатора изображений, что полезно для кого-то, изучающего более детальный, реалистичный сценарий.
Настройте среду для разработки контейнеров Linux, выполнив Учебник: Разработка модулей IoT Edge с использованием Visual Studio Code с использованием предпочитаемого инструмента разработки командной строки (CLI) Azure IoT Edge Dev Tool. После выполнения руководства убедитесь, что в среде разработки доступны следующие предварительные требования:
- Бесплатный или стандартный уровень IoT Hub в Azure
- Устройство под управлением Azure IoT Edge с контейнерами Linux. Используйте краткие руководства по настройке устройства Linux или устройства Windows.
- Реестр контейнеров, например Azure Container Registry.
- Visual Studio Code настроено с расширением Azure IoT Hub.
- Скачайте и установите систему управления контейнерами, совместимую с Docker , на компьютере разработки. Настройте его для запуска контейнеров Linux.
Чтобы разработать модуль IoT Edge с помощью службы пользовательского визуального распознавания, убедитесь, что на компьютере разработки установлены следующие дополнительные предварительные требования:
Построение классификатора изображений с помощью Custom Vision
Чтобы создать классификатор изображений, создайте проект Пользовательского визуального распознавания и предоставьте обучающие образы. Дополнительные сведения о шагах в данном разделе см. в статье Как создать классификатор с помощью Custom Vision.
После создания и обучения классификатора образа экспортируйте его в виде контейнера Docker и разверните его на IoT Edge устройстве.
Создание нового проекта
В веб-браузере перейдите на веб-страницу Пользовательской службы визуального распознавания.
Выберите Sign in и войдите с той же учетной записью, которую вы используете для доступа к ресурсам Azure.
Выберите Создать проект.
Создайте проект со следующими значениями:
Поле Значение Имя. Укажите имя проекта, например EdgeTreeClassifier. Описание Необязательное описание проекта. Ресурс Выберите одну из групп ресурсов Azure, включающую ресурс службы пользовательского визуального распознавания или создать новое если вы еще не добавили его. Типы проектов Классификация Типы классификации Multiclass (single tag per image) (Многоклассовая классификация (один тег на изображение)) Домены General (compact) (Общий (компактный)) Возможности экспорта Основные платформы (TensorFlow, CoreML, ONNX, ...) Выберите Создать проект.
Загрузка изображений и обучение классификатора
Для создания классификатора изображений требуется набор обучающих образов и тестовых образов.
Клонируйте или скачайте образцы изображений из репозитория Cognitive-CustomVision-Windows на ваш локальный компьютер разработки.
git clone https://github.com/Microsoft/Cognitive-CustomVision-Windows.gitВернитесь к проекту Пользовательского визуального распознавания и щелкните Добавить изображения.
Перейдите к репозиторию Git, клонированного локально, и перейдите к первой папке образа, Cognitive-CustomVision-Windows / Samples / Images / Hemlock. Выберите все 10 изображений в папке и нажмите кнопку "Открыть".
Добавьте тег hemlock в эту группу изображений, а затем нажмите ВВОД, чтобы применить тег.
Нажмите кнопку Upload 10 files (Передать 10 файлов).
Когда изображения успешно загрузятся, нажмите кнопку Готово.
Щелкните Добавить изображения снова.
Перейдите ко второй папке с изображениями, Cognitive-CustomVision-Windows / Samples / Images / японская вишня. Выберите все 10 изображений в папке, а затем откройте.
Добавьте тэг japanese cherry для этой группы изображений и нажмите клавишу ВВОД для применения тега.
Нажмите кнопку Upload 10 files (Передать 10 файлов). Когда изображения успешно загрузятся, нажмите кнопку Готово.
После добавления тегов и отправки обоих наборов изображений выберите "Обучение ", чтобы обучить классификатор.
Экспорт классификатора
После обучения классификатора выберите Экспорт на странице производительности классификатора.
Выберите DockerFile в качестве платформы.
Укажите Linux при выборе версии.
Выберите Экспорт.
После завершения экспорта выберите "Скачать " и сохранить пакет .zip локально на компьютере. Извлеките все файлы из пакета. Используйте эти файлы для создания модуля IoT Edge, содержащего сервер классификации изображений.
Когда достигнете этого момента, вы закончили создание и обучение вашего проекта Пользовательского визуального распознавания. В следующем разделе вы будете использовать экспортированные файлы, но вы закончили работу с веб-страницей Custom Vision.
Создание решения IoT Edge
Теперь у вас есть файлы для версии контейнера классификатора образов на компьютере разработки. В этом разделе описана настройка контейнера классификатора изображений для запуска в качестве модуля IoT Edge. Вы также создадите второй модуль, который отправляет запросы к классификатору и отправляет результаты в виде сообщений в IoT Hub.
Создание нового решения
Решение — это логический способ разработки и организации нескольких модулей для одного IoT Edge развертывания. Решение содержит код для одного или нескольких модулей и манифест развертывания, который объявляет, как настроить их на устройстве IoT Edge. Создайте решение с помощью инструмента разработки командной строки (CLI) Azure IoT Edge Dev Tool. Самый простой способ использования средства — Запуск контейнера IoT Edge разработки с помощью Docker.
Создайте каталог с именем классификатора и перейдите в каталог.
mkdir CustomVisionSolution cd CustomVisionSolutionВыполните команду init средства iotedgedev, чтобы создать новое решение IoT Edge. В контейнере Docker IoT Edge Dev введите следующую команду:
iotedgedev solution init --template python --module classifierСценарий инициализации решения iotedgedev предлагает выполнить несколько шагов, включая следующие:
- Проверка подлинности в Azure
- Выбор подписки Azure
- Выбор или создание группы ресурсов
- Выбор или создание Azure IoT Hub
- Выбор или создание устройства Azure IoT Edge
Команда создает новое решение IoT Edge с модулем с именем классификатор в текущем рабочем каталоге.
Откройте решение в Visual Studio Code.
Добавление классификатора изображений
Шаблон модуля Python в Visual Studio Code содержит пример кода, который можно запустить для тестирования IoT Edge. Этот код не будет использоваться в этом сценарии. Вместо этого выполните действия, описанные в этом разделе, чтобы заменить пример кода контейнером классификатора изображений, который был экспортирован ранее.
В Проводнике перейдите к скачанному и извлеченному пакету Custom Vision. Скопируйте все содержимое из извлеченного пакета. Это должны быть две папки, app и azureml, и два файла, Dockerfile и README.
В вашем проводнике перейдите в каталог, где вы указали Visual Studio Code создать ваше решение IoT Edge.
Откройте папку модуля классификатора. Если вы использовали предложенные имена в предыдущем разделе, структура папок будет выглядеть так: CustomVisionSolution / modules / classifier.
Вставьте файлы в папку classifier.
Вернитесь в окно Visual Studio Code. В рабочей области решения теперь должны отображаться файлы классификатора изображений в папке модуля.
Замените исходный файл Dockerfile.amd64 файлом Dockerfile из пакета пользовательского визуального распознавания путем удаления исходного файла Dockerfile.amd64 и переименования Dockerfile в Dockerfile.amd64.
Сохраните изменения.
Создание моделируемого модуля камеры
В реальном развертывании пользовательского визуального распознавания камера предоставляет динамические изображения или видеопотоки. В этом сценарии вы моделируете камеру путем создания модуля, отправляющего тестовое изображение в классификатор изображений.
В этом разделе вы добавляете новый модуль к тому же CustomVisionSolution и предоставляете код для создания моделируемой камеры.
Используйте средство iotedgedev , добавив новый модуль в решение. Команда создает новую папку с именем cameracapture в папке модулей решения.
iotedgedev solution add --template python cameracaptureОткройте файл main.py в папке модулей / cameracapture.
Замените весь файл следующим кодом. Этот пример кода отправляет запросы POST в службу обработки изображений, работающую в модуле классификатора. Мы предоставляем этот модуль контейнера с примером изображения для использования в запросах. Затем он упаковает ответ в виде сообщения IoT Hub и отправляет его в выходную очередь.
# 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" )Сохраните файл main.py.
Откройте файл requirements.txt.
Добавьте новую строку для библиотеки, включаемой в контейнер.
requestsСохраните файл requirements.txt .
Добавление тестового изображения в контейнер
Вместо того чтобы использовать реальную камеру для предоставления изображения для этого сценария, мы собираемся использовать одно тестовое изображение. Тестовое изображение включено в репозиторий GitHub, который вы скачали ранее в этом руководстве для обучающих изображений.
Перейдите к тестовому изображению, которое находится в Cognitive-CustomVision-Windows / Samples / Images / Test.
Скопируйте файл test_image.jpg.
Перейдите в каталог решения IoT Edge и вставьте тестовый образ в папку modules / cameracapture. Изображение должно находиться в той же папке, что и основной файл main.py, который вы изменили в предыдущем разделе.
В Visual Studio Code откройте файл Dockerfile.amd64 для модуля cameracapture.
После строки, которая устанавливает рабочий каталог,
WORKDIR /app, добавьте следующую строку кода:ADD ./test_image.jpg .Сохраните файл Dockerfile.
Подготовка манифеста развертывания
До сих пор в этом руководстве вы обучили пользовательскую модель визуального распознавания для классификации изображений деревьев и упаковали эту модель как модуль IoT Edge. Затем вы создали второй модуль, который запрашивает сервер классификации изображений и сообщает о результатах IoT Hub. Теперь вы готовы создать манифест развертывания, который сообщает устройству IoT Edge, как одновременно запустить и выполнить эти два модуля.
Расширение IoT Edge для Visual Studio Code предоставляет шаблон в каждом решении IoT Edge для создания манифеста развертывания.
Откройте файл deployment.template.json в папке решения.
Задайте учетные данные реестра для модулей в манифесте развертывания.
"registryCredentials": { "<registryName>": { "username": "<AcrUsername>", "password": "<AcrPassword>", "address": "<registryName>.azurecr.io" } }Замените <registryName> именем реестра контейнеров Azure, и замените <AcrUsername> и <AcrPassword> именем пользователя и паролем для реестра. Эти значения можно найти в разделе "Ключи Access реестра контейнеров Azure на портале Azure.
Найдите раздел модулей, который содержит три модуля: два, которые вы создали, модуль классификатор и модуль захвата камеры, а также третий, включенный по умолчанию, датчик температуры.
Удалите модуль tempSensor со всеми его параметрами. Этот модуль предоставляет примеры данных для тестовых сценариев, но в этом развертывании не требуется.
Если модуль классификации изображений назван чем-то отличающимся от classifier, проверьте его название и убедитесь, что оно полностью написано строчными буквами. Модуль cameracapture вызывает модуль классификатора с помощью библиотеки запросов, которая форматирует все запросы в нижнем регистре, и IoT Edge учитывает регистр.
Для каждого системного модуля edgeAgent и edgeHub измените значение createOptions на строковую версию. Рассмотрим пример.
"createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"Для каждого системного модуля edgeAgent и edgeHub измените версию образа на последнюю версию 1.5. Рассмотрим пример.
"image": "mcr.microsoft.com/azureiotedge-agent:1.5", "image": "mcr.microsoft.com/azureiotedge-hub:1.5",Обновите параметр createOptions для модуля классификатора до строковой версии. Рассмотрим пример.
"createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"Обновите параметр 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\"]}" } } }Сохраните файл deployment.template.json.
Создание и отправка решения IoT Edge
После создания модулей и настройки шаблона манифеста развертывания создайте образы контейнеров и отправьте их в реестр контейнеров.
После того как образы находятся в реестре, вы можете развернуть решение на IoT Edge устройстве. Модули можно задать на устройстве с помощью IoT Hub. В этом разделе описано, как настроить доступ к IoT Hub, а затем использовать Azure CLI для развертывания решения на устройстве IoT Edge.
Сначала создайте и отправьте решение в реестр контейнеров.
Откройте интегрированный терминал Visual Studio Code, выбрав View>Terminal.
Войдите в Docker, введя следующую команду в терминале с помощью имени пользователя, пароля и сервера входа из реестра контейнеров Azure. Эти значения можно получить из раздела Ключи доступа вашего Реестра на портале Azure.
docker login -u <AcrUsername> -p <AcrPassword> <AcrLoginServer>Возможно, вы получите предупреждение системы безопасности, рекомендуемое использовать
--password-stdin. Для рабочих сценариев это лучшая методика, но мы не будем рассматривать ее в этом учебнике. Дополнительные сведения см. в описании команды docker login в справочнике.Используйте 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"
Образ push-модуля Docker
Предоставьте учетные данные реестра контейнеров Docker, чтобы он смог отправить образ контейнера в хранилище в реестре.
Войдите в Docker с помощью учетных данных Azure Container Registry (ACR).
docker login -u <AcrUsername> -p <AcrPassword> <AcrLoginServer>Возможно, вы получите предупреждение системы безопасности, рекомендуемое использовать
--password-stdin. Хотя это рекомендуемая практика для рабочих сценариев, она выходит за рамки этого руководства. Дополнительные сведения см. в описании команды docker login в справочнике.Войдите в Azure Container Registry. Для использования команды
azнеобходимо установить Azure CLI. Эта команда запрашивает ваше имя пользователя и пароль, указанные в реестре контейнеров в Настройках>Параметры доступа.az acr login -n <AcrRegistryName>Совет
Если вас выкинуло из системы в любой момент во время этого руководства, повторите шаги входа в Docker и Azure Container Registry, чтобы продолжить.
Отправьте образ модуля в локальный реестр или реестр контейнеров.
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": {
"classifierToIoTHub": "FROM /messages/modules/classifier/outputs/* INTO $upstream",
"cameracaptureToIoTHub": "FROM /messages/modules/cameracapture/outputs/* INTO $upstream"
},
"storeAndForwardConfiguration": {
"timeToLiveSecs": 7200
}
}
}
}
}
Развертывание модулей на устройстве
Убедитесь, что созданные образы контейнеров хранятся в реестре контейнеров. Затем разверните их на устройстве с помощью манифеста развертывания deployment.template.json подготовленного для вашего сценария.
Используйте команду IoT Edge Azure CLI set-modules для развертывания модулей в Azure IoT Hub. Например, чтобы развернуть модули, определенные в файле deployment.template.json, для IoT Hub <IotHubName> на устройстве IoT Edge <DeviceName>, используйте следующую команду. Замените значения строки подключения IoT Hub для hub-name, device-id и login на ваши собственные.
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>"
Совет
Вы можете найти строку подключения IoT Hub, включающую ключ общего доступа, на портале Azure. Перейдите к IoT Hub >Настройки безопасности>Политики общего доступа>iothubowner.
Убедитесь, что устройство IoT Edge запущено.
Разверните меню Модули для своего устройства, чтобы просмотреть список развернутых и запущенных модулей. Нажмите кнопку обновления. Вы увидите новый модуль classifier и модуль cameracapture, работающие вместе с $edgeAgent и $edgeHub.
Кроме того, можно убедиться, что все модули работают исправно на вашем устройстве. На устройстве IoT Edge выполните следующую команду, чтобы просмотреть состояние модулей.
iotedge list
Для запуска модулей может потребоваться несколько минут. Среда выполнения IoT Edge должна получать новый манифест развертывания, извлекать образы модулей из среды выполнения контейнера, а затем запускать каждый новый модуль.
Просмотр результатов классификации
На устройстве просмотрите журналы модуля камеры, чтобы просмотреть отправленные сообщения и подтвердить их получение IoT Hub.
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 ресурсов и групп ресурсов невозможно. Будьте внимательны, чтобы случайно не удалить не ту группу ресурсов или не те ресурсы. Если вы создали IoT Hub внутри существующей группы ресурсов с ресурсами, которые нужно сохранить, удалите только сам IoT Hub ресурс, а не группу ресурсов.
Чтобы удалить ресурсы:
- Войдите на портал Azure, а затем выберите группы Resource.
- Выберите имя группы ресурсов, содержащей IoT Edge тестовые ресурсы.
- Просмотрите список ресурсов, содержащихся в группе ресурсов. Если вы хотите удалить их все, щелкните Удалить группу ресурсов. Если вы хотите удалить только некоторые из них, выберите каждый ресурс, чтобы удалить их по отдельности.
Следующие шаги
В этом руководстве вы обучили модель пользовательского визуального распознавания и развернули ее в качестве модуля на устройстве IoT Edge. Затем вы создали модуль, который может запрашивать службу классификации изображений и сообщать результаты обратно в IoT Hub.
Перейдите к следующим руководствам, чтобы узнать о других способах, с помощью которых Azure IoT Edge помогает преобразовать данные в бизнес-идеи на уровне периферии.
Разработка модулей Azure IoT Edge с помощью Visual Studio Code.