twanghcmut's picture
download
raw
1.57 kB
from real2sim import Episode, paths, video
from real2sim.evaluate import draw_skeleton, keypoint_errors, to_camera
from real2sim.tracking import HaWoR, save_tracks
TASK = "basic_pick_place"
INDEX = 0
SIZE = (960, 540)
HAWOR_COLOR = (0, 230, 0)
EGODEX_COLOR = (255, 60, 60)
out, log = paths.start_run("track_hawor")
episode = Episode.load(TASK, INDEX)
focal = float(episode.intrinsics[0, 0])
log.info("%s #%d: %s", TASK, INDEX, episode.text)
tracks = HaWoR().track(episode.video_path, focal, out)
frames = video.read(episode.video_path, SIZE, limit=len(episode))
scale = SIZE[0] / 1920
reference = {
side: to_camera(hand.keypoints, episode.camera)
for side, hand in episode.hands.items()
}
for side, track in tracks.items():
errors = keypoint_errors(track.keypoints, reference[side], track.valid)
log.info(
"%s: tracked %d/%d frames, absolute %.1f mm, root relative %.1f mm, aligned %.1f mm",
side,
track.valid.sum(),
len(track.valid),
errors["absolute"],
errors["root_relative"],
errors["aligned"],
)
drawn = frames.copy()
for t in range(len(drawn)):
for side, track in tracks.items():
draw_skeleton(
drawn[t], reference[side][t], episode.intrinsics, EGODEX_COLOR, scale
)
if track.valid[t]:
draw_skeleton(
drawn[t], track.keypoints[t], episode.intrinsics, HAWOR_COLOR, scale
)
video.write(out / "tracking.mp4", drawn, episode.fps)
save_tracks(out / "hawor_tracks.npz", tracks)
log.info("saved to %s", out)

Xet Storage Details

Size:
1.57 kB
·
Xet hash:
b571055641fcff85bbeffe2e7d27267898ca19af4d7fc64974ddb7b4f56f9611

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.