我创建了一个自定义视觉项目来识别字符(A,B,C ...)。 有趣的是:如果我将一个字符的图像(在本例中为“ N”)上传到视觉API门户,它将告诉我99.9%的确定是“ N”:
但是,如果我使用客户端库来预测相同的图像,则得到53%的图像是“ W”,而只有37%的图像是“ N”:
CustomVisionPredictionClient
中被设置为“ https://westeurope.api.cognitive.microsoft.com” 在我的客户端上获得预测的代码:
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
。这应该作为模型名称的附加参数。我尝试使用迭代的名称,不久后该方法返回并出现内部服务器错误。所以不确定下一步该怎么做。
答案 0 :(得分:1)
以上评论为我指明了正确的方向-谢谢!
新的客户端库具有两种方法ClassifyImage
和DetectImage
(以及它们的各种变体),它们用以前的版本(包括我正在使用的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”