2017-05-13 11 views
3

나는 이미지의 설명을받을 비전인지 서비스를 사용하기 위해 노력하고있어하지만 내 코드는 항상이 예외를 throw는 :마이크로 소프트인지 서비스 비전 API ClientException 오류

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

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 

이 내 코드입니다

왜 항상이 예외가 있습니까? 누군가가 imageStream.Seek(0)과 같은 것을 추가하여이를 해결했다고 읽습니까?

답변

5

대부분의 API 키는 사용자가 치는 끝점과 일치하지 않습니다. source code of the client을 보면 기본적으로 West US (https://westus.api.cognitive.microsoft.com/vision/v1.0)에 도달하며 키가 (다른 경우와 마찬가지로) 다른 지역과 일치 할 수 있습니다.

당신은 푸른 포털을 통해 얻을 수있다 apiRootnew VisionServiceClient(apiKey, apiRoot)를 수행하여이를 변경할 수 있습니다 : 내 경우 Satya Nadella wearing glasses and smiling at the camera를 출력 enter image description here

작동 코드를.

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); 
      } 
     } 
    } 
} 
+1

그게 저를 위해 해결되었습니다! Azure Docs가 이러한 사실을 언급 해 주길! – Rippo