Как рисовать на растровом изображении с помощью ограничивающего поля аннотации Skiasharp и аннотации Google Cloud Vision? - PullRequest
0 голосов
/ 17 февраля 2020

Я пытаюсь нарисовать прямоугольный angular выделенный объект вокруг аннотаций Google Cloud Vision с помощью библиотеки Skiasharp (https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/graphics/skiasharp/) в формах Xamarin. Мой код в настоящее время выглядит следующим образом:

        private SKBitmap HighlightWord(byte[] bytes, Google.Cloud.Vision.V1.EntityAnnotation entityAnnotation)
    {
        var ms = new MemoryStream(bytes);

        SKBitmap bitmap = SKBitmap.Decode(ms);
        var canvas = new SKCanvas(bitmap);

        SKPaint skPaint = new SKPaint { Color = new SkiaSharp.SKColor(255, 255, 0, 50) };
        SKPoint[] points = entityAnnotation.BoundingPoly.Vertices.Select((vertex) => new SKPoint(vertex.X, vertex.Y)).ToArray();
        canvas.DrawRect((points[0].X + points[1].X)/2, (points[1].Y + points[2].Y) / 2, points[1].X - points[0].X, points[3].Y - points[0].Y, skPaint);

        return bitmap;
    }

Этот код пытается преобразовать ограничивающие множители в точки Skiasharp (они возвращают координаты, которые кажутся правильными), а затем использовать эти вершины для рисования прямоугольник вокруг аннотации. Я считаю, что координаты X и Y (первыми для параметров) должны быть в центре прямоугольника, поэтому я добавляю минимальное и максимальное значения соответствующих точек прямоугольника и делю его на два. Затем я назначаю ширину и высоту (последние два параметра) значению при вычитании краев прямоугольника. Проблема, с которой я сталкиваюсь после запуска этого кода, состоит в том, что получающиеся прямоугольники повсюду - их положение и размер неверны. На основе координат, которые я получаю из массива вершин: 1 (277,217) ; 2 (407219); 3 (407244); 4 (277,244) Я могу определить, какая точка на фигуре, но с этого момента я просто угадал, какой подход мне следует использовать с этой библиотекой, чтобы мой метод мог быть полностью неверным. Если вы знаете, как исправить этот код или где я могу найти аналогичный проект, из которого я вижу, как выполнить sh, я бы очень признателен за вашу помощь. Редактировать: Сканирование 1: Точка 0 (122 282); Точка 1 (202 298); Пункт 2 (202 298); Точка 3 (121 299) Результат: Это результат

...