Возврат координат для ограничивающих рамок API обнаружения объектов Google

Как я могу получить координаты созданных ограничивающих рамок с помощью сценария вывода Google Object Detection API? Я знаю, что поле печати [0] [i] возвращает прогнозы i-го обнаружения в изображении, но что именно означают эти возвращенные числа? Есть ли способ получить xmin, ymin, xmax, ymax? Заранее спасибо.


person g.smoother    schedule 04.11.2017    source источник
comment
Если вас устраивает мой ответ, не стесняйтесь отмечать его как принятый.   -  person Gal_M    schedule 20.11.2019


Ответы (2)


API обнаружения объектов Google возвращает ограничивающие прямоугольники в формате [ymin, xmin, ymax, xmax] и в нормализованной форме (полное объяснение здесь). Чтобы найти координаты пикселей (x, y), нам нужно умножить результаты на ширину и высоту изображения. Сначала получите ширину и высоту вашего изображения:

width, height = image.size

Затем извлеките ymin, xmin, ymax, xmax из объекта boxes и умножьте, чтобы получить координаты (x, y):

ymin = boxes[0][i][0]*height
xmin = boxes[0][i][1]*width
ymax = boxes[0][i][2]*height
xmax = boxes[0][i][3]*width

Наконец, выведите координаты углов коробки:

print 'Top left'
print (xmin,ymin,)
print 'Bottom right'
print (xmax,ymax)
person Gal_M    schedule 03.12.2017
comment
Любое объяснение, почему это делается? Ваша ссылка мертва. Это потому, что входные изображения изменяются до стандартного размера? И что нормализованные координаты полезны для работы с вводом любого размера? - person CMCDragonkai; 08.03.2018
comment
image массив numpy? Если это так, image.size дает количество элементов в массиве, а image.shape дает размеры изображения. Но я думал, что он дает количество строк, а затем количество столбцов для матрицы, то есть height, width = image.shape. - person KolaB; 08.03.2018
comment
@CMCDragonkai, да, в этом есть смысл. Множество масштабирования и изменения размеров в нейронных сетях. - person Gal_M; 11.03.2018
comment
@KolaB Ожидайте, что документация продолжит работу в течение некоторого времени. tensorflow.org/api_guides/python/ - person Gal_M; 11.03.2018
comment
@Gal_M Спасибо за обновленную ссылку. Мой комментарий касался строки в вашем ответе, в которой написано width, height = image.size. Я думаю, это должно быть height, width = image.shape[:2]. Я до сих пор так считаю после прочтения обновленной ссылки. В самом первом разделе «Кодирование и декодирование» говорится, что закодированные изображения представлены тензорами скалярных строк, а декодированные изображения - трехмерными тензорами uint8 формы [height, width, channels]. Было бы здорово, если бы вы могли прояснить, почему вы используете width, height = image.size. - person KolaB; 11.03.2018
comment
Ссылка на документацию мертвая. - person TSR; 28.05.2018
comment
Объект boxes по-прежнему работает? Я не могу найти это. - person Artur Müller Romanov; 06.09.2018

Упомянутый вами массив блоков содержит эту информацию, а формат представляет собой массив [N, 4], где каждая строка имеет формат: [ymin, xmin, ymax, xmax] в нормализованных координатах относительно размера входного изображения.

person Jonathan Huang    schedule 05.11.2017