I'm trying to use Vision Cognitive Services to receive the description of an image but my code always throws this exception:
Exception Microsoft.ProjectOxford.Vision.ClientException
HResult=0x80131500
Origine=<Non è possibile valutare l'origine dell'eccezione>
Stack:
in Microsoft.ProjectOxford.Vision.VisionServiceClient.HandleException (Exception exception)
in Microsoft.ProjectOxford.Vision.VisionServiceClient.<SendAsync>b__42_1[TRequest,TResponse](Exception e)
in System.AggregateException.Handle(Func`2 predicate)
in Microsoft.ProjectOxford.Vision.VisionServiceClient.<SendAsync>d__42`2.MoveNext()
in System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
in System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
in Microsoft.ProjectOxford.Vision.VisionServiceClient.<AnalyzeImageAsync>d__21`1.MoveNext()
in System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
in System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
in Microsoft.ProjectOxford.Vision.VisionServiceClient.<AnalyzeImageAsync>d__20.MoveNext()
in System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
in System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
in System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
in CognitiveServices.MainPage.<Button_Clicked>d__1.MoveNext() in C:\Users\manu9\documents\visual studio 2017\Projects\CognitiveServices\CognitiveServices\CognitiveServices\MainPage.xaml.cs: riga 48
This is my code:
using Microsoft.ProjectOxford.Vision;
using Microsoft.ProjectOxford.Vision.Contract;
using Plugin.Media;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;
namespace CognitiveServices
{
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
}
private async void Button_Clicked(object sender, EventArgs e)
{
var media = Plugin.Media.CrossMedia.Current;
await media.Initialize();
var file = await media.TakePhotoAsync(new Plugin.Media.Abstractions.StoreCameraMediaOptions
{
SaveToAlbum = false
});
image.Source = ImageSource.FromStream(() => file.GetStream());
var visionClient = new VisionServiceClient("MY_API_KEY");
var visualFeats = new VisualFeature[]
{
VisualFeature.Description,
VisualFeature.Faces
};
Stream imagestream = file.GetStream();
imagestream.Seek(0, SeekOrigin.Begin);
var result = await visionClient.AnalyzeImageAsync(imagestream, visualFeats);
description.Text = result.Description.Captions.First().Text;
Debug.WriteLine(result.Description.Captions[0].Text);
file.Dispose();
}
}
}
Why do I have always this Exception? I read that someone resolved this by adding something like imageStream.Seek(0)
is it true?
Most likely your API key does not correspond to the endpoint you're hitting. If you look at the source code of the client you'll see that by default it hits West US (
https://westus.api.cognitive.microsoft.com/vision/v1.0
) and your key may correspond (as it was in my case) with another region.You can change this by doing
new VisionServiceClient(apiKey, apiRoot)
, whereapiRoot
is obtained through the Azure Portal:Working code which in my case outputs
Satya Nadella wearing glasses and smiling at the camera
.