Azure Custom Vision API返回的结果与项目门户的结果不同吗?

时间:2019-03-27 16:56:25

标签: c# azure microsoft-custom-vision

我创建了一个自定义视觉项目来识别字符(A,B,C ...)。 有趣的是:如果我将一个字符的图像(在本例中为“ N”)上传到视觉API门户,它将告诉我99.9%的确定是“ N”:

enter image description here

但是,如果我使用客户端库来预测相同的图像,则得到53%的图像是“ W”,而只有37%的图像是“ N”:

enter image description here

在我的客户端上获得预测的代码:

var client = new CustomVisionPredictionClient()
{
    ApiKey = predictionKey,
    Endpoint = endpoint
};

var result = await client.PredictImageAsync(Guid.Parse(projectId), imageStream).ConfigureAwait(false);
var prediction = result.Predictions.FirstOrDefault();

这种差异来自何处以及如何解决,因为根据我通过上传图像进行的测试,无论我上传的是哪个字符图像,结果都接近100%正确?

更新:我注意到客户端库有更新。他们从0.12pre上升到1.0stable。更新之后,PredictImageAsync消失了,并替换为DetectImageAsync。这应该作为模型名称的附加参数。我尝试使用迭代的名称,不久后该方法返回并出现内部服务器错误。所以不确定下一步该怎么做。

1 个答案:

答案 0 :(得分:1)

以上评论为我指明了正确的方向-谢谢!

新的客户端库具有两种方法ClassifyImageDetectImage(以及它们的各种变体),它们用以前的版本(包括我正在使用的PredictImage)替换了我使用的方法客户端库。

要对图像进行分类(这是我想做的),当然应该使用ClassifyImage。新代码如下所示,并提供了几乎100%正确的预测:

var client = new CustomVisionPredictionClient()
{
    ApiKey = predictionKey,
    Endpoint = endpoint
};

var result = await client.ClassifyImageAsync(Guid.Parse(projectId), "Iteration12", imageStream).ConfigureAwait(false);
var prediction = result.Predictions.FirstOrDefault();
  • endpoint是视觉API所在区域的URL,在我的情况下为https://westeurope.api.cognitive.microsoft.com
  • predictionKey在项目的CustomVision.AI网站上可用,projectId
  • publishedName参数是要使用的迭代的名称(在我的情况下为“ Iteration12”