Обнаружение объектов по нескольким изображениям: извлечение обнаруженных ограничивающих рамок из НЕСКОЛЬКИХ изображений - PullRequest
0 голосов
/ 05 февраля 2020

Я работаю с API обнаружения объектов Tensorflow и работаю над этим учебным пособием

Все отлично работает, и я обучил свою модель обнаружения объектов, чтобы идентифицировать номера водительских прав, и мне также удается обрезать обнаруженную ограничивающую рамку и сохранить ее как изображение, как показано ниже:

Обнаружение метки:

  image = Image.open(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 = load_image_into_numpy_array(image)
  # Expand dimensions since the model expects images to have shape: [1, None, None, 3]
  image_np_expanded = np.expand_dims(image_np, axis=0)
  # Actual detection.
  output_dict = run_inference_for_single_image(image_np_expanded, detection_graph)
  # 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'),
      use_normalized_coordinates=True,
      line_thickness=4)

  plt.figure(figsize=IMAGE_SIZE)
  plt.imshow(image_np)
  plt.show()

enter image description here

Обрезка ограничивающий прямоугольник и сохраняющий его , как показано здесь :

absolute_coord = []
THRESHOLD = 0.5 # adjust your threshold here
N = len(output_dict['detection_boxes'])
for i in range(N):
    if output_dict['detection_scores'][i] < THRESHOLD:
        continue
    box = output_dict['detection_boxes'][i]
    ymin, xmin, ymax, xmax = box

    ymin = int(ymin*img_height)
    ymax = int(ymax*img_height)
    xmin = int(xmin*img_width)
    xmax = int(xmax*img_width)
    absolute_coord.append((xmin,ymin,xmax,ymax))

bounding_box_img = []
for c in absolute_coord:
    bounding_box_img.append(image_np[c[1]:c[3], c[0]:c[2],:])
    plt.imshow(bounding_box_img[0])
    cv2.imwrite('crop1.jpeg', bounding_box_img[0])
plt.show()

enter image description here

Моя проблема заключается в обрезании ограничивающих прямоугольников для нескольких картинки. Как видите, у меня есть два изображения, но обрезается только ограничительная рамка из последнего изображения. Координаты ограничительной рамки хранятся в output_dict['detection_scores'], но когда я ее печатаю, в ней отображаются только координаты последнего обработанного изображения. Как я могу изменить или что я могу добавить к коду, чтобы при запуске кадрирования он отображал ограничивающие рамки из всех изображений, а также сохранял их?

Мой желаемый результат такой:

enter image description here

Спасибо

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