Я работаю с 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()
Обрезка ограничивающий прямоугольник и сохраняющий его , как показано здесь :
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()
Моя проблема заключается в обрезании ограничивающих прямоугольников для нескольких картинки. Как видите, у меня есть два изображения, но обрезается только ограничительная рамка из последнего изображения. Координаты ограничительной рамки хранятся в output_dict['detection_scores']
, но когда я ее печатаю, в ней отображаются только координаты последнего обработанного изображения. Как я могу изменить или что я могу добавить к коду, чтобы при запуске кадрирования он отображал ограничивающие рамки из всех изображений, а также сохранял их?
Мой желаемый результат такой:
Спасибо