| import argparse |
| import json |
| import os |
| import sys |
|
|
|
|
| def ensure_dummy_dataset(base_dir: str, num_entries: int = 20) -> str: |
| try: |
| import numpy as np |
| import imageio.v2 as imageio |
| except Exception as exc: |
| raise RuntimeError("imageio and numpy are required to build the dummy dataset.") from exc |
|
|
| os.makedirs(base_dir, exist_ok=True) |
| video_path = os.path.join(base_dir, "dummy.mp4") |
| json_path = os.path.join(base_dir, "dummy_dataset.json") |
|
|
| if not os.path.exists(video_path): |
| writer = imageio.get_writer(video_path, fps=16) |
| for i in range(90): |
| frame = np.zeros((128, 128, 3), dtype=np.uint8) |
| frame[:, :, 0] = (i * 3) % 255 |
| frame[:, :, 1] = (i * 7) % 255 |
| frame[:, :, 2] = (i * 13) % 255 |
| writer.append_data(frame) |
| writer.close() |
|
|
| facedetect_v1 = [ |
| [{"angle": {"yaw": 0, "pitch": 0, "roll": 0}, "detect": {"top": 10, "height": 100, "width": 100, "left": 10, "prob": 1.0}}], |
| [{"angle": {"yaw": 60, "pitch": 0, "roll": 0}, "detect": {"top": 10, "height": 100, "width": 100, "left": 10, "prob": 1.0}}], |
| [{"angle": {"yaw": -60, "pitch": 0, "roll": 0}, "detect": {"top": 10, "height": 100, "width": 100, "left": 10, "prob": 1.0}}], |
| ] |
| facedetect_v1_frame_index = [0, 20, 40] |
|
|
| context = { |
| "disk_path": video_path, |
| "text": "dummy caption", |
| "facedetect_v1": facedetect_v1, |
| "facedetect_v1_frame_index": facedetect_v1_frame_index, |
| } |
| meta = {f"video_{i}": context for i in range(num_entries)} |
|
|
| with open(json_path, "w") as f: |
| json.dump(meta, f) |
|
|
| return json_path |
|
|
|
|
| def main() -> int: |
| parser = argparse.ArgumentParser(description="Multi-shot dataset dry-run.") |
| parser.add_argument("--json_path", type=str, default="", help="Existing dataset JSON path.") |
| parser.add_argument("--resolution", type=int, nargs=2, default=[64, 64], help="Resolution as H W.") |
| parser.add_argument("--ref_num", type=int, default=3, help="Reference image count.") |
| parser.add_argument("--base_dir", type=str, default="/data/rczhang/PencilFolder/multi-shot/tmp_dryrun") |
| args = parser.parse_args() |
|
|
| if args.json_path: |
| json_path = args.json_path |
| else: |
| json_path = ensure_dummy_dataset(args.base_dir) |
|
|
| sys.path.insert(0, "/data/rczhang/PencilFolder/multi-shot") |
| from multi_view.datasets.videodataset import MulltiShot_MultiView_Dataset |
|
|
| dataset = MulltiShot_MultiView_Dataset( |
| dataset_base_path=json_path, |
| resolution=tuple(args.resolution), |
| ref_num=args.ref_num, |
| training=True, |
| ) |
|
|
| print("Dataset len:", len(dataset)) |
| item = dataset[0] |
| print("Keys:", list(item.keys())) |
| print("Video frames:", len(item["video"])) |
| print("Ref images group:", len(item["ref_images"]), "x", len(item["ref_images"][0])) |
| return 0 |
|
|
|
|
| if __name__ == "__main__": |
| raise SystemExit(main()) |
|
|