vpp / aloha_robot_project /calvin /scripts /visualize_dataset.py
Miosy's picture
Upload folder using huggingface_hub
25ea53c verified
from argparse import ArgumentParser
from pathlib import Path
import cv2
import numpy as np
if __name__ == "__main__":
parser = ArgumentParser(description="Interactive visualization of CALVIN dataset")
parser.add_argument("path", type=str, help="Path to dir containing scene_info.npy")
parser.add_argument("-d", "--data", nargs="*", default=["rgb_static", "rgb_gripper"], help="Data to visualize")
args = parser.parse_args()
if not Path(args.path).is_dir():
print(f"Path {args.path} is either not a directory, or does not exist.")
exit()
indices = next(iter(np.load(f"{args.path}/scene_info.npy", allow_pickle=True).item().values()))
indices = list(range(indices[0], indices[1] + 1))
annotations = np.load(f"{args.path}/lang_annotations/auto_lang_ann.npy", allow_pickle=True).item()
annotations = list(zip(annotations["info"]["indx"], annotations["language"]["ann"]))
idx = 0
ann_idx = -1
while True:
t = np.load(f"{args.path}/episode_{indices[idx]:07d}.npz", allow_pickle=True)
for d in args.data:
if d not in t:
print(f"Data {d} cannot be found in transition")
continue
cv2.imshow(d, t[d][:, :, ::-1])
for n, ((low, high), ann) in enumerate(annotations):
if indices[idx] >= low and indices[idx] <= high:
if n != ann_idx:
print(f"{ann}")
ann_idx = n
key = cv2.waitKey(0)
if key == ord("q"):
break
elif key == 83: # Right arrow
idx = (idx + 1) % len(indices)
elif key == 81: # Left arrow
idx = (len(indices) + idx - 1) % len(indices)
else:
print(f'Unrecognized keycode "{key}"')