def render_parsed_house_walls(parsed_dir, show_pcl=SHOW_PCL, show_by_class=0):
    print(f'parsed_dir:{parsed_dir}')
    house_name = os.path.basename(parsed_dir)
    bboxes = []
    labels = []
    for obj in CLASSES:
        bbox_fn_ = f'{parsed_dir}/object_bbox/{obj}.txt'
        bboxes_ = np.loadtxt(bbox_fn_).reshape([-1, 7])
        bboxes.append(bboxes_)
        label = DSET_METAS0.class_2_label[obj]
        labels += [label] * bboxes_.shape[0]
    bboxes = np.concatenate(bboxes, 0)
    labels = np.array(labels).astype(np.int8)
    if bboxes.shape[0] > 0:
        scene_size = Bbox3D.boxes_size(bboxes)
        print(f'scene wall size:{scene_size}')

        #Bbox3D.draw_bboxes(bboxes, up_axis='Z', is_yx_zb=False, labels=labels)
        #if not show_pcl:
        #Bbox3D.draw_bboxes_mesh(bboxes, up_axis='Z', is_yx_zb=False)
        #Bbox3D.draw_bboxes_mesh(bboxes, up_axis='Z', is_yx_zb=False, labels=labels)
        #show_walls_offsetz(bboxes)
        pass

        if show_by_class:
            for c in range(1, max(labels) + 1):
                cs = DSET_METAS0.label_2_class[c]
                print(cs)
                if cs not in ['wall', 'window', 'door']:
                    #if cs not in ['wall']:
                    continue
                mask = labels == c
                bboxes_c = bboxes[mask]
                show_walls_offsetz(bboxes_c)

    if show_pcl:
        pcl_fn = f'{parsed_dir}/pcl_camref.ply'
        if not os.path.exists(pcl_fn):
            return

        pcd = open3d.io.read_point_cloud(pcl_fn)
        points = np.asarray(pcd.points)
        points = cam2world_pcl(points)
        colors = np.asarray(pcd.colors)
        pcl = np.concatenate([points, colors], 1)

        scene_size = pcl_size(pcl)
        print(f'scene pcl size:{scene_size}')
        print(f'point num: {pcl.shape[0]}')

        #pcl = cut_points_roof(pcl)

        Bbox3D.draw_points(pcl,
                           points_keep_rate=POINTS_KEEP_RATE,
                           points_sample_rate=0.05)
        #Bbox3D.draw_points(pcl,  points_keep_rate=POINTS_KEEP_RATE, animation_fn='points.mp4', ani_size=AniSizes[house_name])
        import pdb
        pdb.set_trace()  # XXX BREAKPOINT
        bboxes[:, 2] += 0.1
Example #2
0
def render_pth_file(pth_fn, show_by_class=0):
    pcl, bboxes0 = torch.load(pth_fn)
    #points = pcl[:,0:3]
    #colors = pcl[:,3:6]
    #normals = pcl[:,6:9]

    bboxes = {}
    for c in CLASSES:
        bboxes[c] = bboxes0[c]

    scene_size = pcl_size(pcl)
    print(f'scene pcl size:{scene_size}')
    print(f'point num: {pcl.shape[0]}')

    #pcl = cut_points_roof(pcl)

    classes = [k for k in bboxes.keys()]
    num_classes = {k: bboxes[k].shape[0] for k in bboxes.keys()}
    print(f'\nclasses: {num_classes}\n\n')

    all_bboxes = np.concatenate([boxes for boxes in bboxes.values()], 0)
    nums = [boxes.shape[0] for boxes in bboxes.values()]
    labels = []
    for i, n in enumerate(nums):
        labels += [i] * n
    labels = np.array(labels)

    Bbox3D.draw_points(pcl, points_keep_rate=POINTS_KEEP_RATE)
    #show_walls_offsetz(all_bboxes)
    #Bbox3D.draw_bboxes_mesh(all_bboxes, up_axis='Z', is_yx_zb=False, labels=labels)
    #Bbox3D.draw_bboxes_mesh(all_bboxes, up_axis='Z', is_yx_zb=False)
    #Bbox3D.draw_points_bboxes_mesh(pcl, all_bboxes, up_axis='Z', is_yx_zb=False, labels=labels, points_keep_rate=POINTS_KEEP_RATE)
    #Bbox3D.draw_points_bboxes_mesh(pcl, all_bboxes, up_axis='Z', is_yx_zb=False, points_keep_rate=POINTS_KEEP_RATE)
    #Bbox3D.draw_points_bboxes(pcl, all_bboxes, up_axis='Z', is_yx_zb=False,points_keep_rate=POINTS_KEEP_RATE)
    #Bbox3D.draw_points_bboxes(pcl, all_bboxes, up_axis='Z', is_yx_zb=False, labels=labels, points_keep_rate=POINTS_KEEP_RATE)
    #Bbox3D.draw_points_bboxes(pcl, all_bboxes, up_axis='Z', is_yx_zb=False, labels=labels, points_keep_rate=POINTS_KEEP_RATE, animation_fn='anima.mp4', ani_size=[280,700,550,1350])

    if show_by_class:
        for clas in bboxes.keys():
            if clas not in ['ceiling', 'floor']:
                #if clas not in ['wall', 'window', 'door','ceiling', 'floor']:
                continue
            print(clas)
            #if clas not in CLASSES:
            #  continue
            boxes = bboxes[clas]
            #Bbox3D.draw_points_bboxes(points, boxes, up_axis='Z', is_yx_zb=False)
            Bbox3D.draw_points_bboxes_mesh(pcl,
                                           boxes,
                                           up_axis='Z',
                                           is_yx_zb=False,
                                           points_keep_rate=POINTS_KEEP_RATE)
            show_walls_offsetz(boxes)
    import pdb
    pdb.set_trace()  # XXX BREAKPOINT
    pass
def show_pred(gt_boxlists_, pred_boxlists_, files):
    SHOW_SMALL_IOU = False
    print('SHOW_PRED')
    for i in range(len(pred_boxlists_)):
        print(f'\n{files[i]}\n')
        #pcl_i = dataset[image_ids[i]]['x'][1][:,0:6]
        pcl_i = torch.load(files[i])[0][:, 0:6]
        preds = pred_boxlists_[i].remove_low('scores', 0.1)
        #preds = pred_boxlists_[i] # already post processed in:

        select_ids = 0
        if select_ids:
            ids = [1, 2, 3]
            #ids = [4]
            preds = preds.select_by_labels(ids, 'labels_org')
            gt_boxlists_[i] = gt_boxlists_[i].select_by_labels(
                ids, 'labels_org')

            if MERGE_BY_CORNERS:
                preds = merge_by_corners(preds)

        # ~/Research/Detection_3D/maskrcnn_benchmark/modeling/roi_heads/box_head_3d/inference.py
        # cfg.MODEL.ROI_HEADS.SCORE_THRESH
        xyz_max = pcl_i[:, 0:3].max(0)
        xyz_min = pcl_i[:, 0:3].min(0)
        xyz_size = xyz_max - xyz_min
        pcl_i[:, 0:3] -= xyz_min.reshape([1, 3])
        print(f'xyz_size:{xyz_size}')

        #preds.show__together(gt_boxlists_[i], points=None, offset_x=xyz_size[0]+0.3, twolabels=False)
        #preds.show__together(gt_boxlists_[i], points=pcl_i, offset_x=xyz_size[0]+2.2, twolabels=False, mesh=0, points_keep_rate=0.9, points_sample_rate=1.0, random_color=False)

        compare_instances_with_offset = True
        if compare_instances_with_offset:
            gt_ids = preds.get_field('gt_ids').cpu().data.numpy().astype(
                np.int) + 1

            if gt_ids.size > 0 and select_ids:
                base = np.min(gt_ids[gt_ids > 0]) - 1
                gt_ids[gt_ids > 0] -= base

            pred_colors = COLOR_LIST[gt_ids].copy()
            gt_colors = COLOR_LIST[1:len(gt_boxlists_[i]) + 1].copy()
            err_gt_ids = torch.nonzero(gt_boxlists_[i].get_field('labels') ==
                                       0)[:, 0].data.numpy().reshape([-1])
            #gt_colors[err_gt_ids] = COLOR_LIST[0].copy()

            #preds.show(points=pcl_i, points_keep_rate=0.9, points_sample_rate=1.0, colors=pred_colors)
            #gt_boxlists_[i].show(points=pcl_i, points_keep_rate=0.9, points_sample_rate=1.0, colors=gt_colors)

            preds.show__together(gt_boxlists_[i],
                                 points=pcl_i,
                                 offset_x=xyz_size[0] + 7,
                                 twolabels=False,
                                 mesh=1,
                                 points_keep_rate=0.9,
                                 points_sample_rate=0.0,
                                 colors=[pred_colors, gt_colors])

            #preds.show__together(gt_boxlists_[i],offset_x=xyz_size[0]+7, twolabels=False, mesh=0, points_keep_rate=0.9, points_sample_rate=1.0, colors=[pred_colors, gt_colors])
            preds.show__together(gt_boxlists_[i],
                                 points=pcl_i,
                                 offset_x=xyz_size[0] + 7,
                                 twolabels=False,
                                 mesh=0,
                                 points_keep_rate=0.9,
                                 points_sample_rate=0.0,
                                 colors=[pred_colors, gt_colors])
            #preds.show_pcl_corners(pcl_i)

            Bbox3D.draw_points(pcl_i,
                               points_keep_rate=0.9,
                               points_sample_rate=0.6)
            import pdb
            pdb.set_trace()  # XXX BREAKPOINT
            pass

            #preds.show__together(gt_boxlists_[i], points=pcl_i, offset_x=0, twolabels=True, mesh=0, points_keep_rate=0.9, points_sample_rate=1.0)

        #p_labels_org = preds.get_field('labels_org')
        #g_labels_org = gt_boxlists_[i].get_field('labels_org')
        #if g_labels_org.max() == 5:
        #  wwd_mask_p = torch.nonzero( p_labels_org <= 3).squeeze()
        #  wwd_mask_g = torch.nonzero( g_labels_org <= 3).squeeze()
        #  cf_mask_p  = torch.nonzero( p_labels_org > 3).squeeze()
        #  cf_mask_g  = torch.nonzero( g_labels_org > 3).squeeze()

        #  preds[wwd_mask_p].show__together(gt_boxlists_[i][wwd_mask_g], points=pcl_i, offset_x=xyz_size[0]+2.2, twolabels=False, mesh=False, points_keep_rate=0.9, points_sample_rate=1.0)
        #  preds[cf_mask_p].show__together(gt_boxlists_[i][cf_mask_g], points=pcl_i, offset_x=xyz_size[0]+2.2, twolabels=False, mesh=False, points_keep_rate=0.9, points_sample_rate=1.0)

        #gt_boxlists_[i].show_by_labels([1])
        if SHOW_SMALL_IOU:
            small_iou_pred_ids = [p['pred_idx'] for p in small_iou_preds[i]]
            small_ious = [p['iou'] for p in small_iou_preds[i]]
            print(f'small iou preds: {small_iou_preds[i]}')
            if len(small_iou_pred_ids) > 0:
                preds.show_highlight(small_iou_pred_ids, points=pcl_i)