Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tensorflow 我想知道对象检测api中边界框的大小_Tensorflow_Object Detection - Fatal编程技术网

Tensorflow 我想知道对象检测api中边界框的大小

Tensorflow 我想知道对象检测api中边界框的大小,tensorflow,object-detection,Tensorflow,Object Detection,我使用了API () 然后呢, 我如何知道边界框的长度 我在github上实时使用了IPython笔记本教程 但是我不知道使用哪个命令来计算长方体的长度。您可以调用长方体,如下所示: boxes = detection_graph.get_tensor_by_name('detection_boxes:0') 分数和班级也是如此 然后在会话运行时调用它们 (boxes, scores, classes) = sess.run( [boxes, scores, cla

我使用了
API

()

然后呢,

我如何知道边界框的长度

我在github上实时使用了IPython笔记本教程


但是我不知道使用哪个命令来计算长方体的长度。

您可以调用长方体,如下所示:

boxes = detection_graph.get_tensor_by_name('detection_boxes:0')
分数和班级也是如此

然后在会话运行时调用它们

(boxes, scores, classes) = sess.run(
              [boxes, scores, classes],
              feed_dict={image_tensor: imageFile})

只是为了扩展Beta的答案:

可以从检测图中获得预测的边界框。中给出了一个示例。这就是Beta版被截取的代码的来源。访问
检测图
,并从张量中提取预测边界框的坐标:

通过调用
np.squence(box)
可以将它们重塑为(m,4),其中m表示预测框的数量。现在,您可以访问这些框并计算长度、面积或您想要的任何内容

但请记住,预测框坐标是标准化的!它们的顺序如下:

[ymin,xmin,ymax,xmax]

因此,以像素为单位计算长度将类似于:

def length_of_bounding_box(bbox):
    return bbox[3]*IMG_WIDTH - bbox[1]*IMG_WIDTH

基本上,你可以从图中得到所有这些

image_tensor = graph.get_tensor_by_name('image_tensor:0')
boxes = graph.get_tensor_by_name('detection_boxes:0')
scores = graph.get_tensor_by_name('detection_scores:0')
classes = graph.get_tensor_by_name('detection_classes:0')
num_detections = graph.get_tensor_by_name('num_detections:0')
框[0]包含所有预测的边界框坐标,其格式为[top_left_x,top_left_y,bottom_right_x,bottom_right_y],这就是您要查找的

查看此回购协议,您可能会发现更多详细信息:

我写了一个关于如何找到边界框坐标的完整答案,并认为它可能对这方面的人也有用

Google Object Detection API以[ymin,xmin,ymax,xmax]格式和规范化形式返回边界框(完整解释)。要找到(x,y)像素坐标,我们需要将结果乘以图像的宽度和高度。首先获取图像的宽度和高度:

width, height = image.size
然后,从
对象中提取ymin、xmin、ymax、xmax并相乘以获得(x,y)坐标:

ymin = boxes[0][i][0]*height
xmin = boxes[0][i][1]*width
ymax = boxes[0][i][2]*height
xmax = boxes[0][i][3]*width
最后打印框角的坐标:

print 'Top left'
print (xmin,ymin,)
print 'Bottom right'
print (xmax,ymax)

识别对象并返回位置和置信度信息的以下代码为:

(boxes, scores, classes, num_detections) = sess.run(
          [boxes, scores, classes, num_detections],
          feed_dict={image_tensor: image_np_expanded})
遍历这些框

 for i,b in enumerate(boxes[0]):
要获取宽度和高度,请执行以下操作:

 width = boxes[0][i][1]+boxes[0][i][3]
 height = boxes[0][i][0]+boxes[0][i][2]

您可以找到更多详细信息:[

欢迎访问SO!如果您能更详细地解释这个问题,它将对您和本论坛的其他用户更有用。以及您迄今为止所做的尝试。感谢您的详细回答!!但是我如何“访问检测图并从张量中提取预测边界框的坐标”。我对代码不太清楚。@SUNJIAWEI您可以使用
框[0][I]
@iTiger访问第I个框的坐标。我不确定在这里(和下面)的答案日期之间tensorflow是否发生了变化,但我在遵循
[xmin,ymin,xmax,ymax]时没有得到预期的结果
约定。2018年2月8日,我使用此链接()查看了github上图像数组上的
绘制边界框
函数的源代码,顺序是
[ymin,xmin,ymax,xmax]
@KolaB是的,看起来他们改变了坐标的顺序。谢谢你的评论!我会编辑我的答案。@Itger你指定的链接已断开。我想它是旧版本的。到目前为止,我认为object_detection.ipynb中的代码也被更改了。我应该对新文件做什么更改,以便获得边界坐标框。当我打印输出[u dict['detection\u box']我得到了所有测试图像的100个元组,即使是那些模型无法预测的图像。非常感谢您的帮助。感谢您提供详细的答案!但是,在调用Box之后,我如何才能在会话中获得长度?@SUNJIAWEI:如果您选中Box值,它将为您提供对象的坐标。假设您正在检查图像是否具有per不管你是不是儿子。框中给出了人物在图像中的坐标(或位置)。如果你只想知道人物的长度,你可以提取人物的长度。