Cognitive Service - проблема сериализации Vision Read Api - PullRequest
0 голосов
/ 21 мая 2019

Я замечаю действительно странную ошибку при использовании совершенно нового Microsoft Cognitive Service - Vision Read API через SDK.

Здесь API

Используемый в настоящее время SDKMicrosoft.Azure.CognitiveServices.Vision.ComputerVision 4.0.0: здесь

Ниже моего кода (в основном по официальному справочному руководству по быстрому запуску):

[Fact]
        public async Task ReadTest()
        {
            var subscriptionKey = "###########################";
            var imageURI = "############################";

            using (ComputerVisionClient computerVision = new ComputerVisionClient(
                new ApiKeyServiceClientCredentials(subscriptionKey),
                new System.Net.Http.DelegatingHandler[] { }))
            {
                computerVision.Endpoint = "https://westeurope.api.cognitive.microsoft.com";
                BatchReadFileHeaders textHeaders = await computerVision.BatchReadFileAsync(imageURI, TextRecognitionMode.Handwritten);

                await GetTextAsync(computerVision, textHeaders.OperationLocation);

            }
        }

private static async Task GetTextAsync(
           ComputerVisionClient computerVision, string operationLocation)
        {
            string operationId = operationLocation.Substring(
                operationLocation.Length - 36);

            ReadOperationResult result =
                await computerVision.GetReadOperationResultAsync(operationId);

            // Wait for the operation to complete
            int i = 0;
            int maxRetries = 10;
            while ((result.Status == TextOperationStatusCodes.Running ||
                    result.Status == TextOperationStatusCodes.NotStarted) && i++ < maxRetries)
            {
                Console.WriteLine(
                    "Server status: {0}, waiting {1} seconds...", result.Status, i);
                await Task.Delay(1000);

                result = await computerVision.GetReadOperationResultAsync(operationId);
            }

            // Display the results
            Console.WriteLine();
            var recResults = result.RecognitionResults;
            foreach (TextRecognitionResult recResult in recResults)
            {
                foreach (Line line in recResult.Lines)
                {
                    Console.WriteLine(line.Text);
                }
            }
            Console.WriteLine();
        }

Эта проблема возникает при первом вызове await computerVision.GetReadOperationResultAsync(operationId); в GetTextAsync метод.В основном ошибка заключается в следующем:

Сообщение: Microsoft.Rest.SerializationException: Невозможно десериализовать ответ.---- Newtonsoft.Json.JsonReaderException: входная строка '2.7867' не является допустимым целым числом.Путь 'translationResults [0] .lines [0] .boundingBox [0]', строка 1, позиция 161.

Результат StackTrace: в Microsoft.Azure.CognitiveServices.Vision.ComputerVision.ComputerVisionClient.GetReadOperationResultWithHttpMessagesAsI (ОперацияSync (, Dictionary`2 customHeaders, CancellationToken cancellationToken) в Microsoft.Azure.CognitiveServices.Vision.ComputerVision.ComputerVisionClientExtensions.GetReadOperationResultAsync (операции IComputerVisionClient, операция StringId, тестирование отмены * ********** *).***. GetTextAsync (ComputerVisionClient computerVision, String operationLocation) в

Ошибка довольно простая и тревожная.Сериализатор пытается десериализовать десятичное значение ограничивающего прямоугольника '2.7867' в целое число, как определено в модели corespondent:

namespace Microsoft.Azure.CognitiveServices.Vision.ComputerVision.Models
{
    public class Line
    {
        public Line();
        public Line(IList<int> boundingBox = null, string text = null, IList<Word> words = null);

        [JsonProperty(PropertyName = "boundingBox")]
        public IList<int> BoundingBox { get; set; }

        [JsonProperty(PropertyName = "text")]
        public string Text { get; set; }

        [JsonProperty(PropertyName = "words")]
        public IList<Word> Words { get; set; }
    }
} 

Как вы можете видеть, модель определяет BoundingBox как список целых чисел, в то время как API видения возвращает десятичное число,Как это вообще возможно?Я уверен, что чего-то не хватает, потому что это кажется огромной и заметной ошибкой ... Я проверил быстрый запуск связанной github , но он кажется застрявшим в предыдущей версии и почти пустым.

Обновление

В конце концов я нашел правильный github, и проблема, похоже, отслеживается.Это относится только к файлам pdf: https://github.com/Azure/azure-sdk-for-net/issues/5547

Только что открыли тикет с поддержкой Azure.Держу вас в курсе.

Обновление 06/20

Получено письмо от группы поддержки Azure.Похоже, что новая версия Computer Vision SDK v5.0.0 решает эту проблему.

...