Erreur ClientException de l’API Microsoft Cognitive Service Vision

J’essaie d’utiliser Vision Cognitive Services pour recevoir la description d’une image, mais mon code lève toujours cette exception:

Exception Microsoft.ProjectOxford.Vision.ClientException HResult=0x80131500 Origine= Stack: in Microsoft.ProjectOxford.Vision.VisionServiceClient.HandleException (Exception exception) in Microsoft.ProjectOxford.Vision.VisionServiceClient.b__42_1[TRequest,TResponse](Exception e) in System.AggregateException.Handle(Func`2 predicate) in Microsoft.ProjectOxford.Vision.VisionServiceClient.d__42`2.MoveNext() in System.Runtime.ComstackrServices.TaskAwaiter.ThrowForNonSuccess(Task task) in System.Runtime.ComstackrServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) in Microsoft.ProjectOxford.Vision.VisionServiceClient.d__21`1.MoveNext() in System.Runtime.ComstackrServices.TaskAwaiter.ThrowForNonSuccess(Task task) in System.Runtime.ComstackrServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) in Microsoft.ProjectOxford.Vision.VisionServiceClient.d__20.MoveNext() in System.Runtime.ComstackrServices.TaskAwaiter.ThrowForNonSuccess(Task task) in System.Runtime.ComstackrServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) in System.Runtime.ComstackrServices.TaskAwaiter`1.GetResult() in CognitiveServices.MainPage.

Ceci est 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 avait résolu le imageStream.Seek(0) en ajoutant quelque chose comme imageStream.Seek(0) Est-ce vrai?

Il est fort probable que votre clé API ne corresponde pas à l’ordinateur d’extrémité touché. Si vous examinez le code source du client, vous constaterez que, par défaut, il frappe l’ouest des États-Unis ( https://westus.api.cognitive.microsoft.com/vision/v1.0 ) et que votre clé peut correspondre (car était dans mon cas) avec une autre région.

Vous pouvez changer cela en new VisionServiceClient(apiKey, apiRoot) , où apiRoot est obtenu via le portail Azure: entrez la description de l'image ici

Code de travail qui dans mon cas affiche 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(ssortingng[] 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); } } } }