【问题标题】:Crop and Select Only the Detected Region from an Image in Python在 Python 中裁剪并仅从图像中选择检测到的区域
【发布时间】:2019-03-17 08:00:30
【问题描述】:

我使用 TensorFlow 对象检测 API 从图像中检测手。通过使用提供的示例代码(object_detection_tutorial.ipynb),我已经能够在图像上绘制边界框。有没有办法只选择检测到的区域(在边界框内)并将其作为图像获取?

例如,

示例输入图像

张量流输出

我想要什么

可以在此处找到对象检测 API 示例代码。 https://github.com/tensorflow/models/blob/master/research/object_detection/object_detection_tutorial.ipynb

任何帮助将不胜感激!

【问题讨论】:

  • 嗨@Thamindu DJ...你能告诉我你用的是什么型号的预测手吗?

标签: python-3.x opencv tensorflow python-imaging-library object-detection-api


【解决方案1】:

是的,在教程中可以使用变量output_dict 来实现这一点。注意传递给函数vis_util.visualize_boxes_and_labels_on_image_array的所有变量,它们包含框、分数等。

首先您需要获取图像形状,因为框坐标是标准化形式。

img_height, img_width, img_channel = image_np.shape

然后将所有框坐标转换为绝对格式

absolute_coord = []
THRESHOLD = 0.7 # adjust your threshold here
N = len(output_dict['detection_boxes'])
for i in range(N):
    if output_dict['score'][i] < THRESHOLD:
        continue
    box = output_dict['detection_boxes']
    ymin, xmin, ymax, xmax = box
    x_up = int(xmin*img_width)
    y_up = int(ymin*img_height)
    x_down = int(xmax*img_width)
    y_down = int(ymax*img_height)
    absolute_coord.append((x_up,y_up,x_down,y_down))

然后你可以使用numpy slices来获取边界框内的图像区域

bounding_box_img = []
for c in absolute_coord:
    bounding_box_img.append(image_np[c[1]:c[3], c[0]:c[2],:])

然后将 bounding_box_img 中的所有 numpy 数组保存为图像。保存时,您可能需要更改形状,因为 img 的形状为 [img_height, img_width, img_channel]。如果您使用分数数组,您甚至可以过滤掉所有低置信度分数的检测。

PS:我可能搞砸了img_heightimg_width,但这些应该给你一个起点。

【讨论】:

  • 这正是我想要的。非常感谢你。你能解释一下bounding_box_img中的元素是什么吗?因为 bounding_box_img 中有多个数组,所以我无法识别要使用哪些元素。还有许多其他元素可能来自 output_dict
  • 那么我在哪里可以找到每个边界框的分数以获得最高的预测值?
  • 我想知道的是,通过使用上述方法,bounding_box_img 数组中有 100 个边界框(bounding_box_img 中的 100 个元素)。如何检测一两个得分最高的数组
  • 分数存储在output_dict['detection_scores']中,也是一个numpy数组,这个数组的长度和output_dict['detection_boxes']的长度完全一样。我已经编辑了我的答案以更好地满足您的目标
  • 是的。我之前试过这个。但问题是它只会过滤掉前两个元素。转换为图像时,第一个元素会出错。第二个元素很好。但它指的是一个有缺陷的区域。我将添加输出作为下一个答案供您参考。
猜你喜欢
  • 2021-03-09
  • 2012-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-31
  • 2023-03-23
  • 1970-01-01
相关资源
最近更新 更多