Microsoft Cognitive Service Vision API ClientException Error

爷,独闯天下 提交于 2019-12-22 09:25:17

问题


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?


回答1:


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), where apiRoot is obtained through the Azure Portal:

Working code which in my case outputs Satya Nadella wearing glasses and smiling at the camera.

using Microsoft.ProjectOxford.Vision;
using Microsoft.ProjectOxford.Vision.Contract;
using System;
using System.Configuration;
using System.IO;

namespace VisionClient
{
    public class Program
    {
        public static void Main(string[] args)
        {
            AnalyzeImage();
            Console.WriteLine("Press any key to exit...");
            Console.ReadLine();
        }

        private static void AnalyzeImage()
        {
            var apiKey = ConfigurationManager.AppSettings["VisionApiSubscriptionKey"];
            var apiRoot = "https://eastus2.api.cognitive.microsoft.com/vision/v1.0";
            var visionClient = new VisionServiceClient(apiKey, apiRoot);

            var visualFeats = new VisualFeature[]
            {
                VisualFeature.Description,
                VisualFeature.Faces
            };

            Stream imageStream = File.OpenRead("satyaNadella.jpg");

            try
            {
                AnalysisResult analysisResult = visionClient.AnalyzeImageAsync(imageStream, visualFeats).Result;
                foreach(var caption in analysisResult.Description.Captions)
                {
                    Console.WriteLine("Description: " + caption.Text);
                }
            }
            catch (ClientException e)
            {
                Console.WriteLine("Vision client error: " + e.Error.Message);
            }
            catch (Exception e)
            {
                Console.WriteLine("Error: " + e.Message);
            }
        }
    }
}


来源:https://stackoverflow.com/questions/43948214/microsoft-cognitive-service-vision-api-clientexception-error

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!