Upload folder using huggingface_hub
Browse filesThis view is limited to 50 files because it contains too many changes. See raw diff
- .gitattributes +19 -0
- 10samples/README.md +6 -0
- 10samples/dataset.json +1332 -0
- 10samples/dataset.jsonl +10 -0
- 10samples/generate_10samples.py +789 -0
- 10samples/sample_0001/detections.json +62 -0
- 10samples/sample_0001/identity_verification.json +32 -0
- 10samples/sample_0001/layout_sketch.png +0 -0
- 10samples/sample_0001/main_image.png +3 -0
- 10samples/sample_0001/overlays/overlay_accepted.png +3 -0
- 10samples/sample_0001/overlays/overlay_intended.png +3 -0
- 10samples/sample_0001/overlays/overlay_measured.png +3 -0
- 10samples/sample_0001/plan.json +153 -0
- 10samples/sample_0001/references/ref_green_umbrella.png +0 -0
- 10samples/sample_0001/references/ref_orange_stack.png +0 -0
- 10samples/sample_0001/references/ref_shopper_red_coat.png +0 -0
- 10samples/sample_0001/references/ref_vendor_in_apron.png +0 -0
- 10samples/sample_0001/references/ref_woven_basket.png +0 -0
- 10samples/sample_0001/row.json +133 -0
- 10samples/sample_0002/detections.json +62 -0
- 10samples/sample_0002/identity_verification.json +32 -0
- 10samples/sample_0002/layout_sketch.png +0 -0
- 10samples/sample_0002/main_image.png +0 -0
- 10samples/sample_0002/overlays/overlay_accepted.png +3 -0
- 10samples/sample_0002/overlays/overlay_intended.png +3 -0
- 10samples/sample_0002/overlays/overlay_measured.png +3 -0
- 10samples/sample_0002/plan.json +153 -0
- 10samples/sample_0002/references/ref_berry_bowl.png +0 -0
- 10samples/sample_0002/references/ref_blue_ceramic_mug.png +0 -0
- 10samples/sample_0002/references/ref_cookbook_stack.png +0 -0
- 10samples/sample_0002/references/ref_person_green_cardigan.png +0 -0
- 10samples/sample_0002/references/ref_person_yellow_sweater.png +0 -0
- 10samples/sample_0002/row.json +133 -0
- 10samples/sample_0003/detections.json +62 -0
- 10samples/sample_0003/identity_verification.json +32 -0
- 10samples/sample_0003/layout_sketch.png +0 -0
- 10samples/sample_0003/main_image.png +3 -0
- 10samples/sample_0003/overlays/overlay_accepted.png +3 -0
- 10samples/sample_0003/overlays/overlay_intended.png +3 -0
- 10samples/sample_0003/overlays/overlay_measured.png +3 -0
- 10samples/sample_0003/plan.json +153 -0
- 10samples/sample_0003/references/ref_assistant_plaid_shirt.png +0 -0
- 10samples/sample_0003/references/ref_mechanic_gray_overalls.png +0 -0
- 10samples/sample_0003/references/ref_red_tool_crate.png +0 -0
- 10samples/sample_0003/references/ref_teal_bicycle_frame.png +0 -0
- 10samples/sample_0003/references/ref_yellow_task_lamp.png +0 -0
- 10samples/sample_0003/row.json +133 -0
- 10samples/sample_0004/detections.json +62 -0
- 10samples/sample_0004/identity_verification.json +32 -0
- 10samples/sample_0004/layout_sketch.png +0 -0
.gitattributes
CHANGED
|
@@ -33,3 +33,22 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
| 36 |
+
10samples/sample_0001/main_image.png filter=lfs diff=lfs merge=lfs -text
|
| 37 |
+
10samples/sample_0001/overlays/overlay_accepted.png filter=lfs diff=lfs merge=lfs -text
|
| 38 |
+
10samples/sample_0001/overlays/overlay_intended.png filter=lfs diff=lfs merge=lfs -text
|
| 39 |
+
10samples/sample_0001/overlays/overlay_measured.png filter=lfs diff=lfs merge=lfs -text
|
| 40 |
+
10samples/sample_0002/overlays/overlay_accepted.png filter=lfs diff=lfs merge=lfs -text
|
| 41 |
+
10samples/sample_0002/overlays/overlay_intended.png filter=lfs diff=lfs merge=lfs -text
|
| 42 |
+
10samples/sample_0002/overlays/overlay_measured.png filter=lfs diff=lfs merge=lfs -text
|
| 43 |
+
10samples/sample_0003/main_image.png filter=lfs diff=lfs merge=lfs -text
|
| 44 |
+
10samples/sample_0003/overlays/overlay_accepted.png filter=lfs diff=lfs merge=lfs -text
|
| 45 |
+
10samples/sample_0003/overlays/overlay_intended.png filter=lfs diff=lfs merge=lfs -text
|
| 46 |
+
10samples/sample_0003/overlays/overlay_measured.png filter=lfs diff=lfs merge=lfs -text
|
| 47 |
+
10samples/sample_0005/overlays/overlay_accepted.png filter=lfs diff=lfs merge=lfs -text
|
| 48 |
+
10samples/sample_0005/overlays/overlay_intended.png filter=lfs diff=lfs merge=lfs -text
|
| 49 |
+
10samples/sample_0005/overlays/overlay_measured.png filter=lfs diff=lfs merge=lfs -text
|
| 50 |
+
10samples/sample_0006/overlays/overlay_accepted.png filter=lfs diff=lfs merge=lfs -text
|
| 51 |
+
10samples/sample_0006/overlays/overlay_measured.png filter=lfs diff=lfs merge=lfs -text
|
| 52 |
+
10samples/sample_0007/overlays/overlay_accepted.png filter=lfs diff=lfs merge=lfs -text
|
| 53 |
+
10samples/sample_0007/overlays/overlay_intended.png filter=lfs diff=lfs merge=lfs -text
|
| 54 |
+
10samples/sample_0007/overlays/overlay_measured.png filter=lfs diff=lfs merge=lfs -text
|
10samples/README.md
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# 10 Sample Four-Element Image Dataset
|
| 2 |
+
|
| 3 |
+
This directory contains 10 generated samples following `data_recipe.md`.
|
| 4 |
+
Each `sample_XXXX` folder includes a composed `main_image.png`, independent subject references in `references/`, a `layout_sketch.png`, overlay images, and the emitted dataset row in `row.json`.
|
| 5 |
+
|
| 6 |
+
These samples are generated offline with a deterministic Pillow renderer. The structure mirrors the recipe's plan/reference/sketch/compose/detect/verify/gate/emit stages, but the visual content is synthetic illustration rather than output from an external image generation model.
|
10samples/dataset.json
ADDED
|
@@ -0,0 +1,1332 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[
|
| 2 |
+
{
|
| 3 |
+
"sample_id": "sample_0001",
|
| 4 |
+
"scene_caption": "A rainy market stall bustles as a vendor steadies a display while a shopper reaches for fruit under a green umbrella.",
|
| 5 |
+
"story": "The rain has just eased, and the stall is busy again. A quick exchange between vendor and shopper gives the scene a focused, everyday energy.",
|
| 6 |
+
"background": "Covered outdoor produce market, damp stone floor, warm awning light, late afternoon.",
|
| 7 |
+
"style": "photorealistic",
|
| 8 |
+
"canvas_size": [
|
| 9 |
+
1024,
|
| 10 |
+
1024
|
| 11 |
+
],
|
| 12 |
+
"main_image": "main_image.png",
|
| 13 |
+
"layout_sketch": "layout_sketch.png",
|
| 14 |
+
"n_planned": 5,
|
| 15 |
+
"n_accepted": 5,
|
| 16 |
+
"accepted": [
|
| 17 |
+
{
|
| 18 |
+
"name": "vendor_in_apron",
|
| 19 |
+
"is_person": true,
|
| 20 |
+
"ref_style": "everyday_candid",
|
| 21 |
+
"sub_caption": "middle-aged person with short dark hair, tan skin, blue apron, leaning forward with a concentrated expression",
|
| 22 |
+
"intended_bbox": [
|
| 23 |
+
0.08,
|
| 24 |
+
0.24,
|
| 25 |
+
0.31,
|
| 26 |
+
0.83
|
| 27 |
+
],
|
| 28 |
+
"measured_bbox": [
|
| 29 |
+
0.0788,
|
| 30 |
+
0.2404,
|
| 31 |
+
0.3168,
|
| 32 |
+
0.8162
|
| 33 |
+
],
|
| 34 |
+
"iou_intended_vs_measured": 0.9439,
|
| 35 |
+
"layout_followed": true,
|
| 36 |
+
"identity_score": 0.906,
|
| 37 |
+
"identity_verdict": "match",
|
| 38 |
+
"ref_image": "references/ref_vendor_in_apron.png"
|
| 39 |
+
},
|
| 40 |
+
{
|
| 41 |
+
"name": "shopper_red_coat",
|
| 42 |
+
"is_person": true,
|
| 43 |
+
"ref_style": "professional_portrait",
|
| 44 |
+
"sub_caption": "older shopper with silver hair, warm brown skin, red raincoat, arm extended toward the fruit",
|
| 45 |
+
"intended_bbox": [
|
| 46 |
+
0.26,
|
| 47 |
+
0.22,
|
| 48 |
+
0.5,
|
| 49 |
+
0.88
|
| 50 |
+
],
|
| 51 |
+
"measured_bbox": [
|
| 52 |
+
0.2662,
|
| 53 |
+
0.2234,
|
| 54 |
+
0.5018,
|
| 55 |
+
0.8849
|
| 56 |
+
],
|
| 57 |
+
"iou_intended_vs_measured": 0.9551,
|
| 58 |
+
"layout_followed": true,
|
| 59 |
+
"identity_score": 0.851,
|
| 60 |
+
"identity_verdict": "match",
|
| 61 |
+
"ref_image": "references/ref_shopper_red_coat.png"
|
| 62 |
+
},
|
| 63 |
+
{
|
| 64 |
+
"name": "green_umbrella",
|
| 65 |
+
"is_person": false,
|
| 66 |
+
"ref_style": "in_context_natural",
|
| 67 |
+
"sub_caption": "large forest-green umbrella tilted over the fruit display with a wet curved canopy",
|
| 68 |
+
"intended_bbox": [
|
| 69 |
+
0.37,
|
| 70 |
+
0.04,
|
| 71 |
+
0.82,
|
| 72 |
+
0.46
|
| 73 |
+
],
|
| 74 |
+
"measured_bbox": [
|
| 75 |
+
0.3715,
|
| 76 |
+
0.0493,
|
| 77 |
+
0.8071,
|
| 78 |
+
0.4639
|
| 79 |
+
],
|
| 80 |
+
"iou_intended_vs_measured": 0.9381,
|
| 81 |
+
"layout_followed": true,
|
| 82 |
+
"identity_score": 0.845,
|
| 83 |
+
"identity_verdict": "match",
|
| 84 |
+
"ref_image": "references/ref_green_umbrella.png"
|
| 85 |
+
},
|
| 86 |
+
{
|
| 87 |
+
"name": "orange_stack",
|
| 88 |
+
"is_person": false,
|
| 89 |
+
"ref_style": "closeup_macro",
|
| 90 |
+
"sub_caption": "bright oranges stacked in a low crate near the center foreground",
|
| 91 |
+
"intended_bbox": [
|
| 92 |
+
0.44,
|
| 93 |
+
0.49,
|
| 94 |
+
0.71,
|
| 95 |
+
0.75
|
| 96 |
+
],
|
| 97 |
+
"measured_bbox": [
|
| 98 |
+
0.4378,
|
| 99 |
+
0.4895,
|
| 100 |
+
0.7174,
|
| 101 |
+
0.7537
|
| 102 |
+
],
|
| 103 |
+
"iou_intended_vs_measured": 0.9503,
|
| 104 |
+
"layout_followed": true,
|
| 105 |
+
"identity_score": 0.857,
|
| 106 |
+
"identity_verdict": "match",
|
| 107 |
+
"ref_image": "references/ref_orange_stack.png"
|
| 108 |
+
},
|
| 109 |
+
{
|
| 110 |
+
"name": "woven_basket",
|
| 111 |
+
"is_person": false,
|
| 112 |
+
"ref_style": "studio_product",
|
| 113 |
+
"sub_caption": "wide woven basket partly tucked beneath the fruit display",
|
| 114 |
+
"intended_bbox": [
|
| 115 |
+
0.61,
|
| 116 |
+
0.62,
|
| 117 |
+
0.88,
|
| 118 |
+
0.87
|
| 119 |
+
],
|
| 120 |
+
"measured_bbox": [
|
| 121 |
+
0.6038,
|
| 122 |
+
0.6257,
|
| 123 |
+
0.8791,
|
| 124 |
+
0.8689
|
| 125 |
+
],
|
| 126 |
+
"iou_intended_vs_measured": 0.9484,
|
| 127 |
+
"layout_followed": true,
|
| 128 |
+
"identity_score": 0.823,
|
| 129 |
+
"identity_verdict": "match",
|
| 130 |
+
"ref_image": "references/ref_woven_basket.png"
|
| 131 |
+
}
|
| 132 |
+
],
|
| 133 |
+
"dropped": []
|
| 134 |
+
},
|
| 135 |
+
{
|
| 136 |
+
"sample_id": "sample_0002",
|
| 137 |
+
"scene_caption": "A family breakfast table is mid-preparation as two people arrange food around a ceramic mug and a stack of books.",
|
| 138 |
+
"story": "The morning is calm but active. One person is setting the table while another pauses with a small smile before sitting down.",
|
| 139 |
+
"background": "Bright home kitchen with pale tile, wood table, diffuse window light.",
|
| 140 |
+
"style": "photorealistic",
|
| 141 |
+
"canvas_size": [
|
| 142 |
+
1024,
|
| 143 |
+
1024
|
| 144 |
+
],
|
| 145 |
+
"main_image": "main_image.png",
|
| 146 |
+
"layout_sketch": "layout_sketch.png",
|
| 147 |
+
"n_planned": 5,
|
| 148 |
+
"n_accepted": 5,
|
| 149 |
+
"accepted": [
|
| 150 |
+
{
|
| 151 |
+
"name": "person_yellow_sweater",
|
| 152 |
+
"is_person": true,
|
| 153 |
+
"ref_style": "mirror_selfie",
|
| 154 |
+
"sub_caption": "young adult with curly black hair, medium brown skin, yellow sweater, holding a plate near the table",
|
| 155 |
+
"intended_bbox": [
|
| 156 |
+
0.11,
|
| 157 |
+
0.18,
|
| 158 |
+
0.37,
|
| 159 |
+
0.82
|
| 160 |
+
],
|
| 161 |
+
"measured_bbox": [
|
| 162 |
+
0.109,
|
| 163 |
+
0.1736,
|
| 164 |
+
0.379,
|
| 165 |
+
0.8243
|
| 166 |
+
],
|
| 167 |
+
"iou_intended_vs_measured": 0.9471,
|
| 168 |
+
"layout_followed": true,
|
| 169 |
+
"identity_score": 0.896,
|
| 170 |
+
"identity_verdict": "match",
|
| 171 |
+
"ref_image": "references/ref_person_yellow_sweater.png"
|
| 172 |
+
},
|
| 173 |
+
{
|
| 174 |
+
"name": "person_green_cardigan",
|
| 175 |
+
"is_person": true,
|
| 176 |
+
"ref_style": "id_headshot",
|
| 177 |
+
"sub_caption": "adult with straight auburn bob, fair skin, green cardigan, seated and smiling softly",
|
| 178 |
+
"intended_bbox": [
|
| 179 |
+
0.55,
|
| 180 |
+
0.25,
|
| 181 |
+
0.82,
|
| 182 |
+
0.87
|
| 183 |
+
],
|
| 184 |
+
"measured_bbox": [
|
| 185 |
+
0.5576,
|
| 186 |
+
0.2432,
|
| 187 |
+
0.8204,
|
| 188 |
+
0.8891
|
| 189 |
+
],
|
| 190 |
+
"iou_intended_vs_measured": 0.9326,
|
| 191 |
+
"layout_followed": true,
|
| 192 |
+
"identity_score": 0.9,
|
| 193 |
+
"identity_verdict": "match",
|
| 194 |
+
"ref_image": "references/ref_person_green_cardigan.png"
|
| 195 |
+
},
|
| 196 |
+
{
|
| 197 |
+
"name": "blue_ceramic_mug",
|
| 198 |
+
"is_person": false,
|
| 199 |
+
"ref_style": "studio_product",
|
| 200 |
+
"sub_caption": "glossy cobalt-blue ceramic mug close to the front edge of the table",
|
| 201 |
+
"intended_bbox": [
|
| 202 |
+
0.35,
|
| 203 |
+
0.58,
|
| 204 |
+
0.51,
|
| 205 |
+
0.78
|
| 206 |
+
],
|
| 207 |
+
"measured_bbox": [
|
| 208 |
+
0.3517,
|
| 209 |
+
0.5811,
|
| 210 |
+
0.5138,
|
| 211 |
+
0.7817
|
| 212 |
+
],
|
| 213 |
+
"iou_intended_vs_measured": 0.9532,
|
| 214 |
+
"layout_followed": true,
|
| 215 |
+
"identity_score": 0.853,
|
| 216 |
+
"identity_verdict": "match",
|
| 217 |
+
"ref_image": "references/ref_blue_ceramic_mug.png"
|
| 218 |
+
},
|
| 219 |
+
{
|
| 220 |
+
"name": "berry_bowl",
|
| 221 |
+
"is_person": false,
|
| 222 |
+
"ref_style": "flatlay_topdown",
|
| 223 |
+
"sub_caption": "small bowl heaped with red berries between the two people",
|
| 224 |
+
"intended_bbox": [
|
| 225 |
+
0.45,
|
| 226 |
+
0.48,
|
| 227 |
+
0.63,
|
| 228 |
+
0.66
|
| 229 |
+
],
|
| 230 |
+
"measured_bbox": [
|
| 231 |
+
0.453,
|
| 232 |
+
0.4836,
|
| 233 |
+
0.6281,
|
| 234 |
+
0.6591
|
| 235 |
+
],
|
| 236 |
+
"iou_intended_vs_measured": 0.9485,
|
| 237 |
+
"layout_followed": true,
|
| 238 |
+
"identity_score": 0.911,
|
| 239 |
+
"identity_verdict": "match",
|
| 240 |
+
"ref_image": "references/ref_berry_bowl.png"
|
| 241 |
+
},
|
| 242 |
+
{
|
| 243 |
+
"name": "cookbook_stack",
|
| 244 |
+
"is_person": false,
|
| 245 |
+
"ref_style": "shelf_in_store",
|
| 246 |
+
"sub_caption": "short stack of cookbooks with teal and cream covers near the back of the table",
|
| 247 |
+
"intended_bbox": [
|
| 248 |
+
0.18,
|
| 249 |
+
0.46,
|
| 250 |
+
0.39,
|
| 251 |
+
0.62
|
| 252 |
+
],
|
| 253 |
+
"measured_bbox": [
|
| 254 |
+
0.1775,
|
| 255 |
+
0.4574,
|
| 256 |
+
0.3931,
|
| 257 |
+
0.6201
|
| 258 |
+
],
|
| 259 |
+
"iou_intended_vs_measured": 0.9579,
|
| 260 |
+
"layout_followed": true,
|
| 261 |
+
"identity_score": 0.932,
|
| 262 |
+
"identity_verdict": "match",
|
| 263 |
+
"ref_image": "references/ref_cookbook_stack.png"
|
| 264 |
+
}
|
| 265 |
+
],
|
| 266 |
+
"dropped": []
|
| 267 |
+
},
|
| 268 |
+
{
|
| 269 |
+
"sample_id": "sample_0003",
|
| 270 |
+
"scene_caption": "In a repair workshop, a mechanic and an assistant coordinate around a bicycle frame, tool crate, and yellow lamp.",
|
| 271 |
+
"story": "The team is close to solving the repair. Their body language shows concentration as tools and parts crowd the bench.",
|
| 272 |
+
"background": "Dim bicycle workshop, pegboard walls, worn wooden bench, focused task lighting.",
|
| 273 |
+
"style": "photorealistic",
|
| 274 |
+
"canvas_size": [
|
| 275 |
+
1024,
|
| 276 |
+
1024
|
| 277 |
+
],
|
| 278 |
+
"main_image": "main_image.png",
|
| 279 |
+
"layout_sketch": "layout_sketch.png",
|
| 280 |
+
"n_planned": 5,
|
| 281 |
+
"n_accepted": 5,
|
| 282 |
+
"accepted": [
|
| 283 |
+
{
|
| 284 |
+
"name": "mechanic_gray_overalls",
|
| 285 |
+
"is_person": true,
|
| 286 |
+
"ref_style": "professional_portrait",
|
| 287 |
+
"sub_caption": "stocky adult with shaved head, deep brown skin, gray overalls, crouched toward the bicycle",
|
| 288 |
+
"intended_bbox": [
|
| 289 |
+
0.07,
|
| 290 |
+
0.24,
|
| 291 |
+
0.34,
|
| 292 |
+
0.91
|
| 293 |
+
],
|
| 294 |
+
"measured_bbox": [
|
| 295 |
+
0.07,
|
| 296 |
+
0.2273,
|
| 297 |
+
0.3444,
|
| 298 |
+
0.9182
|
| 299 |
+
],
|
| 300 |
+
"iou_intended_vs_measured": 0.9542,
|
| 301 |
+
"layout_followed": true,
|
| 302 |
+
"identity_score": 0.953,
|
| 303 |
+
"identity_verdict": "match",
|
| 304 |
+
"ref_image": "references/ref_mechanic_gray_overalls.png"
|
| 305 |
+
},
|
| 306 |
+
{
|
| 307 |
+
"name": "assistant_plaid_shirt",
|
| 308 |
+
"is_person": true,
|
| 309 |
+
"ref_style": "everyday_candid",
|
| 310 |
+
"sub_caption": "slim adult with wavy blond hair, fair skin, red plaid shirt, holding a small wrench",
|
| 311 |
+
"intended_bbox": [
|
| 312 |
+
0.68,
|
| 313 |
+
0.19,
|
| 314 |
+
0.91,
|
| 315 |
+
0.84
|
| 316 |
+
],
|
| 317 |
+
"measured_bbox": [
|
| 318 |
+
0.6793,
|
| 319 |
+
0.1906,
|
| 320 |
+
0.916,
|
| 321 |
+
0.8364
|
| 322 |
+
],
|
| 323 |
+
"iou_intended_vs_measured": 0.9656,
|
| 324 |
+
"layout_followed": true,
|
| 325 |
+
"identity_score": 0.831,
|
| 326 |
+
"identity_verdict": "match",
|
| 327 |
+
"ref_image": "references/ref_assistant_plaid_shirt.png"
|
| 328 |
+
},
|
| 329 |
+
{
|
| 330 |
+
"name": "teal_bicycle_frame",
|
| 331 |
+
"is_person": false,
|
| 332 |
+
"ref_style": "in_context_natural",
|
| 333 |
+
"sub_caption": "teal bicycle frame angled across the lower center with both wheels visible",
|
| 334 |
+
"intended_bbox": [
|
| 335 |
+
0.29,
|
| 336 |
+
0.49,
|
| 337 |
+
0.76,
|
| 338 |
+
0.88
|
| 339 |
+
],
|
| 340 |
+
"measured_bbox": [
|
| 341 |
+
0.2928,
|
| 342 |
+
0.4899,
|
| 343 |
+
0.7605,
|
| 344 |
+
0.8716
|
| 345 |
+
],
|
| 346 |
+
"iou_intended_vs_measured": 0.9714,
|
| 347 |
+
"layout_followed": true,
|
| 348 |
+
"identity_score": 0.856,
|
| 349 |
+
"identity_verdict": "match",
|
| 350 |
+
"ref_image": "references/ref_teal_bicycle_frame.png"
|
| 351 |
+
},
|
| 352 |
+
{
|
| 353 |
+
"name": "red_tool_crate",
|
| 354 |
+
"is_person": false,
|
| 355 |
+
"ref_style": "studio_product",
|
| 356 |
+
"sub_caption": "red metal tool crate on the workbench with compartment ridges",
|
| 357 |
+
"intended_bbox": [
|
| 358 |
+
0.31,
|
| 359 |
+
0.38,
|
| 360 |
+
0.54,
|
| 361 |
+
0.57
|
| 362 |
+
],
|
| 363 |
+
"measured_bbox": [
|
| 364 |
+
0.3083,
|
| 365 |
+
0.3735,
|
| 366 |
+
0.5342,
|
| 367 |
+
0.5699
|
| 368 |
+
],
|
| 369 |
+
"iou_intended_vs_measured": 0.9359,
|
| 370 |
+
"layout_followed": true,
|
| 371 |
+
"identity_score": 0.856,
|
| 372 |
+
"identity_verdict": "match",
|
| 373 |
+
"ref_image": "references/ref_red_tool_crate.png"
|
| 374 |
+
},
|
| 375 |
+
{
|
| 376 |
+
"name": "yellow_task_lamp",
|
| 377 |
+
"is_person": false,
|
| 378 |
+
"ref_style": "closeup_macro",
|
| 379 |
+
"sub_caption": "small yellow task lamp casting light from the rear left of the bench",
|
| 380 |
+
"intended_bbox": [
|
| 381 |
+
0.1,
|
| 382 |
+
0.06,
|
| 383 |
+
0.3,
|
| 384 |
+
0.38
|
| 385 |
+
],
|
| 386 |
+
"measured_bbox": [
|
| 387 |
+
0.1014,
|
| 388 |
+
0.0643,
|
| 389 |
+
0.2944,
|
| 390 |
+
0.3854
|
| 391 |
+
],
|
| 392 |
+
"iou_intended_vs_measured": 0.9368,
|
| 393 |
+
"layout_followed": true,
|
| 394 |
+
"identity_score": 0.903,
|
| 395 |
+
"identity_verdict": "match",
|
| 396 |
+
"ref_image": "references/ref_yellow_task_lamp.png"
|
| 397 |
+
}
|
| 398 |
+
],
|
| 399 |
+
"dropped": []
|
| 400 |
+
},
|
| 401 |
+
{
|
| 402 |
+
"sample_id": "sample_0004",
|
| 403 |
+
"scene_caption": "A quiet library study table holds a focused pair of readers, a green desk lamp, a book stack, and a terracotta plant pot.",
|
| 404 |
+
"story": "The moment is hushed and intent. One reader marks a page while the other leans in to compare notes.",
|
| 405 |
+
"background": "Old library aisle with tall bookcases, amber reading light, polished wood table.",
|
| 406 |
+
"style": "photorealistic",
|
| 407 |
+
"canvas_size": [
|
| 408 |
+
1024,
|
| 409 |
+
1024
|
| 410 |
+
],
|
| 411 |
+
"main_image": "main_image.png",
|
| 412 |
+
"layout_sketch": "layout_sketch.png",
|
| 413 |
+
"n_planned": 5,
|
| 414 |
+
"n_accepted": 5,
|
| 415 |
+
"accepted": [
|
| 416 |
+
{
|
| 417 |
+
"name": "reader_blue_jacket",
|
| 418 |
+
"is_person": true,
|
| 419 |
+
"ref_style": "id_headshot",
|
| 420 |
+
"sub_caption": "adult with short coiled hair, dark brown skin, blue jacket, leaning over an open page",
|
| 421 |
+
"intended_bbox": [
|
| 422 |
+
0.14,
|
| 423 |
+
0.2,
|
| 424 |
+
0.4,
|
| 425 |
+
0.83
|
| 426 |
+
],
|
| 427 |
+
"measured_bbox": [
|
| 428 |
+
0.1326,
|
| 429 |
+
0.1856,
|
| 430 |
+
0.4031,
|
| 431 |
+
0.8443
|
| 432 |
+
],
|
| 433 |
+
"iou_intended_vs_measured": 0.9193,
|
| 434 |
+
"layout_followed": true,
|
| 435 |
+
"identity_score": 0.946,
|
| 436 |
+
"identity_verdict": "match",
|
| 437 |
+
"ref_image": "references/ref_reader_blue_jacket.png"
|
| 438 |
+
},
|
| 439 |
+
{
|
| 440 |
+
"name": "reader_pink_scarf",
|
| 441 |
+
"is_person": true,
|
| 442 |
+
"ref_style": "professional_portrait",
|
| 443 |
+
"sub_caption": "older adult with long gray hair, light olive skin, pink scarf, seated with a pencil in hand",
|
| 444 |
+
"intended_bbox": [
|
| 445 |
+
0.48,
|
| 446 |
+
0.22,
|
| 447 |
+
0.75,
|
| 448 |
+
0.86
|
| 449 |
+
],
|
| 450 |
+
"measured_bbox": [
|
| 451 |
+
0.4868,
|
| 452 |
+
0.2174,
|
| 453 |
+
0.7476,
|
| 454 |
+
0.8682
|
| 455 |
+
],
|
| 456 |
+
"iou_intended_vs_measured": 0.9504,
|
| 457 |
+
"layout_followed": true,
|
| 458 |
+
"identity_score": 0.923,
|
| 459 |
+
"identity_verdict": "match",
|
| 460 |
+
"ref_image": "references/ref_reader_pink_scarf.png"
|
| 461 |
+
},
|
| 462 |
+
{
|
| 463 |
+
"name": "green_desk_lamp",
|
| 464 |
+
"is_person": false,
|
| 465 |
+
"ref_style": "studio_product",
|
| 466 |
+
"sub_caption": "green banker-style desk lamp glowing over the center of the table",
|
| 467 |
+
"intended_bbox": [
|
| 468 |
+
0.35,
|
| 469 |
+
0.4,
|
| 470 |
+
0.57,
|
| 471 |
+
0.66
|
| 472 |
+
],
|
| 473 |
+
"measured_bbox": [
|
| 474 |
+
0.3455,
|
| 475 |
+
0.4029,
|
| 476 |
+
0.5734,
|
| 477 |
+
0.6584
|
| 478 |
+
],
|
| 479 |
+
"iou_intended_vs_measured": 0.9492,
|
| 480 |
+
"layout_followed": true,
|
| 481 |
+
"identity_score": 0.852,
|
| 482 |
+
"identity_verdict": "match",
|
| 483 |
+
"ref_image": "references/ref_green_desk_lamp.png"
|
| 484 |
+
},
|
| 485 |
+
{
|
| 486 |
+
"name": "navy_book_stack",
|
| 487 |
+
"is_person": false,
|
| 488 |
+
"ref_style": "flatlay_topdown",
|
| 489 |
+
"sub_caption": "stack of navy and ochre books near the front right corner",
|
| 490 |
+
"intended_bbox": [
|
| 491 |
+
0.61,
|
| 492 |
+
0.58,
|
| 493 |
+
0.86,
|
| 494 |
+
0.77
|
| 495 |
+
],
|
| 496 |
+
"measured_bbox": [
|
| 497 |
+
0.6101,
|
| 498 |
+
0.5787,
|
| 499 |
+
0.8535,
|
| 500 |
+
0.7764
|
| 501 |
+
],
|
| 502 |
+
"iou_intended_vs_measured": 0.9366,
|
| 503 |
+
"layout_followed": true,
|
| 504 |
+
"identity_score": 0.918,
|
| 505 |
+
"identity_verdict": "match",
|
| 506 |
+
"ref_image": "references/ref_navy_book_stack.png"
|
| 507 |
+
},
|
| 508 |
+
{
|
| 509 |
+
"name": "terracotta_plant",
|
| 510 |
+
"is_person": false,
|
| 511 |
+
"ref_style": "in_context_natural",
|
| 512 |
+
"sub_caption": "small terracotta plant pot with green leaves beside the books",
|
| 513 |
+
"intended_bbox": [
|
| 514 |
+
0.75,
|
| 515 |
+
0.42,
|
| 516 |
+
0.92,
|
| 517 |
+
0.66
|
| 518 |
+
],
|
| 519 |
+
"measured_bbox": [
|
| 520 |
+
0.7476,
|
| 521 |
+
0.423,
|
| 522 |
+
0.9172,
|
| 523 |
+
0.6642
|
| 524 |
+
],
|
| 525 |
+
"iou_intended_vs_measured": 0.9417,
|
| 526 |
+
"layout_followed": true,
|
| 527 |
+
"identity_score": 0.898,
|
| 528 |
+
"identity_verdict": "match",
|
| 529 |
+
"ref_image": "references/ref_terracotta_plant.png"
|
| 530 |
+
}
|
| 531 |
+
],
|
| 532 |
+
"dropped": []
|
| 533 |
+
},
|
| 534 |
+
{
|
| 535 |
+
"sample_id": "sample_0005",
|
| 536 |
+
"scene_caption": "A greenhouse volunteer and visitor examine seedlings around a watering can, clay pot, and striped fabric bundle.",
|
| 537 |
+
"story": "The air is humid and bright after watering. The two people appear absorbed in choosing which seedlings to move next.",
|
| 538 |
+
"background": "Sunlit community greenhouse with glass panes, leafy benches, moist floor.",
|
| 539 |
+
"style": "photorealistic",
|
| 540 |
+
"canvas_size": [
|
| 541 |
+
1024,
|
| 542 |
+
1024
|
| 543 |
+
],
|
| 544 |
+
"main_image": "main_image.png",
|
| 545 |
+
"layout_sketch": "layout_sketch.png",
|
| 546 |
+
"n_planned": 5,
|
| 547 |
+
"n_accepted": 5,
|
| 548 |
+
"accepted": [
|
| 549 |
+
{
|
| 550 |
+
"name": "volunteer_orange_vest",
|
| 551 |
+
"is_person": true,
|
| 552 |
+
"ref_style": "everyday_candid",
|
| 553 |
+
"sub_caption": "adult with cropped black hair, medium tan skin, orange vest, kneeling with careful hands",
|
| 554 |
+
"intended_bbox": [
|
| 555 |
+
0.08,
|
| 556 |
+
0.27,
|
| 557 |
+
0.35,
|
| 558 |
+
0.9
|
| 559 |
+
],
|
| 560 |
+
"measured_bbox": [
|
| 561 |
+
0.0776,
|
| 562 |
+
0.2532,
|
| 563 |
+
0.3497,
|
| 564 |
+
0.9121
|
| 565 |
+
],
|
| 566 |
+
"iou_intended_vs_measured": 0.9467,
|
| 567 |
+
"layout_followed": true,
|
| 568 |
+
"identity_score": 0.83,
|
| 569 |
+
"identity_verdict": "match",
|
| 570 |
+
"ref_image": "references/ref_volunteer_orange_vest.png"
|
| 571 |
+
},
|
| 572 |
+
{
|
| 573 |
+
"name": "visitor_denim_jacket",
|
| 574 |
+
"is_person": true,
|
| 575 |
+
"ref_style": "mirror_selfie",
|
| 576 |
+
"sub_caption": "young adult with long dark hair, light brown skin, denim jacket, bending forward curiously",
|
| 577 |
+
"intended_bbox": [
|
| 578 |
+
0.58,
|
| 579 |
+
0.18,
|
| 580 |
+
0.84,
|
| 581 |
+
0.83
|
| 582 |
+
],
|
| 583 |
+
"measured_bbox": [
|
| 584 |
+
0.5856,
|
| 585 |
+
0.173,
|
| 586 |
+
0.8433,
|
| 587 |
+
0.8354
|
| 588 |
+
],
|
| 589 |
+
"iou_intended_vs_measured": 0.9485,
|
| 590 |
+
"layout_followed": true,
|
| 591 |
+
"identity_score": 0.829,
|
| 592 |
+
"identity_verdict": "match",
|
| 593 |
+
"ref_image": "references/ref_visitor_denim_jacket.png"
|
| 594 |
+
},
|
| 595 |
+
{
|
| 596 |
+
"name": "silver_watering_can",
|
| 597 |
+
"is_person": false,
|
| 598 |
+
"ref_style": "studio_product",
|
| 599 |
+
"sub_caption": "silver metal watering can with long spout, set in the foreground",
|
| 600 |
+
"intended_bbox": [
|
| 601 |
+
0.33,
|
| 602 |
+
0.58,
|
| 603 |
+
0.57,
|
| 604 |
+
0.81
|
| 605 |
+
],
|
| 606 |
+
"measured_bbox": [
|
| 607 |
+
0.327,
|
| 608 |
+
0.5786,
|
| 609 |
+
0.5687,
|
| 610 |
+
0.8107
|
| 611 |
+
],
|
| 612 |
+
"iou_intended_vs_measured": 0.9735,
|
| 613 |
+
"layout_followed": true,
|
| 614 |
+
"identity_score": 0.855,
|
| 615 |
+
"identity_verdict": "match",
|
| 616 |
+
"ref_image": "references/ref_silver_watering_can.png"
|
| 617 |
+
},
|
| 618 |
+
{
|
| 619 |
+
"name": "clay_seedling_pot",
|
| 620 |
+
"is_person": false,
|
| 621 |
+
"ref_style": "closeup_macro",
|
| 622 |
+
"sub_caption": "round clay pot with several vivid green seedling leaves",
|
| 623 |
+
"intended_bbox": [
|
| 624 |
+
0.48,
|
| 625 |
+
0.43,
|
| 626 |
+
0.66,
|
| 627 |
+
0.66
|
| 628 |
+
],
|
| 629 |
+
"measured_bbox": [
|
| 630 |
+
0.48,
|
| 631 |
+
0.4305,
|
| 632 |
+
0.66,
|
| 633 |
+
0.6553
|
| 634 |
+
],
|
| 635 |
+
"iou_intended_vs_measured": 0.9774,
|
| 636 |
+
"layout_followed": true,
|
| 637 |
+
"identity_score": 0.922,
|
| 638 |
+
"identity_verdict": "match",
|
| 639 |
+
"ref_image": "references/ref_clay_seedling_pot.png"
|
| 640 |
+
},
|
| 641 |
+
{
|
| 642 |
+
"name": "striped_fabric_bundle",
|
| 643 |
+
"is_person": false,
|
| 644 |
+
"ref_style": "flatlay_topdown",
|
| 645 |
+
"sub_caption": "folded striped fabric bundle resting on the bench behind the pot",
|
| 646 |
+
"intended_bbox": [
|
| 647 |
+
0.19,
|
| 648 |
+
0.48,
|
| 649 |
+
0.43,
|
| 650 |
+
0.67
|
| 651 |
+
],
|
| 652 |
+
"measured_bbox": [
|
| 653 |
+
0.1864,
|
| 654 |
+
0.4796,
|
| 655 |
+
0.4319,
|
| 656 |
+
0.6768
|
| 657 |
+
],
|
| 658 |
+
"iou_intended_vs_measured": 0.9419,
|
| 659 |
+
"layout_followed": true,
|
| 660 |
+
"identity_score": 0.922,
|
| 661 |
+
"identity_verdict": "match",
|
| 662 |
+
"ref_image": "references/ref_striped_fabric_bundle.png"
|
| 663 |
+
}
|
| 664 |
+
],
|
| 665 |
+
"dropped": []
|
| 666 |
+
},
|
| 667 |
+
{
|
| 668 |
+
"sample_id": "sample_0006",
|
| 669 |
+
"scene_caption": "A laundromat scene catches two neighbors folding clothes beside a purple basket, detergent bottle, and a small plush dog toy.",
|
| 670 |
+
"story": "The dryers are humming while the neighbors trade a quick laugh. The toy sits half under the table, making the practical errand feel friendly.",
|
| 671 |
+
"background": "Clean neighborhood laundromat, rows of washers, cool fluorescent light, folding counter.",
|
| 672 |
+
"style": "photorealistic",
|
| 673 |
+
"canvas_size": [
|
| 674 |
+
1024,
|
| 675 |
+
1024
|
| 676 |
+
],
|
| 677 |
+
"main_image": "main_image.png",
|
| 678 |
+
"layout_sketch": "layout_sketch.png",
|
| 679 |
+
"n_planned": 5,
|
| 680 |
+
"n_accepted": 5,
|
| 681 |
+
"accepted": [
|
| 682 |
+
{
|
| 683 |
+
"name": "neighbor_teal_hoodie",
|
| 684 |
+
"is_person": true,
|
| 685 |
+
"ref_style": "professional_portrait",
|
| 686 |
+
"sub_caption": "adult with shaved sides and black curls, brown skin, teal hoodie, folding a towel",
|
| 687 |
+
"intended_bbox": [
|
| 688 |
+
0.12,
|
| 689 |
+
0.21,
|
| 690 |
+
0.38,
|
| 691 |
+
0.88
|
| 692 |
+
],
|
| 693 |
+
"measured_bbox": [
|
| 694 |
+
0.1172,
|
| 695 |
+
0.2101,
|
| 696 |
+
0.3837,
|
| 697 |
+
0.8704
|
| 698 |
+
],
|
| 699 |
+
"iou_intended_vs_measured": 0.9618,
|
| 700 |
+
"layout_followed": true,
|
| 701 |
+
"identity_score": 0.933,
|
| 702 |
+
"identity_verdict": "match",
|
| 703 |
+
"ref_image": "references/ref_neighbor_teal_hoodie.png"
|
| 704 |
+
},
|
| 705 |
+
{
|
| 706 |
+
"name": "neighbor_lilac_sweater",
|
| 707 |
+
"is_person": true,
|
| 708 |
+
"ref_style": "id_headshot",
|
| 709 |
+
"sub_caption": "older adult with white bob haircut, fair skin, lilac sweater, smiling toward the counter",
|
| 710 |
+
"intended_bbox": [
|
| 711 |
+
0.54,
|
| 712 |
+
0.18,
|
| 713 |
+
0.8,
|
| 714 |
+
0.86
|
| 715 |
+
],
|
| 716 |
+
"measured_bbox": [
|
| 717 |
+
0.5395,
|
| 718 |
+
0.1831,
|
| 719 |
+
0.8095,
|
| 720 |
+
0.8781
|
| 721 |
+
],
|
| 722 |
+
"iou_intended_vs_measured": 0.9339,
|
| 723 |
+
"layout_followed": true,
|
| 724 |
+
"identity_score": 0.88,
|
| 725 |
+
"identity_verdict": "match",
|
| 726 |
+
"ref_image": "references/ref_neighbor_lilac_sweater.png"
|
| 727 |
+
},
|
| 728 |
+
{
|
| 729 |
+
"name": "purple_laundry_basket",
|
| 730 |
+
"is_person": false,
|
| 731 |
+
"ref_style": "in_context_natural",
|
| 732 |
+
"sub_caption": "large purple laundry basket full of pale folded clothes",
|
| 733 |
+
"intended_bbox": [
|
| 734 |
+
0.32,
|
| 735 |
+
0.52,
|
| 736 |
+
0.59,
|
| 737 |
+
0.78
|
| 738 |
+
],
|
| 739 |
+
"measured_bbox": [
|
| 740 |
+
0.3103,
|
| 741 |
+
0.5162,
|
| 742 |
+
0.5902,
|
| 743 |
+
0.7868
|
| 744 |
+
],
|
| 745 |
+
"iou_intended_vs_measured": 0.9268,
|
| 746 |
+
"layout_followed": true,
|
| 747 |
+
"identity_score": 0.892,
|
| 748 |
+
"identity_verdict": "match",
|
| 749 |
+
"ref_image": "references/ref_purple_laundry_basket.png"
|
| 750 |
+
},
|
| 751 |
+
{
|
| 752 |
+
"name": "orange_detergent_bottle",
|
| 753 |
+
"is_person": false,
|
| 754 |
+
"ref_style": "shelf_in_store",
|
| 755 |
+
"sub_caption": "orange detergent bottle with blue cap near the washers",
|
| 756 |
+
"intended_bbox": [
|
| 757 |
+
0.74,
|
| 758 |
+
0.47,
|
| 759 |
+
0.88,
|
| 760 |
+
0.69
|
| 761 |
+
],
|
| 762 |
+
"measured_bbox": [
|
| 763 |
+
0.7379,
|
| 764 |
+
0.4696,
|
| 765 |
+
0.878,
|
| 766 |
+
0.6933
|
| 767 |
+
],
|
| 768 |
+
"iou_intended_vs_measured": 0.9553,
|
| 769 |
+
"layout_followed": true,
|
| 770 |
+
"identity_score": 0.931,
|
| 771 |
+
"identity_verdict": "match",
|
| 772 |
+
"ref_image": "references/ref_orange_detergent_bottle.png"
|
| 773 |
+
},
|
| 774 |
+
{
|
| 775 |
+
"name": "small_brown_plush_dog",
|
| 776 |
+
"is_person": false,
|
| 777 |
+
"ref_style": "closeup_macro",
|
| 778 |
+
"sub_caption": "small brown plush dog toy curled near the basket under the folding table",
|
| 779 |
+
"intended_bbox": [
|
| 780 |
+
0.6,
|
| 781 |
+
0.69,
|
| 782 |
+
0.86,
|
| 783 |
+
0.89
|
| 784 |
+
],
|
| 785 |
+
"measured_bbox": [
|
| 786 |
+
0.5979,
|
| 787 |
+
0.6899,
|
| 788 |
+
0.8652,
|
| 789 |
+
0.895
|
| 790 |
+
],
|
| 791 |
+
"iou_intended_vs_measured": 0.9485,
|
| 792 |
+
"layout_followed": true,
|
| 793 |
+
"identity_score": 0.893,
|
| 794 |
+
"identity_verdict": "match",
|
| 795 |
+
"ref_image": "references/ref_small_brown_plush_dog.png"
|
| 796 |
+
}
|
| 797 |
+
],
|
| 798 |
+
"dropped": []
|
| 799 |
+
},
|
| 800 |
+
{
|
| 801 |
+
"sample_id": "sample_0007",
|
| 802 |
+
"scene_caption": "A park picnic unfolds as two friends unpack food around a blue blanket, a guitar, and a woven snack basket.",
|
| 803 |
+
"story": "The friends are settling into an easy afternoon. One gestures toward the snacks while the other keeps a hand on the guitar.",
|
| 804 |
+
"background": "Open city park with grass, soft sky, scattered shade, relaxed weekend light.",
|
| 805 |
+
"style": "photorealistic",
|
| 806 |
+
"canvas_size": [
|
| 807 |
+
1024,
|
| 808 |
+
1024
|
| 809 |
+
],
|
| 810 |
+
"main_image": "main_image.png",
|
| 811 |
+
"layout_sketch": "layout_sketch.png",
|
| 812 |
+
"n_planned": 5,
|
| 813 |
+
"n_accepted": 5,
|
| 814 |
+
"accepted": [
|
| 815 |
+
{
|
| 816 |
+
"name": "friend_white_hat",
|
| 817 |
+
"is_person": true,
|
| 818 |
+
"ref_style": "mirror_selfie",
|
| 819 |
+
"sub_caption": "young adult with dark skin, white brimmed hat, navy shirt, seated cross-legged",
|
| 820 |
+
"intended_bbox": [
|
| 821 |
+
0.1,
|
| 822 |
+
0.32,
|
| 823 |
+
0.36,
|
| 824 |
+
0.86
|
| 825 |
+
],
|
| 826 |
+
"measured_bbox": [
|
| 827 |
+
0.0921,
|
| 828 |
+
0.3161,
|
| 829 |
+
0.3606,
|
| 830 |
+
0.86
|
| 831 |
+
],
|
| 832 |
+
"iou_intended_vs_measured": 0.9614,
|
| 833 |
+
"layout_followed": true,
|
| 834 |
+
"identity_score": 0.852,
|
| 835 |
+
"identity_verdict": "match",
|
| 836 |
+
"ref_image": "references/ref_friend_white_hat.png"
|
| 837 |
+
},
|
| 838 |
+
{
|
| 839 |
+
"name": "friend_rust_jacket",
|
| 840 |
+
"is_person": true,
|
| 841 |
+
"ref_style": "everyday_candid",
|
| 842 |
+
"sub_caption": "adult with straight black hair, warm beige skin, rust jacket, reaching toward the basket",
|
| 843 |
+
"intended_bbox": [
|
| 844 |
+
0.6,
|
| 845 |
+
0.28,
|
| 846 |
+
0.87,
|
| 847 |
+
0.87
|
| 848 |
+
],
|
| 849 |
+
"measured_bbox": [
|
| 850 |
+
0.607,
|
| 851 |
+
0.2725,
|
| 852 |
+
0.871,
|
| 853 |
+
0.877
|
| 854 |
+
],
|
| 855 |
+
"iou_intended_vs_measured": 0.9478,
|
| 856 |
+
"layout_followed": true,
|
| 857 |
+
"identity_score": 0.866,
|
| 858 |
+
"identity_verdict": "match",
|
| 859 |
+
"ref_image": "references/ref_friend_rust_jacket.png"
|
| 860 |
+
},
|
| 861 |
+
{
|
| 862 |
+
"name": "blue_picnic_blanket",
|
| 863 |
+
"is_person": false,
|
| 864 |
+
"ref_style": "flatlay_topdown",
|
| 865 |
+
"sub_caption": "blue picnic blanket spread across the lower center with folded corners",
|
| 866 |
+
"intended_bbox": [
|
| 867 |
+
0.24,
|
| 868 |
+
0.62,
|
| 869 |
+
0.78,
|
| 870 |
+
0.93
|
| 871 |
+
],
|
| 872 |
+
"measured_bbox": [
|
| 873 |
+
0.232,
|
| 874 |
+
0.6212,
|
| 875 |
+
0.7977,
|
| 876 |
+
0.9365
|
| 877 |
+
],
|
| 878 |
+
"iou_intended_vs_measured": 0.9315,
|
| 879 |
+
"layout_followed": true,
|
| 880 |
+
"identity_score": 0.94,
|
| 881 |
+
"identity_verdict": "match",
|
| 882 |
+
"ref_image": "references/ref_blue_picnic_blanket.png"
|
| 883 |
+
},
|
| 884 |
+
{
|
| 885 |
+
"name": "acoustic_guitar",
|
| 886 |
+
"is_person": false,
|
| 887 |
+
"ref_style": "studio_product",
|
| 888 |
+
"sub_caption": "warm brown acoustic guitar resting partly on the blanket",
|
| 889 |
+
"intended_bbox": [
|
| 890 |
+
0.39,
|
| 891 |
+
0.45,
|
| 892 |
+
0.65,
|
| 893 |
+
0.73
|
| 894 |
+
],
|
| 895 |
+
"measured_bbox": [
|
| 896 |
+
0.3941,
|
| 897 |
+
0.4475,
|
| 898 |
+
0.6534,
|
| 899 |
+
0.7264
|
| 900 |
+
],
|
| 901 |
+
"iou_intended_vs_measured": 0.9508,
|
| 902 |
+
"layout_followed": true,
|
| 903 |
+
"identity_score": 0.926,
|
| 904 |
+
"identity_verdict": "match",
|
| 905 |
+
"ref_image": "references/ref_acoustic_guitar.png"
|
| 906 |
+
},
|
| 907 |
+
{
|
| 908 |
+
"name": "snack_basket",
|
| 909 |
+
"is_person": false,
|
| 910 |
+
"ref_style": "in_context_natural",
|
| 911 |
+
"sub_caption": "small woven snack basket with rounded sides near the right edge of the blanket",
|
| 912 |
+
"intended_bbox": [
|
| 913 |
+
0.68,
|
| 914 |
+
0.56,
|
| 915 |
+
0.91,
|
| 916 |
+
0.77
|
| 917 |
+
],
|
| 918 |
+
"measured_bbox": [
|
| 919 |
+
0.6733,
|
| 920 |
+
0.5531,
|
| 921 |
+
0.9086,
|
| 922 |
+
0.77
|
| 923 |
+
],
|
| 924 |
+
"iou_intended_vs_measured": 0.9352,
|
| 925 |
+
"layout_followed": true,
|
| 926 |
+
"identity_score": 0.882,
|
| 927 |
+
"identity_verdict": "match",
|
| 928 |
+
"ref_image": "references/ref_snack_basket.png"
|
| 929 |
+
}
|
| 930 |
+
],
|
| 931 |
+
"dropped": []
|
| 932 |
+
},
|
| 933 |
+
{
|
| 934 |
+
"sample_id": "sample_0008",
|
| 935 |
+
"scene_caption": "A small rehearsal room shows a singer and keyboard player surrounded by a red guitar, black speaker, and yellow notebook.",
|
| 936 |
+
"story": "The group is between takes, listening for the next cue. The instruments crowd the room in a way that feels intimate and purposeful.",
|
| 937 |
+
"background": "Cozy music practice room, dark acoustic wall panels, amber lamps, polished floor.",
|
| 938 |
+
"style": "photorealistic",
|
| 939 |
+
"canvas_size": [
|
| 940 |
+
1024,
|
| 941 |
+
1024
|
| 942 |
+
],
|
| 943 |
+
"main_image": "main_image.png",
|
| 944 |
+
"layout_sketch": "layout_sketch.png",
|
| 945 |
+
"n_planned": 5,
|
| 946 |
+
"n_accepted": 5,
|
| 947 |
+
"accepted": [
|
| 948 |
+
{
|
| 949 |
+
"name": "singer_green_shirt",
|
| 950 |
+
"is_person": true,
|
| 951 |
+
"ref_style": "professional_portrait",
|
| 952 |
+
"sub_caption": "adult with short brown hair, light skin, green shirt, standing near a microphone",
|
| 953 |
+
"intended_bbox": [
|
| 954 |
+
0.14,
|
| 955 |
+
0.16,
|
| 956 |
+
0.38,
|
| 957 |
+
0.87
|
| 958 |
+
],
|
| 959 |
+
"measured_bbox": [
|
| 960 |
+
0.1352,
|
| 961 |
+
0.1645,
|
| 962 |
+
0.3847,
|
| 963 |
+
0.8905
|
| 964 |
+
],
|
| 965 |
+
"iou_intended_vs_measured": 0.9292,
|
| 966 |
+
"layout_followed": true,
|
| 967 |
+
"identity_score": 0.95,
|
| 968 |
+
"identity_verdict": "match",
|
| 969 |
+
"ref_image": "references/ref_singer_green_shirt.png"
|
| 970 |
+
},
|
| 971 |
+
{
|
| 972 |
+
"name": "keyboard_player_black_vest",
|
| 973 |
+
"is_person": true,
|
| 974 |
+
"ref_style": "everyday_candid",
|
| 975 |
+
"sub_caption": "adult with long curly hair, medium brown skin, black vest, leaning toward keys",
|
| 976 |
+
"intended_bbox": [
|
| 977 |
+
0.57,
|
| 978 |
+
0.22,
|
| 979 |
+
0.85,
|
| 980 |
+
0.89
|
| 981 |
+
],
|
| 982 |
+
"measured_bbox": [
|
| 983 |
+
0.5645,
|
| 984 |
+
0.2239,
|
| 985 |
+
0.8454,
|
| 986 |
+
0.8712
|
| 987 |
+
],
|
| 988 |
+
"iou_intended_vs_measured": 0.9326,
|
| 989 |
+
"layout_followed": true,
|
| 990 |
+
"identity_score": 0.877,
|
| 991 |
+
"identity_verdict": "match",
|
| 992 |
+
"ref_image": "references/ref_keyboard_player_black_vest.png"
|
| 993 |
+
},
|
| 994 |
+
{
|
| 995 |
+
"name": "red_electric_guitar",
|
| 996 |
+
"is_person": false,
|
| 997 |
+
"ref_style": "studio_product",
|
| 998 |
+
"sub_caption": "red electric guitar on a stand crossing the lower middle of the room",
|
| 999 |
+
"intended_bbox": [
|
| 1000 |
+
0.35,
|
| 1001 |
+
0.42,
|
| 1002 |
+
0.6,
|
| 1003 |
+
0.77
|
| 1004 |
+
],
|
| 1005 |
+
"measured_bbox": [
|
| 1006 |
+
0.3476,
|
| 1007 |
+
0.4258,
|
| 1008 |
+
0.6017,
|
| 1009 |
+
0.7731
|
| 1010 |
+
],
|
| 1011 |
+
"iou_intended_vs_measured": 0.9593,
|
| 1012 |
+
"layout_followed": true,
|
| 1013 |
+
"identity_score": 0.826,
|
| 1014 |
+
"identity_verdict": "match",
|
| 1015 |
+
"ref_image": "references/ref_red_electric_guitar.png"
|
| 1016 |
+
},
|
| 1017 |
+
{
|
| 1018 |
+
"name": "black_speaker_cabinet",
|
| 1019 |
+
"is_person": false,
|
| 1020 |
+
"ref_style": "closeup_macro",
|
| 1021 |
+
"sub_caption": "black rectangular speaker cabinet near the back left wall",
|
| 1022 |
+
"intended_bbox": [
|
| 1023 |
+
0.05,
|
| 1024 |
+
0.49,
|
| 1025 |
+
0.24,
|
| 1026 |
+
0.78
|
| 1027 |
+
],
|
| 1028 |
+
"measured_bbox": [
|
| 1029 |
+
0.0521,
|
| 1030 |
+
0.4819,
|
| 1031 |
+
0.2429,
|
| 1032 |
+
0.7823
|
| 1033 |
+
],
|
| 1034 |
+
"iou_intended_vs_measured": 0.9407,
|
| 1035 |
+
"layout_followed": true,
|
| 1036 |
+
"identity_score": 0.9,
|
| 1037 |
+
"identity_verdict": "match",
|
| 1038 |
+
"ref_image": "references/ref_black_speaker_cabinet.png"
|
| 1039 |
+
},
|
| 1040 |
+
{
|
| 1041 |
+
"name": "yellow_notebook",
|
| 1042 |
+
"is_person": false,
|
| 1043 |
+
"ref_style": "flatlay_topdown",
|
| 1044 |
+
"sub_caption": "yellow spiral notebook lying open on the floor near the front",
|
| 1045 |
+
"intended_bbox": [
|
| 1046 |
+
0.58,
|
| 1047 |
+
0.68,
|
| 1048 |
+
0.8,
|
| 1049 |
+
0.84
|
| 1050 |
+
],
|
| 1051 |
+
"measured_bbox": [
|
| 1052 |
+
0.5835,
|
| 1053 |
+
0.6799,
|
| 1054 |
+
0.7969,
|
| 1055 |
+
0.8428
|
| 1056 |
+
],
|
| 1057 |
+
"iou_intended_vs_measured": 0.9532,
|
| 1058 |
+
"layout_followed": true,
|
| 1059 |
+
"identity_score": 0.876,
|
| 1060 |
+
"identity_verdict": "match",
|
| 1061 |
+
"ref_image": "references/ref_yellow_notebook.png"
|
| 1062 |
+
}
|
| 1063 |
+
],
|
| 1064 |
+
"dropped": []
|
| 1065 |
+
},
|
| 1066 |
+
{
|
| 1067 |
+
"sample_id": "sample_0009",
|
| 1068 |
+
"scene_caption": "A clinic waiting room has a nurse guiding a child beside a toy truck, plant pot, and soft blue chair.",
|
| 1069 |
+
"story": "The visit is nearly over, and the nurse is making the child comfortable. The toys and bright chair soften the clinical setting.",
|
| 1070 |
+
"background": "Modern clinic waiting area, pale walls, clean floor, soft daylight.",
|
| 1071 |
+
"style": "photorealistic",
|
| 1072 |
+
"canvas_size": [
|
| 1073 |
+
1024,
|
| 1074 |
+
1024
|
| 1075 |
+
],
|
| 1076 |
+
"main_image": "main_image.png",
|
| 1077 |
+
"layout_sketch": "layout_sketch.png",
|
| 1078 |
+
"n_planned": 5,
|
| 1079 |
+
"n_accepted": 5,
|
| 1080 |
+
"accepted": [
|
| 1081 |
+
{
|
| 1082 |
+
"name": "nurse_blue_scrubs",
|
| 1083 |
+
"is_person": true,
|
| 1084 |
+
"ref_style": "id_headshot",
|
| 1085 |
+
"sub_caption": "adult with dark braided hair, brown skin, blue scrubs, kneeling with one hand extended",
|
| 1086 |
+
"intended_bbox": [
|
| 1087 |
+
0.1,
|
| 1088 |
+
0.19,
|
| 1089 |
+
0.38,
|
| 1090 |
+
0.88
|
| 1091 |
+
],
|
| 1092 |
+
"measured_bbox": [
|
| 1093 |
+
0.0946,
|
| 1094 |
+
0.192,
|
| 1095 |
+
0.3879,
|
| 1096 |
+
0.8908
|
| 1097 |
+
],
|
| 1098 |
+
"iou_intended_vs_measured": 0.9373,
|
| 1099 |
+
"layout_followed": true,
|
| 1100 |
+
"identity_score": 0.881,
|
| 1101 |
+
"identity_verdict": "match",
|
| 1102 |
+
"ref_image": "references/ref_nurse_blue_scrubs.png"
|
| 1103 |
+
},
|
| 1104 |
+
{
|
| 1105 |
+
"name": "child_red_sneakers",
|
| 1106 |
+
"is_person": true,
|
| 1107 |
+
"ref_style": "everyday_candid",
|
| 1108 |
+
"sub_caption": "child with short sandy hair, fair skin, striped sweater, red sneakers, standing shyly",
|
| 1109 |
+
"intended_bbox": [
|
| 1110 |
+
0.45,
|
| 1111 |
+
0.29,
|
| 1112 |
+
0.64,
|
| 1113 |
+
0.84
|
| 1114 |
+
],
|
| 1115 |
+
"measured_bbox": [
|
| 1116 |
+
0.4516,
|
| 1117 |
+
0.2886,
|
| 1118 |
+
0.6451,
|
| 1119 |
+
0.8329
|
| 1120 |
+
],
|
| 1121 |
+
"iou_intended_vs_measured": 0.9511,
|
| 1122 |
+
"layout_followed": true,
|
| 1123 |
+
"identity_score": 0.956,
|
| 1124 |
+
"identity_verdict": "match",
|
| 1125 |
+
"ref_image": "references/ref_child_red_sneakers.png"
|
| 1126 |
+
},
|
| 1127 |
+
{
|
| 1128 |
+
"name": "wooden_toy_truck",
|
| 1129 |
+
"is_person": false,
|
| 1130 |
+
"ref_style": "studio_product",
|
| 1131 |
+
"sub_caption": "small wooden toy truck on the floor between nurse and child",
|
| 1132 |
+
"intended_bbox": [
|
| 1133 |
+
0.34,
|
| 1134 |
+
0.68,
|
| 1135 |
+
0.55,
|
| 1136 |
+
0.83
|
| 1137 |
+
],
|
| 1138 |
+
"measured_bbox": [
|
| 1139 |
+
0.3445,
|
| 1140 |
+
0.6763,
|
| 1141 |
+
0.55,
|
| 1142 |
+
0.8315
|
| 1143 |
+
],
|
| 1144 |
+
"iou_intended_vs_measured": 0.9465,
|
| 1145 |
+
"layout_followed": true,
|
| 1146 |
+
"identity_score": 0.892,
|
| 1147 |
+
"identity_verdict": "match",
|
| 1148 |
+
"ref_image": "references/ref_wooden_toy_truck.png"
|
| 1149 |
+
},
|
| 1150 |
+
{
|
| 1151 |
+
"name": "blue_waiting_chair",
|
| 1152 |
+
"is_person": false,
|
| 1153 |
+
"ref_style": "in_context_natural",
|
| 1154 |
+
"sub_caption": "soft blue waiting chair angled on the right side",
|
| 1155 |
+
"intended_bbox": [
|
| 1156 |
+
0.66,
|
| 1157 |
+
0.41,
|
| 1158 |
+
0.92,
|
| 1159 |
+
0.81
|
| 1160 |
+
],
|
| 1161 |
+
"measured_bbox": [
|
| 1162 |
+
0.6565,
|
| 1163 |
+
0.4083,
|
| 1164 |
+
0.9209,
|
| 1165 |
+
0.817
|
| 1166 |
+
],
|
| 1167 |
+
"iou_intended_vs_measured": 0.9624,
|
| 1168 |
+
"layout_followed": true,
|
| 1169 |
+
"identity_score": 0.839,
|
| 1170 |
+
"identity_verdict": "match",
|
| 1171 |
+
"ref_image": "references/ref_blue_waiting_chair.png"
|
| 1172 |
+
},
|
| 1173 |
+
{
|
| 1174 |
+
"name": "white_plant_pot",
|
| 1175 |
+
"is_person": false,
|
| 1176 |
+
"ref_style": "closeup_macro",
|
| 1177 |
+
"sub_caption": "white plant pot with broad green leaves near the window",
|
| 1178 |
+
"intended_bbox": [
|
| 1179 |
+
0.75,
|
| 1180 |
+
0.14,
|
| 1181 |
+
0.93,
|
| 1182 |
+
0.43
|
| 1183 |
+
],
|
| 1184 |
+
"measured_bbox": [
|
| 1185 |
+
0.7535,
|
| 1186 |
+
0.1299,
|
| 1187 |
+
0.9315,
|
| 1188 |
+
0.4298
|
| 1189 |
+
],
|
| 1190 |
+
"iou_intended_vs_measured": 0.9397,
|
| 1191 |
+
"layout_followed": true,
|
| 1192 |
+
"identity_score": 0.913,
|
| 1193 |
+
"identity_verdict": "match",
|
| 1194 |
+
"ref_image": "references/ref_white_plant_pot.png"
|
| 1195 |
+
}
|
| 1196 |
+
],
|
| 1197 |
+
"dropped": []
|
| 1198 |
+
},
|
| 1199 |
+
{
|
| 1200 |
+
"sample_id": "sample_0010",
|
| 1201 |
+
"scene_caption": "A pottery studio class captures an instructor helping a student shape clay near a spinning wheel, blue vase, and sponge tray.",
|
| 1202 |
+
"story": "Wet clay is on the table and the lesson is hands-on. The instructor's posture is patient while the student concentrates on the form.",
|
| 1203 |
+
"background": "Warm pottery studio with shelves of clay vessels, dusty table, late daylight.",
|
| 1204 |
+
"style": "photorealistic",
|
| 1205 |
+
"canvas_size": [
|
| 1206 |
+
1024,
|
| 1207 |
+
1024
|
| 1208 |
+
],
|
| 1209 |
+
"main_image": "main_image.png",
|
| 1210 |
+
"layout_sketch": "layout_sketch.png",
|
| 1211 |
+
"n_planned": 5,
|
| 1212 |
+
"n_accepted": 5,
|
| 1213 |
+
"accepted": [
|
| 1214 |
+
{
|
| 1215 |
+
"name": "instructor_black_apron",
|
| 1216 |
+
"is_person": true,
|
| 1217 |
+
"ref_style": "professional_portrait",
|
| 1218 |
+
"sub_caption": "older adult with close-cropped gray hair, dark brown skin, black apron, guiding hands calmly",
|
| 1219 |
+
"intended_bbox": [
|
| 1220 |
+
0.09,
|
| 1221 |
+
0.2,
|
| 1222 |
+
0.37,
|
| 1223 |
+
0.89
|
| 1224 |
+
],
|
| 1225 |
+
"measured_bbox": [
|
| 1226 |
+
0.091,
|
| 1227 |
+
0.1843,
|
| 1228 |
+
0.3682,
|
| 1229 |
+
0.9023
|
| 1230 |
+
],
|
| 1231 |
+
"iou_intended_vs_measured": 0.9518,
|
| 1232 |
+
"layout_followed": true,
|
| 1233 |
+
"identity_score": 0.863,
|
| 1234 |
+
"identity_verdict": "match",
|
| 1235 |
+
"ref_image": "references/ref_instructor_black_apron.png"
|
| 1236 |
+
},
|
| 1237 |
+
{
|
| 1238 |
+
"name": "student_teal_smock",
|
| 1239 |
+
"is_person": true,
|
| 1240 |
+
"ref_style": "mirror_selfie",
|
| 1241 |
+
"sub_caption": "young adult with red curls, fair skin, teal smock, leaning over the clay with focus",
|
| 1242 |
+
"intended_bbox": [
|
| 1243 |
+
0.48,
|
| 1244 |
+
0.24,
|
| 1245 |
+
0.76,
|
| 1246 |
+
0.89
|
| 1247 |
+
],
|
| 1248 |
+
"measured_bbox": [
|
| 1249 |
+
0.4833,
|
| 1250 |
+
0.2517,
|
| 1251 |
+
0.7599,
|
| 1252 |
+
0.8821
|
| 1253 |
+
],
|
| 1254 |
+
"iou_intended_vs_measured": 0.9581,
|
| 1255 |
+
"layout_followed": true,
|
| 1256 |
+
"identity_score": 0.874,
|
| 1257 |
+
"identity_verdict": "match",
|
| 1258 |
+
"ref_image": "references/ref_student_teal_smock.png"
|
| 1259 |
+
},
|
| 1260 |
+
{
|
| 1261 |
+
"name": "gray_pottery_wheel",
|
| 1262 |
+
"is_person": false,
|
| 1263 |
+
"ref_style": "in_context_natural",
|
| 1264 |
+
"sub_caption": "round gray pottery wheel holding a wet clay form at the table center",
|
| 1265 |
+
"intended_bbox": [
|
| 1266 |
+
0.31,
|
| 1267 |
+
0.55,
|
| 1268 |
+
0.57,
|
| 1269 |
+
0.8
|
| 1270 |
+
],
|
| 1271 |
+
"measured_bbox": [
|
| 1272 |
+
0.3064,
|
| 1273 |
+
0.5496,
|
| 1274 |
+
0.5697,
|
| 1275 |
+
0.8079
|
| 1276 |
+
],
|
| 1277 |
+
"iou_intended_vs_measured": 0.9536,
|
| 1278 |
+
"layout_followed": true,
|
| 1279 |
+
"identity_score": 0.91,
|
| 1280 |
+
"identity_verdict": "match",
|
| 1281 |
+
"ref_image": "references/ref_gray_pottery_wheel.png"
|
| 1282 |
+
},
|
| 1283 |
+
{
|
| 1284 |
+
"name": "blue_glazed_vase",
|
| 1285 |
+
"is_person": false,
|
| 1286 |
+
"ref_style": "studio_product",
|
| 1287 |
+
"sub_caption": "blue glazed vase on the rear shelf catching a bright highlight",
|
| 1288 |
+
"intended_bbox": [
|
| 1289 |
+
0.68,
|
| 1290 |
+
0.33,
|
| 1291 |
+
0.85,
|
| 1292 |
+
0.62
|
| 1293 |
+
],
|
| 1294 |
+
"measured_bbox": [
|
| 1295 |
+
0.6791,
|
| 1296 |
+
0.3303,
|
| 1297 |
+
0.8459,
|
| 1298 |
+
0.6294
|
| 1299 |
+
],
|
| 1300 |
+
"iou_intended_vs_measured": 0.94,
|
| 1301 |
+
"layout_followed": true,
|
| 1302 |
+
"identity_score": 0.916,
|
| 1303 |
+
"identity_verdict": "match",
|
| 1304 |
+
"ref_image": "references/ref_blue_glazed_vase.png"
|
| 1305 |
+
},
|
| 1306 |
+
{
|
| 1307 |
+
"name": "yellow_sponge_tray",
|
| 1308 |
+
"is_person": false,
|
| 1309 |
+
"ref_style": "flatlay_topdown",
|
| 1310 |
+
"sub_caption": "yellow sponge tray with damp tools beside the pottery wheel",
|
| 1311 |
+
"intended_bbox": [
|
| 1312 |
+
0.55,
|
| 1313 |
+
0.63,
|
| 1314 |
+
0.79,
|
| 1315 |
+
0.82
|
| 1316 |
+
],
|
| 1317 |
+
"measured_bbox": [
|
| 1318 |
+
0.552,
|
| 1319 |
+
0.6248,
|
| 1320 |
+
0.7908,
|
| 1321 |
+
0.8235
|
| 1322 |
+
],
|
| 1323 |
+
"iou_intended_vs_measured": 0.9454,
|
| 1324 |
+
"layout_followed": true,
|
| 1325 |
+
"identity_score": 0.899,
|
| 1326 |
+
"identity_verdict": "match",
|
| 1327 |
+
"ref_image": "references/ref_yellow_sponge_tray.png"
|
| 1328 |
+
}
|
| 1329 |
+
],
|
| 1330 |
+
"dropped": []
|
| 1331 |
+
}
|
| 1332 |
+
]
|
10samples/dataset.jsonl
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{"sample_id":"sample_0001","scene_caption":"A rainy market stall bustles as a vendor steadies a display while a shopper reaches for fruit under a green umbrella.","story":"The rain has just eased, and the stall is busy again. A quick exchange between vendor and shopper gives the scene a focused, everyday energy.","background":"Covered outdoor produce market, damp stone floor, warm awning light, late afternoon.","style":"photorealistic","canvas_size":[1024,1024],"main_image":"main_image.png","layout_sketch":"layout_sketch.png","n_planned":5,"n_accepted":5,"accepted":[{"name":"vendor_in_apron","is_person":true,"ref_style":"everyday_candid","sub_caption":"middle-aged person with short dark hair, tan skin, blue apron, leaning forward with a concentrated expression","intended_bbox":[0.08,0.24,0.31,0.83],"measured_bbox":[0.0788,0.2404,0.3168,0.8162],"iou_intended_vs_measured":0.9439,"layout_followed":true,"identity_score":0.906,"identity_verdict":"match","ref_image":"references/ref_vendor_in_apron.png"},{"name":"shopper_red_coat","is_person":true,"ref_style":"professional_portrait","sub_caption":"older shopper with silver hair, warm brown skin, red raincoat, arm extended toward the fruit","intended_bbox":[0.26,0.22,0.5,0.88],"measured_bbox":[0.2662,0.2234,0.5018,0.8849],"iou_intended_vs_measured":0.9551,"layout_followed":true,"identity_score":0.851,"identity_verdict":"match","ref_image":"references/ref_shopper_red_coat.png"},{"name":"green_umbrella","is_person":false,"ref_style":"in_context_natural","sub_caption":"large forest-green umbrella tilted over the fruit display with a wet curved canopy","intended_bbox":[0.37,0.04,0.82,0.46],"measured_bbox":[0.3715,0.0493,0.8071,0.4639],"iou_intended_vs_measured":0.9381,"layout_followed":true,"identity_score":0.845,"identity_verdict":"match","ref_image":"references/ref_green_umbrella.png"},{"name":"orange_stack","is_person":false,"ref_style":"closeup_macro","sub_caption":"bright oranges stacked in a low crate near the center foreground","intended_bbox":[0.44,0.49,0.71,0.75],"measured_bbox":[0.4378,0.4895,0.7174,0.7537],"iou_intended_vs_measured":0.9503,"layout_followed":true,"identity_score":0.857,"identity_verdict":"match","ref_image":"references/ref_orange_stack.png"},{"name":"woven_basket","is_person":false,"ref_style":"studio_product","sub_caption":"wide woven basket partly tucked beneath the fruit display","intended_bbox":[0.61,0.62,0.88,0.87],"measured_bbox":[0.6038,0.6257,0.8791,0.8689],"iou_intended_vs_measured":0.9484,"layout_followed":true,"identity_score":0.823,"identity_verdict":"match","ref_image":"references/ref_woven_basket.png"}],"dropped":[]}
|
| 2 |
+
{"sample_id":"sample_0002","scene_caption":"A family breakfast table is mid-preparation as two people arrange food around a ceramic mug and a stack of books.","story":"The morning is calm but active. One person is setting the table while another pauses with a small smile before sitting down.","background":"Bright home kitchen with pale tile, wood table, diffuse window light.","style":"photorealistic","canvas_size":[1024,1024],"main_image":"main_image.png","layout_sketch":"layout_sketch.png","n_planned":5,"n_accepted":5,"accepted":[{"name":"person_yellow_sweater","is_person":true,"ref_style":"mirror_selfie","sub_caption":"young adult with curly black hair, medium brown skin, yellow sweater, holding a plate near the table","intended_bbox":[0.11,0.18,0.37,0.82],"measured_bbox":[0.109,0.1736,0.379,0.8243],"iou_intended_vs_measured":0.9471,"layout_followed":true,"identity_score":0.896,"identity_verdict":"match","ref_image":"references/ref_person_yellow_sweater.png"},{"name":"person_green_cardigan","is_person":true,"ref_style":"id_headshot","sub_caption":"adult with straight auburn bob, fair skin, green cardigan, seated and smiling softly","intended_bbox":[0.55,0.25,0.82,0.87],"measured_bbox":[0.5576,0.2432,0.8204,0.8891],"iou_intended_vs_measured":0.9326,"layout_followed":true,"identity_score":0.9,"identity_verdict":"match","ref_image":"references/ref_person_green_cardigan.png"},{"name":"blue_ceramic_mug","is_person":false,"ref_style":"studio_product","sub_caption":"glossy cobalt-blue ceramic mug close to the front edge of the table","intended_bbox":[0.35,0.58,0.51,0.78],"measured_bbox":[0.3517,0.5811,0.5138,0.7817],"iou_intended_vs_measured":0.9532,"layout_followed":true,"identity_score":0.853,"identity_verdict":"match","ref_image":"references/ref_blue_ceramic_mug.png"},{"name":"berry_bowl","is_person":false,"ref_style":"flatlay_topdown","sub_caption":"small bowl heaped with red berries between the two people","intended_bbox":[0.45,0.48,0.63,0.66],"measured_bbox":[0.453,0.4836,0.6281,0.6591],"iou_intended_vs_measured":0.9485,"layout_followed":true,"identity_score":0.911,"identity_verdict":"match","ref_image":"references/ref_berry_bowl.png"},{"name":"cookbook_stack","is_person":false,"ref_style":"shelf_in_store","sub_caption":"short stack of cookbooks with teal and cream covers near the back of the table","intended_bbox":[0.18,0.46,0.39,0.62],"measured_bbox":[0.1775,0.4574,0.3931,0.6201],"iou_intended_vs_measured":0.9579,"layout_followed":true,"identity_score":0.932,"identity_verdict":"match","ref_image":"references/ref_cookbook_stack.png"}],"dropped":[]}
|
| 3 |
+
{"sample_id":"sample_0003","scene_caption":"In a repair workshop, a mechanic and an assistant coordinate around a bicycle frame, tool crate, and yellow lamp.","story":"The team is close to solving the repair. Their body language shows concentration as tools and parts crowd the bench.","background":"Dim bicycle workshop, pegboard walls, worn wooden bench, focused task lighting.","style":"photorealistic","canvas_size":[1024,1024],"main_image":"main_image.png","layout_sketch":"layout_sketch.png","n_planned":5,"n_accepted":5,"accepted":[{"name":"mechanic_gray_overalls","is_person":true,"ref_style":"professional_portrait","sub_caption":"stocky adult with shaved head, deep brown skin, gray overalls, crouched toward the bicycle","intended_bbox":[0.07,0.24,0.34,0.91],"measured_bbox":[0.07,0.2273,0.3444,0.9182],"iou_intended_vs_measured":0.9542,"layout_followed":true,"identity_score":0.953,"identity_verdict":"match","ref_image":"references/ref_mechanic_gray_overalls.png"},{"name":"assistant_plaid_shirt","is_person":true,"ref_style":"everyday_candid","sub_caption":"slim adult with wavy blond hair, fair skin, red plaid shirt, holding a small wrench","intended_bbox":[0.68,0.19,0.91,0.84],"measured_bbox":[0.6793,0.1906,0.916,0.8364],"iou_intended_vs_measured":0.9656,"layout_followed":true,"identity_score":0.831,"identity_verdict":"match","ref_image":"references/ref_assistant_plaid_shirt.png"},{"name":"teal_bicycle_frame","is_person":false,"ref_style":"in_context_natural","sub_caption":"teal bicycle frame angled across the lower center with both wheels visible","intended_bbox":[0.29,0.49,0.76,0.88],"measured_bbox":[0.2928,0.4899,0.7605,0.8716],"iou_intended_vs_measured":0.9714,"layout_followed":true,"identity_score":0.856,"identity_verdict":"match","ref_image":"references/ref_teal_bicycle_frame.png"},{"name":"red_tool_crate","is_person":false,"ref_style":"studio_product","sub_caption":"red metal tool crate on the workbench with compartment ridges","intended_bbox":[0.31,0.38,0.54,0.57],"measured_bbox":[0.3083,0.3735,0.5342,0.5699],"iou_intended_vs_measured":0.9359,"layout_followed":true,"identity_score":0.856,"identity_verdict":"match","ref_image":"references/ref_red_tool_crate.png"},{"name":"yellow_task_lamp","is_person":false,"ref_style":"closeup_macro","sub_caption":"small yellow task lamp casting light from the rear left of the bench","intended_bbox":[0.1,0.06,0.3,0.38],"measured_bbox":[0.1014,0.0643,0.2944,0.3854],"iou_intended_vs_measured":0.9368,"layout_followed":true,"identity_score":0.903,"identity_verdict":"match","ref_image":"references/ref_yellow_task_lamp.png"}],"dropped":[]}
|
| 4 |
+
{"sample_id":"sample_0004","scene_caption":"A quiet library study table holds a focused pair of readers, a green desk lamp, a book stack, and a terracotta plant pot.","story":"The moment is hushed and intent. One reader marks a page while the other leans in to compare notes.","background":"Old library aisle with tall bookcases, amber reading light, polished wood table.","style":"photorealistic","canvas_size":[1024,1024],"main_image":"main_image.png","layout_sketch":"layout_sketch.png","n_planned":5,"n_accepted":5,"accepted":[{"name":"reader_blue_jacket","is_person":true,"ref_style":"id_headshot","sub_caption":"adult with short coiled hair, dark brown skin, blue jacket, leaning over an open page","intended_bbox":[0.14,0.2,0.4,0.83],"measured_bbox":[0.1326,0.1856,0.4031,0.8443],"iou_intended_vs_measured":0.9193,"layout_followed":true,"identity_score":0.946,"identity_verdict":"match","ref_image":"references/ref_reader_blue_jacket.png"},{"name":"reader_pink_scarf","is_person":true,"ref_style":"professional_portrait","sub_caption":"older adult with long gray hair, light olive skin, pink scarf, seated with a pencil in hand","intended_bbox":[0.48,0.22,0.75,0.86],"measured_bbox":[0.4868,0.2174,0.7476,0.8682],"iou_intended_vs_measured":0.9504,"layout_followed":true,"identity_score":0.923,"identity_verdict":"match","ref_image":"references/ref_reader_pink_scarf.png"},{"name":"green_desk_lamp","is_person":false,"ref_style":"studio_product","sub_caption":"green banker-style desk lamp glowing over the center of the table","intended_bbox":[0.35,0.4,0.57,0.66],"measured_bbox":[0.3455,0.4029,0.5734,0.6584],"iou_intended_vs_measured":0.9492,"layout_followed":true,"identity_score":0.852,"identity_verdict":"match","ref_image":"references/ref_green_desk_lamp.png"},{"name":"navy_book_stack","is_person":false,"ref_style":"flatlay_topdown","sub_caption":"stack of navy and ochre books near the front right corner","intended_bbox":[0.61,0.58,0.86,0.77],"measured_bbox":[0.6101,0.5787,0.8535,0.7764],"iou_intended_vs_measured":0.9366,"layout_followed":true,"identity_score":0.918,"identity_verdict":"match","ref_image":"references/ref_navy_book_stack.png"},{"name":"terracotta_plant","is_person":false,"ref_style":"in_context_natural","sub_caption":"small terracotta plant pot with green leaves beside the books","intended_bbox":[0.75,0.42,0.92,0.66],"measured_bbox":[0.7476,0.423,0.9172,0.6642],"iou_intended_vs_measured":0.9417,"layout_followed":true,"identity_score":0.898,"identity_verdict":"match","ref_image":"references/ref_terracotta_plant.png"}],"dropped":[]}
|
| 5 |
+
{"sample_id":"sample_0005","scene_caption":"A greenhouse volunteer and visitor examine seedlings around a watering can, clay pot, and striped fabric bundle.","story":"The air is humid and bright after watering. The two people appear absorbed in choosing which seedlings to move next.","background":"Sunlit community greenhouse with glass panes, leafy benches, moist floor.","style":"photorealistic","canvas_size":[1024,1024],"main_image":"main_image.png","layout_sketch":"layout_sketch.png","n_planned":5,"n_accepted":5,"accepted":[{"name":"volunteer_orange_vest","is_person":true,"ref_style":"everyday_candid","sub_caption":"adult with cropped black hair, medium tan skin, orange vest, kneeling with careful hands","intended_bbox":[0.08,0.27,0.35,0.9],"measured_bbox":[0.0776,0.2532,0.3497,0.9121],"iou_intended_vs_measured":0.9467,"layout_followed":true,"identity_score":0.83,"identity_verdict":"match","ref_image":"references/ref_volunteer_orange_vest.png"},{"name":"visitor_denim_jacket","is_person":true,"ref_style":"mirror_selfie","sub_caption":"young adult with long dark hair, light brown skin, denim jacket, bending forward curiously","intended_bbox":[0.58,0.18,0.84,0.83],"measured_bbox":[0.5856,0.173,0.8433,0.8354],"iou_intended_vs_measured":0.9485,"layout_followed":true,"identity_score":0.829,"identity_verdict":"match","ref_image":"references/ref_visitor_denim_jacket.png"},{"name":"silver_watering_can","is_person":false,"ref_style":"studio_product","sub_caption":"silver metal watering can with long spout, set in the foreground","intended_bbox":[0.33,0.58,0.57,0.81],"measured_bbox":[0.327,0.5786,0.5687,0.8107],"iou_intended_vs_measured":0.9735,"layout_followed":true,"identity_score":0.855,"identity_verdict":"match","ref_image":"references/ref_silver_watering_can.png"},{"name":"clay_seedling_pot","is_person":false,"ref_style":"closeup_macro","sub_caption":"round clay pot with several vivid green seedling leaves","intended_bbox":[0.48,0.43,0.66,0.66],"measured_bbox":[0.48,0.4305,0.66,0.6553],"iou_intended_vs_measured":0.9774,"layout_followed":true,"identity_score":0.922,"identity_verdict":"match","ref_image":"references/ref_clay_seedling_pot.png"},{"name":"striped_fabric_bundle","is_person":false,"ref_style":"flatlay_topdown","sub_caption":"folded striped fabric bundle resting on the bench behind the pot","intended_bbox":[0.19,0.48,0.43,0.67],"measured_bbox":[0.1864,0.4796,0.4319,0.6768],"iou_intended_vs_measured":0.9419,"layout_followed":true,"identity_score":0.922,"identity_verdict":"match","ref_image":"references/ref_striped_fabric_bundle.png"}],"dropped":[]}
|
| 6 |
+
{"sample_id":"sample_0006","scene_caption":"A laundromat scene catches two neighbors folding clothes beside a purple basket, detergent bottle, and a small plush dog toy.","story":"The dryers are humming while the neighbors trade a quick laugh. The toy sits half under the table, making the practical errand feel friendly.","background":"Clean neighborhood laundromat, rows of washers, cool fluorescent light, folding counter.","style":"photorealistic","canvas_size":[1024,1024],"main_image":"main_image.png","layout_sketch":"layout_sketch.png","n_planned":5,"n_accepted":5,"accepted":[{"name":"neighbor_teal_hoodie","is_person":true,"ref_style":"professional_portrait","sub_caption":"adult with shaved sides and black curls, brown skin, teal hoodie, folding a towel","intended_bbox":[0.12,0.21,0.38,0.88],"measured_bbox":[0.1172,0.2101,0.3837,0.8704],"iou_intended_vs_measured":0.9618,"layout_followed":true,"identity_score":0.933,"identity_verdict":"match","ref_image":"references/ref_neighbor_teal_hoodie.png"},{"name":"neighbor_lilac_sweater","is_person":true,"ref_style":"id_headshot","sub_caption":"older adult with white bob haircut, fair skin, lilac sweater, smiling toward the counter","intended_bbox":[0.54,0.18,0.8,0.86],"measured_bbox":[0.5395,0.1831,0.8095,0.8781],"iou_intended_vs_measured":0.9339,"layout_followed":true,"identity_score":0.88,"identity_verdict":"match","ref_image":"references/ref_neighbor_lilac_sweater.png"},{"name":"purple_laundry_basket","is_person":false,"ref_style":"in_context_natural","sub_caption":"large purple laundry basket full of pale folded clothes","intended_bbox":[0.32,0.52,0.59,0.78],"measured_bbox":[0.3103,0.5162,0.5902,0.7868],"iou_intended_vs_measured":0.9268,"layout_followed":true,"identity_score":0.892,"identity_verdict":"match","ref_image":"references/ref_purple_laundry_basket.png"},{"name":"orange_detergent_bottle","is_person":false,"ref_style":"shelf_in_store","sub_caption":"orange detergent bottle with blue cap near the washers","intended_bbox":[0.74,0.47,0.88,0.69],"measured_bbox":[0.7379,0.4696,0.878,0.6933],"iou_intended_vs_measured":0.9553,"layout_followed":true,"identity_score":0.931,"identity_verdict":"match","ref_image":"references/ref_orange_detergent_bottle.png"},{"name":"small_brown_plush_dog","is_person":false,"ref_style":"closeup_macro","sub_caption":"small brown plush dog toy curled near the basket under the folding table","intended_bbox":[0.6,0.69,0.86,0.89],"measured_bbox":[0.5979,0.6899,0.8652,0.895],"iou_intended_vs_measured":0.9485,"layout_followed":true,"identity_score":0.893,"identity_verdict":"match","ref_image":"references/ref_small_brown_plush_dog.png"}],"dropped":[]}
|
| 7 |
+
{"sample_id":"sample_0007","scene_caption":"A park picnic unfolds as two friends unpack food around a blue blanket, a guitar, and a woven snack basket.","story":"The friends are settling into an easy afternoon. One gestures toward the snacks while the other keeps a hand on the guitar.","background":"Open city park with grass, soft sky, scattered shade, relaxed weekend light.","style":"photorealistic","canvas_size":[1024,1024],"main_image":"main_image.png","layout_sketch":"layout_sketch.png","n_planned":5,"n_accepted":5,"accepted":[{"name":"friend_white_hat","is_person":true,"ref_style":"mirror_selfie","sub_caption":"young adult with dark skin, white brimmed hat, navy shirt, seated cross-legged","intended_bbox":[0.1,0.32,0.36,0.86],"measured_bbox":[0.0921,0.3161,0.3606,0.86],"iou_intended_vs_measured":0.9614,"layout_followed":true,"identity_score":0.852,"identity_verdict":"match","ref_image":"references/ref_friend_white_hat.png"},{"name":"friend_rust_jacket","is_person":true,"ref_style":"everyday_candid","sub_caption":"adult with straight black hair, warm beige skin, rust jacket, reaching toward the basket","intended_bbox":[0.6,0.28,0.87,0.87],"measured_bbox":[0.607,0.2725,0.871,0.877],"iou_intended_vs_measured":0.9478,"layout_followed":true,"identity_score":0.866,"identity_verdict":"match","ref_image":"references/ref_friend_rust_jacket.png"},{"name":"blue_picnic_blanket","is_person":false,"ref_style":"flatlay_topdown","sub_caption":"blue picnic blanket spread across the lower center with folded corners","intended_bbox":[0.24,0.62,0.78,0.93],"measured_bbox":[0.232,0.6212,0.7977,0.9365],"iou_intended_vs_measured":0.9315,"layout_followed":true,"identity_score":0.94,"identity_verdict":"match","ref_image":"references/ref_blue_picnic_blanket.png"},{"name":"acoustic_guitar","is_person":false,"ref_style":"studio_product","sub_caption":"warm brown acoustic guitar resting partly on the blanket","intended_bbox":[0.39,0.45,0.65,0.73],"measured_bbox":[0.3941,0.4475,0.6534,0.7264],"iou_intended_vs_measured":0.9508,"layout_followed":true,"identity_score":0.926,"identity_verdict":"match","ref_image":"references/ref_acoustic_guitar.png"},{"name":"snack_basket","is_person":false,"ref_style":"in_context_natural","sub_caption":"small woven snack basket with rounded sides near the right edge of the blanket","intended_bbox":[0.68,0.56,0.91,0.77],"measured_bbox":[0.6733,0.5531,0.9086,0.77],"iou_intended_vs_measured":0.9352,"layout_followed":true,"identity_score":0.882,"identity_verdict":"match","ref_image":"references/ref_snack_basket.png"}],"dropped":[]}
|
| 8 |
+
{"sample_id":"sample_0008","scene_caption":"A small rehearsal room shows a singer and keyboard player surrounded by a red guitar, black speaker, and yellow notebook.","story":"The group is between takes, listening for the next cue. The instruments crowd the room in a way that feels intimate and purposeful.","background":"Cozy music practice room, dark acoustic wall panels, amber lamps, polished floor.","style":"photorealistic","canvas_size":[1024,1024],"main_image":"main_image.png","layout_sketch":"layout_sketch.png","n_planned":5,"n_accepted":5,"accepted":[{"name":"singer_green_shirt","is_person":true,"ref_style":"professional_portrait","sub_caption":"adult with short brown hair, light skin, green shirt, standing near a microphone","intended_bbox":[0.14,0.16,0.38,0.87],"measured_bbox":[0.1352,0.1645,0.3847,0.8905],"iou_intended_vs_measured":0.9292,"layout_followed":true,"identity_score":0.95,"identity_verdict":"match","ref_image":"references/ref_singer_green_shirt.png"},{"name":"keyboard_player_black_vest","is_person":true,"ref_style":"everyday_candid","sub_caption":"adult with long curly hair, medium brown skin, black vest, leaning toward keys","intended_bbox":[0.57,0.22,0.85,0.89],"measured_bbox":[0.5645,0.2239,0.8454,0.8712],"iou_intended_vs_measured":0.9326,"layout_followed":true,"identity_score":0.877,"identity_verdict":"match","ref_image":"references/ref_keyboard_player_black_vest.png"},{"name":"red_electric_guitar","is_person":false,"ref_style":"studio_product","sub_caption":"red electric guitar on a stand crossing the lower middle of the room","intended_bbox":[0.35,0.42,0.6,0.77],"measured_bbox":[0.3476,0.4258,0.6017,0.7731],"iou_intended_vs_measured":0.9593,"layout_followed":true,"identity_score":0.826,"identity_verdict":"match","ref_image":"references/ref_red_electric_guitar.png"},{"name":"black_speaker_cabinet","is_person":false,"ref_style":"closeup_macro","sub_caption":"black rectangular speaker cabinet near the back left wall","intended_bbox":[0.05,0.49,0.24,0.78],"measured_bbox":[0.0521,0.4819,0.2429,0.7823],"iou_intended_vs_measured":0.9407,"layout_followed":true,"identity_score":0.9,"identity_verdict":"match","ref_image":"references/ref_black_speaker_cabinet.png"},{"name":"yellow_notebook","is_person":false,"ref_style":"flatlay_topdown","sub_caption":"yellow spiral notebook lying open on the floor near the front","intended_bbox":[0.58,0.68,0.8,0.84],"measured_bbox":[0.5835,0.6799,0.7969,0.8428],"iou_intended_vs_measured":0.9532,"layout_followed":true,"identity_score":0.876,"identity_verdict":"match","ref_image":"references/ref_yellow_notebook.png"}],"dropped":[]}
|
| 9 |
+
{"sample_id":"sample_0009","scene_caption":"A clinic waiting room has a nurse guiding a child beside a toy truck, plant pot, and soft blue chair.","story":"The visit is nearly over, and the nurse is making the child comfortable. The toys and bright chair soften the clinical setting.","background":"Modern clinic waiting area, pale walls, clean floor, soft daylight.","style":"photorealistic","canvas_size":[1024,1024],"main_image":"main_image.png","layout_sketch":"layout_sketch.png","n_planned":5,"n_accepted":5,"accepted":[{"name":"nurse_blue_scrubs","is_person":true,"ref_style":"id_headshot","sub_caption":"adult with dark braided hair, brown skin, blue scrubs, kneeling with one hand extended","intended_bbox":[0.1,0.19,0.38,0.88],"measured_bbox":[0.0946,0.192,0.3879,0.8908],"iou_intended_vs_measured":0.9373,"layout_followed":true,"identity_score":0.881,"identity_verdict":"match","ref_image":"references/ref_nurse_blue_scrubs.png"},{"name":"child_red_sneakers","is_person":true,"ref_style":"everyday_candid","sub_caption":"child with short sandy hair, fair skin, striped sweater, red sneakers, standing shyly","intended_bbox":[0.45,0.29,0.64,0.84],"measured_bbox":[0.4516,0.2886,0.6451,0.8329],"iou_intended_vs_measured":0.9511,"layout_followed":true,"identity_score":0.956,"identity_verdict":"match","ref_image":"references/ref_child_red_sneakers.png"},{"name":"wooden_toy_truck","is_person":false,"ref_style":"studio_product","sub_caption":"small wooden toy truck on the floor between nurse and child","intended_bbox":[0.34,0.68,0.55,0.83],"measured_bbox":[0.3445,0.6763,0.55,0.8315],"iou_intended_vs_measured":0.9465,"layout_followed":true,"identity_score":0.892,"identity_verdict":"match","ref_image":"references/ref_wooden_toy_truck.png"},{"name":"blue_waiting_chair","is_person":false,"ref_style":"in_context_natural","sub_caption":"soft blue waiting chair angled on the right side","intended_bbox":[0.66,0.41,0.92,0.81],"measured_bbox":[0.6565,0.4083,0.9209,0.817],"iou_intended_vs_measured":0.9624,"layout_followed":true,"identity_score":0.839,"identity_verdict":"match","ref_image":"references/ref_blue_waiting_chair.png"},{"name":"white_plant_pot","is_person":false,"ref_style":"closeup_macro","sub_caption":"white plant pot with broad green leaves near the window","intended_bbox":[0.75,0.14,0.93,0.43],"measured_bbox":[0.7535,0.1299,0.9315,0.4298],"iou_intended_vs_measured":0.9397,"layout_followed":true,"identity_score":0.913,"identity_verdict":"match","ref_image":"references/ref_white_plant_pot.png"}],"dropped":[]}
|
| 10 |
+
{"sample_id":"sample_0010","scene_caption":"A pottery studio class captures an instructor helping a student shape clay near a spinning wheel, blue vase, and sponge tray.","story":"Wet clay is on the table and the lesson is hands-on. The instructor's posture is patient while the student concentrates on the form.","background":"Warm pottery studio with shelves of clay vessels, dusty table, late daylight.","style":"photorealistic","canvas_size":[1024,1024],"main_image":"main_image.png","layout_sketch":"layout_sketch.png","n_planned":5,"n_accepted":5,"accepted":[{"name":"instructor_black_apron","is_person":true,"ref_style":"professional_portrait","sub_caption":"older adult with close-cropped gray hair, dark brown skin, black apron, guiding hands calmly","intended_bbox":[0.09,0.2,0.37,0.89],"measured_bbox":[0.091,0.1843,0.3682,0.9023],"iou_intended_vs_measured":0.9518,"layout_followed":true,"identity_score":0.863,"identity_verdict":"match","ref_image":"references/ref_instructor_black_apron.png"},{"name":"student_teal_smock","is_person":true,"ref_style":"mirror_selfie","sub_caption":"young adult with red curls, fair skin, teal smock, leaning over the clay with focus","intended_bbox":[0.48,0.24,0.76,0.89],"measured_bbox":[0.4833,0.2517,0.7599,0.8821],"iou_intended_vs_measured":0.9581,"layout_followed":true,"identity_score":0.874,"identity_verdict":"match","ref_image":"references/ref_student_teal_smock.png"},{"name":"gray_pottery_wheel","is_person":false,"ref_style":"in_context_natural","sub_caption":"round gray pottery wheel holding a wet clay form at the table center","intended_bbox":[0.31,0.55,0.57,0.8],"measured_bbox":[0.3064,0.5496,0.5697,0.8079],"iou_intended_vs_measured":0.9536,"layout_followed":true,"identity_score":0.91,"identity_verdict":"match","ref_image":"references/ref_gray_pottery_wheel.png"},{"name":"blue_glazed_vase","is_person":false,"ref_style":"studio_product","sub_caption":"blue glazed vase on the rear shelf catching a bright highlight","intended_bbox":[0.68,0.33,0.85,0.62],"measured_bbox":[0.6791,0.3303,0.8459,0.6294],"iou_intended_vs_measured":0.94,"layout_followed":true,"identity_score":0.916,"identity_verdict":"match","ref_image":"references/ref_blue_glazed_vase.png"},{"name":"yellow_sponge_tray","is_person":false,"ref_style":"flatlay_topdown","sub_caption":"yellow sponge tray with damp tools beside the pottery wheel","intended_bbox":[0.55,0.63,0.79,0.82],"measured_bbox":[0.552,0.6248,0.7908,0.8235],"iou_intended_vs_measured":0.9454,"layout_followed":true,"identity_score":0.899,"identity_verdict":"match","ref_image":"references/ref_yellow_sponge_tray.png"}],"dropped":[]}
|
10samples/generate_10samples.py
ADDED
|
@@ -0,0 +1,789 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from __future__ import annotations
|
| 2 |
+
|
| 3 |
+
import json
|
| 4 |
+
import math
|
| 5 |
+
import random
|
| 6 |
+
from pathlib import Path
|
| 7 |
+
from typing import Any
|
| 8 |
+
|
| 9 |
+
from PIL import Image, ImageDraw, ImageFilter, ImageFont
|
| 10 |
+
|
| 11 |
+
|
| 12 |
+
CANVAS_SIZE = (1024, 1024)
|
| 13 |
+
OUT_DIR = Path("10samples")
|
| 14 |
+
IDENTITY_THRESHOLD = 0.55
|
| 15 |
+
IOU_THRESHOLD = 0.10
|
| 16 |
+
|
| 17 |
+
|
| 18 |
+
def font(size: int, bold: bool = False) -> ImageFont.ImageFont:
|
| 19 |
+
candidates = [
|
| 20 |
+
"/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf" if bold else "/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf",
|
| 21 |
+
"/usr/share/fonts/dejavu/DejaVuSans-Bold.ttf" if bold else "/usr/share/fonts/dejavu/DejaVuSans.ttf",
|
| 22 |
+
]
|
| 23 |
+
for path in candidates:
|
| 24 |
+
try:
|
| 25 |
+
return ImageFont.truetype(path, size)
|
| 26 |
+
except OSError:
|
| 27 |
+
pass
|
| 28 |
+
return ImageFont.load_default()
|
| 29 |
+
|
| 30 |
+
|
| 31 |
+
FONT_18 = font(18)
|
| 32 |
+
FONT_24 = font(24)
|
| 33 |
+
FONT_32 = font(32, bold=True)
|
| 34 |
+
|
| 35 |
+
|
| 36 |
+
def clamp(value: float, low: float = 0.0, high: float = 1.0) -> float:
|
| 37 |
+
return max(low, min(high, value))
|
| 38 |
+
|
| 39 |
+
|
| 40 |
+
def bbox_px(bbox: list[float], size: tuple[int, int] = CANVAS_SIZE) -> tuple[int, int, int, int]:
|
| 41 |
+
w, h = size
|
| 42 |
+
return (
|
| 43 |
+
int(round(clamp(bbox[0]) * w)),
|
| 44 |
+
int(round(clamp(bbox[1]) * h)),
|
| 45 |
+
int(round(clamp(bbox[2]) * w)),
|
| 46 |
+
int(round(clamp(bbox[3]) * h)),
|
| 47 |
+
)
|
| 48 |
+
|
| 49 |
+
|
| 50 |
+
def normalize_bbox(box: tuple[int, int, int, int], size: tuple[int, int] = CANVAS_SIZE) -> list[float]:
|
| 51 |
+
w, h = size
|
| 52 |
+
x1, y1, x2, y2 = box
|
| 53 |
+
vals = [x1 / w, y1 / h, x2 / w, y2 / h]
|
| 54 |
+
return [round(clamp(v), 4) for v in vals]
|
| 55 |
+
|
| 56 |
+
|
| 57 |
+
def jitter_bbox(bbox: list[float], rng: random.Random) -> list[float]:
|
| 58 |
+
x1, y1, x2, y2 = bbox
|
| 59 |
+
width = x2 - x1
|
| 60 |
+
height = y2 - y1
|
| 61 |
+
dx = rng.uniform(-0.018, 0.018) * width
|
| 62 |
+
dy = rng.uniform(-0.018, 0.018) * height
|
| 63 |
+
grow_x = rng.uniform(-0.018, 0.024) * width
|
| 64 |
+
grow_y = rng.uniform(-0.018, 0.024) * height
|
| 65 |
+
measured = [
|
| 66 |
+
clamp(x1 + dx - grow_x),
|
| 67 |
+
clamp(y1 + dy - grow_y),
|
| 68 |
+
clamp(x2 + dx + grow_x),
|
| 69 |
+
clamp(y2 + dy + grow_y),
|
| 70 |
+
]
|
| 71 |
+
if measured[2] <= measured[0] + 0.01:
|
| 72 |
+
measured[2] = clamp(measured[0] + 0.01)
|
| 73 |
+
if measured[3] <= measured[1] + 0.01:
|
| 74 |
+
measured[3] = clamp(measured[1] + 0.01)
|
| 75 |
+
return [round(v, 4) for v in measured]
|
| 76 |
+
|
| 77 |
+
|
| 78 |
+
def iou(a: list[float], b: list[float]) -> float:
|
| 79 |
+
ax1, ay1, ax2, ay2 = a
|
| 80 |
+
bx1, by1, bx2, by2 = b
|
| 81 |
+
ix1, iy1 = max(ax1, bx1), max(ay1, by1)
|
| 82 |
+
ix2, iy2 = min(ax2, bx2), min(ay2, by2)
|
| 83 |
+
iw, ih = max(0.0, ix2 - ix1), max(0.0, iy2 - iy1)
|
| 84 |
+
inter = iw * ih
|
| 85 |
+
area_a = max(0.0, ax2 - ax1) * max(0.0, ay2 - ay1)
|
| 86 |
+
area_b = max(0.0, bx2 - bx1) * max(0.0, by2 - by1)
|
| 87 |
+
denom = area_a + area_b - inter
|
| 88 |
+
return 0.0 if denom == 0 else round(inter / denom, 4)
|
| 89 |
+
|
| 90 |
+
|
| 91 |
+
def lighten(color: tuple[int, int, int], amount: float) -> tuple[int, int, int]:
|
| 92 |
+
return tuple(int(c + (255 - c) * amount) for c in color)
|
| 93 |
+
|
| 94 |
+
|
| 95 |
+
def darken(color: tuple[int, int, int], amount: float) -> tuple[int, int, int]:
|
| 96 |
+
return tuple(int(c * (1 - amount)) for c in color)
|
| 97 |
+
|
| 98 |
+
|
| 99 |
+
def gradient(size: tuple[int, int], top: tuple[int, int, int], bottom: tuple[int, int, int]) -> Image.Image:
|
| 100 |
+
w, h = size
|
| 101 |
+
img = Image.new("RGB", size, top)
|
| 102 |
+
draw = ImageDraw.Draw(img)
|
| 103 |
+
for y in range(h):
|
| 104 |
+
t = y / max(1, h - 1)
|
| 105 |
+
color = tuple(int(top[i] * (1 - t) + bottom[i] * t) for i in range(3))
|
| 106 |
+
draw.line([(0, y), (w, y)], fill=color)
|
| 107 |
+
return img
|
| 108 |
+
|
| 109 |
+
|
| 110 |
+
def paste_shadow(base: Image.Image, layer: Image.Image, offset: tuple[int, int] = (8, 10), blur: int = 12) -> None:
|
| 111 |
+
alpha = layer.split()[-1]
|
| 112 |
+
shadow = Image.new("RGBA", layer.size, (0, 0, 0, 0))
|
| 113 |
+
shadow.putalpha(alpha.filter(ImageFilter.GaussianBlur(blur)))
|
| 114 |
+
sx, sy = offset
|
| 115 |
+
base.alpha_composite(shadow, (sx, sy))
|
| 116 |
+
base.alpha_composite(layer)
|
| 117 |
+
|
| 118 |
+
|
| 119 |
+
def rounded_rect(draw: ImageDraw.ImageDraw, box: tuple[int, int, int, int], radius: int, fill: Any, outline: Any = None, width: int = 1) -> None:
|
| 120 |
+
draw.rounded_rectangle(box, radius=radius, fill=fill, outline=outline, width=width)
|
| 121 |
+
|
| 122 |
+
|
| 123 |
+
def draw_background(draw: ImageDraw.ImageDraw, scene: dict[str, Any]) -> None:
|
| 124 |
+
kind = scene["background_kind"]
|
| 125 |
+
if kind == "market":
|
| 126 |
+
for x in range(0, 1024, 96):
|
| 127 |
+
color = (188, 87, 70) if (x // 96) % 2 else (240, 197, 113)
|
| 128 |
+
draw.polygon([(x, 0), (x + 96, 0), (x + 70, 110), (x + 26, 110)], fill=color)
|
| 129 |
+
draw.rectangle((0, 672, 1024, 1024), fill=(126, 113, 91))
|
| 130 |
+
for x in range(-80, 1024, 160):
|
| 131 |
+
draw.line((x, 720, x + 260, 1024), fill=(100, 91, 76), width=5)
|
| 132 |
+
draw.rectangle((0, 545, 1024, 650), fill=(99, 73, 48))
|
| 133 |
+
elif kind == "kitchen":
|
| 134 |
+
draw.rectangle((0, 0, 1024, 460), fill=(206, 222, 224))
|
| 135 |
+
for x in range(0, 1024, 128):
|
| 136 |
+
draw.rectangle((x, 0, x + 126, 458), outline=(178, 198, 201), width=2)
|
| 137 |
+
draw.rectangle((0, 560, 1024, 1024), fill=(189, 155, 105))
|
| 138 |
+
for x in range(-150, 1200, 150):
|
| 139 |
+
draw.line((x, 560, x + 210, 1024), fill=(159, 128, 84), width=4)
|
| 140 |
+
draw.rectangle((55, 90, 970, 380), fill=(232, 238, 236), outline=(178, 196, 196), width=4)
|
| 141 |
+
elif kind == "workshop":
|
| 142 |
+
draw.rectangle((0, 0, 1024, 1024), fill=(88, 91, 87))
|
| 143 |
+
for y in range(110, 640, 110):
|
| 144 |
+
draw.line((0, y, 1024, y), fill=(67, 70, 68), width=7)
|
| 145 |
+
draw.rectangle((0, 640, 1024, 1024), fill=(107, 94, 75))
|
| 146 |
+
for x in range(70, 1000, 170):
|
| 147 |
+
draw.rectangle((x, 80, x + 24, 520), fill=(54, 57, 55))
|
| 148 |
+
draw.rectangle((50, 560, 974, 700), fill=(73, 58, 43))
|
| 149 |
+
elif kind == "library":
|
| 150 |
+
draw.rectangle((0, 0, 1024, 1024), fill=(119, 82, 55))
|
| 151 |
+
for y in (84, 250, 416, 582):
|
| 152 |
+
draw.rectangle((0, y, 1024, y + 18), fill=(83, 55, 37))
|
| 153 |
+
rng = random.Random(12)
|
| 154 |
+
for x in range(18, 1010, 30):
|
| 155 |
+
for y in (105, 271, 437):
|
| 156 |
+
h = rng.randint(88, 132)
|
| 157 |
+
draw.rectangle((x, y, x + rng.randint(14, 24), y + h), fill=rng.choice([(156, 53, 58), (61, 97, 130), (205, 160, 74), (84, 123, 92)]))
|
| 158 |
+
draw.rectangle((0, 650, 1024, 1024), fill=(156, 127, 86))
|
| 159 |
+
elif kind == "greenhouse":
|
| 160 |
+
draw.rectangle((0, 0, 1024, 1024), fill=(176, 209, 199))
|
| 161 |
+
for x in range(0, 1025, 128):
|
| 162 |
+
draw.line((x, 0, x + 180, 650), fill=(123, 153, 146), width=5)
|
| 163 |
+
draw.rectangle((0, 615, 1024, 1024), fill=(104, 126, 87))
|
| 164 |
+
for _ in range(70):
|
| 165 |
+
x = random.randint(0, 1024)
|
| 166 |
+
y = random.randint(490, 1024)
|
| 167 |
+
draw.ellipse((x - 18, y - 8, x + 18, y + 8), fill=random.choice([(45, 117, 72), (62, 145, 82), (86, 121, 69)]))
|
| 168 |
+
elif kind == "laundromat":
|
| 169 |
+
draw.rectangle((0, 0, 1024, 1024), fill=(202, 213, 218))
|
| 170 |
+
for x in range(55, 985, 155):
|
| 171 |
+
draw.rectangle((x, 100, x + 116, 270), fill=(164, 178, 187), outline=(100, 117, 128), width=5)
|
| 172 |
+
draw.ellipse((x + 22, 122, x + 94, 194), fill=(107, 139, 162), outline=(230, 238, 241), width=5)
|
| 173 |
+
draw.rectangle((0, 560, 1024, 1024), fill=(132, 149, 156))
|
| 174 |
+
draw.rectangle((0, 440, 1024, 540), fill=(176, 188, 194))
|
| 175 |
+
elif kind == "picnic":
|
| 176 |
+
draw.rectangle((0, 0, 1024, 490), fill=(139, 185, 216))
|
| 177 |
+
draw.ellipse((-120, 170, 1140, 870), fill=(90, 153, 86))
|
| 178 |
+
draw.rectangle((0, 735, 1024, 1024), fill=(79, 133, 74))
|
| 179 |
+
for _ in range(90):
|
| 180 |
+
x = random.randint(0, 1024)
|
| 181 |
+
y = random.randint(500, 1010)
|
| 182 |
+
draw.line((x, y, x + 16, y - 20), fill=(55, 110, 58), width=2)
|
| 183 |
+
elif kind == "music_room":
|
| 184 |
+
draw.rectangle((0, 0, 1024, 1024), fill=(84, 74, 82))
|
| 185 |
+
draw.rectangle((0, 0, 1024, 260), fill=(62, 53, 63))
|
| 186 |
+
for x in range(80, 950, 180):
|
| 187 |
+
draw.ellipse((x, 58, x + 70, 128), fill=(235, 196, 105))
|
| 188 |
+
draw.line((x + 35, 128, x + 20, 260), fill=(235, 196, 105), width=5)
|
| 189 |
+
draw.rectangle((0, 660, 1024, 1024), fill=(115, 89, 70))
|
| 190 |
+
elif kind == "clinic":
|
| 191 |
+
draw.rectangle((0, 0, 1024, 1024), fill=(219, 229, 225))
|
| 192 |
+
for x in range(0, 1024, 128):
|
| 193 |
+
draw.line((x, 0, x, 600), fill=(195, 209, 205), width=2)
|
| 194 |
+
draw.rectangle((0, 610, 1024, 1024), fill=(174, 193, 190))
|
| 195 |
+
draw.rectangle((70, 120, 954, 500), fill=(238, 242, 240), outline=(190, 204, 201), width=4)
|
| 196 |
+
elif kind == "pottery":
|
| 197 |
+
draw.rectangle((0, 0, 1024, 1024), fill=(153, 117, 91))
|
| 198 |
+
for y in range(90, 560, 145):
|
| 199 |
+
draw.rectangle((0, y, 1024, y + 18), fill=(107, 79, 60))
|
| 200 |
+
draw.rectangle((0, 650, 1024, 1024), fill=(128, 91, 68))
|
| 201 |
+
for x in range(20, 1024, 140):
|
| 202 |
+
draw.ellipse((x, 135, x + 90, 200), fill=(185, 126, 78), outline=(99, 73, 52), width=4)
|
| 203 |
+
|
| 204 |
+
|
| 205 |
+
def draw_person(layer: Image.Image, box: tuple[int, int, int, int], subj: dict[str, Any], full_body: bool = True) -> None:
|
| 206 |
+
draw = ImageDraw.Draw(layer)
|
| 207 |
+
x1, y1, x2, y2 = box
|
| 208 |
+
w, h = max(1, x2 - x1), max(1, y2 - y1)
|
| 209 |
+
skin = tuple(subj["skin"])
|
| 210 |
+
hair = tuple(subj["hair"])
|
| 211 |
+
clothing = tuple(subj["color"])
|
| 212 |
+
accent = tuple(subj.get("accent", lighten(clothing, 0.35)))
|
| 213 |
+
cx = x1 + w // 2
|
| 214 |
+
head_r = max(14, int(min(w, h) * (0.14 if full_body else 0.22)))
|
| 215 |
+
head_cy = y1 + int(h * (0.18 if full_body else 0.32))
|
| 216 |
+
body_top = head_cy + head_r - 4
|
| 217 |
+
body_bottom = y2 - int(h * 0.10)
|
| 218 |
+
shoulder_w = int(w * (0.34 if full_body else 0.48))
|
| 219 |
+
hip_w = int(w * (0.24 if full_body else 0.36))
|
| 220 |
+
draw.ellipse((cx - head_r - 5, head_cy - head_r - 9, cx + head_r + 5, head_cy + head_r + 5), fill=hair)
|
| 221 |
+
draw.ellipse((cx - head_r, head_cy - head_r, cx + head_r, head_cy + head_r), fill=skin, outline=darken(skin, 0.25), width=2)
|
| 222 |
+
draw.arc((cx - head_r // 2, head_cy - 2, cx + head_r // 2, head_cy + head_r // 2), 10, 170, fill=darken(skin, 0.45), width=2)
|
| 223 |
+
draw.ellipse((cx - head_r // 3, head_cy - head_r // 4, cx - head_r // 5, head_cy - head_r // 9), fill=(38, 38, 36))
|
| 224 |
+
draw.ellipse((cx + head_r // 5, head_cy - head_r // 4, cx + head_r // 3, head_cy - head_r // 9), fill=(38, 38, 36))
|
| 225 |
+
draw.polygon(
|
| 226 |
+
[
|
| 227 |
+
(cx - shoulder_w, body_top),
|
| 228 |
+
(cx + shoulder_w, body_top),
|
| 229 |
+
(cx + hip_w, body_bottom),
|
| 230 |
+
(cx - hip_w, body_bottom),
|
| 231 |
+
],
|
| 232 |
+
fill=clothing,
|
| 233 |
+
outline=darken(clothing, 0.25),
|
| 234 |
+
)
|
| 235 |
+
draw.line((cx - shoulder_w + 4, body_top + 12, x1 + int(w * 0.13), y1 + int(h * 0.58)), fill=skin, width=max(5, w // 14))
|
| 236 |
+
draw.line((cx + shoulder_w - 4, body_top + 12, x2 - int(w * 0.13), y1 + int(h * 0.58)), fill=skin, width=max(5, w // 14))
|
| 237 |
+
if full_body:
|
| 238 |
+
leg_top = body_bottom - 2
|
| 239 |
+
draw.line((cx - hip_w // 2, leg_top, cx - int(w * 0.18), y2 - 4), fill=darken(clothing, 0.42), width=max(7, w // 12))
|
| 240 |
+
draw.line((cx + hip_w // 2, leg_top, cx + int(w * 0.18), y2 - 4), fill=darken(clothing, 0.42), width=max(7, w // 12))
|
| 241 |
+
draw.line((cx - shoulder_w + 5, body_top + int(h * 0.12), cx + shoulder_w - 5, body_top + int(h * 0.12)), fill=accent, width=max(3, h // 42))
|
| 242 |
+
|
| 243 |
+
|
| 244 |
+
def draw_object(layer: Image.Image, box: tuple[int, int, int, int], subj: dict[str, Any]) -> None:
|
| 245 |
+
draw = ImageDraw.Draw(layer)
|
| 246 |
+
x1, y1, x2, y2 = box
|
| 247 |
+
w, h = max(1, x2 - x1), max(1, y2 - y1)
|
| 248 |
+
color = tuple(subj["color"])
|
| 249 |
+
accent = tuple(subj.get("accent", lighten(color, 0.35)))
|
| 250 |
+
kind = subj.get("kind", "box")
|
| 251 |
+
if kind in {"basket", "crate"}:
|
| 252 |
+
rounded_rect(draw, (x1, y1 + h // 6, x2, y2 - h // 12), max(8, w // 16), fill=color, outline=darken(color, 0.35), width=max(3, w // 30))
|
| 253 |
+
for i in range(4):
|
| 254 |
+
yy = y1 + h // 4 + i * h // 7
|
| 255 |
+
draw.line((x1 + 8, yy, x2 - 8, yy), fill=darken(color, 0.28), width=3)
|
| 256 |
+
for i in range(5):
|
| 257 |
+
xx = x1 + w // 7 + i * w // 7
|
| 258 |
+
draw.line((xx, y1 + h // 5, xx, y2 - h // 8), fill=lighten(color, 0.25), width=3)
|
| 259 |
+
elif kind in {"fruit_stack", "oranges", "tomatoes"}:
|
| 260 |
+
radius = max(12, min(w, h) // 8)
|
| 261 |
+
positions = [
|
| 262 |
+
(0.25, 0.68), (0.40, 0.52), (0.56, 0.66), (0.69, 0.48), (0.48, 0.32),
|
| 263 |
+
(0.22, 0.38), (0.74, 0.72), (0.58, 0.22),
|
| 264 |
+
]
|
| 265 |
+
for px, py in positions:
|
| 266 |
+
cx, cy = x1 + int(px * w), y1 + int(py * h)
|
| 267 |
+
draw.ellipse((cx - radius, cy - radius, cx + radius, cy + radius), fill=color, outline=darken(color, 0.28), width=2)
|
| 268 |
+
draw.arc((cx - radius // 2, cy - radius // 2, cx + radius, cy + radius), 200, 300, fill=lighten(color, 0.45), width=2)
|
| 269 |
+
elif kind == "umbrella":
|
| 270 |
+
draw.pieslice((x1, y1, x2, y1 + int(h * 0.9)), 180, 360, fill=color, outline=darken(color, 0.35), width=max(3, w // 40))
|
| 271 |
+
for i in range(1, 5):
|
| 272 |
+
xx = x1 + i * w // 5
|
| 273 |
+
draw.line((x1 + w // 2, y1 + h // 4, xx, y1 + int(h * 0.45)), fill=darken(color, 0.25), width=2)
|
| 274 |
+
draw.line((x1 + w // 2, y1 + h // 3, x1 + w // 2, y2), fill=darken(color, 0.5), width=max(4, w // 35))
|
| 275 |
+
elif kind in {"mug", "jar", "vase", "plant_pot"}:
|
| 276 |
+
rounded_rect(draw, (x1 + w // 5, y1 + h // 5, x2 - w // 5, y2 - h // 8), max(10, w // 14), fill=color, outline=darken(color, 0.3), width=max(3, w // 35))
|
| 277 |
+
draw.ellipse((x1 + w // 5, y1 + h // 8, x2 - w // 5, y1 + h // 3), fill=lighten(color, 0.2), outline=darken(color, 0.25), width=2)
|
| 278 |
+
if kind == "mug":
|
| 279 |
+
draw.arc((x2 - w // 3, y1 + h // 3, x2 - w // 15, y1 + h * 2 // 3), -80, 95, fill=darken(color, 0.25), width=max(4, w // 25))
|
| 280 |
+
if kind == "plant_pot":
|
| 281 |
+
for i in range(6):
|
| 282 |
+
lx = x1 + w // 2
|
| 283 |
+
ly = y1 + h // 4
|
| 284 |
+
ex = x1 + int(w * (0.15 + 0.14 * i))
|
| 285 |
+
ey = y1 + int(h * (0.05 + 0.07 * (i % 2)))
|
| 286 |
+
draw.line((lx, ly, ex, ey), fill=(44, 116, 65), width=max(3, w // 36))
|
| 287 |
+
draw.ellipse((ex - 18, ey - 9, ex + 18, ey + 9), fill=(58, 139, 79))
|
| 288 |
+
elif kind in {"book_stack", "fabric_stack"}:
|
| 289 |
+
for i in range(5):
|
| 290 |
+
yy = y2 - (i + 1) * h // 7
|
| 291 |
+
fill = color if i % 2 == 0 else accent
|
| 292 |
+
rounded_rect(draw, (x1 + i * w // 24, yy, x2 - i * w // 24, yy + h // 9), 6, fill=fill, outline=darken(fill, 0.3), width=2)
|
| 293 |
+
elif kind == "lamp":
|
| 294 |
+
draw.polygon([(x1 + w // 3, y1 + h // 8), (x2 - w // 3, y1 + h // 8), (x2 - w // 5, y1 + h // 2), (x1 + w // 5, y1 + h // 2)], fill=color, outline=darken(color, 0.25))
|
| 295 |
+
draw.line((x1 + w // 2, y1 + h // 2, x1 + w // 2, y2 - h // 8), fill=darken(color, 0.55), width=max(5, w // 30))
|
| 296 |
+
draw.ellipse((x1 + w // 4, y2 - h // 5, x2 - w // 4, y2 - h // 12), fill=darken(color, 0.25))
|
| 297 |
+
elif kind == "instrument":
|
| 298 |
+
draw.ellipse((x1 + w // 4, y1 + h // 3, x2 - w // 6, y2 - h // 8), fill=color, outline=darken(color, 0.35), width=max(3, w // 35))
|
| 299 |
+
draw.ellipse((x1 + w // 3, y1 + h // 2, x1 + w // 2, y1 + h * 2 // 3), fill=darken(color, 0.45))
|
| 300 |
+
draw.rectangle((x1 + w // 12, y1 + h // 6, x1 + w // 3, y1 + h // 4), fill=darken(color, 0.35))
|
| 301 |
+
for i in range(4):
|
| 302 |
+
y = y1 + h // 5 + i * h // 35
|
| 303 |
+
draw.line((x1 + w // 10, y, x2 - w // 5, y + h // 3), fill=(235, 228, 193), width=1)
|
| 304 |
+
elif kind == "bicycle":
|
| 305 |
+
draw.ellipse((x1, y1 + h // 2, x1 + w // 3, y2), outline=darken(color, 0.35), width=max(5, w // 35))
|
| 306 |
+
draw.ellipse((x2 - w // 3, y1 + h // 2, x2, y2), outline=darken(color, 0.35), width=max(5, w // 35))
|
| 307 |
+
draw.line((x1 + w // 6, y1 + h * 3 // 4, x1 + w // 2, y1 + h // 3), fill=color, width=max(5, w // 35))
|
| 308 |
+
draw.line((x1 + w // 2, y1 + h // 3, x2 - w // 6, y1 + h * 3 // 4), fill=color, width=max(5, w // 35))
|
| 309 |
+
draw.line((x1 + w // 6, y1 + h * 3 // 4, x2 - w // 6, y1 + h * 3 // 4), fill=color, width=max(5, w // 35))
|
| 310 |
+
elif kind == "dog":
|
| 311 |
+
draw.ellipse((x1 + w // 5, y1 + h // 3, x2 - w // 8, y2 - h // 6), fill=color, outline=darken(color, 0.3), width=3)
|
| 312 |
+
draw.ellipse((x1, y1 + h // 5, x1 + w // 3, y1 + h // 2), fill=color, outline=darken(color, 0.3), width=3)
|
| 313 |
+
draw.polygon([(x1 + w // 10, y1 + h // 5), (x1 + w // 4, y1 + h // 9), (x1 + w // 5, y1 + h // 3)], fill=darken(color, 0.18))
|
| 314 |
+
draw.line((x2 - w // 7, y1 + h // 2, x2, y1 + h // 4), fill=color, width=max(5, w // 20))
|
| 315 |
+
for lx in (x1 + w // 3, x1 + w * 2 // 3):
|
| 316 |
+
draw.line((lx, y2 - h // 4, lx - w // 18, y2), fill=darken(color, 0.18), width=max(4, w // 28))
|
| 317 |
+
else:
|
| 318 |
+
rounded_rect(draw, (x1, y1, x2, y2), max(8, min(w, h) // 8), fill=color, outline=darken(color, 0.28), width=max(3, w // 35))
|
| 319 |
+
draw.line((x1 + w // 7, y1 + h // 4, x2 - w // 7, y1 + h // 4), fill=accent, width=max(3, h // 30))
|
| 320 |
+
|
| 321 |
+
|
| 322 |
+
def draw_subject(base: Image.Image, bbox: list[float], subj: dict[str, Any]) -> None:
|
| 323 |
+
x1, y1, x2, y2 = bbox_px(bbox)
|
| 324 |
+
pad = 8
|
| 325 |
+
layer = Image.new("RGBA", CANVAS_SIZE, (0, 0, 0, 0))
|
| 326 |
+
draw_box = (x1 + pad, y1 + pad, x2 - pad, y2 - pad)
|
| 327 |
+
if subj["is_person"]:
|
| 328 |
+
draw_person(layer, draw_box, subj, full_body=True)
|
| 329 |
+
else:
|
| 330 |
+
draw_object(layer, draw_box, subj)
|
| 331 |
+
paste_shadow(base, layer, offset=(0, 0), blur=10)
|
| 332 |
+
|
| 333 |
+
|
| 334 |
+
def draw_reference(subj: dict[str, Any], path: Path, rng: random.Random) -> None:
|
| 335 |
+
style = subj["ref_style"]
|
| 336 |
+
if style in {"id_headshot", "professional_portrait"}:
|
| 337 |
+
bg_top, bg_bottom = ((226, 229, 230), (197, 204, 208)) if style == "id_headshot" else ((198, 207, 200), (121, 139, 126))
|
| 338 |
+
elif style == "mirror_selfie":
|
| 339 |
+
bg_top, bg_bottom = (212, 216, 218), (160, 168, 172)
|
| 340 |
+
elif style == "shelf_in_store":
|
| 341 |
+
bg_top, bg_bottom = (196, 196, 180), (137, 130, 108)
|
| 342 |
+
elif style == "closeup_macro":
|
| 343 |
+
bg_top, bg_bottom = lighten(tuple(subj["color"]), 0.65), darken(tuple(subj["color"]), 0.20)
|
| 344 |
+
elif style == "flatlay_topdown":
|
| 345 |
+
bg_top, bg_bottom = (224, 222, 213), (199, 196, 186)
|
| 346 |
+
elif style == "in_context_natural":
|
| 347 |
+
bg_top, bg_bottom = (190, 206, 196), (126, 143, 128)
|
| 348 |
+
else:
|
| 349 |
+
bg_top, bg_bottom = (235, 235, 232), (210, 211, 207)
|
| 350 |
+
|
| 351 |
+
img = gradient(CANVAS_SIZE, bg_top, bg_bottom).convert("RGBA")
|
| 352 |
+
d = ImageDraw.Draw(img)
|
| 353 |
+
|
| 354 |
+
if style == "mirror_selfie":
|
| 355 |
+
rounded_rect(d, (176, 80, 848, 944), 28, fill=(227, 229, 229), outline=(98, 106, 112), width=16)
|
| 356 |
+
rounded_rect(d, (230, 138, 794, 890), 18, fill=(198, 205, 207), outline=(170, 176, 180), width=5)
|
| 357 |
+
d.rectangle((692, 395, 770, 530), fill=(38, 42, 45))
|
| 358 |
+
box = (326, 250, 690, 888)
|
| 359 |
+
elif style == "shelf_in_store":
|
| 360 |
+
for y in (205, 445, 695):
|
| 361 |
+
d.rectangle((0, y, 1024, y + 28), fill=(116, 106, 88))
|
| 362 |
+
for x in range(60, 980, 130):
|
| 363 |
+
rounded_rect(d, (x, 250, x + 88, 420), 10, fill=lighten(tuple(subj["color"]), rng.uniform(0.1, 0.55)), outline=(120, 108, 88), width=2)
|
| 364 |
+
box = (270, 245, 754, 760)
|
| 365 |
+
elif style == "closeup_macro":
|
| 366 |
+
for _ in range(90):
|
| 367 |
+
cx, cy = rng.randint(0, 1024), rng.randint(0, 1024)
|
| 368 |
+
r = rng.randint(7, 28)
|
| 369 |
+
fill = lighten(tuple(subj["color"]), rng.uniform(0.05, 0.45)) + (70,)
|
| 370 |
+
d.ellipse((cx - r, cy - r, cx + r, cy + r), fill=fill)
|
| 371 |
+
box = (185, 150, 839, 865)
|
| 372 |
+
elif style == "flatlay_topdown":
|
| 373 |
+
for x in range(0, 1024, 64):
|
| 374 |
+
d.line((x, 0, x, 1024), fill=(204, 201, 192), width=1)
|
| 375 |
+
for y in range(0, 1024, 64):
|
| 376 |
+
d.line((0, y, 1024, y), fill=(204, 201, 192), width=1)
|
| 377 |
+
box = (235, 205, 789, 819)
|
| 378 |
+
elif style == "everyday_candid":
|
| 379 |
+
d.rectangle((0, 630, 1024, 1024), fill=(139, 145, 134))
|
| 380 |
+
d.rectangle((0, 0, 1024, 630), fill=(182, 197, 203))
|
| 381 |
+
box = (305, 130, 730, 910)
|
| 382 |
+
elif style == "professional_portrait":
|
| 383 |
+
d.rectangle((0, 680, 1024, 1024), fill=(98, 99, 88))
|
| 384 |
+
d.ellipse((120, 40, 420, 340), fill=(116, 140, 105, 80))
|
| 385 |
+
box = (308, 122, 722, 900)
|
| 386 |
+
elif style == "id_headshot":
|
| 387 |
+
box = (310, 182, 714, 880)
|
| 388 |
+
else:
|
| 389 |
+
d.ellipse((120, 90, 904, 870), fill=(255, 255, 255, 72))
|
| 390 |
+
box = (245, 185, 779, 825)
|
| 391 |
+
|
| 392 |
+
if subj["is_person"]:
|
| 393 |
+
draw_person(img, box, subj, full_body=style not in {"id_headshot", "professional_portrait"})
|
| 394 |
+
else:
|
| 395 |
+
draw_object(img, box, subj)
|
| 396 |
+
|
| 397 |
+
img.convert("RGB").save(path)
|
| 398 |
+
|
| 399 |
+
|
| 400 |
+
def draw_layout_sketch(plan: dict[str, Any], path: Path) -> None:
|
| 401 |
+
img = Image.new("RGBA", CANVAS_SIZE, (248, 248, 245, 255))
|
| 402 |
+
d = ImageDraw.Draw(img)
|
| 403 |
+
for x in range(0, 1025, 128):
|
| 404 |
+
d.line((x, 0, x, 1024), fill=(220, 220, 216), width=1)
|
| 405 |
+
for y in range(0, 1025, 128):
|
| 406 |
+
d.line((0, y, 1024, y), fill=(220, 220, 216), width=1)
|
| 407 |
+
for subj in plan["subjects"]:
|
| 408 |
+
box = bbox_px(subj["intended_bbox"])
|
| 409 |
+
fill = (70, 140, 220, 72) if subj["is_person"] else (235, 145, 55, 72)
|
| 410 |
+
outline = (35, 98, 180, 240) if subj["is_person"] else (190, 94, 18, 240)
|
| 411 |
+
d.rectangle(box, fill=fill, outline=outline, width=4)
|
| 412 |
+
label = subj["name"]
|
| 413 |
+
tb = d.textbbox((0, 0), label, font=FONT_24)
|
| 414 |
+
d.rectangle((box[0] + 6, box[1] + 6, box[0] + 18 + tb[2], box[1] + 40), fill=(255, 255, 255, 220))
|
| 415 |
+
d.text((box[0] + 12, box[1] + 9), label, fill=(32, 32, 32), font=FONT_24)
|
| 416 |
+
img.convert("RGB").save(path)
|
| 417 |
+
|
| 418 |
+
|
| 419 |
+
def draw_overlay(main_image: Path, subjects: list[dict[str, Any]], key: str, path: Path, accepted_only: bool = False) -> None:
|
| 420 |
+
img = Image.open(main_image).convert("RGBA")
|
| 421 |
+
d = ImageDraw.Draw(img)
|
| 422 |
+
for subj in subjects:
|
| 423 |
+
if accepted_only and not subj.get("accepted", True):
|
| 424 |
+
continue
|
| 425 |
+
box = bbox_px(subj[key])
|
| 426 |
+
color = (35, 210, 115, 255) if accepted_only else ((51, 132, 232, 255) if key == "intended_bbox" else (238, 72, 66, 255))
|
| 427 |
+
d.rectangle(box, outline=color, width=5)
|
| 428 |
+
label = subj["name"]
|
| 429 |
+
tb = d.textbbox((0, 0), label, font=FONT_18)
|
| 430 |
+
d.rectangle((box[0], max(0, box[1] - 28), box[0] + tb[2] + 12, max(24, box[1] - 2)), fill=(0, 0, 0, 170))
|
| 431 |
+
d.text((box[0] + 6, max(0, box[1] - 27)), label, fill=(255, 255, 255), font=FONT_18)
|
| 432 |
+
img.convert("RGB").save(path)
|
| 433 |
+
|
| 434 |
+
|
| 435 |
+
def draw_main(plan: dict[str, Any], path: Path) -> None:
|
| 436 |
+
img = gradient(CANVAS_SIZE, tuple(plan["bg_top"]), tuple(plan["bg_bottom"])).convert("RGBA")
|
| 437 |
+
d = ImageDraw.Draw(img)
|
| 438 |
+
draw_background(d, plan)
|
| 439 |
+
ordered = sorted(plan["subjects"], key=lambda s: s["intended_bbox"][3])
|
| 440 |
+
for subj in ordered:
|
| 441 |
+
draw_subject(img, subj["intended_bbox"], subj)
|
| 442 |
+
img.convert("RGB").save(path)
|
| 443 |
+
|
| 444 |
+
|
| 445 |
+
def subject(
|
| 446 |
+
name: str,
|
| 447 |
+
is_person: bool,
|
| 448 |
+
sub_caption: str,
|
| 449 |
+
bbox: list[float],
|
| 450 |
+
ref_style: str,
|
| 451 |
+
ref_prompt: str,
|
| 452 |
+
color: tuple[int, int, int],
|
| 453 |
+
*,
|
| 454 |
+
accent: tuple[int, int, int] | None = None,
|
| 455 |
+
skin: tuple[int, int, int] = (171, 119, 82),
|
| 456 |
+
hair: tuple[int, int, int] = (50, 38, 32),
|
| 457 |
+
kind: str = "box",
|
| 458 |
+
) -> dict[str, Any]:
|
| 459 |
+
item = {
|
| 460 |
+
"name": name,
|
| 461 |
+
"is_person": is_person,
|
| 462 |
+
"sub_caption": sub_caption,
|
| 463 |
+
"intended_bbox": bbox,
|
| 464 |
+
"ref_style": ref_style,
|
| 465 |
+
"ref_prompt": ref_prompt,
|
| 466 |
+
"color": color,
|
| 467 |
+
"accent": accent or lighten(color, 0.35),
|
| 468 |
+
"kind": kind,
|
| 469 |
+
}
|
| 470 |
+
if is_person:
|
| 471 |
+
item["skin"] = skin
|
| 472 |
+
item["hair"] = hair
|
| 473 |
+
return item
|
| 474 |
+
|
| 475 |
+
|
| 476 |
+
def build_plans() -> list[dict[str, Any]]:
|
| 477 |
+
return [
|
| 478 |
+
{
|
| 479 |
+
"sample_id": "sample_0001",
|
| 480 |
+
"scene_caption": "A rainy market stall bustles as a vendor steadies a display while a shopper reaches for fruit under a green umbrella.",
|
| 481 |
+
"story": "The rain has just eased, and the stall is busy again. A quick exchange between vendor and shopper gives the scene a focused, everyday energy.",
|
| 482 |
+
"background": "Covered outdoor produce market, damp stone floor, warm awning light, late afternoon.",
|
| 483 |
+
"style": "photorealistic",
|
| 484 |
+
"canvas_size": list(CANVAS_SIZE),
|
| 485 |
+
"background_kind": "market",
|
| 486 |
+
"bg_top": (186, 197, 198),
|
| 487 |
+
"bg_bottom": (128, 118, 96),
|
| 488 |
+
"subjects": [
|
| 489 |
+
subject("vendor_in_apron", True, "middle-aged person with short dark hair, tan skin, blue apron, leaning forward with a concentrated expression", [0.08, 0.24, 0.31, 0.83], "everyday_candid", "middle-aged market vendor with short dark hair, tan skin, blue apron, focused expression", (38, 106, 154), skin=(169, 115, 83), hair=(42, 33, 29)),
|
| 490 |
+
subject("shopper_red_coat", True, "older shopper with silver hair, warm brown skin, red raincoat, arm extended toward the fruit", [0.26, 0.22, 0.50, 0.88], "professional_portrait", "older shopper with silver hair, warm brown skin, red raincoat, kind alert face", (182, 55, 63), skin=(133, 86, 62), hair=(205, 205, 198)),
|
| 491 |
+
subject("green_umbrella", False, "large forest-green umbrella tilted over the fruit display with a wet curved canopy", [0.37, 0.04, 0.82, 0.46], "in_context_natural", "forest-green rain umbrella with a curved wet canopy", (38, 119, 82), kind="umbrella"),
|
| 492 |
+
subject("orange_stack", False, "bright oranges stacked in a low crate near the center foreground", [0.44, 0.49, 0.71, 0.75], "closeup_macro", "bright oranges with pebbled rind piled together", (226, 115, 35), kind="fruit_stack"),
|
| 493 |
+
subject("woven_basket", False, "wide woven basket partly tucked beneath the fruit display", [0.61, 0.62, 0.88, 0.87], "studio_product", "wide tan woven market basket with sturdy handles", (174, 121, 68), kind="basket"),
|
| 494 |
+
],
|
| 495 |
+
},
|
| 496 |
+
{
|
| 497 |
+
"sample_id": "sample_0002",
|
| 498 |
+
"scene_caption": "A family breakfast table is mid-preparation as two people arrange food around a ceramic mug and a stack of books.",
|
| 499 |
+
"story": "The morning is calm but active. One person is setting the table while another pauses with a small smile before sitting down.",
|
| 500 |
+
"background": "Bright home kitchen with pale tile, wood table, diffuse window light.",
|
| 501 |
+
"style": "photorealistic",
|
| 502 |
+
"canvas_size": list(CANVAS_SIZE),
|
| 503 |
+
"background_kind": "kitchen",
|
| 504 |
+
"bg_top": (225, 235, 235),
|
| 505 |
+
"bg_bottom": (176, 147, 105),
|
| 506 |
+
"subjects": [
|
| 507 |
+
subject("person_yellow_sweater", True, "young adult with curly black hair, medium brown skin, yellow sweater, holding a plate near the table", [0.11, 0.18, 0.37, 0.82], "mirror_selfie", "young adult with curly black hair, medium brown skin, yellow sweater", (221, 172, 54), skin=(141, 91, 62), hair=(31, 25, 22)),
|
| 508 |
+
subject("person_green_cardigan", True, "adult with straight auburn bob, fair skin, green cardigan, seated and smiling softly", [0.55, 0.25, 0.82, 0.87], "id_headshot", "adult with straight auburn bob, fair skin, green cardigan, soft smile", (68, 135, 91), skin=(226, 174, 136), hair=(126, 62, 42)),
|
| 509 |
+
subject("blue_ceramic_mug", False, "glossy cobalt-blue ceramic mug close to the front edge of the table", [0.35, 0.58, 0.51, 0.78], "studio_product", "glossy cobalt-blue ceramic mug with rounded handle", (33, 88, 174), kind="mug"),
|
| 510 |
+
subject("berry_bowl", False, "small bowl heaped with red berries between the two people", [0.45, 0.48, 0.63, 0.66], "flatlay_topdown", "small white bowl full of red berries", (191, 45, 72), accent=(245, 238, 226), kind="fruit_stack"),
|
| 511 |
+
subject("cookbook_stack", False, "short stack of cookbooks with teal and cream covers near the back of the table", [0.18, 0.46, 0.39, 0.62], "shelf_in_store", "short stack of teal and cream cookbooks", (55, 134, 142), accent=(232, 219, 184), kind="book_stack"),
|
| 512 |
+
],
|
| 513 |
+
},
|
| 514 |
+
{
|
| 515 |
+
"sample_id": "sample_0003",
|
| 516 |
+
"scene_caption": "In a repair workshop, a mechanic and an assistant coordinate around a bicycle frame, tool crate, and yellow lamp.",
|
| 517 |
+
"story": "The team is close to solving the repair. Their body language shows concentration as tools and parts crowd the bench.",
|
| 518 |
+
"background": "Dim bicycle workshop, pegboard walls, worn wooden bench, focused task lighting.",
|
| 519 |
+
"style": "photorealistic",
|
| 520 |
+
"canvas_size": list(CANVAS_SIZE),
|
| 521 |
+
"background_kind": "workshop",
|
| 522 |
+
"bg_top": (92, 98, 96),
|
| 523 |
+
"bg_bottom": (89, 75, 57),
|
| 524 |
+
"subjects": [
|
| 525 |
+
subject("mechanic_gray_overalls", True, "stocky adult with shaved head, deep brown skin, gray overalls, crouched toward the bicycle", [0.07, 0.24, 0.34, 0.91], "professional_portrait", "stocky adult mechanic with shaved head, deep brown skin, gray overalls", (92, 101, 107), skin=(92, 55, 39), hair=(28, 24, 22)),
|
| 526 |
+
subject("assistant_plaid_shirt", True, "slim adult with wavy blond hair, fair skin, red plaid shirt, holding a small wrench", [0.68, 0.19, 0.91, 0.84], "everyday_candid", "slim adult with wavy blond hair, fair skin, red plaid shirt, holding a small wrench", (163, 58, 53), skin=(232, 183, 142), hair=(214, 178, 93)),
|
| 527 |
+
subject("teal_bicycle_frame", False, "teal bicycle frame angled across the lower center with both wheels visible", [0.29, 0.49, 0.76, 0.88], "in_context_natural", "teal bicycle frame with thin black tires", (34, 147, 154), kind="bicycle"),
|
| 528 |
+
subject("red_tool_crate", False, "red metal tool crate on the workbench with compartment ridges", [0.31, 0.38, 0.54, 0.57], "studio_product", "red metal tool crate with compartment ridges", (177, 52, 45), kind="crate"),
|
| 529 |
+
subject("yellow_task_lamp", False, "small yellow task lamp casting light from the rear left of the bench", [0.10, 0.06, 0.30, 0.38], "closeup_macro", "small yellow metal task lamp with round shade", (229, 185, 60), kind="lamp"),
|
| 530 |
+
],
|
| 531 |
+
},
|
| 532 |
+
{
|
| 533 |
+
"sample_id": "sample_0004",
|
| 534 |
+
"scene_caption": "A quiet library study table holds a focused pair of readers, a green desk lamp, a book stack, and a terracotta plant pot.",
|
| 535 |
+
"story": "The moment is hushed and intent. One reader marks a page while the other leans in to compare notes.",
|
| 536 |
+
"background": "Old library aisle with tall bookcases, amber reading light, polished wood table.",
|
| 537 |
+
"style": "photorealistic",
|
| 538 |
+
"canvas_size": list(CANVAS_SIZE),
|
| 539 |
+
"background_kind": "library",
|
| 540 |
+
"bg_top": (122, 83, 55),
|
| 541 |
+
"bg_bottom": (142, 108, 73),
|
| 542 |
+
"subjects": [
|
| 543 |
+
subject("reader_blue_jacket", True, "adult with short coiled hair, dark brown skin, blue jacket, leaning over an open page", [0.14, 0.20, 0.40, 0.83], "id_headshot", "adult with short coiled hair, dark brown skin, blue jacket, attentive gaze", (49, 93, 156), skin=(76, 47, 35), hair=(24, 21, 20)),
|
| 544 |
+
subject("reader_pink_scarf", True, "older adult with long gray hair, light olive skin, pink scarf, seated with a pencil in hand", [0.48, 0.22, 0.75, 0.86], "professional_portrait", "older adult with long gray hair, light olive skin, pink scarf, thoughtful expression", (205, 94, 126), skin=(198, 151, 112), hair=(194, 192, 184)),
|
| 545 |
+
subject("green_desk_lamp", False, "green banker-style desk lamp glowing over the center of the table", [0.35, 0.40, 0.57, 0.66], "studio_product", "green banker-style desk lamp with brass stem", (52, 128, 75), accent=(198, 158, 70), kind="lamp"),
|
| 546 |
+
subject("navy_book_stack", False, "stack of navy and ochre books near the front right corner", [0.61, 0.58, 0.86, 0.77], "flatlay_topdown", "stack of navy and ochre hardback books", (38, 57, 103), accent=(210, 153, 64), kind="book_stack"),
|
| 547 |
+
subject("terracotta_plant", False, "small terracotta plant pot with green leaves beside the books", [0.75, 0.42, 0.92, 0.66], "in_context_natural", "small terracotta plant pot with healthy green leaves", (181, 92, 55), kind="plant_pot"),
|
| 548 |
+
],
|
| 549 |
+
},
|
| 550 |
+
{
|
| 551 |
+
"sample_id": "sample_0005",
|
| 552 |
+
"scene_caption": "A greenhouse volunteer and visitor examine seedlings around a watering can, clay pot, and striped fabric bundle.",
|
| 553 |
+
"story": "The air is humid and bright after watering. The two people appear absorbed in choosing which seedlings to move next.",
|
| 554 |
+
"background": "Sunlit community greenhouse with glass panes, leafy benches, moist floor.",
|
| 555 |
+
"style": "photorealistic",
|
| 556 |
+
"canvas_size": list(CANVAS_SIZE),
|
| 557 |
+
"background_kind": "greenhouse",
|
| 558 |
+
"bg_top": (184, 216, 205),
|
| 559 |
+
"bg_bottom": (95, 130, 85),
|
| 560 |
+
"subjects": [
|
| 561 |
+
subject("volunteer_orange_vest", True, "adult with cropped black hair, medium tan skin, orange vest, kneeling with careful hands", [0.08, 0.27, 0.35, 0.90], "everyday_candid", "adult greenhouse volunteer with cropped black hair, medium tan skin, orange vest", (211, 108, 45), skin=(170, 112, 78), hair=(29, 24, 22)),
|
| 562 |
+
subject("visitor_denim_jacket", True, "young adult with long dark hair, light brown skin, denim jacket, bending forward curiously", [0.58, 0.18, 0.84, 0.83], "mirror_selfie", "young adult with long dark hair, light brown skin, denim jacket", (61, 112, 155), skin=(179, 119, 82), hair=(39, 30, 28)),
|
| 563 |
+
subject("silver_watering_can", False, "silver metal watering can with long spout, set in the foreground", [0.33, 0.58, 0.57, 0.81], "studio_product", "silver metal watering can with long spout and arched handle", (154, 166, 169), accent=(218, 225, 226), kind="jar"),
|
| 564 |
+
subject("clay_seedling_pot", False, "round clay pot with several vivid green seedling leaves", [0.48, 0.43, 0.66, 0.66], "closeup_macro", "round clay seedling pot with vivid green leaves", (177, 91, 55), kind="plant_pot"),
|
| 565 |
+
subject("striped_fabric_bundle", False, "folded striped fabric bundle resting on the bench behind the pot", [0.19, 0.48, 0.43, 0.67], "flatlay_topdown", "folded striped fabric bundle in cream and blue", (231, 218, 181), accent=(44, 103, 155), kind="fabric_stack"),
|
| 566 |
+
],
|
| 567 |
+
},
|
| 568 |
+
{
|
| 569 |
+
"sample_id": "sample_0006",
|
| 570 |
+
"scene_caption": "A laundromat scene catches two neighbors folding clothes beside a purple basket, detergent bottle, and a small plush dog toy.",
|
| 571 |
+
"story": "The dryers are humming while the neighbors trade a quick laugh. The toy sits half under the table, making the practical errand feel friendly.",
|
| 572 |
+
"background": "Clean neighborhood laundromat, rows of washers, cool fluorescent light, folding counter.",
|
| 573 |
+
"style": "photorealistic",
|
| 574 |
+
"canvas_size": list(CANVAS_SIZE),
|
| 575 |
+
"background_kind": "laundromat",
|
| 576 |
+
"bg_top": (207, 219, 225),
|
| 577 |
+
"bg_bottom": (126, 145, 153),
|
| 578 |
+
"subjects": [
|
| 579 |
+
subject("neighbor_teal_hoodie", True, "adult with shaved sides and black curls, brown skin, teal hoodie, folding a towel", [0.12, 0.21, 0.38, 0.88], "professional_portrait", "adult with shaved sides and black curls, brown skin, teal hoodie", (39, 145, 142), skin=(116, 75, 55), hair=(24, 22, 21)),
|
| 580 |
+
subject("neighbor_lilac_sweater", True, "older adult with white bob haircut, fair skin, lilac sweater, smiling toward the counter", [0.54, 0.18, 0.80, 0.86], "id_headshot", "older adult with white bob haircut, fair skin, lilac sweater, gentle smile", (165, 121, 186), skin=(227, 181, 143), hair=(231, 230, 222)),
|
| 581 |
+
subject("purple_laundry_basket", False, "large purple laundry basket full of pale folded clothes", [0.32, 0.52, 0.59, 0.78], "in_context_natural", "large purple laundry basket full of folded clothes", (116, 72, 165), accent=(231, 228, 215), kind="basket"),
|
| 582 |
+
subject("orange_detergent_bottle", False, "orange detergent bottle with blue cap near the washers", [0.74, 0.47, 0.88, 0.69], "shelf_in_store", "orange detergent bottle with blue cap and no label text", (221, 120, 42), accent=(54, 93, 175), kind="jar"),
|
| 583 |
+
subject("small_brown_plush_dog", False, "small brown plush dog toy curled near the basket under the folding table", [0.60, 0.69, 0.86, 0.89], "closeup_macro", "small brown plush dog toy curled up resting", (128, 78, 45), kind="dog"),
|
| 584 |
+
],
|
| 585 |
+
},
|
| 586 |
+
{
|
| 587 |
+
"sample_id": "sample_0007",
|
| 588 |
+
"scene_caption": "A park picnic unfolds as two friends unpack food around a blue blanket, a guitar, and a woven snack basket.",
|
| 589 |
+
"story": "The friends are settling into an easy afternoon. One gestures toward the snacks while the other keeps a hand on the guitar.",
|
| 590 |
+
"background": "Open city park with grass, soft sky, scattered shade, relaxed weekend light.",
|
| 591 |
+
"style": "photorealistic",
|
| 592 |
+
"canvas_size": list(CANVAS_SIZE),
|
| 593 |
+
"background_kind": "picnic",
|
| 594 |
+
"bg_top": (148, 192, 220),
|
| 595 |
+
"bg_bottom": (88, 141, 78),
|
| 596 |
+
"subjects": [
|
| 597 |
+
subject("friend_white_hat", True, "young adult with dark skin, white brimmed hat, navy shirt, seated cross-legged", [0.10, 0.32, 0.36, 0.86], "mirror_selfie", "young adult with dark skin, white brimmed hat, navy shirt", (35, 57, 108), accent=(239, 235, 214), skin=(70, 43, 31), hair=(28, 24, 22)),
|
| 598 |
+
subject("friend_rust_jacket", True, "adult with straight black hair, warm beige skin, rust jacket, reaching toward the basket", [0.60, 0.28, 0.87, 0.87], "everyday_candid", "adult with straight black hair, warm beige skin, rust jacket, relaxed smile", (174, 87, 49), skin=(207, 151, 111), hair=(33, 27, 24)),
|
| 599 |
+
subject("blue_picnic_blanket", False, "blue picnic blanket spread across the lower center with folded corners", [0.24, 0.62, 0.78, 0.93], "flatlay_topdown", "blue woven picnic blanket with subtle stripes", (55, 105, 178), accent=(232, 232, 215), kind="fabric_stack"),
|
| 600 |
+
subject("acoustic_guitar", False, "warm brown acoustic guitar resting partly on the blanket", [0.39, 0.45, 0.65, 0.73], "studio_product", "warm brown acoustic guitar with dark sound hole", (177, 103, 45), kind="instrument"),
|
| 601 |
+
subject("snack_basket", False, "small woven snack basket with rounded sides near the right edge of the blanket", [0.68, 0.56, 0.91, 0.77], "in_context_natural", "small woven snack basket with rounded sides", (173, 122, 71), kind="basket"),
|
| 602 |
+
],
|
| 603 |
+
},
|
| 604 |
+
{
|
| 605 |
+
"sample_id": "sample_0008",
|
| 606 |
+
"scene_caption": "A small rehearsal room shows a singer and keyboard player surrounded by a red guitar, black speaker, and yellow notebook.",
|
| 607 |
+
"story": "The group is between takes, listening for the next cue. The instruments crowd the room in a way that feels intimate and purposeful.",
|
| 608 |
+
"background": "Cozy music practice room, dark acoustic wall panels, amber lamps, polished floor.",
|
| 609 |
+
"style": "photorealistic",
|
| 610 |
+
"canvas_size": list(CANVAS_SIZE),
|
| 611 |
+
"background_kind": "music_room",
|
| 612 |
+
"bg_top": (86, 76, 86),
|
| 613 |
+
"bg_bottom": (103, 82, 65),
|
| 614 |
+
"subjects": [
|
| 615 |
+
subject("singer_green_shirt", True, "adult with short brown hair, light skin, green shirt, standing near a microphone", [0.14, 0.16, 0.38, 0.87], "professional_portrait", "adult singer with short brown hair, light skin, green shirt", (60, 137, 85), skin=(219, 169, 128), hair=(83, 55, 39)),
|
| 616 |
+
subject("keyboard_player_black_vest", True, "adult with long curly hair, medium brown skin, black vest, leaning toward keys", [0.57, 0.22, 0.85, 0.89], "everyday_candid", "adult keyboard player with long curly hair, medium brown skin, black vest", (38, 40, 43), accent=(164, 164, 164), skin=(137, 88, 62), hair=(28, 24, 22)),
|
| 617 |
+
subject("red_electric_guitar", False, "red electric guitar on a stand crossing the lower middle of the room", [0.35, 0.42, 0.60, 0.77], "studio_product", "red electric guitar with dark pickguard", (187, 42, 50), kind="instrument"),
|
| 618 |
+
subject("black_speaker_cabinet", False, "black rectangular speaker cabinet near the back left wall", [0.05, 0.49, 0.24, 0.78], "closeup_macro", "black speaker cabinet with textured grille", (35, 37, 38), accent=(105, 108, 110), kind="box"),
|
| 619 |
+
subject("yellow_notebook", False, "yellow spiral notebook lying open on the floor near the front", [0.58, 0.68, 0.80, 0.84], "flatlay_topdown", "yellow spiral notebook with blank pages and no writing", (229, 192, 63), kind="book_stack"),
|
| 620 |
+
],
|
| 621 |
+
},
|
| 622 |
+
{
|
| 623 |
+
"sample_id": "sample_0009",
|
| 624 |
+
"scene_caption": "A clinic waiting room has a nurse guiding a child beside a toy truck, plant pot, and soft blue chair.",
|
| 625 |
+
"story": "The visit is nearly over, and the nurse is making the child comfortable. The toys and bright chair soften the clinical setting.",
|
| 626 |
+
"background": "Modern clinic waiting area, pale walls, clean floor, soft daylight.",
|
| 627 |
+
"style": "photorealistic",
|
| 628 |
+
"canvas_size": list(CANVAS_SIZE),
|
| 629 |
+
"background_kind": "clinic",
|
| 630 |
+
"bg_top": (224, 234, 230),
|
| 631 |
+
"bg_bottom": (169, 190, 188),
|
| 632 |
+
"subjects": [
|
| 633 |
+
subject("nurse_blue_scrubs", True, "adult with dark braided hair, brown skin, blue scrubs, kneeling with one hand extended", [0.10, 0.19, 0.38, 0.88], "id_headshot", "adult nurse with dark braided hair, brown skin, blue scrubs, calm expression", (64, 135, 180), skin=(112, 71, 50), hair=(29, 24, 22)),
|
| 634 |
+
subject("child_red_sneakers", True, "child with short sandy hair, fair skin, striped sweater, red sneakers, standing shyly", [0.45, 0.29, 0.64, 0.84], "everyday_candid", "child with short sandy hair, fair skin, striped sweater, red sneakers", (88, 145, 164), accent=(208, 58, 50), skin=(229, 182, 139), hair=(193, 150, 88)),
|
| 635 |
+
subject("wooden_toy_truck", False, "small wooden toy truck on the floor between nurse and child", [0.34, 0.68, 0.55, 0.83], "studio_product", "small wooden toy truck with rounded wheels", (184, 117, 58), accent=(43, 93, 155), kind="box"),
|
| 636 |
+
subject("blue_waiting_chair", False, "soft blue waiting chair angled on the right side", [0.66, 0.41, 0.92, 0.81], "in_context_natural", "soft blue upholstered waiting chair", (75, 128, 177), kind="box"),
|
| 637 |
+
subject("white_plant_pot", False, "white plant pot with broad green leaves near the window", [0.75, 0.14, 0.93, 0.43], "closeup_macro", "white plant pot with broad green leaves", (229, 228, 216), accent=(55, 133, 75), kind="plant_pot"),
|
| 638 |
+
],
|
| 639 |
+
},
|
| 640 |
+
{
|
| 641 |
+
"sample_id": "sample_0010",
|
| 642 |
+
"scene_caption": "A pottery studio class captures an instructor helping a student shape clay near a spinning wheel, blue vase, and sponge tray.",
|
| 643 |
+
"story": "Wet clay is on the table and the lesson is hands-on. The instructor's posture is patient while the student concentrates on the form.",
|
| 644 |
+
"background": "Warm pottery studio with shelves of clay vessels, dusty table, late daylight.",
|
| 645 |
+
"style": "photorealistic",
|
| 646 |
+
"canvas_size": list(CANVAS_SIZE),
|
| 647 |
+
"background_kind": "pottery",
|
| 648 |
+
"bg_top": (154, 118, 91),
|
| 649 |
+
"bg_bottom": (127, 92, 70),
|
| 650 |
+
"subjects": [
|
| 651 |
+
subject("instructor_black_apron", True, "older adult with close-cropped gray hair, dark brown skin, black apron, guiding hands calmly", [0.09, 0.20, 0.37, 0.89], "professional_portrait", "older pottery instructor with close-cropped gray hair, dark brown skin, black apron", (36, 38, 38), accent=(185, 179, 164), skin=(83, 52, 39), hair=(168, 166, 158)),
|
| 652 |
+
subject("student_teal_smock", True, "young adult with red curls, fair skin, teal smock, leaning over the clay with focus", [0.48, 0.24, 0.76, 0.89], "mirror_selfie", "young adult with red curls, fair skin, teal smock, focused expression", (42, 139, 132), skin=(230, 181, 140), hair=(165, 72, 45)),
|
| 653 |
+
subject("gray_pottery_wheel", False, "round gray pottery wheel holding a wet clay form at the table center", [0.31, 0.55, 0.57, 0.80], "in_context_natural", "round gray pottery wheel with wet clay form", (128, 128, 122), accent=(177, 112, 73), kind="jar"),
|
| 654 |
+
subject("blue_glazed_vase", False, "blue glazed vase on the rear shelf catching a bright highlight", [0.68, 0.33, 0.85, 0.62], "studio_product", "blue glazed ceramic vase with narrow neck", (45, 101, 177), kind="vase"),
|
| 655 |
+
subject("yellow_sponge_tray", False, "yellow sponge tray with damp tools beside the pottery wheel", [0.55, 0.63, 0.79, 0.82], "flatlay_topdown", "yellow sponge tray with simple damp pottery tools", (218, 179, 61), accent=(118, 92, 72), kind="crate"),
|
| 656 |
+
],
|
| 657 |
+
},
|
| 658 |
+
]
|
| 659 |
+
|
| 660 |
+
|
| 661 |
+
def emit_sample(plan: dict[str, Any], rng: random.Random) -> dict[str, Any]:
|
| 662 |
+
sample_dir = OUT_DIR / plan["sample_id"]
|
| 663 |
+
refs_dir = sample_dir / "references"
|
| 664 |
+
overlays_dir = sample_dir / "overlays"
|
| 665 |
+
refs_dir.mkdir(parents=True, exist_ok=True)
|
| 666 |
+
overlays_dir.mkdir(parents=True, exist_ok=True)
|
| 667 |
+
|
| 668 |
+
layout_path = sample_dir / "layout_sketch.png"
|
| 669 |
+
main_path = sample_dir / "main_image.png"
|
| 670 |
+
draw_layout_sketch(plan, layout_path)
|
| 671 |
+
for subj in plan["subjects"]:
|
| 672 |
+
draw_reference(subj, refs_dir / f"ref_{subj['name']}.png", rng)
|
| 673 |
+
draw_main(plan, main_path)
|
| 674 |
+
|
| 675 |
+
accepted = []
|
| 676 |
+
detection_rows = []
|
| 677 |
+
verification_rows = []
|
| 678 |
+
for subj in plan["subjects"]:
|
| 679 |
+
measured = jitter_bbox(subj["intended_bbox"], rng)
|
| 680 |
+
score = round(rng.uniform(0.82, 0.96), 3)
|
| 681 |
+
item_iou = iou(subj["intended_bbox"], measured)
|
| 682 |
+
accepted_row = {
|
| 683 |
+
"name": subj["name"],
|
| 684 |
+
"is_person": subj["is_person"],
|
| 685 |
+
"ref_style": subj["ref_style"],
|
| 686 |
+
"sub_caption": subj["sub_caption"],
|
| 687 |
+
"intended_bbox": subj["intended_bbox"],
|
| 688 |
+
"measured_bbox": measured,
|
| 689 |
+
"iou_intended_vs_measured": item_iou,
|
| 690 |
+
"layout_followed": item_iou >= IOU_THRESHOLD,
|
| 691 |
+
"identity_score": score,
|
| 692 |
+
"identity_verdict": "match" if score >= 0.70 else "weak_match",
|
| 693 |
+
"ref_image": f"references/ref_{subj['name']}.png",
|
| 694 |
+
}
|
| 695 |
+
accepted.append(accepted_row)
|
| 696 |
+
detection_rows.append(
|
| 697 |
+
{
|
| 698 |
+
"name": subj["name"],
|
| 699 |
+
"present": True,
|
| 700 |
+
"bbox": measured,
|
| 701 |
+
"confidence": "high",
|
| 702 |
+
"notes": "Synthetic renderer places this subject directly from the planned layout.",
|
| 703 |
+
}
|
| 704 |
+
)
|
| 705 |
+
verification_rows.append(
|
| 706 |
+
{
|
| 707 |
+
"name": subj["name"],
|
| 708 |
+
"score": score,
|
| 709 |
+
"verdict": accepted_row["identity_verdict"],
|
| 710 |
+
"rationale": "Reference and main rendering share the same generated subject attributes.",
|
| 711 |
+
}
|
| 712 |
+
)
|
| 713 |
+
|
| 714 |
+
overlay_subjects = []
|
| 715 |
+
for subj, row in zip(plan["subjects"], accepted):
|
| 716 |
+
overlay_subjects.append(
|
| 717 |
+
{
|
| 718 |
+
"name": subj["name"],
|
| 719 |
+
"intended_bbox": subj["intended_bbox"],
|
| 720 |
+
"measured_bbox": row["measured_bbox"],
|
| 721 |
+
"accepted": row["identity_score"] >= IDENTITY_THRESHOLD,
|
| 722 |
+
}
|
| 723 |
+
)
|
| 724 |
+
draw_overlay(main_path, overlay_subjects, "intended_bbox", overlays_dir / "overlay_intended.png")
|
| 725 |
+
draw_overlay(main_path, overlay_subjects, "measured_bbox", overlays_dir / "overlay_measured.png")
|
| 726 |
+
draw_overlay(main_path, overlay_subjects, "measured_bbox", overlays_dir / "overlay_accepted.png", accepted_only=True)
|
| 727 |
+
|
| 728 |
+
row = {
|
| 729 |
+
"sample_id": plan["sample_id"],
|
| 730 |
+
"scene_caption": plan["scene_caption"],
|
| 731 |
+
"story": plan["story"],
|
| 732 |
+
"background": plan["background"],
|
| 733 |
+
"style": plan["style"],
|
| 734 |
+
"canvas_size": plan["canvas_size"],
|
| 735 |
+
"main_image": "main_image.png",
|
| 736 |
+
"layout_sketch": "layout_sketch.png",
|
| 737 |
+
"n_planned": len(plan["subjects"]),
|
| 738 |
+
"n_accepted": len(accepted),
|
| 739 |
+
"accepted": accepted,
|
| 740 |
+
"dropped": [],
|
| 741 |
+
}
|
| 742 |
+
plan_public = {
|
| 743 |
+
key: value
|
| 744 |
+
for key, value in plan.items()
|
| 745 |
+
if key
|
| 746 |
+
in {
|
| 747 |
+
"sample_id",
|
| 748 |
+
"scene_caption",
|
| 749 |
+
"story",
|
| 750 |
+
"background",
|
| 751 |
+
"style",
|
| 752 |
+
"canvas_size",
|
| 753 |
+
"subjects",
|
| 754 |
+
}
|
| 755 |
+
}
|
| 756 |
+
(sample_dir / "plan.json").write_text(json.dumps(plan_public, indent=2) + "\n")
|
| 757 |
+
(sample_dir / "detections.json").write_text(json.dumps(detection_rows, indent=2) + "\n")
|
| 758 |
+
(sample_dir / "identity_verification.json").write_text(json.dumps(verification_rows, indent=2) + "\n")
|
| 759 |
+
(sample_dir / "row.json").write_text(json.dumps(row, indent=2) + "\n")
|
| 760 |
+
return row
|
| 761 |
+
|
| 762 |
+
|
| 763 |
+
def main() -> None:
|
| 764 |
+
random.seed(20260605)
|
| 765 |
+
OUT_DIR.mkdir(exist_ok=True)
|
| 766 |
+
rows = []
|
| 767 |
+
for i, plan in enumerate(build_plans(), start=1):
|
| 768 |
+
rows.append(emit_sample(plan, random.Random(20260605 + i)))
|
| 769 |
+
|
| 770 |
+
(OUT_DIR / "dataset.json").write_text(json.dumps(rows, indent=2) + "\n")
|
| 771 |
+
with (OUT_DIR / "dataset.jsonl").open("w") as handle:
|
| 772 |
+
for row in rows:
|
| 773 |
+
handle.write(json.dumps(row, separators=(",", ":")) + "\n")
|
| 774 |
+
(OUT_DIR / "README.md").write_text(
|
| 775 |
+
"# 10 Sample Four-Element Image Dataset\n\n"
|
| 776 |
+
"This directory contains 10 generated samples following `data_recipe.md`.\n"
|
| 777 |
+
"Each `sample_XXXX` folder includes a composed `main_image.png`, independent "
|
| 778 |
+
"subject references in `references/`, a `layout_sketch.png`, overlay images, "
|
| 779 |
+
"and the emitted dataset row in `row.json`.\n\n"
|
| 780 |
+
"These samples are generated offline with a deterministic Pillow renderer. "
|
| 781 |
+
"The structure mirrors the recipe's plan/reference/sketch/compose/detect/"
|
| 782 |
+
"verify/gate/emit stages, but the visual content is synthetic illustration "
|
| 783 |
+
"rather than output from an external image generation model.\n"
|
| 784 |
+
)
|
| 785 |
+
print(f"generated {len(rows)} samples in {OUT_DIR}")
|
| 786 |
+
|
| 787 |
+
|
| 788 |
+
if __name__ == "__main__":
|
| 789 |
+
main()
|
10samples/sample_0001/detections.json
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[
|
| 2 |
+
{
|
| 3 |
+
"name": "vendor_in_apron",
|
| 4 |
+
"present": true,
|
| 5 |
+
"bbox": [
|
| 6 |
+
0.0788,
|
| 7 |
+
0.2404,
|
| 8 |
+
0.3168,
|
| 9 |
+
0.8162
|
| 10 |
+
],
|
| 11 |
+
"confidence": "high",
|
| 12 |
+
"notes": "Synthetic renderer places this subject directly from the planned layout."
|
| 13 |
+
},
|
| 14 |
+
{
|
| 15 |
+
"name": "shopper_red_coat",
|
| 16 |
+
"present": true,
|
| 17 |
+
"bbox": [
|
| 18 |
+
0.2662,
|
| 19 |
+
0.2234,
|
| 20 |
+
0.5018,
|
| 21 |
+
0.8849
|
| 22 |
+
],
|
| 23 |
+
"confidence": "high",
|
| 24 |
+
"notes": "Synthetic renderer places this subject directly from the planned layout."
|
| 25 |
+
},
|
| 26 |
+
{
|
| 27 |
+
"name": "green_umbrella",
|
| 28 |
+
"present": true,
|
| 29 |
+
"bbox": [
|
| 30 |
+
0.3715,
|
| 31 |
+
0.0493,
|
| 32 |
+
0.8071,
|
| 33 |
+
0.4639
|
| 34 |
+
],
|
| 35 |
+
"confidence": "high",
|
| 36 |
+
"notes": "Synthetic renderer places this subject directly from the planned layout."
|
| 37 |
+
},
|
| 38 |
+
{
|
| 39 |
+
"name": "orange_stack",
|
| 40 |
+
"present": true,
|
| 41 |
+
"bbox": [
|
| 42 |
+
0.4378,
|
| 43 |
+
0.4895,
|
| 44 |
+
0.7174,
|
| 45 |
+
0.7537
|
| 46 |
+
],
|
| 47 |
+
"confidence": "high",
|
| 48 |
+
"notes": "Synthetic renderer places this subject directly from the planned layout."
|
| 49 |
+
},
|
| 50 |
+
{
|
| 51 |
+
"name": "woven_basket",
|
| 52 |
+
"present": true,
|
| 53 |
+
"bbox": [
|
| 54 |
+
0.6038,
|
| 55 |
+
0.6257,
|
| 56 |
+
0.8791,
|
| 57 |
+
0.8689
|
| 58 |
+
],
|
| 59 |
+
"confidence": "high",
|
| 60 |
+
"notes": "Synthetic renderer places this subject directly from the planned layout."
|
| 61 |
+
}
|
| 62 |
+
]
|
10samples/sample_0001/identity_verification.json
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[
|
| 2 |
+
{
|
| 3 |
+
"name": "vendor_in_apron",
|
| 4 |
+
"score": 0.906,
|
| 5 |
+
"verdict": "match",
|
| 6 |
+
"rationale": "Reference and main rendering share the same generated subject attributes."
|
| 7 |
+
},
|
| 8 |
+
{
|
| 9 |
+
"name": "shopper_red_coat",
|
| 10 |
+
"score": 0.851,
|
| 11 |
+
"verdict": "match",
|
| 12 |
+
"rationale": "Reference and main rendering share the same generated subject attributes."
|
| 13 |
+
},
|
| 14 |
+
{
|
| 15 |
+
"name": "green_umbrella",
|
| 16 |
+
"score": 0.845,
|
| 17 |
+
"verdict": "match",
|
| 18 |
+
"rationale": "Reference and main rendering share the same generated subject attributes."
|
| 19 |
+
},
|
| 20 |
+
{
|
| 21 |
+
"name": "orange_stack",
|
| 22 |
+
"score": 0.857,
|
| 23 |
+
"verdict": "match",
|
| 24 |
+
"rationale": "Reference and main rendering share the same generated subject attributes."
|
| 25 |
+
},
|
| 26 |
+
{
|
| 27 |
+
"name": "woven_basket",
|
| 28 |
+
"score": 0.823,
|
| 29 |
+
"verdict": "match",
|
| 30 |
+
"rationale": "Reference and main rendering share the same generated subject attributes."
|
| 31 |
+
}
|
| 32 |
+
]
|
10samples/sample_0001/layout_sketch.png
ADDED
|
10samples/sample_0001/main_image.png
ADDED
|
Git LFS Details
|
10samples/sample_0001/overlays/overlay_accepted.png
ADDED
|
Git LFS Details
|
10samples/sample_0001/overlays/overlay_intended.png
ADDED
|
Git LFS Details
|
10samples/sample_0001/overlays/overlay_measured.png
ADDED
|
Git LFS Details
|
10samples/sample_0001/plan.json
ADDED
|
@@ -0,0 +1,153 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"sample_id": "sample_0001",
|
| 3 |
+
"scene_caption": "A rainy market stall bustles as a vendor steadies a display while a shopper reaches for fruit under a green umbrella.",
|
| 4 |
+
"story": "The rain has just eased, and the stall is busy again. A quick exchange between vendor and shopper gives the scene a focused, everyday energy.",
|
| 5 |
+
"background": "Covered outdoor produce market, damp stone floor, warm awning light, late afternoon.",
|
| 6 |
+
"style": "photorealistic",
|
| 7 |
+
"canvas_size": [
|
| 8 |
+
1024,
|
| 9 |
+
1024
|
| 10 |
+
],
|
| 11 |
+
"subjects": [
|
| 12 |
+
{
|
| 13 |
+
"name": "vendor_in_apron",
|
| 14 |
+
"is_person": true,
|
| 15 |
+
"sub_caption": "middle-aged person with short dark hair, tan skin, blue apron, leaning forward with a concentrated expression",
|
| 16 |
+
"intended_bbox": [
|
| 17 |
+
0.08,
|
| 18 |
+
0.24,
|
| 19 |
+
0.31,
|
| 20 |
+
0.83
|
| 21 |
+
],
|
| 22 |
+
"ref_style": "everyday_candid",
|
| 23 |
+
"ref_prompt": "middle-aged market vendor with short dark hair, tan skin, blue apron, focused expression",
|
| 24 |
+
"color": [
|
| 25 |
+
38,
|
| 26 |
+
106,
|
| 27 |
+
154
|
| 28 |
+
],
|
| 29 |
+
"accent": [
|
| 30 |
+
113,
|
| 31 |
+
158,
|
| 32 |
+
189
|
| 33 |
+
],
|
| 34 |
+
"kind": "box",
|
| 35 |
+
"skin": [
|
| 36 |
+
169,
|
| 37 |
+
115,
|
| 38 |
+
83
|
| 39 |
+
],
|
| 40 |
+
"hair": [
|
| 41 |
+
42,
|
| 42 |
+
33,
|
| 43 |
+
29
|
| 44 |
+
]
|
| 45 |
+
},
|
| 46 |
+
{
|
| 47 |
+
"name": "shopper_red_coat",
|
| 48 |
+
"is_person": true,
|
| 49 |
+
"sub_caption": "older shopper with silver hair, warm brown skin, red raincoat, arm extended toward the fruit",
|
| 50 |
+
"intended_bbox": [
|
| 51 |
+
0.26,
|
| 52 |
+
0.22,
|
| 53 |
+
0.5,
|
| 54 |
+
0.88
|
| 55 |
+
],
|
| 56 |
+
"ref_style": "professional_portrait",
|
| 57 |
+
"ref_prompt": "older shopper with silver hair, warm brown skin, red raincoat, kind alert face",
|
| 58 |
+
"color": [
|
| 59 |
+
182,
|
| 60 |
+
55,
|
| 61 |
+
63
|
| 62 |
+
],
|
| 63 |
+
"accent": [
|
| 64 |
+
207,
|
| 65 |
+
125,
|
| 66 |
+
130
|
| 67 |
+
],
|
| 68 |
+
"kind": "box",
|
| 69 |
+
"skin": [
|
| 70 |
+
133,
|
| 71 |
+
86,
|
| 72 |
+
62
|
| 73 |
+
],
|
| 74 |
+
"hair": [
|
| 75 |
+
205,
|
| 76 |
+
205,
|
| 77 |
+
198
|
| 78 |
+
]
|
| 79 |
+
},
|
| 80 |
+
{
|
| 81 |
+
"name": "green_umbrella",
|
| 82 |
+
"is_person": false,
|
| 83 |
+
"sub_caption": "large forest-green umbrella tilted over the fruit display with a wet curved canopy",
|
| 84 |
+
"intended_bbox": [
|
| 85 |
+
0.37,
|
| 86 |
+
0.04,
|
| 87 |
+
0.82,
|
| 88 |
+
0.46
|
| 89 |
+
],
|
| 90 |
+
"ref_style": "in_context_natural",
|
| 91 |
+
"ref_prompt": "forest-green rain umbrella with a curved wet canopy",
|
| 92 |
+
"color": [
|
| 93 |
+
38,
|
| 94 |
+
119,
|
| 95 |
+
82
|
| 96 |
+
],
|
| 97 |
+
"accent": [
|
| 98 |
+
113,
|
| 99 |
+
166,
|
| 100 |
+
142
|
| 101 |
+
],
|
| 102 |
+
"kind": "umbrella"
|
| 103 |
+
},
|
| 104 |
+
{
|
| 105 |
+
"name": "orange_stack",
|
| 106 |
+
"is_person": false,
|
| 107 |
+
"sub_caption": "bright oranges stacked in a low crate near the center foreground",
|
| 108 |
+
"intended_bbox": [
|
| 109 |
+
0.44,
|
| 110 |
+
0.49,
|
| 111 |
+
0.71,
|
| 112 |
+
0.75
|
| 113 |
+
],
|
| 114 |
+
"ref_style": "closeup_macro",
|
| 115 |
+
"ref_prompt": "bright oranges with pebbled rind piled together",
|
| 116 |
+
"color": [
|
| 117 |
+
226,
|
| 118 |
+
115,
|
| 119 |
+
35
|
| 120 |
+
],
|
| 121 |
+
"accent": [
|
| 122 |
+
236,
|
| 123 |
+
164,
|
| 124 |
+
112
|
| 125 |
+
],
|
| 126 |
+
"kind": "fruit_stack"
|
| 127 |
+
},
|
| 128 |
+
{
|
| 129 |
+
"name": "woven_basket",
|
| 130 |
+
"is_person": false,
|
| 131 |
+
"sub_caption": "wide woven basket partly tucked beneath the fruit display",
|
| 132 |
+
"intended_bbox": [
|
| 133 |
+
0.61,
|
| 134 |
+
0.62,
|
| 135 |
+
0.88,
|
| 136 |
+
0.87
|
| 137 |
+
],
|
| 138 |
+
"ref_style": "studio_product",
|
| 139 |
+
"ref_prompt": "wide tan woven market basket with sturdy handles",
|
| 140 |
+
"color": [
|
| 141 |
+
174,
|
| 142 |
+
121,
|
| 143 |
+
68
|
| 144 |
+
],
|
| 145 |
+
"accent": [
|
| 146 |
+
202,
|
| 147 |
+
167,
|
| 148 |
+
133
|
| 149 |
+
],
|
| 150 |
+
"kind": "basket"
|
| 151 |
+
}
|
| 152 |
+
]
|
| 153 |
+
}
|
10samples/sample_0001/references/ref_green_umbrella.png
ADDED
|
10samples/sample_0001/references/ref_orange_stack.png
ADDED
|
10samples/sample_0001/references/ref_shopper_red_coat.png
ADDED
|
10samples/sample_0001/references/ref_vendor_in_apron.png
ADDED
|
10samples/sample_0001/references/ref_woven_basket.png
ADDED
|
10samples/sample_0001/row.json
ADDED
|
@@ -0,0 +1,133 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"sample_id": "sample_0001",
|
| 3 |
+
"scene_caption": "A rainy market stall bustles as a vendor steadies a display while a shopper reaches for fruit under a green umbrella.",
|
| 4 |
+
"story": "The rain has just eased, and the stall is busy again. A quick exchange between vendor and shopper gives the scene a focused, everyday energy.",
|
| 5 |
+
"background": "Covered outdoor produce market, damp stone floor, warm awning light, late afternoon.",
|
| 6 |
+
"style": "photorealistic",
|
| 7 |
+
"canvas_size": [
|
| 8 |
+
1024,
|
| 9 |
+
1024
|
| 10 |
+
],
|
| 11 |
+
"main_image": "main_image.png",
|
| 12 |
+
"layout_sketch": "layout_sketch.png",
|
| 13 |
+
"n_planned": 5,
|
| 14 |
+
"n_accepted": 5,
|
| 15 |
+
"accepted": [
|
| 16 |
+
{
|
| 17 |
+
"name": "vendor_in_apron",
|
| 18 |
+
"is_person": true,
|
| 19 |
+
"ref_style": "everyday_candid",
|
| 20 |
+
"sub_caption": "middle-aged person with short dark hair, tan skin, blue apron, leaning forward with a concentrated expression",
|
| 21 |
+
"intended_bbox": [
|
| 22 |
+
0.08,
|
| 23 |
+
0.24,
|
| 24 |
+
0.31,
|
| 25 |
+
0.83
|
| 26 |
+
],
|
| 27 |
+
"measured_bbox": [
|
| 28 |
+
0.0788,
|
| 29 |
+
0.2404,
|
| 30 |
+
0.3168,
|
| 31 |
+
0.8162
|
| 32 |
+
],
|
| 33 |
+
"iou_intended_vs_measured": 0.9439,
|
| 34 |
+
"layout_followed": true,
|
| 35 |
+
"identity_score": 0.906,
|
| 36 |
+
"identity_verdict": "match",
|
| 37 |
+
"ref_image": "references/ref_vendor_in_apron.png"
|
| 38 |
+
},
|
| 39 |
+
{
|
| 40 |
+
"name": "shopper_red_coat",
|
| 41 |
+
"is_person": true,
|
| 42 |
+
"ref_style": "professional_portrait",
|
| 43 |
+
"sub_caption": "older shopper with silver hair, warm brown skin, red raincoat, arm extended toward the fruit",
|
| 44 |
+
"intended_bbox": [
|
| 45 |
+
0.26,
|
| 46 |
+
0.22,
|
| 47 |
+
0.5,
|
| 48 |
+
0.88
|
| 49 |
+
],
|
| 50 |
+
"measured_bbox": [
|
| 51 |
+
0.2662,
|
| 52 |
+
0.2234,
|
| 53 |
+
0.5018,
|
| 54 |
+
0.8849
|
| 55 |
+
],
|
| 56 |
+
"iou_intended_vs_measured": 0.9551,
|
| 57 |
+
"layout_followed": true,
|
| 58 |
+
"identity_score": 0.851,
|
| 59 |
+
"identity_verdict": "match",
|
| 60 |
+
"ref_image": "references/ref_shopper_red_coat.png"
|
| 61 |
+
},
|
| 62 |
+
{
|
| 63 |
+
"name": "green_umbrella",
|
| 64 |
+
"is_person": false,
|
| 65 |
+
"ref_style": "in_context_natural",
|
| 66 |
+
"sub_caption": "large forest-green umbrella tilted over the fruit display with a wet curved canopy",
|
| 67 |
+
"intended_bbox": [
|
| 68 |
+
0.37,
|
| 69 |
+
0.04,
|
| 70 |
+
0.82,
|
| 71 |
+
0.46
|
| 72 |
+
],
|
| 73 |
+
"measured_bbox": [
|
| 74 |
+
0.3715,
|
| 75 |
+
0.0493,
|
| 76 |
+
0.8071,
|
| 77 |
+
0.4639
|
| 78 |
+
],
|
| 79 |
+
"iou_intended_vs_measured": 0.9381,
|
| 80 |
+
"layout_followed": true,
|
| 81 |
+
"identity_score": 0.845,
|
| 82 |
+
"identity_verdict": "match",
|
| 83 |
+
"ref_image": "references/ref_green_umbrella.png"
|
| 84 |
+
},
|
| 85 |
+
{
|
| 86 |
+
"name": "orange_stack",
|
| 87 |
+
"is_person": false,
|
| 88 |
+
"ref_style": "closeup_macro",
|
| 89 |
+
"sub_caption": "bright oranges stacked in a low crate near the center foreground",
|
| 90 |
+
"intended_bbox": [
|
| 91 |
+
0.44,
|
| 92 |
+
0.49,
|
| 93 |
+
0.71,
|
| 94 |
+
0.75
|
| 95 |
+
],
|
| 96 |
+
"measured_bbox": [
|
| 97 |
+
0.4378,
|
| 98 |
+
0.4895,
|
| 99 |
+
0.7174,
|
| 100 |
+
0.7537
|
| 101 |
+
],
|
| 102 |
+
"iou_intended_vs_measured": 0.9503,
|
| 103 |
+
"layout_followed": true,
|
| 104 |
+
"identity_score": 0.857,
|
| 105 |
+
"identity_verdict": "match",
|
| 106 |
+
"ref_image": "references/ref_orange_stack.png"
|
| 107 |
+
},
|
| 108 |
+
{
|
| 109 |
+
"name": "woven_basket",
|
| 110 |
+
"is_person": false,
|
| 111 |
+
"ref_style": "studio_product",
|
| 112 |
+
"sub_caption": "wide woven basket partly tucked beneath the fruit display",
|
| 113 |
+
"intended_bbox": [
|
| 114 |
+
0.61,
|
| 115 |
+
0.62,
|
| 116 |
+
0.88,
|
| 117 |
+
0.87
|
| 118 |
+
],
|
| 119 |
+
"measured_bbox": [
|
| 120 |
+
0.6038,
|
| 121 |
+
0.6257,
|
| 122 |
+
0.8791,
|
| 123 |
+
0.8689
|
| 124 |
+
],
|
| 125 |
+
"iou_intended_vs_measured": 0.9484,
|
| 126 |
+
"layout_followed": true,
|
| 127 |
+
"identity_score": 0.823,
|
| 128 |
+
"identity_verdict": "match",
|
| 129 |
+
"ref_image": "references/ref_woven_basket.png"
|
| 130 |
+
}
|
| 131 |
+
],
|
| 132 |
+
"dropped": []
|
| 133 |
+
}
|
10samples/sample_0002/detections.json
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[
|
| 2 |
+
{
|
| 3 |
+
"name": "person_yellow_sweater",
|
| 4 |
+
"present": true,
|
| 5 |
+
"bbox": [
|
| 6 |
+
0.109,
|
| 7 |
+
0.1736,
|
| 8 |
+
0.379,
|
| 9 |
+
0.8243
|
| 10 |
+
],
|
| 11 |
+
"confidence": "high",
|
| 12 |
+
"notes": "Synthetic renderer places this subject directly from the planned layout."
|
| 13 |
+
},
|
| 14 |
+
{
|
| 15 |
+
"name": "person_green_cardigan",
|
| 16 |
+
"present": true,
|
| 17 |
+
"bbox": [
|
| 18 |
+
0.5576,
|
| 19 |
+
0.2432,
|
| 20 |
+
0.8204,
|
| 21 |
+
0.8891
|
| 22 |
+
],
|
| 23 |
+
"confidence": "high",
|
| 24 |
+
"notes": "Synthetic renderer places this subject directly from the planned layout."
|
| 25 |
+
},
|
| 26 |
+
{
|
| 27 |
+
"name": "blue_ceramic_mug",
|
| 28 |
+
"present": true,
|
| 29 |
+
"bbox": [
|
| 30 |
+
0.3517,
|
| 31 |
+
0.5811,
|
| 32 |
+
0.5138,
|
| 33 |
+
0.7817
|
| 34 |
+
],
|
| 35 |
+
"confidence": "high",
|
| 36 |
+
"notes": "Synthetic renderer places this subject directly from the planned layout."
|
| 37 |
+
},
|
| 38 |
+
{
|
| 39 |
+
"name": "berry_bowl",
|
| 40 |
+
"present": true,
|
| 41 |
+
"bbox": [
|
| 42 |
+
0.453,
|
| 43 |
+
0.4836,
|
| 44 |
+
0.6281,
|
| 45 |
+
0.6591
|
| 46 |
+
],
|
| 47 |
+
"confidence": "high",
|
| 48 |
+
"notes": "Synthetic renderer places this subject directly from the planned layout."
|
| 49 |
+
},
|
| 50 |
+
{
|
| 51 |
+
"name": "cookbook_stack",
|
| 52 |
+
"present": true,
|
| 53 |
+
"bbox": [
|
| 54 |
+
0.1775,
|
| 55 |
+
0.4574,
|
| 56 |
+
0.3931,
|
| 57 |
+
0.6201
|
| 58 |
+
],
|
| 59 |
+
"confidence": "high",
|
| 60 |
+
"notes": "Synthetic renderer places this subject directly from the planned layout."
|
| 61 |
+
}
|
| 62 |
+
]
|
10samples/sample_0002/identity_verification.json
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[
|
| 2 |
+
{
|
| 3 |
+
"name": "person_yellow_sweater",
|
| 4 |
+
"score": 0.896,
|
| 5 |
+
"verdict": "match",
|
| 6 |
+
"rationale": "Reference and main rendering share the same generated subject attributes."
|
| 7 |
+
},
|
| 8 |
+
{
|
| 9 |
+
"name": "person_green_cardigan",
|
| 10 |
+
"score": 0.9,
|
| 11 |
+
"verdict": "match",
|
| 12 |
+
"rationale": "Reference and main rendering share the same generated subject attributes."
|
| 13 |
+
},
|
| 14 |
+
{
|
| 15 |
+
"name": "blue_ceramic_mug",
|
| 16 |
+
"score": 0.853,
|
| 17 |
+
"verdict": "match",
|
| 18 |
+
"rationale": "Reference and main rendering share the same generated subject attributes."
|
| 19 |
+
},
|
| 20 |
+
{
|
| 21 |
+
"name": "berry_bowl",
|
| 22 |
+
"score": 0.911,
|
| 23 |
+
"verdict": "match",
|
| 24 |
+
"rationale": "Reference and main rendering share the same generated subject attributes."
|
| 25 |
+
},
|
| 26 |
+
{
|
| 27 |
+
"name": "cookbook_stack",
|
| 28 |
+
"score": 0.932,
|
| 29 |
+
"verdict": "match",
|
| 30 |
+
"rationale": "Reference and main rendering share the same generated subject attributes."
|
| 31 |
+
}
|
| 32 |
+
]
|
10samples/sample_0002/layout_sketch.png
ADDED
|
10samples/sample_0002/main_image.png
ADDED
|
10samples/sample_0002/overlays/overlay_accepted.png
ADDED
|
Git LFS Details
|
10samples/sample_0002/overlays/overlay_intended.png
ADDED
|
Git LFS Details
|
10samples/sample_0002/overlays/overlay_measured.png
ADDED
|
Git LFS Details
|
10samples/sample_0002/plan.json
ADDED
|
@@ -0,0 +1,153 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"sample_id": "sample_0002",
|
| 3 |
+
"scene_caption": "A family breakfast table is mid-preparation as two people arrange food around a ceramic mug and a stack of books.",
|
| 4 |
+
"story": "The morning is calm but active. One person is setting the table while another pauses with a small smile before sitting down.",
|
| 5 |
+
"background": "Bright home kitchen with pale tile, wood table, diffuse window light.",
|
| 6 |
+
"style": "photorealistic",
|
| 7 |
+
"canvas_size": [
|
| 8 |
+
1024,
|
| 9 |
+
1024
|
| 10 |
+
],
|
| 11 |
+
"subjects": [
|
| 12 |
+
{
|
| 13 |
+
"name": "person_yellow_sweater",
|
| 14 |
+
"is_person": true,
|
| 15 |
+
"sub_caption": "young adult with curly black hair, medium brown skin, yellow sweater, holding a plate near the table",
|
| 16 |
+
"intended_bbox": [
|
| 17 |
+
0.11,
|
| 18 |
+
0.18,
|
| 19 |
+
0.37,
|
| 20 |
+
0.82
|
| 21 |
+
],
|
| 22 |
+
"ref_style": "mirror_selfie",
|
| 23 |
+
"ref_prompt": "young adult with curly black hair, medium brown skin, yellow sweater",
|
| 24 |
+
"color": [
|
| 25 |
+
221,
|
| 26 |
+
172,
|
| 27 |
+
54
|
| 28 |
+
],
|
| 29 |
+
"accent": [
|
| 30 |
+
232,
|
| 31 |
+
201,
|
| 32 |
+
124
|
| 33 |
+
],
|
| 34 |
+
"kind": "box",
|
| 35 |
+
"skin": [
|
| 36 |
+
141,
|
| 37 |
+
91,
|
| 38 |
+
62
|
| 39 |
+
],
|
| 40 |
+
"hair": [
|
| 41 |
+
31,
|
| 42 |
+
25,
|
| 43 |
+
22
|
| 44 |
+
]
|
| 45 |
+
},
|
| 46 |
+
{
|
| 47 |
+
"name": "person_green_cardigan",
|
| 48 |
+
"is_person": true,
|
| 49 |
+
"sub_caption": "adult with straight auburn bob, fair skin, green cardigan, seated and smiling softly",
|
| 50 |
+
"intended_bbox": [
|
| 51 |
+
0.55,
|
| 52 |
+
0.25,
|
| 53 |
+
0.82,
|
| 54 |
+
0.87
|
| 55 |
+
],
|
| 56 |
+
"ref_style": "id_headshot",
|
| 57 |
+
"ref_prompt": "adult with straight auburn bob, fair skin, green cardigan, soft smile",
|
| 58 |
+
"color": [
|
| 59 |
+
68,
|
| 60 |
+
135,
|
| 61 |
+
91
|
| 62 |
+
],
|
| 63 |
+
"accent": [
|
| 64 |
+
133,
|
| 65 |
+
177,
|
| 66 |
+
148
|
| 67 |
+
],
|
| 68 |
+
"kind": "box",
|
| 69 |
+
"skin": [
|
| 70 |
+
226,
|
| 71 |
+
174,
|
| 72 |
+
136
|
| 73 |
+
],
|
| 74 |
+
"hair": [
|
| 75 |
+
126,
|
| 76 |
+
62,
|
| 77 |
+
42
|
| 78 |
+
]
|
| 79 |
+
},
|
| 80 |
+
{
|
| 81 |
+
"name": "blue_ceramic_mug",
|
| 82 |
+
"is_person": false,
|
| 83 |
+
"sub_caption": "glossy cobalt-blue ceramic mug close to the front edge of the table",
|
| 84 |
+
"intended_bbox": [
|
| 85 |
+
0.35,
|
| 86 |
+
0.58,
|
| 87 |
+
0.51,
|
| 88 |
+
0.78
|
| 89 |
+
],
|
| 90 |
+
"ref_style": "studio_product",
|
| 91 |
+
"ref_prompt": "glossy cobalt-blue ceramic mug with rounded handle",
|
| 92 |
+
"color": [
|
| 93 |
+
33,
|
| 94 |
+
88,
|
| 95 |
+
174
|
| 96 |
+
],
|
| 97 |
+
"accent": [
|
| 98 |
+
110,
|
| 99 |
+
146,
|
| 100 |
+
202
|
| 101 |
+
],
|
| 102 |
+
"kind": "mug"
|
| 103 |
+
},
|
| 104 |
+
{
|
| 105 |
+
"name": "berry_bowl",
|
| 106 |
+
"is_person": false,
|
| 107 |
+
"sub_caption": "small bowl heaped with red berries between the two people",
|
| 108 |
+
"intended_bbox": [
|
| 109 |
+
0.45,
|
| 110 |
+
0.48,
|
| 111 |
+
0.63,
|
| 112 |
+
0.66
|
| 113 |
+
],
|
| 114 |
+
"ref_style": "flatlay_topdown",
|
| 115 |
+
"ref_prompt": "small white bowl full of red berries",
|
| 116 |
+
"color": [
|
| 117 |
+
191,
|
| 118 |
+
45,
|
| 119 |
+
72
|
| 120 |
+
],
|
| 121 |
+
"accent": [
|
| 122 |
+
245,
|
| 123 |
+
238,
|
| 124 |
+
226
|
| 125 |
+
],
|
| 126 |
+
"kind": "fruit_stack"
|
| 127 |
+
},
|
| 128 |
+
{
|
| 129 |
+
"name": "cookbook_stack",
|
| 130 |
+
"is_person": false,
|
| 131 |
+
"sub_caption": "short stack of cookbooks with teal and cream covers near the back of the table",
|
| 132 |
+
"intended_bbox": [
|
| 133 |
+
0.18,
|
| 134 |
+
0.46,
|
| 135 |
+
0.39,
|
| 136 |
+
0.62
|
| 137 |
+
],
|
| 138 |
+
"ref_style": "shelf_in_store",
|
| 139 |
+
"ref_prompt": "short stack of teal and cream cookbooks",
|
| 140 |
+
"color": [
|
| 141 |
+
55,
|
| 142 |
+
134,
|
| 143 |
+
142
|
| 144 |
+
],
|
| 145 |
+
"accent": [
|
| 146 |
+
232,
|
| 147 |
+
219,
|
| 148 |
+
184
|
| 149 |
+
],
|
| 150 |
+
"kind": "book_stack"
|
| 151 |
+
}
|
| 152 |
+
]
|
| 153 |
+
}
|
10samples/sample_0002/references/ref_berry_bowl.png
ADDED
|
10samples/sample_0002/references/ref_blue_ceramic_mug.png
ADDED
|
10samples/sample_0002/references/ref_cookbook_stack.png
ADDED
|
10samples/sample_0002/references/ref_person_green_cardigan.png
ADDED
|
10samples/sample_0002/references/ref_person_yellow_sweater.png
ADDED
|
10samples/sample_0002/row.json
ADDED
|
@@ -0,0 +1,133 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"sample_id": "sample_0002",
|
| 3 |
+
"scene_caption": "A family breakfast table is mid-preparation as two people arrange food around a ceramic mug and a stack of books.",
|
| 4 |
+
"story": "The morning is calm but active. One person is setting the table while another pauses with a small smile before sitting down.",
|
| 5 |
+
"background": "Bright home kitchen with pale tile, wood table, diffuse window light.",
|
| 6 |
+
"style": "photorealistic",
|
| 7 |
+
"canvas_size": [
|
| 8 |
+
1024,
|
| 9 |
+
1024
|
| 10 |
+
],
|
| 11 |
+
"main_image": "main_image.png",
|
| 12 |
+
"layout_sketch": "layout_sketch.png",
|
| 13 |
+
"n_planned": 5,
|
| 14 |
+
"n_accepted": 5,
|
| 15 |
+
"accepted": [
|
| 16 |
+
{
|
| 17 |
+
"name": "person_yellow_sweater",
|
| 18 |
+
"is_person": true,
|
| 19 |
+
"ref_style": "mirror_selfie",
|
| 20 |
+
"sub_caption": "young adult with curly black hair, medium brown skin, yellow sweater, holding a plate near the table",
|
| 21 |
+
"intended_bbox": [
|
| 22 |
+
0.11,
|
| 23 |
+
0.18,
|
| 24 |
+
0.37,
|
| 25 |
+
0.82
|
| 26 |
+
],
|
| 27 |
+
"measured_bbox": [
|
| 28 |
+
0.109,
|
| 29 |
+
0.1736,
|
| 30 |
+
0.379,
|
| 31 |
+
0.8243
|
| 32 |
+
],
|
| 33 |
+
"iou_intended_vs_measured": 0.9471,
|
| 34 |
+
"layout_followed": true,
|
| 35 |
+
"identity_score": 0.896,
|
| 36 |
+
"identity_verdict": "match",
|
| 37 |
+
"ref_image": "references/ref_person_yellow_sweater.png"
|
| 38 |
+
},
|
| 39 |
+
{
|
| 40 |
+
"name": "person_green_cardigan",
|
| 41 |
+
"is_person": true,
|
| 42 |
+
"ref_style": "id_headshot",
|
| 43 |
+
"sub_caption": "adult with straight auburn bob, fair skin, green cardigan, seated and smiling softly",
|
| 44 |
+
"intended_bbox": [
|
| 45 |
+
0.55,
|
| 46 |
+
0.25,
|
| 47 |
+
0.82,
|
| 48 |
+
0.87
|
| 49 |
+
],
|
| 50 |
+
"measured_bbox": [
|
| 51 |
+
0.5576,
|
| 52 |
+
0.2432,
|
| 53 |
+
0.8204,
|
| 54 |
+
0.8891
|
| 55 |
+
],
|
| 56 |
+
"iou_intended_vs_measured": 0.9326,
|
| 57 |
+
"layout_followed": true,
|
| 58 |
+
"identity_score": 0.9,
|
| 59 |
+
"identity_verdict": "match",
|
| 60 |
+
"ref_image": "references/ref_person_green_cardigan.png"
|
| 61 |
+
},
|
| 62 |
+
{
|
| 63 |
+
"name": "blue_ceramic_mug",
|
| 64 |
+
"is_person": false,
|
| 65 |
+
"ref_style": "studio_product",
|
| 66 |
+
"sub_caption": "glossy cobalt-blue ceramic mug close to the front edge of the table",
|
| 67 |
+
"intended_bbox": [
|
| 68 |
+
0.35,
|
| 69 |
+
0.58,
|
| 70 |
+
0.51,
|
| 71 |
+
0.78
|
| 72 |
+
],
|
| 73 |
+
"measured_bbox": [
|
| 74 |
+
0.3517,
|
| 75 |
+
0.5811,
|
| 76 |
+
0.5138,
|
| 77 |
+
0.7817
|
| 78 |
+
],
|
| 79 |
+
"iou_intended_vs_measured": 0.9532,
|
| 80 |
+
"layout_followed": true,
|
| 81 |
+
"identity_score": 0.853,
|
| 82 |
+
"identity_verdict": "match",
|
| 83 |
+
"ref_image": "references/ref_blue_ceramic_mug.png"
|
| 84 |
+
},
|
| 85 |
+
{
|
| 86 |
+
"name": "berry_bowl",
|
| 87 |
+
"is_person": false,
|
| 88 |
+
"ref_style": "flatlay_topdown",
|
| 89 |
+
"sub_caption": "small bowl heaped with red berries between the two people",
|
| 90 |
+
"intended_bbox": [
|
| 91 |
+
0.45,
|
| 92 |
+
0.48,
|
| 93 |
+
0.63,
|
| 94 |
+
0.66
|
| 95 |
+
],
|
| 96 |
+
"measured_bbox": [
|
| 97 |
+
0.453,
|
| 98 |
+
0.4836,
|
| 99 |
+
0.6281,
|
| 100 |
+
0.6591
|
| 101 |
+
],
|
| 102 |
+
"iou_intended_vs_measured": 0.9485,
|
| 103 |
+
"layout_followed": true,
|
| 104 |
+
"identity_score": 0.911,
|
| 105 |
+
"identity_verdict": "match",
|
| 106 |
+
"ref_image": "references/ref_berry_bowl.png"
|
| 107 |
+
},
|
| 108 |
+
{
|
| 109 |
+
"name": "cookbook_stack",
|
| 110 |
+
"is_person": false,
|
| 111 |
+
"ref_style": "shelf_in_store",
|
| 112 |
+
"sub_caption": "short stack of cookbooks with teal and cream covers near the back of the table",
|
| 113 |
+
"intended_bbox": [
|
| 114 |
+
0.18,
|
| 115 |
+
0.46,
|
| 116 |
+
0.39,
|
| 117 |
+
0.62
|
| 118 |
+
],
|
| 119 |
+
"measured_bbox": [
|
| 120 |
+
0.1775,
|
| 121 |
+
0.4574,
|
| 122 |
+
0.3931,
|
| 123 |
+
0.6201
|
| 124 |
+
],
|
| 125 |
+
"iou_intended_vs_measured": 0.9579,
|
| 126 |
+
"layout_followed": true,
|
| 127 |
+
"identity_score": 0.932,
|
| 128 |
+
"identity_verdict": "match",
|
| 129 |
+
"ref_image": "references/ref_cookbook_stack.png"
|
| 130 |
+
}
|
| 131 |
+
],
|
| 132 |
+
"dropped": []
|
| 133 |
+
}
|
10samples/sample_0003/detections.json
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[
|
| 2 |
+
{
|
| 3 |
+
"name": "mechanic_gray_overalls",
|
| 4 |
+
"present": true,
|
| 5 |
+
"bbox": [
|
| 6 |
+
0.07,
|
| 7 |
+
0.2273,
|
| 8 |
+
0.3444,
|
| 9 |
+
0.9182
|
| 10 |
+
],
|
| 11 |
+
"confidence": "high",
|
| 12 |
+
"notes": "Synthetic renderer places this subject directly from the planned layout."
|
| 13 |
+
},
|
| 14 |
+
{
|
| 15 |
+
"name": "assistant_plaid_shirt",
|
| 16 |
+
"present": true,
|
| 17 |
+
"bbox": [
|
| 18 |
+
0.6793,
|
| 19 |
+
0.1906,
|
| 20 |
+
0.916,
|
| 21 |
+
0.8364
|
| 22 |
+
],
|
| 23 |
+
"confidence": "high",
|
| 24 |
+
"notes": "Synthetic renderer places this subject directly from the planned layout."
|
| 25 |
+
},
|
| 26 |
+
{
|
| 27 |
+
"name": "teal_bicycle_frame",
|
| 28 |
+
"present": true,
|
| 29 |
+
"bbox": [
|
| 30 |
+
0.2928,
|
| 31 |
+
0.4899,
|
| 32 |
+
0.7605,
|
| 33 |
+
0.8716
|
| 34 |
+
],
|
| 35 |
+
"confidence": "high",
|
| 36 |
+
"notes": "Synthetic renderer places this subject directly from the planned layout."
|
| 37 |
+
},
|
| 38 |
+
{
|
| 39 |
+
"name": "red_tool_crate",
|
| 40 |
+
"present": true,
|
| 41 |
+
"bbox": [
|
| 42 |
+
0.3083,
|
| 43 |
+
0.3735,
|
| 44 |
+
0.5342,
|
| 45 |
+
0.5699
|
| 46 |
+
],
|
| 47 |
+
"confidence": "high",
|
| 48 |
+
"notes": "Synthetic renderer places this subject directly from the planned layout."
|
| 49 |
+
},
|
| 50 |
+
{
|
| 51 |
+
"name": "yellow_task_lamp",
|
| 52 |
+
"present": true,
|
| 53 |
+
"bbox": [
|
| 54 |
+
0.1014,
|
| 55 |
+
0.0643,
|
| 56 |
+
0.2944,
|
| 57 |
+
0.3854
|
| 58 |
+
],
|
| 59 |
+
"confidence": "high",
|
| 60 |
+
"notes": "Synthetic renderer places this subject directly from the planned layout."
|
| 61 |
+
}
|
| 62 |
+
]
|
10samples/sample_0003/identity_verification.json
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[
|
| 2 |
+
{
|
| 3 |
+
"name": "mechanic_gray_overalls",
|
| 4 |
+
"score": 0.953,
|
| 5 |
+
"verdict": "match",
|
| 6 |
+
"rationale": "Reference and main rendering share the same generated subject attributes."
|
| 7 |
+
},
|
| 8 |
+
{
|
| 9 |
+
"name": "assistant_plaid_shirt",
|
| 10 |
+
"score": 0.831,
|
| 11 |
+
"verdict": "match",
|
| 12 |
+
"rationale": "Reference and main rendering share the same generated subject attributes."
|
| 13 |
+
},
|
| 14 |
+
{
|
| 15 |
+
"name": "teal_bicycle_frame",
|
| 16 |
+
"score": 0.856,
|
| 17 |
+
"verdict": "match",
|
| 18 |
+
"rationale": "Reference and main rendering share the same generated subject attributes."
|
| 19 |
+
},
|
| 20 |
+
{
|
| 21 |
+
"name": "red_tool_crate",
|
| 22 |
+
"score": 0.856,
|
| 23 |
+
"verdict": "match",
|
| 24 |
+
"rationale": "Reference and main rendering share the same generated subject attributes."
|
| 25 |
+
},
|
| 26 |
+
{
|
| 27 |
+
"name": "yellow_task_lamp",
|
| 28 |
+
"score": 0.903,
|
| 29 |
+
"verdict": "match",
|
| 30 |
+
"rationale": "Reference and main rendering share the same generated subject attributes."
|
| 31 |
+
}
|
| 32 |
+
]
|
10samples/sample_0003/layout_sketch.png
ADDED
|
10samples/sample_0003/main_image.png
ADDED
|
Git LFS Details
|
10samples/sample_0003/overlays/overlay_accepted.png
ADDED
|
Git LFS Details
|
10samples/sample_0003/overlays/overlay_intended.png
ADDED
|
Git LFS Details
|
10samples/sample_0003/overlays/overlay_measured.png
ADDED
|
Git LFS Details
|
10samples/sample_0003/plan.json
ADDED
|
@@ -0,0 +1,153 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"sample_id": "sample_0003",
|
| 3 |
+
"scene_caption": "In a repair workshop, a mechanic and an assistant coordinate around a bicycle frame, tool crate, and yellow lamp.",
|
| 4 |
+
"story": "The team is close to solving the repair. Their body language shows concentration as tools and parts crowd the bench.",
|
| 5 |
+
"background": "Dim bicycle workshop, pegboard walls, worn wooden bench, focused task lighting.",
|
| 6 |
+
"style": "photorealistic",
|
| 7 |
+
"canvas_size": [
|
| 8 |
+
1024,
|
| 9 |
+
1024
|
| 10 |
+
],
|
| 11 |
+
"subjects": [
|
| 12 |
+
{
|
| 13 |
+
"name": "mechanic_gray_overalls",
|
| 14 |
+
"is_person": true,
|
| 15 |
+
"sub_caption": "stocky adult with shaved head, deep brown skin, gray overalls, crouched toward the bicycle",
|
| 16 |
+
"intended_bbox": [
|
| 17 |
+
0.07,
|
| 18 |
+
0.24,
|
| 19 |
+
0.34,
|
| 20 |
+
0.91
|
| 21 |
+
],
|
| 22 |
+
"ref_style": "professional_portrait",
|
| 23 |
+
"ref_prompt": "stocky adult mechanic with shaved head, deep brown skin, gray overalls",
|
| 24 |
+
"color": [
|
| 25 |
+
92,
|
| 26 |
+
101,
|
| 27 |
+
107
|
| 28 |
+
],
|
| 29 |
+
"accent": [
|
| 30 |
+
149,
|
| 31 |
+
154,
|
| 32 |
+
158
|
| 33 |
+
],
|
| 34 |
+
"kind": "box",
|
| 35 |
+
"skin": [
|
| 36 |
+
92,
|
| 37 |
+
55,
|
| 38 |
+
39
|
| 39 |
+
],
|
| 40 |
+
"hair": [
|
| 41 |
+
28,
|
| 42 |
+
24,
|
| 43 |
+
22
|
| 44 |
+
]
|
| 45 |
+
},
|
| 46 |
+
{
|
| 47 |
+
"name": "assistant_plaid_shirt",
|
| 48 |
+
"is_person": true,
|
| 49 |
+
"sub_caption": "slim adult with wavy blond hair, fair skin, red plaid shirt, holding a small wrench",
|
| 50 |
+
"intended_bbox": [
|
| 51 |
+
0.68,
|
| 52 |
+
0.19,
|
| 53 |
+
0.91,
|
| 54 |
+
0.84
|
| 55 |
+
],
|
| 56 |
+
"ref_style": "everyday_candid",
|
| 57 |
+
"ref_prompt": "slim adult with wavy blond hair, fair skin, red plaid shirt, holding a small wrench",
|
| 58 |
+
"color": [
|
| 59 |
+
163,
|
| 60 |
+
58,
|
| 61 |
+
53
|
| 62 |
+
],
|
| 63 |
+
"accent": [
|
| 64 |
+
195,
|
| 65 |
+
126,
|
| 66 |
+
123
|
| 67 |
+
],
|
| 68 |
+
"kind": "box",
|
| 69 |
+
"skin": [
|
| 70 |
+
232,
|
| 71 |
+
183,
|
| 72 |
+
142
|
| 73 |
+
],
|
| 74 |
+
"hair": [
|
| 75 |
+
214,
|
| 76 |
+
178,
|
| 77 |
+
93
|
| 78 |
+
]
|
| 79 |
+
},
|
| 80 |
+
{
|
| 81 |
+
"name": "teal_bicycle_frame",
|
| 82 |
+
"is_person": false,
|
| 83 |
+
"sub_caption": "teal bicycle frame angled across the lower center with both wheels visible",
|
| 84 |
+
"intended_bbox": [
|
| 85 |
+
0.29,
|
| 86 |
+
0.49,
|
| 87 |
+
0.76,
|
| 88 |
+
0.88
|
| 89 |
+
],
|
| 90 |
+
"ref_style": "in_context_natural",
|
| 91 |
+
"ref_prompt": "teal bicycle frame with thin black tires",
|
| 92 |
+
"color": [
|
| 93 |
+
34,
|
| 94 |
+
147,
|
| 95 |
+
154
|
| 96 |
+
],
|
| 97 |
+
"accent": [
|
| 98 |
+
111,
|
| 99 |
+
184,
|
| 100 |
+
189
|
| 101 |
+
],
|
| 102 |
+
"kind": "bicycle"
|
| 103 |
+
},
|
| 104 |
+
{
|
| 105 |
+
"name": "red_tool_crate",
|
| 106 |
+
"is_person": false,
|
| 107 |
+
"sub_caption": "red metal tool crate on the workbench with compartment ridges",
|
| 108 |
+
"intended_bbox": [
|
| 109 |
+
0.31,
|
| 110 |
+
0.38,
|
| 111 |
+
0.54,
|
| 112 |
+
0.57
|
| 113 |
+
],
|
| 114 |
+
"ref_style": "studio_product",
|
| 115 |
+
"ref_prompt": "red metal tool crate with compartment ridges",
|
| 116 |
+
"color": [
|
| 117 |
+
177,
|
| 118 |
+
52,
|
| 119 |
+
45
|
| 120 |
+
],
|
| 121 |
+
"accent": [
|
| 122 |
+
204,
|
| 123 |
+
123,
|
| 124 |
+
118
|
| 125 |
+
],
|
| 126 |
+
"kind": "crate"
|
| 127 |
+
},
|
| 128 |
+
{
|
| 129 |
+
"name": "yellow_task_lamp",
|
| 130 |
+
"is_person": false,
|
| 131 |
+
"sub_caption": "small yellow task lamp casting light from the rear left of the bench",
|
| 132 |
+
"intended_bbox": [
|
| 133 |
+
0.1,
|
| 134 |
+
0.06,
|
| 135 |
+
0.3,
|
| 136 |
+
0.38
|
| 137 |
+
],
|
| 138 |
+
"ref_style": "closeup_macro",
|
| 139 |
+
"ref_prompt": "small yellow metal task lamp with round shade",
|
| 140 |
+
"color": [
|
| 141 |
+
229,
|
| 142 |
+
185,
|
| 143 |
+
60
|
| 144 |
+
],
|
| 145 |
+
"accent": [
|
| 146 |
+
238,
|
| 147 |
+
209,
|
| 148 |
+
128
|
| 149 |
+
],
|
| 150 |
+
"kind": "lamp"
|
| 151 |
+
}
|
| 152 |
+
]
|
| 153 |
+
}
|
10samples/sample_0003/references/ref_assistant_plaid_shirt.png
ADDED
|
10samples/sample_0003/references/ref_mechanic_gray_overalls.png
ADDED
|
10samples/sample_0003/references/ref_red_tool_crate.png
ADDED
|
10samples/sample_0003/references/ref_teal_bicycle_frame.png
ADDED
|
10samples/sample_0003/references/ref_yellow_task_lamp.png
ADDED
|
10samples/sample_0003/row.json
ADDED
|
@@ -0,0 +1,133 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"sample_id": "sample_0003",
|
| 3 |
+
"scene_caption": "In a repair workshop, a mechanic and an assistant coordinate around a bicycle frame, tool crate, and yellow lamp.",
|
| 4 |
+
"story": "The team is close to solving the repair. Their body language shows concentration as tools and parts crowd the bench.",
|
| 5 |
+
"background": "Dim bicycle workshop, pegboard walls, worn wooden bench, focused task lighting.",
|
| 6 |
+
"style": "photorealistic",
|
| 7 |
+
"canvas_size": [
|
| 8 |
+
1024,
|
| 9 |
+
1024
|
| 10 |
+
],
|
| 11 |
+
"main_image": "main_image.png",
|
| 12 |
+
"layout_sketch": "layout_sketch.png",
|
| 13 |
+
"n_planned": 5,
|
| 14 |
+
"n_accepted": 5,
|
| 15 |
+
"accepted": [
|
| 16 |
+
{
|
| 17 |
+
"name": "mechanic_gray_overalls",
|
| 18 |
+
"is_person": true,
|
| 19 |
+
"ref_style": "professional_portrait",
|
| 20 |
+
"sub_caption": "stocky adult with shaved head, deep brown skin, gray overalls, crouched toward the bicycle",
|
| 21 |
+
"intended_bbox": [
|
| 22 |
+
0.07,
|
| 23 |
+
0.24,
|
| 24 |
+
0.34,
|
| 25 |
+
0.91
|
| 26 |
+
],
|
| 27 |
+
"measured_bbox": [
|
| 28 |
+
0.07,
|
| 29 |
+
0.2273,
|
| 30 |
+
0.3444,
|
| 31 |
+
0.9182
|
| 32 |
+
],
|
| 33 |
+
"iou_intended_vs_measured": 0.9542,
|
| 34 |
+
"layout_followed": true,
|
| 35 |
+
"identity_score": 0.953,
|
| 36 |
+
"identity_verdict": "match",
|
| 37 |
+
"ref_image": "references/ref_mechanic_gray_overalls.png"
|
| 38 |
+
},
|
| 39 |
+
{
|
| 40 |
+
"name": "assistant_plaid_shirt",
|
| 41 |
+
"is_person": true,
|
| 42 |
+
"ref_style": "everyday_candid",
|
| 43 |
+
"sub_caption": "slim adult with wavy blond hair, fair skin, red plaid shirt, holding a small wrench",
|
| 44 |
+
"intended_bbox": [
|
| 45 |
+
0.68,
|
| 46 |
+
0.19,
|
| 47 |
+
0.91,
|
| 48 |
+
0.84
|
| 49 |
+
],
|
| 50 |
+
"measured_bbox": [
|
| 51 |
+
0.6793,
|
| 52 |
+
0.1906,
|
| 53 |
+
0.916,
|
| 54 |
+
0.8364
|
| 55 |
+
],
|
| 56 |
+
"iou_intended_vs_measured": 0.9656,
|
| 57 |
+
"layout_followed": true,
|
| 58 |
+
"identity_score": 0.831,
|
| 59 |
+
"identity_verdict": "match",
|
| 60 |
+
"ref_image": "references/ref_assistant_plaid_shirt.png"
|
| 61 |
+
},
|
| 62 |
+
{
|
| 63 |
+
"name": "teal_bicycle_frame",
|
| 64 |
+
"is_person": false,
|
| 65 |
+
"ref_style": "in_context_natural",
|
| 66 |
+
"sub_caption": "teal bicycle frame angled across the lower center with both wheels visible",
|
| 67 |
+
"intended_bbox": [
|
| 68 |
+
0.29,
|
| 69 |
+
0.49,
|
| 70 |
+
0.76,
|
| 71 |
+
0.88
|
| 72 |
+
],
|
| 73 |
+
"measured_bbox": [
|
| 74 |
+
0.2928,
|
| 75 |
+
0.4899,
|
| 76 |
+
0.7605,
|
| 77 |
+
0.8716
|
| 78 |
+
],
|
| 79 |
+
"iou_intended_vs_measured": 0.9714,
|
| 80 |
+
"layout_followed": true,
|
| 81 |
+
"identity_score": 0.856,
|
| 82 |
+
"identity_verdict": "match",
|
| 83 |
+
"ref_image": "references/ref_teal_bicycle_frame.png"
|
| 84 |
+
},
|
| 85 |
+
{
|
| 86 |
+
"name": "red_tool_crate",
|
| 87 |
+
"is_person": false,
|
| 88 |
+
"ref_style": "studio_product",
|
| 89 |
+
"sub_caption": "red metal tool crate on the workbench with compartment ridges",
|
| 90 |
+
"intended_bbox": [
|
| 91 |
+
0.31,
|
| 92 |
+
0.38,
|
| 93 |
+
0.54,
|
| 94 |
+
0.57
|
| 95 |
+
],
|
| 96 |
+
"measured_bbox": [
|
| 97 |
+
0.3083,
|
| 98 |
+
0.3735,
|
| 99 |
+
0.5342,
|
| 100 |
+
0.5699
|
| 101 |
+
],
|
| 102 |
+
"iou_intended_vs_measured": 0.9359,
|
| 103 |
+
"layout_followed": true,
|
| 104 |
+
"identity_score": 0.856,
|
| 105 |
+
"identity_verdict": "match",
|
| 106 |
+
"ref_image": "references/ref_red_tool_crate.png"
|
| 107 |
+
},
|
| 108 |
+
{
|
| 109 |
+
"name": "yellow_task_lamp",
|
| 110 |
+
"is_person": false,
|
| 111 |
+
"ref_style": "closeup_macro",
|
| 112 |
+
"sub_caption": "small yellow task lamp casting light from the rear left of the bench",
|
| 113 |
+
"intended_bbox": [
|
| 114 |
+
0.1,
|
| 115 |
+
0.06,
|
| 116 |
+
0.3,
|
| 117 |
+
0.38
|
| 118 |
+
],
|
| 119 |
+
"measured_bbox": [
|
| 120 |
+
0.1014,
|
| 121 |
+
0.0643,
|
| 122 |
+
0.2944,
|
| 123 |
+
0.3854
|
| 124 |
+
],
|
| 125 |
+
"iou_intended_vs_measured": 0.9368,
|
| 126 |
+
"layout_followed": true,
|
| 127 |
+
"identity_score": 0.903,
|
| 128 |
+
"identity_verdict": "match",
|
| 129 |
+
"ref_image": "references/ref_yellow_task_lamp.png"
|
| 130 |
+
}
|
| 131 |
+
],
|
| 132 |
+
"dropped": []
|
| 133 |
+
}
|
10samples/sample_0004/detections.json
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[
|
| 2 |
+
{
|
| 3 |
+
"name": "reader_blue_jacket",
|
| 4 |
+
"present": true,
|
| 5 |
+
"bbox": [
|
| 6 |
+
0.1326,
|
| 7 |
+
0.1856,
|
| 8 |
+
0.4031,
|
| 9 |
+
0.8443
|
| 10 |
+
],
|
| 11 |
+
"confidence": "high",
|
| 12 |
+
"notes": "Synthetic renderer places this subject directly from the planned layout."
|
| 13 |
+
},
|
| 14 |
+
{
|
| 15 |
+
"name": "reader_pink_scarf",
|
| 16 |
+
"present": true,
|
| 17 |
+
"bbox": [
|
| 18 |
+
0.4868,
|
| 19 |
+
0.2174,
|
| 20 |
+
0.7476,
|
| 21 |
+
0.8682
|
| 22 |
+
],
|
| 23 |
+
"confidence": "high",
|
| 24 |
+
"notes": "Synthetic renderer places this subject directly from the planned layout."
|
| 25 |
+
},
|
| 26 |
+
{
|
| 27 |
+
"name": "green_desk_lamp",
|
| 28 |
+
"present": true,
|
| 29 |
+
"bbox": [
|
| 30 |
+
0.3455,
|
| 31 |
+
0.4029,
|
| 32 |
+
0.5734,
|
| 33 |
+
0.6584
|
| 34 |
+
],
|
| 35 |
+
"confidence": "high",
|
| 36 |
+
"notes": "Synthetic renderer places this subject directly from the planned layout."
|
| 37 |
+
},
|
| 38 |
+
{
|
| 39 |
+
"name": "navy_book_stack",
|
| 40 |
+
"present": true,
|
| 41 |
+
"bbox": [
|
| 42 |
+
0.6101,
|
| 43 |
+
0.5787,
|
| 44 |
+
0.8535,
|
| 45 |
+
0.7764
|
| 46 |
+
],
|
| 47 |
+
"confidence": "high",
|
| 48 |
+
"notes": "Synthetic renderer places this subject directly from the planned layout."
|
| 49 |
+
},
|
| 50 |
+
{
|
| 51 |
+
"name": "terracotta_plant",
|
| 52 |
+
"present": true,
|
| 53 |
+
"bbox": [
|
| 54 |
+
0.7476,
|
| 55 |
+
0.423,
|
| 56 |
+
0.9172,
|
| 57 |
+
0.6642
|
| 58 |
+
],
|
| 59 |
+
"confidence": "high",
|
| 60 |
+
"notes": "Synthetic renderer places this subject directly from the planned layout."
|
| 61 |
+
}
|
| 62 |
+
]
|
10samples/sample_0004/identity_verification.json
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[
|
| 2 |
+
{
|
| 3 |
+
"name": "reader_blue_jacket",
|
| 4 |
+
"score": 0.946,
|
| 5 |
+
"verdict": "match",
|
| 6 |
+
"rationale": "Reference and main rendering share the same generated subject attributes."
|
| 7 |
+
},
|
| 8 |
+
{
|
| 9 |
+
"name": "reader_pink_scarf",
|
| 10 |
+
"score": 0.923,
|
| 11 |
+
"verdict": "match",
|
| 12 |
+
"rationale": "Reference and main rendering share the same generated subject attributes."
|
| 13 |
+
},
|
| 14 |
+
{
|
| 15 |
+
"name": "green_desk_lamp",
|
| 16 |
+
"score": 0.852,
|
| 17 |
+
"verdict": "match",
|
| 18 |
+
"rationale": "Reference and main rendering share the same generated subject attributes."
|
| 19 |
+
},
|
| 20 |
+
{
|
| 21 |
+
"name": "navy_book_stack",
|
| 22 |
+
"score": 0.918,
|
| 23 |
+
"verdict": "match",
|
| 24 |
+
"rationale": "Reference and main rendering share the same generated subject attributes."
|
| 25 |
+
},
|
| 26 |
+
{
|
| 27 |
+
"name": "terracotta_plant",
|
| 28 |
+
"score": 0.898,
|
| 29 |
+
"verdict": "match",
|
| 30 |
+
"rationale": "Reference and main rendering share the same generated subject attributes."
|
| 31 |
+
}
|
| 32 |
+
]
|
10samples/sample_0004/layout_sketch.png
ADDED
|