Как получить координаты нескольких ограничивающих рамок в API обнаружения объектов tenorflow - PullRequest
0 голосов
/ 24 мая 2019

Я хочу получить координаты нескольких ограничивающих прямоугольников и класс каждого ограничивающего прямоугольника и вернуть его в виде файла JSON.

, когда я печатаю коробки [] из следующего кода, он имеет форму (1 300,4).В полях есть 300 координат [].Но на моем прогнозируемом изображении только 2.Я хочу, чтобы координаты ограничивающих рамок были предсказаны на моем изображении.

Кроме того, как мы узнаем, какая ограничительная рамка сопоставлена ​​с какой категорией / классом на изображении?

например, скажем, у меня есть собака и человек на изображении, как я узнаю, какая ограничительная рамка соответствует классу собаки, а какая - классу человека?Коробки [] дают нам массив формы (1 300,4) без указания того, какой ограничительной рамке соответствует какой класс в изображении.

Я следовал этому ответу , чтобы получить ограничивающую рамкукоординаты из 300 координат в полях [] с использованием порогового значения.

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

Координаты ограничивающего прямоугольника с наивысшей оценкой даже не соответствуют координатам ограничивающего прямоугольника на предсказанном изображении.Как получить координаты ограничивающего прямоугольника на моем предсказанном изображении?

            vis_util.visualize_boxes_and_labels_on_image_array(
                image_np,
                np.squeeze(boxes),
                np.squeeze(classes).astype(np.int32),
                np.squeeze(scores),
                category_index,
                use_normalized_coordinates=True,
                line_thickness=8)
            im = Image.fromarray(image_np)

            true_boxes = boxes[0][scores[0]==scores.max()]    # Gives us the box with max score
            for i in range(true_boxes.shape[0]):   # rescaling the coordinates
                ymin = true_boxes[i,0]*height
                xmin = true_boxes[i,1]*width
                ymax = true_boxes[i,2]*height
                xmax = true_boxes[i,3]*width

Координаты, которые я получаю из приведенного выше кода xmin, ymin, xmax, ymax (который имеет максимальный балл), не совсем совпадаюткоординаты ограничительной рамки на предсказанном изображении.Они отключены на несколько пикселей.Кроме того, я получаю только одну ограничивающую рамку, даже если предсказанное изображение имеет несколько ограничивающих рамок и несколько классов (например, собака и человек).

Я хотел бы вернуть файл JSON с image_name, bounding_boxes и классом, соответствующим каждому ограничивающему прямоугольнику.

Спасибо, я новичок в этом.Пожалуйста, спросите, не поняли ли вы какую-либо часть вопроса.

1 Ответ

0 голосов
/ 09 июля 2019

Я следовал за этим ответом здесь ссылка , и я нашел все свои координаты ограничивающего прямоугольника:

min_score_thresh=0.60
true_boxes = boxes[0][scores[0] > min_score_thresh]
for i in range(true_boxes.shape[0]):
    ymin = int(true_boxes[i,0]*height)
    xmin = int(true_boxes[i,1]*width)
    ymax = int(true_boxes[i,2]*height)
    xmax = int(true_boxes[i,3]*width)

    roi = image[ymin:ymax,xmin:xmax].copy()
    cv2.imwrite("box_{}.jpg".format(str(i)), roi)
...