Декодирование геометрии вывода EAST обнаружения текста - PullRequest
0 голосов
/ 09 апреля 2019

Я пытаюсь использовать модель EAST в OpenCV для обнаружения текста на изображениях.Я успешно получаю вывод после запуска изображения через сеть, но мне трудно понять, как работает функция декодирования, которую я использую.Я знаю, что я получаю 5 чисел в качестве выходных данных от модели, и я думаю, что это расстояния от точки до верхней, нижней, левой и правой сторон прямоугольника, соответственно, и угол поворота в конце.Я не уверен, что делает функция декодирования, чтобы получить ограничивающую рамку для текстовой области.

Я знаю, почему смещение умножается на 4 (оно уменьшается на 4 при прохождении через модель).Я знаю, почему h и w такие, какие они есть.Я не уверен ни в чем после этого.

баллы - это баллы доверия для каждого региона;геометрия - это значения геометрии для каждой области (5 чисел, о которых я говорил).

1 Ответ

1 голос
/ 10 апреля 2019

Бумага содержит диаграмму выходного формата.Вместо указания поля обычным способом, оно задается как набор расстояний (вверх, вправо, вниз и влево) от смещения (x, y), в дополнение к углу A, поле суммы повернуто против часовой стрелки,image from Arxiv paper

Обратите внимание, что scores и geometry проиндексированы y, x, что противоречит любой логике ниже offset.Поэтому для получения геометрических компонентов с наивысшей оценкой y, x:

high_scores_yx = np.where(scores[0][0] >= np.max(scores[0][0]))
y, x = high_scores_yx[0][0], high_scores_yx[1][0]
h_upper, w_right, h_lower, w_left, A = geometry[0,:,y,x]

Код использует offset для хранения смещения нижнего правого угла прямоугольника.Поскольку это нижний правый угол, ему нужны только w_right и h_lower, которые в коде равны x1_data и x2_data соответственно.

box_diagram

Положение нижнего правого угла относительно исходного смещения offsetX, offsetY зависит от угла поворота.Ниже пунктирные линии показывают ориентацию осей.Компоненты для перехода от оригинала к нижнему смещению помечены фиолетовым (по горизонтали) и фиолетовым (по вертикали).Обратите внимание, что sin(A) * w_right компонент вычитается , потому что y становится больше с понижением в этой системе координат.

rotation_diagram

Это объясняет

offset = ([offsetX + cosA * x1_data[x] + sinA * x2_data[x], offsetY - sinA * x1_data[x] + cosA * x2_data[x]])

Далее: p1 и p3 - это нижний левый и верхний правый углы прямоугольника, соответственно, с учетом поворота.center - это просто среднее значение этих двух точек.

Наконец, -1*angle * 180.0 / math.pi преобразует исходный угол в радианах против часовой стрелки в угол в градусах по часовой стрелке (поэтому конечный выходной угол должен быть отрицательным для объектов, повернутых против часовой стрелки)).Это для совместимости с методом CV2 boxPoints, используемым в:

https://github.com/opencv/opencv/blob/7fb70e170154d064ef12d8fec61c0ae70812ce3d/samples/dnn/text_detection.py

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...