您现在访问的是微软AZURE全球版技术文档网站,若需要访问由世纪互联运营的MICROSOFT AZURE中国区技术文档网站,请访问 https://docs.azure.cn.

集成用于通知和备份的 Azure 存储

可以将自定义视觉项目与 Azure blob 存储队列集成,以获取项目训练/导出活动的推送通知和已发布模型的备份副本。 运行长时间的操作时,此功能有助于避免不断轮询服务来获取结果。 你可以改为将存储队列通知集成到工作流中。

本指南演示如何将这些 REST API 与 cURL 配合使用。 还可以使用 HTTP 请求服务(如 Postman)来发出请求。

备注

推送通知依赖于 CreateProject API 中的可选 notificationQueueUri 参数,而模型备份还要求使用可选的 exportModelContainerUri 参数。 本指南将使用这两个参数来演示完整的功能集。

先决条件

设置 Azure 存储集成

在 Azure 门户中转到你的自定义视觉训练资源,选择“标识”页,然后启用系统分配的托管标识。

接下来,在 Azure 门户中转到你的存储资源。 转到“访问控制(IAM)”页,为每个集成功能添加一个角色分配:

  • 选择你的自定义视觉训练资源,分配“存储 Blob 数据参与者”角色(如果你打算使用模型备份功能)。
  • 然后选择你的自定义视觉训练资源,分配“存储队列数据参与者”角色(如果你打算使用通知队列功能)。

存储帐户的“添加角色分配”页

获取集成 URL

接下来,你将获得可供自定义视觉资源用来访问这些终结点的 URL。

对于通知队列集成 URL,请转到存储帐户的“队列”页,添加新队列,并将其 URL 保存到临时位置。

Azure 存储的“队列”页

对于模型备份集成 URL,请转到存储帐户的“容器”页,并创建新容器。 然后选择该容器并转到“属性”页。 将 URL 复制到临时位置。

Azure 存储容器的“属性”页

集成自定义视觉项目

获得集成 URL 后,接下来可以创建一个用于集成 Azure 存储功能的新自定义视觉项目。 还可以更新现有项目以添加功能。

创建新项目

调用 CreateProject API 时,请添加可选参数 exportModelContainerUrinotificationQueueUri。 分配你在上一部分获取的 URL 值。

curl -v -X POST "{endpoint}/customvision/v3.3/Training/projects?exportModelContainerUri={inputUri}&notificationQueueUri={inputUri}&name={inputName}"
-H "Training-key: {subscription key}"

如果收到 200/OK 响应,则表示已成功设置 URL。 在 JSON 响应中应该也能看到 URL 值:

{
  "id": "00000000-0000-0000-0000-000000000000",
  "name": "string",
  "description": "string",
  "settings": {
    "domainId": "00000000-0000-0000-0000-000000000000",
    "classificationType": "Multiclass",
    "targetExportPlatforms": [
      "CoreML"
    ],
    "useNegativeSet": true,
    "detectionParameters": "string",
    "imageProcessingSettings": {
      "augmentationMethods": {}
},
"exportModelContainerUri": {url}
"notificationQueueUri": {url}
  },
  "created": "string",
  "lastModified": "string",
  "thumbnailUri": "string",
  "drModeEnabled": true,
  "status": "Succeeded"
}

更新现有项目

若要通过 Azure 存储功能集成更新现有项目,请使用要更新的项目的 ID 调用 UpdateProject API。

curl -v -X PATCH "{endpoint}/customvision/v3.3/Training/projects/{projectId}"
-H "Content-Type: application/json"
-H "Training-key: {subscription key}"

--data-ascii "{body}" 

将请求正文 (body) 设置为以下 JSON 格式,并为 exportModelContainerUrinotificationQueueUri 填入适当的值:

{
  "name": "string",
  "description": "string",
  "settings": {
    "domainId": "00000000-0000-0000-0000-000000000000",
    "classificationType": "Multiclass",
    "targetExportPlatforms": [
      "CoreML"
    ],
    "imageProcessingSettings": {
      "augmentationMethods": {}
},
"exportModelContainerUri": {url}
"notificationQueueUri": {url}

  },
  "status": "Succeeded"
}

如果收到 200/OK 响应,则表示已成功设置 URL。

验证连接

前一部分中的 API 调用应已在 Azure 存储帐户中触发了新的信息。

在指定容器的 CustomVision-TestPermission 文件夹中应有一个测试 Blob。 此 Blob只会暂时存在。

在通知队列中,应会看到如下格式的测试通知:

{
"version": "1.0" ,
"type": "ConnectionTest",
"Content":
    {
    "projectId": "00000000-0000-0000-0000-000000000000"
    }
}

获取事件通知

准备就绪后,对项目调用 TrainProject API 以执行普通的训练操作。

训练完成后,将在存储通知队列中收到一条通知:

{
"version": "1.0" ,
"type": "Training",
"Content":
    {
    "projectId": "00000000-0000-0000-0000-000000000000",
    "iterationId": "00000000-0000-0000-0000-000000000000",
    "trainingStatus": "TrainingCompleted"
    }
}

"trainingStatus" 字段可为 "TrainingCompleted""TrainingFailed""iterationId" 字段是已训练模型的 ID。

获取模型导出备份

准备就绪后,调用 ExportIteration API 将已训练的模型导出到指定的平台中。

在指定的存储容器中,将显示已导出模型的备份副本。 Blob 名称采用以下格式:

{projectId} - {iterationId}.{platformType}

导出完成后,在队列中也会收到一条通知。

{
"version": "1.0" ,
"type": "Export",
"Content":
    {
    "projectId": "00000000-0000-0000-0000-000000000000",
    "iterationId": "00000000-0000-0000-0000-000000000000",
    "exportStatus": "ExportCompleted",
    "modelUri": {url}
    }
}

"exportStatus" 字段可为 "ExportCompleted""ExportFailed""modelUri" 字段将包含容器中存储的备份模型的 URL(假设最初集成的是队列通知)。 如果集成的不是队列通知,则 "modelUri" 字段将显示自定义视觉模型 Blob 的 SAS URL。

后续步骤

在本指南中,你已学习如何在“自定义视觉”资源之间复制和移动项目。 接下来请浏览 API 参考文档,以了解自定义视觉的其他作用。