Azure Custom Vision Api POST 请求错误,即使是正确的 ID

Azure Custom Vision Api POST Request error, even correct ID's

我正在尝试在训练后发布我的自定义视觉迭代。但我总是收到“错误请求”错误。

我正在尝试使用以下代码行:

trainingApi.PublishIteration(ProjectID, iteration.Id, "Model", predictionResourceId);

它应该发布我的迭代,但我只是收到一个错误。

我重新检查了我所有的 ID,但一切正常。型号名称是否具体(以小写字母或其他字母开头)?

编辑:

我现在尝试使用 Postman 中的 POST 请求,但现在我收到:

{
    "code": "BadRequestInvalidPublishTarget",
    "message": "Invalid prediction resource id"
}

但我重新检查了我的预测资源 ID,它是正确的。

编辑 2:

我想我在 POST 请求的 predictionId 中输入了错误的内容,我只是输入了一个 ID,但我认为它应该是 /subscriptions/... 部分,就像微软描述的那样。现在的问题是:

{
    "code": "BadRequestInvalidPublishTarget",
    "message": "Invalid prediction id, please pass a prediction resource id."
}

对我来说,这意味着它没有收到预测资源 ID,但我迷路了,所以我不知道问题出在哪里。

编辑 3:

我忘记添加我的 POST 请求:

https://xxx.cognitiveservices.azure.com/customvision/v3.0/training/projects/xxx/
iterations/xxx/publish?publishName=Model&predictionId=/subscriptions/xxx/
resourceGroups/CustomVision/providers/Microsoft.CognitiveServices/accounts/xxx

使用 POST 请求发布

如果您想确保语法正确,可以通过执行相同的步骤使用自定义视觉门户进行检查。

例如,当我尝试发布项目的迭代时,我可以在控制台中看到以下调用:

https://westeurope.api.cognitive.microsoft.com/customvision/v3.3/Training/projects/ID_OF_MY_PROJECT/iterations/ID_OF_MY_ITERATION/publish?predictionId=%2Fsubscriptions%2FID_OF_MY_AZURE_SUBSCRIPTION%2FresourceGroups%2FNAME_OF_MY_RESOURCE_GROUP%2Fproviders%2FMicrosoft.CognitiveServices%2Faccounts%2FNAME_OF_MY_CUSTOM_VISION_PREDICTION_RESOURCE&publishName=NAME_OF_MY_ITERATION

演示:

所以是的,“publicationId”值看起来像您提到的值,但您必须对该字符串的值进行编码。

所以改变这个:

predictionId=/subscriptions/xxx/
resourceGroups/CustomVision/providers/Microsoft.CognitiveServices/accounts/xxx

predictionId=%2Fsubscriptions%2Fxxx%2F
resourceGroups%2FCustomVision%2Fproviders%2FMicrosoft.CognitiveServices%2Faccounts%2Fxxx

在你的电话中。

并注意使用 预测 资源,而不是训练资源。


使用 C# 发布

这是一个使用 C# 和托管在 Nuget 上的官方自定义视觉包的演示 (here)

using System;
using Microsoft.Azure.CognitiveServices.Vision.CustomVision.Training;

namespace so65714960
{
    class Program
    {
        private static CustomVisionTrainingClient _trainingClient;

        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");

            _trainingClient = new CustomVisionTrainingClient(new ApiKeyServiceClientCredentials("PUT_YOUR_TRAINING_KEY_HERE"));
            // I'm specifying my endpoint here as I'm working on West Europe region
            _trainingClient.Endpoint = "https://westeurope.api.cognitive.microsoft.com/";

            var projectId = new Guid("4b...a5"); // Put your Project Id here
            var iterationId = new Guid("9d...e"); // Put your iteration Id here

            // Get iteration information
            var targetIteration = _trainingClient.GetIteration(projectId, iterationId);
            Console.WriteLine($"Iteration publish resource Id: '{targetIteration.OriginalPublishResourceId}'");

            // If originalPublishResourceId is not null, it is already published
            // For this demo purpose, we unpublish first to publish again after if it is already published
            if (!string.IsNullOrWhiteSpace(targetIteration.OriginalPublishResourceId))
            {
                _trainingClient.UnpublishIteration(projectId, iterationId);

                // Force status refresh
                targetIteration = _trainingClient.GetIteration(projectId, iterationId);
                Console.WriteLine($"Iteration publish resource Id after unpublish: '{targetIteration.OriginalPublishResourceId}'");
            }

            // Publish
            var publicationResourceId = "/subscriptions/7c...e8/resourceGroups/Cognitive_Demo/providers/Microsoft.CognitiveServices/accounts/NRO-Cognitive-CustomVision-WestEurope-Prediction-S0";
            var publication = _trainingClient.PublishIteration(projectId, iterationId, "Publication1", publicationResourceId);
            
            // Force status refresh
            targetIteration = _trainingClient.GetIteration(projectId, iterationId);
            Console.WriteLine($"Iteration publish resource Id after publish: '{targetIteration.OriginalPublishResourceId}'");
        }
    }
}

查看我使用的 Azure 资源: