问题描述
我正在尝试在训练后发布我的自定义视觉迭代。但我总是收到“错误请求”错误。
我正在尝试使用以下代码行:
trainingApi.PublishIteration(ProjectID,iteration.Id,"Model",predictionResourceId);
我重新检查了我的所有 ID,但一切看起来都很好。型号名称是否特定(以小写字母开头)?
编辑:
我现在在 Postman 中使用 POST 请求进行了尝试,但现在我收到了:
{
"code": "BadRequestInvalidPublishTarget","message": "Invalid prediction resource id"
}
但我重新检查了我的预测资源 ID,它是正确的。
编辑 2:
我想我在 POST 请求中将错误的东西放入了 predictId 中,我只是放入了一个 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 资源: