| import json |
| from pathlib import Path |
|
|
| from ylff.utils.capture_bundle import CaptureBundle |
|
|
|
|
| def test_load_detailed_annotation_returns_model(tmp_path: Path): |
| (tmp_path / "devices" / "iphone_a").mkdir(parents=True) |
| (tmp_path / "annotations").mkdir(parents=True) |
|
|
| (tmp_path / "devices" / "iphone_a" / "video.mov").write_bytes(b"x") |
| (tmp_path / "devices" / "iphone_a" / "intrinsics.json").write_text( |
| json.dumps({"fx": 100.0, "fy": 100.0, "cx": 4.0, "cy": 4.0}) |
| ) |
| (tmp_path / "devices" / "iphone_a" / "timestamps.json").write_text(json.dumps({"t": []})) |
|
|
| ann = { |
| "schema_version": "1.0", |
| "capture_id": "cap_001", |
| "segments": [], |
| "scene_metadata": {"primary_type": "RESIDENTIAL_KITCHEN"}, |
| "quality_assessment": {"rating": "good"}, |
| } |
| (tmp_path / "annotations" / "detailed_annotation.json").write_text(json.dumps(ann)) |
|
|
| manifest = { |
| "schema_version": "1.0", |
| "capture_id": "cap_001", |
| "devices": [ |
| { |
| "device_id": "iphone_a", |
| "device_type": "iphone", |
| "video_path": "devices/iphone_a/video.mov", |
| "intrinsics_path": "devices/iphone_a/intrinsics.json", |
| "timestamps_path": "devices/iphone_a/timestamps.json", |
| } |
| ], |
| "annotations": {"detailed_annotation_path": "annotations/detailed_annotation.json"}, |
| } |
| (tmp_path / "manifest.json").write_text(json.dumps(manifest)) |
|
|
| bundle = CaptureBundle.load(tmp_path) |
| loaded = bundle.load_detailed_annotation() |
| assert loaded is not None |
| assert loaded.capture_id == "cap_001" |
|
|