2017-05-13 1 views
3

J'essaie d'utiliser la vision des services cognitifs pour recevoir la description d'une image, mais mon code jette toujours cette exception:service Microsoft Cognitive Vision API ClientException Erreur

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 

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

Pourquoi ai-je toujours cette exception? J'ai lu que quelqu'un a résolu cela en ajoutant quelque chose comme imageStream.Seek(0) est-ce vrai?

Répondre

5

Il est fort probable que votre clé API ne corresponde pas au point de terminaison que vous utilisez. Si vous regardez le source code of the client vous verrez que par défaut il frappe l'ouest des USA (https://westus.api.cognitive.microsoft.com/vision/v1.0) et votre clé peut correspondre (comme c'était dans mon cas) avec une autre région.

Vous pouvez changer cela en faisant new VisionServiceClient(apiKey, apiRoot), où apiRoot est obtenu par le portail Azure: enter image description here

Code de travail qui dans mon cas sorties 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); 
      } 
     } 
    } 
} 
+1

Cela a résolu pour moi! Souhaité Azure Docs mentionnerait ces faits! – Rippo