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 请求发布
如果您想确保语法正确,可以通过执行相同的步骤使用自定义视觉门户进行检查。
例如,当我尝试发布项目的迭代时,我可以在控制台中看到以下调用:
演示:
所以是的,“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 资源: