Как я могу напечатать номер вместо метки класса и оценки на изображении с обнаружением объекта - PullRequest
0 голосов
/ 14 октября 2019

Я студент и изучаю глубокое обучение. У меня есть проект и использую object_detection_tutorial (код ниже) для обнаружения болезней рисовых растений. Я хочу напечатать номер позиции, где есть заболевания, вместо метки класса и оценки ( как на рисунке ниже ), но я не знаю как. Так что мне действительно нужна помощь, чтобы решить это. Спасибо.

with detection_graph.as_default():
    with tf.Session(graph=detection_graph) as sess:
        image_tensor = detection_graph.get_tensor_by_name('image_tensor:0')
        detection_boxes = detection_graph.get_tensor_by_name('detection_boxes:0')
        detection_scores = detection_graph.get_tensor_by_name('detection_scores:0')
        detection_classes = detection_graph.get_tensor_by_name('detection_classes:0')
        num_detections = detection_graph.get_tensor_by_name('num_detections:0')
        for i in TEST_IMAGE_PATHS:
            image = Image.open(i)
            image_np = load_image_into_numpy_array(image)
            image_np_expanded = np.expand_dims(image_np, axis=0)
            (boxes, scores, classes, num) = sess.run(
                 [detection_boxes, detection_scores, detection_classes, num_detections],
                 feed_dict={image_tensor: image_np_expanded})
            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=2)
            cv2.imshow("image_np", image_np)
            cv2.waitKey()

Я хочу напечатать изображение, как показано ниже image_result:

image_result

1 Ответ

0 голосов
/ 14 октября 2019

Прежде всего, это не имеет ничего общего с openCV и, вероятно, это код тензорного потока.

Если я не ошибаюсь, код использует эту функцию из здесь . Запустив приведенный выше код, он возвращает (boxes, scores, classes, num), что соответствует ограничивающим рамкам вместе с соответствующим показателем достоверности, идентификатором класса и номером обнаружения (что не очень полезно в вашем случае).

Предполагается (а выскажем, что dao_on - это имя класса), что отображаемое сообщение содержит имя класса и оценку, которую, я предполагаю, вы выбросили в строку:

display_str = str(class_name)

В любом случае, самый простой способ для вас - скопироватьэта функция, visualize_boxes_and_labels_on_image_array() (она вспомогательная и не является фактическим тензорным потоком) и заменяет весь код, относящийся к отображаемой строке, на нужную вам строку. Я думаю, это количество обнаруженных объектов? Если у вас есть только один класс, то:

for i in range(min(max_boxes_to_draw, boxes.shape[0])):
    # delete all code in the block
    display_str = i

# Draw all boxes onto image.
  for box, color in box_to_color_map.items():

OpenCV на самом деле не используется, кроме отображения изображения, которое я думаю.

...