首页 文章

Microsoft Cognitive Service Vision API ClientException错误

提问于
浏览
4

我正在尝试使用Vision Cognitive Services来接收图像的描述,但我的代码总是抛出此异常:

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

这是我的代码:

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();
        }
    }
}

为什么我总是有这个例外?我读到有人通过添加像_2927096这样的东西来解决这个问题,这是真的吗?

1 回答

  • 6

    很可能您的API密钥与您正在达到的 endpoints 不对应 . 如果您查看source code of the client,您会看到默认情况下它会击中美国西部( https://westus.api.cognitive.microsoft.com/vision/v1.0 )并且您的密钥可能与其他区域对应(就像我的情况一样) .

    您可以通过执行 new VisionServiceClient(apiKey, apiRoot) 来更改此设置,其中 apiRoot 是通过Azure门户获取的:
    enter image description here

    工作代码,在我的情况下输出 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);
                }
            }
        }
    }
    

相关问题