HEAT / s3d_preprocess /visualize_bbox.py
Egrt's picture
init
424188c
import os
import json
import argparse
import cv2
import numpy as np
import matplotlib.pyplot as plt
from misc.utils import get_corners_of_bb3d_no_index, project_3d_points_to_2d, parse_camera_info
def visualize_bbox(args):
with open(os.path.join(args.path, f"scene_{args.scene:05d}", "bbox_3d.json")) as file:
annos = json.load(file)
id2index = dict()
for index, object in enumerate(annos):
id2index[object.get('ID')] = index
scene_path = os.path.join(args.path, f"scene_{args.scene:05d}", "2D_rendering")
for room_id in np.sort(os.listdir(scene_path)):
room_path = os.path.join(scene_path, room_id, "perspective", "full")
if not os.path.exists(room_path):
continue
for position_id in np.sort(os.listdir(room_path)):
position_path = os.path.join(room_path, position_id)
image = cv2.imread(os.path.join(position_path, 'rgb_rawlight.png'))
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
height, width, _ = image.shape
instance = cv2.imread(os.path.join(position_path, 'instance.png'), cv2.IMREAD_UNCHANGED)
camera_info = np.loadtxt(os.path.join(position_path, 'camera_pose.txt'))
rot, trans, K = parse_camera_info(camera_info, height, width)
plt.figure()
plt.imshow(image)
for index in np.unique(instance)[:-1]:
# for each instance in current image
bbox = annos[id2index[index]]
basis = np.array(bbox['basis'])
coeffs = np.array(bbox['coeffs'])
centroid = np.array(bbox['centroid'])
corners = get_corners_of_bb3d_no_index(basis, coeffs, centroid)
corners = corners - trans
gt2dcorners = project_3d_points_to_2d(corners, rot, K)
num_corner = gt2dcorners.shape[1] // 2
plt.plot(np.hstack((gt2dcorners[0, :num_corner], gt2dcorners[0, 0])),
np.hstack((gt2dcorners[1, :num_corner], gt2dcorners[1, 0])), 'r')
plt.plot(np.hstack((gt2dcorners[0, num_corner:], gt2dcorners[0, num_corner])),
np.hstack((gt2dcorners[1, num_corner:], gt2dcorners[1, num_corner])), 'b')
for i in range(num_corner):
plt.plot(gt2dcorners[0, [i, i + num_corner]], gt2dcorners[1, [i, i + num_corner]], 'y')
plt.axis('off')
plt.axis([0, width, height, 0])
plt.show()
def parse_args():
parser = argparse.ArgumentParser(
description="Structured3D 3D Bounding Box Visualization")
parser.add_argument("--path", required=True,
help="dataset path", metavar="DIR")
parser.add_argument("--scene", required=True,
help="scene id", type=int)
return parser.parse_args()
def main():
args = parse_args()
visualize_bbox(args)
if __name__ == "__main__":
main()