Index Error: invalid index to scalar variable

Index Error: invalid index to scalar variable

出于某种原因,我正在尝试使用 this 数据集中的检测注释中提到的尺寸创建边界框(我正在使用 polyterrasse 之一)以下代码适用于 25 帧,然后突然它给了我一个错误:

IndexError: invalid index to scalar variable.

frame_path=glob.glob("path/to/pointcloud/folder/*.ezd")
bbox_path= glob.glob("path/to/detection/annotation/folder/*.ezd.bbox")
bbox=[]
cbox_dim=[]

for i in range(len(bbox_path)):
  #convert the frame into pcd format and then load via PCL 
  bbox=np.loadtxt(bbox_path[i], dtype=np.float32)  # load tracklets for the frame
    if bbox.size==0:
        continue
    cbox_dim=np.asarray(bbox)
    pc= pcl.PointCloud() #create pointcloud
    pc.from_array(obj) #load frame into the point cloud

    clipper=pc.make_cropbox()
    for j in range(len(cbox_dim)):
        tx = cbox_dim[j][0] #Error occurs: Invalid index to scalar variable 
        ty = cbox_dim[j][1]
        tz = cbox_dim[j][2]
        
        #similarly set rotation and dimensions
        

这可能是什么原因?

我下载了数据,解压了,检查了一下,原来文件polyterrasse026.ezd.bbox只有1行数据:

1.718750 5.066964 -0.327395 0.693458 0.684387 1.325830 0 0 0 0

这就是为什么 bbox_path[26] 是一维数组。这就是您收到错误的原因。

编辑。

要验证 bbox 是否为二维数组,您可以使用,例如 bbox.ndim == 2bbox.size 显示数组中元素的数量而不是维数。

你的问题的本质是 np.loadtxt() returns 一维数组,如果文件只包含一行数据。你可以这样处理这个问题:

if bbox.ndim == 1:
    bbox = np.array([bbox])