Ошибка библиотеки когнитивного зрения: удаленный сервер возвратил ошибку (401) в проекте xamarin - PullRequest
1 голос
/ 15 июня 2019

, когда я пытаюсь использовать библиотеку когнитивного зрения в проекте xamarin, я получил сообщение об ошибке: удаленный сервер возвратил ошибку (401) Я использую объект VisionServiceClient этот код является кодом для анализа выбранной картинки. Я не могу исправить ошибку. Любой совет, пожалуйста?

PS: есть ли проблема в использовании бесплатного пробного ключа Api? это может быть причиной ошибки? и нужно ли мне иметь кредитную карту для создания экземпляра ресурса когнитивного зрения в https://portal.azure.com/#home?

это код главной страницы:

using Microsoft.ProjectOxford.Vision;
using Microsoft.ProjectOxford.Vision.Contract;
using Plugin.Connectivity;
using Plugin.Media;
using Plugin.Media.Abstractions;
using System;
using System.IO;
using System.Threading.Tasks;
using Xamarin.Forms;

namespace ComputerVisionSample
{
    public partial class MainPage : ContentPage
    {
        private readonly VisionServiceClient visionClient;
        public MainPage()
        {
            InitializeComponent();
            this.visionClient = 
                new VisionServiceClient("my_api_key");
        }
        private async Task<AnalysisResult> AnalyzePictureAsync(Stream inputFile)
        {
            if (!CrossConnectivity.Current.IsConnected)
            {
                await DisplayAlert("Network error", 
                    "Please check your network connection and retry.", "OK");
                return null;
            }

            VisualFeature[] visualFeatures = new VisualFeature[] { VisualFeature.Adult,
                VisualFeature.Categories, VisualFeature.Color, VisualFeature.Description,
                VisualFeature.Faces, VisualFeature.ImageType, VisualFeature.Tags };

            AnalysisResult analysisResult = 
                await visionClient.AnalyzeImageAsync(inputFile, 
                visualFeatures);

            return analysisResult;            
        }

        private async void UploadPictureButton_Clicked(object sender, EventArgs e)
        {
            if (!CrossMedia.Current.IsPickPhotoSupported)
            {
                await DisplayAlert("No upload", "Picking a photo is not supported.", "OK");
                return;
            }

            var file = await CrossMedia.Current.PickPhotoAsync();
            if (file == null)
                return;

            this.Indicator1.IsVisible = true;
            this.Indicator1.IsRunning = true;
            Image1.Source = ImageSource.FromStream(() => file.GetStream());

            try
            {
                this.BindingContext = await AnalyzePictureAsync(file.GetStream());
            }
            catch (Exception ex)
            {
                await DisplayAlert("Error", ex.Message, "OK");
                return;
            }
            finally
            {
                this.Indicator1.IsRunning = false;
                this.Indicator1.IsVisible = false;
            }
        }
    }
}

1 Ответ

0 голосов
/ 10 июля 2019

Если у вас есть 401, это означает:

  • вы не предоставили ключ подписки
  • или вы предоставляете один, но он не соответствует региону, где ваш ресурс

Вы используете конечную точку / регион по умолчанию ComputerVision, выполнив это:

this.visionClient = new VisionServiceClient("my_api_key"); 

И вы используете старый пакет (Microsoft.ProjectOxford.Vision был кодовым названием проекта).

Итак, вы должны сделать следующее:

1 - переключиться на последний пакет Microsoft.Azure.CognitiveServices.Vision.ComputerVision, доступный на Nuget здесь

2 - Создайте своего клиента, выполнив следующие действия:

var visionClient = new ComputerVisionClient(new ApiKeyServiceClientCredentials("yourAPIkeyHere")))
{
    Endpoint = "yourEndpointHere"
})

Формат конечной точки: "https://region.api.cognitive.microsoft.com",, например, для Западной Европы:" https://westeurope.api.cognitive.microsoft.com"

Возможны некоторые изменения в вызываемом методе или параметрах из-за изменения пакета, но теперь вы будете в курсе

...