Ошибка индекса: неверный индекс для скалярной переменной - PullRequest
0 голосов
/ 17 сентября 2018

Я пытаюсь создать ограничивающую рамку, используя измерения, упомянутые в аннотации обнаружения в этом наборе данных (я использую 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
        

Каковы возможные причины этого?

1 Ответ

0 голосов
/ 17 сентября 2018

Я скачал данные, распаковал их, проверил и оказалось, что файл polyterrasse026.ezd.bbox содержит только 1 строку данных:

1.718750 5.066964 -0.327395 0.693458 0.684387 1.325830 0 0 0 0

Именно поэтому bbox_path[26] - это одномерный массив. Это причина, по которой вы получили ошибку.

EDIT.

Чтобы проверить, является ли bbox 2D-массивом, вы можете использовать, например, bbox.ndim == 2. bbox.size показывает количество элементов в массиве, а не количество измерений.

Природа вашей проблемы заключается в том, что np.loadtxt() возвращает одномерный массив, если файл содержит только одну строку данных. Вы можете решить эту проблему следующим образом:

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