Распечатайте обнаруженные классы и баллы при использовании TF Object Detection API

Здравствуйте, я ищу способ распечатать обнаруженные классы и оценки при обнаружении объектов с помощью object_detection_tutorial. Большинство решений здесь предназначены для Tensorflow 1 и больше не работают.

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

Это код, указанный в решении, которое я нашел здесь

def get_classes_name_and_scores(
    boxes,
    classes,
    scores,
    category_index,
    max_boxes_to_draw=20,
    min_score_thresh=.9): # returns bigger than 90% precision
display_str = {}
if not max_boxes_to_draw:
    max_boxes_to_draw = boxes.shape[0]
for i in range(min(max_boxes_to_draw, boxes.shape[0])):
    if scores is None or scores[i] > min_score_thresh:
        if classes[i] in six.viewkeys(category_index):
            display_str['name'] = category_index[classes[i]]['name']
            display_str['score'] = '{}%'.format(int(100 * scores[i]))

return display_str

Я распечатываю это, используя этот код

def show_inference(model, image_path):
  # the array based representation of the image will be used later in order to prepare the
  # result image with boxes and labels on it.
  image_np = np.array(Image.open(image_path))
  # Actual detection.
  output_dict = run_inference_for_single_image(model, image_np)
  # Visualization of the results of a detection.
  vis_util.visualize_boxes_and_labels_on_image_array(
    image_np,
    output_dict['detection_boxes'],
    output_dict['detection_classes'],
    output_dict['detection_scores'],
    category_index,
    instance_masks=output_dict.get('detection_masks_reframed', None),
    use_normalized_coordinates=True,
    line_thickness=8)

  # Print the Name and Score of each detected Object
  print(get_classes_name_and_scores(
    output_dict['detection_boxes'],
    output_dict['detection_classes'],
    output_dict['detection_scores'],
    category_index))

  display(Image.fromarray(image_np))

person HHenry072    schedule 28.05.2020    source источник


Ответы (1)


каждый раз в цикле эти 2 строки перезаписываются, поэтому предыдущее содержимое исчезает:

display_str['name'] = category_index[classes[i]]['name']
display_str['score'] = '{}%'.format(int(100 * scores[i]))

Я предполагаю, что вы хотите записать каждый случай, когда цикл запускает эти строки. Лично для этого я бы добавил результат в список и вернул его:

display_str_list = []
    ### your loop code
    display_str_dict = {
        'name': category_index[classes[i]]['name'],
        'score': '{}%'.format(int(100 * scores[i])),
    }
    display_str_list.append(display_str_dict)
return display_str_list
person Cwissy    schedule 28.05.2020
comment
Большое спасибо!! Единственная проблема заключается в том, что оценка в списке отличается от оценки в квадрате обнаружения. Например, я получил в результате: {'имя': 'Собака', 'оценка': '98%'}, но на картинке квадрат с: Собака 99,0% Знаете ли вы, что вызывает это? - person HHenry072; 28.05.2020