このリポジトリは、【オンライン】エッジAI入門&活用シリーズ#3『AzureDevOps/GitHubでCI/CD』編 - connpass のセッションで利用します。
- セッション資料
- セッション資料 (Marp 用 Markdown)
- Marp for VS Code で表示するときれいに参照できます
- セッション資料(PDF)
- セッション資料 (Marp 用 Markdown)
- デモ用のワークフロー
- Custom Vision とは - Azure Cognitive Services | Microsoft Learn
- モデルをモバイルにエクスポートする - Custom Vision Service - Azure Cognitive Services | Microsoft Learn
- プログラムを使用してモデルをエクスポートする - Azure Cognitive Services | Microsoft Learn
- Custom Vision REST API reference - Azure Cognitive Services | Microsoft Learn
- Azure CLI コマンド ラインからモジュールをデプロイする - Azure IoT Edge | Microsoft Learn
- Azure CLI を使用した大規模なモジュールの展開 - Azure IoT Edge | Microsoft Learn
- デプロイ マニフェストを使ってモジュールとルートをデプロイする - Azure IoT Edge | Microsoft Learn
- Azure IoT Hub デバイス ツインについて | Microsoft Learn
- Azure IoT Edge デバイスに対する継続的インテグレーションと継続的配置 - Azure IoT Edge | Microsoft Learn
CUSTOM_VISION_ENDPOINT=
CUSTOM_VISION_PROJECT_ID=
CUSTOM_VISION_ITERATION_ID=
CUSTOM_VISION_EXPORT_PLATFORM="Dockerfile"
CUSTOM_VISION_EXPORT_FLAVOR="Linux"
# Export an iteration
curl -X POST -i -H "training-key: ${CUSTOM_VISION_TRAINING_KEY}" -H "content-length: 0" "https://${CUSTOM_VISION_ENDPOINT}/customvision/v3.3/training/projects/${CUSTOM_VISION_PROJECT_ID}/iterations/${CUSTOM_VISION_ITERATION_ID}/export?platform=${CUSTOM_VISION_EXPORT_PLATFORM}&flavor=${CUSTOM_VISION_EXPORT_FLAVOR}"
# Get an export
EXPORTS=$(curl -X GET -H "training-key: ${CUSTOM_VISION_TRAINING_KEY}" "https://${CUSTOM_VISION_ENDPOINT}/customvision/v3.3/training/projects/${CUSTOM_VISION_PROJECT_ID}/iterations/${CUSTOM_VISION_ITERATION_ID}/export")
# Download the export
DOWNLOAD_URI=$(echo ${EXPORTS} | jq -r ".[] | select(.platform == \"DockerFile\") | .downloadUri")
FILE_NAME=$(echo ${DOWNLOAD_URI} | sed -r "s/.*\/([^\/]*.zip)\?.*/\\1/g")
curl -o ${FILE_NAME} ${DOWNLOAD_URI}
unzip ${FILE_NAME} -d exported-model
IoT Hub にデバイス登録を済ませて置き、そのデバイスには name=environment
, value=demo
のタグを設定しておく。
PAT_FOR_CONTAINER_REGISTRY=
CUSTOM_VISION_MODEL_VERSION=
IOT_HUB_NAME=
DEPLOYMENT_ID=
mkdir temp
pushd temp
DEPLOYMENT_JSON=$(cat ../iot-edge/deployment.json)
DEPLOYMENT_JSON=$(echo $DEPLOYMENT_JSON | jq ".content.modulesContent.\"\$edgeAgent\".\"properties.desired\".runtime.settings.registryCredentials.ghcr.password=\"${PAT_FOR_CONTAINER_REGISTRY}\"")
DEPLOYMENT_JSON=$(echo $DEPLOYMENT_JSON | jq ".content.modulesContent.\"\$edgeAgent\".\"properties.desired\".modules.\"custom-vision\".settings.image=\"ghcr.io/dzeyelid/edgeai-cicd-with-github-demo/custom-vision:${CUSTOM_VISION_MODEL_VERSION}\"")
DEPLOYMENT_JSON=$(echo $DEPLOYMENT_JSON | jq ".content.modulesContent.\"\$edgeAgent\".\"properties.desired\".modules.\"custom-vision\".version=\"${CUSTOM_VISION_MODEL_VERSION}\"")
echo $DEPLOYMENT_JSON | jq > iot-edge_deployment.json
az login
az extension add --name azure-iot
az iot edge deployment create --deployment-id ${DEPLOYMENT_ID} --hub-name ${IOT_HUB_NAME} --content ./iot-edge_deployment.json --target-condition "tags.environment='demo'"
popd