Я замечаю действительно странную ошибку при использовании совершенно нового 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 решает эту проблему.