Skip to content

Commit cb50ea7

Browse files
committed
add jupyter notebooks and fix codes
1 parent b2e2be2 commit cb50ea7

10 files changed

+3932
-0
lines changed

src/b3d/unity/Meshtest.ipynb

Lines changed: 1404 additions & 0 deletions
Large diffs are not rendered by default.

src/b3d/unity/changing_img_format.ipynb

Lines changed: 208 additions & 0 deletions
Large diffs are not rendered by default.

src/b3d/unity/data_processingtest.ipynb

Lines changed: 1256 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 201 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,201 @@
1+
{
2+
"cells": [
3+
{
4+
"cell_type": "code",
5+
"execution_count": 1,
6+
"metadata": {},
7+
"outputs": [],
8+
"source": [
9+
"import os\n",
10+
"from pathlib import Path\n",
11+
"import b3d\n",
12+
"from b3d.io.feature_track_data import FeatureTrackData\n",
13+
"from b3d.io.segmented_video_input import SegmentedVideoInput\n",
14+
"from b3d.unity.os_codes.generate_visualization import create_video, create_rgb_image, create_feature_track_video, create_segmented_video_input_video"
15+
]
16+
},
17+
{
18+
"cell_type": "code",
19+
"execution_count": 2,
20+
"metadata": {},
21+
"outputs": [],
22+
"source": [
23+
"root_dir = str(b3d.get_shared_large() / 'unity').strip()"
24+
]
25+
},
26+
{
27+
"cell_type": "code",
28+
"execution_count": 3,
29+
"metadata": {},
30+
"outputs": [],
31+
"source": [
32+
"def create_teaser(data_path, video_path):\n",
33+
" feature_track_data = FeatureTrackData.load(data_path)\n",
34+
" print(f\"creating {video_path}\")\n",
35+
" create_video(feature_track_data.rgbd_images[:,:,:,:3], create_rgb_image, output_path=video_path, label=None, res=None, fps=10, slow=1, source_fps=30)"
36+
]
37+
},
38+
{
39+
"cell_type": "code",
40+
"execution_count": 4,
41+
"metadata": {},
42+
"outputs": [],
43+
"source": [
44+
"def add_mp4_teaser(root_dir):\n",
45+
" root_path = Path(root_dir)\n",
46+
" for scene_folder in root_path.iterdir():\n",
47+
" for data_folder in scene_folder.iterdir():\n",
48+
" video_path = Path(data_folder / f\"{data_folder.name}_teaser.mp4\")\n",
49+
" # # if not os.path.exists(video_path):\n",
50+
" feature_track_folder = Path(data_folder / 'feature_track_data')\n",
51+
" for files in feature_track_folder.iterdir():\n",
52+
" if files.name.endswith('_bg_800p.input.npz'):\n",
53+
" create_teaser(files, video_path)\n",
54+
"\n",
55+
"# add_mp4_teaser(root_dir)"
56+
]
57+
},
58+
{
59+
"cell_type": "code",
60+
"execution_count": 5,
61+
"metadata": {},
62+
"outputs": [
63+
{
64+
"name": "stdout",
65+
"output_type": "stream",
66+
"text": [
67+
"Processing /home/tiffa/b3d/assets/large_data_bucket/unity/primitives/cubespheretest/feature_track_data/lit_nobg_800p.input.npz\n",
68+
"Processing /home/tiffa/b3d/assets/large_data_bucket/unity/primitives/fppcube/feature_track_data/lit_nobg_800p.input.npz\n",
69+
"Processing /home/tiffa/b3d/assets/large_data_bucket/unity/primitives/bouncingcube/feature_track_data/lit_bg_800p.input.npz\n",
70+
"Processing /home/tiffa/b3d/assets/large_data_bucket/unity/primitives/bouncingcubecorners/feature_track_data/lit_nobg_800p.input.npz\n",
71+
"Processing /home/tiffa/b3d/assets/large_data_bucket/unity/primitives/cubeball/feature_track_data/lit_nobg_800p.input.npz\n",
72+
"Processing /home/tiffa/b3d/assets/large_data_bucket/unity/primitives/fppcubecorners/feature_track_data/lit_nobg_800p.input.npz\n",
73+
"Processing /home/tiffa/b3d/assets/large_data_bucket/unity/toyroom/lookingatrocket/feature_track_data/lit_bg_800p.input.npz\n",
74+
"Processing /home/tiffa/b3d/assets/large_data_bucket/unity/toyroom/blockdisappearing/feature_track_data/lit_bg_800p.input.npz\n",
75+
"Processing /home/tiffa/b3d/assets/large_data_bucket/unity/toyroom/blockdisappearing/segmented_video_input/lit_bg_800p.input.npz\n"
76+
]
77+
},
78+
{
79+
"name": "stderr",
80+
"output_type": "stream",
81+
"text": [
82+
"/opt/conda/envs/b3d/lib/python3.12/subprocess.py:1885: RuntimeWarning: os.fork() was called. os.fork() is incompatible with multithreaded code, and JAX is multithreaded, so this will likely lead to a deadlock.\n",
83+
" self.pid = _fork_exec(\n"
84+
]
85+
},
86+
{
87+
"name": "stdout",
88+
"output_type": "stream",
89+
"text": [
90+
"Saved /home/tiffa/b3d/assets/large_data_bucket/unity/toyroom/blockdisappearing/segmented_video_input/lit_bg.mp4\n",
91+
"Processing /home/tiffa/b3d/assets/large_data_bucket/unity/toyroom/blockmostlyoccluded/feature_track_data/lit_bg_800p.input.npz\n"
92+
]
93+
},
94+
{
95+
"name": "stderr",
96+
"output_type": "stream",
97+
"text": [
98+
"/opt/conda/envs/b3d/lib/python3.12/subprocess.py:1885: RuntimeWarning: os.fork() was called. os.fork() is incompatible with multithreaded code, and JAX is multithreaded, so this will likely lead to a deadlock.\n",
99+
" self.pid = _fork_exec(\n"
100+
]
101+
},
102+
{
103+
"name": "stdout",
104+
"output_type": "stream",
105+
"text": [
106+
"Saved /home/tiffa/b3d/assets/large_data_bucket/unity/toyroom/blockmostlyoccluded/feature_track_data/lit_bg.mp4\n",
107+
"Processing /home/tiffa/b3d/assets/large_data_bucket/unity/toyroom/blockmostlyoccluded/segmented_video_input/lit_bg_800p.input.npz\n",
108+
"Saved /home/tiffa/b3d/assets/large_data_bucket/unity/toyroom/blockmostlyoccluded/segmented_video_input/lit_bg.mp4\n",
109+
"Processing /home/tiffa/b3d/assets/large_data_bucket/unity/toyroom/rotatingaroundrocket/feature_track_data/lit_bg_800p.input.npz\n",
110+
"Saved /home/tiffa/b3d/assets/large_data_bucket/unity/toyroom/rotatingaroundrocket/feature_track_data/lit_bg.mp4\n",
111+
"Processing /home/tiffa/b3d/assets/large_data_bucket/unity/toyroom/ballstriking/feature_track_data/lit_bg_800p.input.npz\n",
112+
"Saved /home/tiffa/b3d/assets/large_data_bucket/unity/toyroom/ballstriking/feature_track_data/lit_bg.mp4\n",
113+
"Processing /home/tiffa/b3d/assets/large_data_bucket/unity/toyroom/blockfullyoccluded/feature_track_data/lit_bg_800p.input.npz\n",
114+
"Saved /home/tiffa/b3d/assets/large_data_bucket/unity/toyroom/blockfullyoccluded/feature_track_data/lit_bg.mp4\n",
115+
"Processing /home/tiffa/b3d/assets/large_data_bucket/unity/toyroom/blockfullyoccluded/segmented_video_input/lit_bg_800p.input.npz\n",
116+
"Saved /home/tiffa/b3d/assets/large_data_bucket/unity/toyroom/blockfullyoccluded/segmented_video_input/lit_bg.mp4\n",
117+
"Processing /home/tiffa/b3d/assets/large_data_bucket/unity/toyroom/blockpartiallyoccluded/feature_track_data/lit_bg_800p.input.npz\n",
118+
"Saved /home/tiffa/b3d/assets/large_data_bucket/unity/toyroom/blockpartiallyoccluded/feature_track_data/lit_bg.mp4\n",
119+
"Processing /home/tiffa/b3d/assets/large_data_bucket/unity/toyroom/blockpartiallyoccluded/segmented_video_input/lit_bg_800p.input.npz\n",
120+
"Saved /home/tiffa/b3d/assets/large_data_bucket/unity/toyroom/blockpartiallyoccluded/segmented_video_input/lit_bg.mp4\n",
121+
"Processing /home/tiffa/b3d/assets/large_data_bucket/unity/toyroom/blockswap/feature_track_data/lit_bg_800p.input.npz\n",
122+
"Saved /home/tiffa/b3d/assets/large_data_bucket/unity/toyroom/blockswap/feature_track_data/lit_bg.mp4\n",
123+
"Processing /home/tiffa/b3d/assets/large_data_bucket/unity/toyroom/blockswap/segmented_video_input/lit_bg_800p.input.npz\n",
124+
"Saved /home/tiffa/b3d/assets/large_data_bucket/unity/toyroom/blockswap/segmented_video_input/lit_bg.mp4\n",
125+
"Processing /home/tiffa/b3d/assets/large_data_bucket/unity/toyroom/blocksfalling/feature_track_data/lit_bg_800p.input.npz\n",
126+
"Saved /home/tiffa/b3d/assets/large_data_bucket/unity/toyroom/blocksfalling/feature_track_data/lit_bg.mp4\n",
127+
"Processing /home/tiffa/b3d/assets/large_data_bucket/unity/toyroom/fpprocket/feature_track_data/lit_bg_800p.input.npz\n",
128+
"Saved /home/tiffa/b3d/assets/large_data_bucket/unity/toyroom/fpprocket/feature_track_data/lit_bg.mp4\n",
129+
"Processing /home/tiffa/b3d/assets/large_data_bucket/unity/toyroom/fpprocket/feature_track_data/lit_nobg_800p.input.npz\n",
130+
"Saved /home/tiffa/b3d/assets/large_data_bucket/unity/toyroom/fpprocket/feature_track_data/lit_nobg.mp4\n",
131+
"Processing /home/tiffa/b3d/assets/large_data_bucket/unity/toyroom/rocketrotating/feature_track_data/lit_bg_800p.input.npz\n",
132+
"Saved /home/tiffa/b3d/assets/large_data_bucket/unity/toyroom/rocketrotating/feature_track_data/lit_bg.mp4\n"
133+
]
134+
}
135+
],
136+
"source": [
137+
"def create_feature_track_video_in_folder(data_path, folder):\n",
138+
" parts = data_path.name.split('_')\n",
139+
" light_setting = parts[0]\n",
140+
" bg_setting = parts[1]\n",
141+
" video_path = Path(folder / f\"{light_setting}_{bg_setting}.mp4\")\n",
142+
" if not os.path.exists(video_path):\n",
143+
" feature_track_data = FeatureTrackData.load(data_path)\n",
144+
" create_feature_track_video(feature_track_data, output_path=video_path, res=None, fps=10, slow=1, source_fps=30)\n",
145+
"\n",
146+
"def create_segmentation_video_in_folder(data_path, folder):\n",
147+
" parts = data_path.name.split('_')\n",
148+
" light_setting = parts[0]\n",
149+
" bg_setting = parts[1]\n",
150+
" video_path = Path(folder / f\"{light_setting}_{bg_setting}.mp4\")\n",
151+
" if not os.path.exists(video_path):\n",
152+
" segmentation_data = SegmentedVideoInput.load(data_path)\n",
153+
" create_segmented_video_input_video(segmentation_data, output_path=video_path, res=None, fps=10, slow=1, source_fps=30)\n",
154+
"\n",
155+
"def add_mp4_settings(root_dir):\n",
156+
" root_path = Path(root_dir)\n",
157+
" for scene_folder in root_path.iterdir():\n",
158+
" for data_folder in scene_folder.iterdir():\n",
159+
"\n",
160+
" feature_track_folder = Path(data_folder / 'feature_track_data')\n",
161+
" if os.path.exists(feature_track_folder):\n",
162+
" for files in feature_track_folder.iterdir():\n",
163+
" if files.name.endswith('800p.input.npz'):\n",
164+
" print(f\"Processing {files}\")\n",
165+
" create_feature_track_video_in_folder(files, feature_track_folder)\n",
166+
" \n",
167+
"\n",
168+
" segmented_folder = Path(data_folder / 'segmented_video_input')\n",
169+
" if os.path.exists(segmented_folder):\n",
170+
" for files in segmented_folder.iterdir():\n",
171+
" if files.name.endswith('800p.input.npz'):\n",
172+
" print(f\"Processing {files}\")\n",
173+
" create_segmentation_video_in_folder(files, segmented_folder)\n",
174+
" # return\n",
175+
"\n",
176+
"add_mp4_settings(root_dir)"
177+
]
178+
}
179+
],
180+
"metadata": {
181+
"kernelspec": {
182+
"display_name": "b3d",
183+
"language": "python",
184+
"name": "python3"
185+
},
186+
"language_info": {
187+
"codemirror_mode": {
188+
"name": "ipython",
189+
"version": 3
190+
},
191+
"file_extension": ".py",
192+
"mimetype": "text/x-python",
193+
"name": "python",
194+
"nbconvert_exporter": "python",
195+
"pygments_lexer": "ipython3",
196+
"version": "3.12.4"
197+
}
198+
},
199+
"nbformat": 4,
200+
"nbformat_minor": 2
201+
}
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
import os
2+
from pathlib import Path
3+
import b3d
4+
from b3d.io.feature_track_data import FeatureTrackData
5+
from b3d.unity.generate_visualization import create_video, create_rgb_image
6+
import json
7+
8+
def get_tags(data_name):
9+
tags_dict = {
10+
1: 'dynamic camera',
11+
2: 'dynamic objects',
12+
3: 'panning',
13+
4: 'self-occlusion',
14+
5: 'occlusion',
15+
6: 'deformable objects',
16+
}
17+
18+
print(f"Available tags for {data_name}:")
19+
for key, value in tags_dict.items():
20+
print(f"{key}: {value}")
21+
22+
selected_tags = input(f"Enter the numbers corresponding to the tags for {data_name}, separated by commas: ").strip()
23+
if (selected_tags == ""):
24+
return []
25+
26+
tags = [tags_dict[int(num)] for num in selected_tags.split(",") if int(num) in tags_dict]
27+
28+
return tags
29+
30+
def process(root_dir):
31+
root_path = Path(root_dir)
32+
for scene_folder in root_path.iterdir():
33+
for data_folder in scene_folder.iterdir():
34+
print(f"Processing {data_folder.name}")
35+
for data_class_content in data_folder.iterdir():
36+
if (os.path.isdir(data_class_content)):
37+
data_class_folder = data_class_content
38+
for files in data_class_folder.iterdir():
39+
if files.name.endswith('.gif'):
40+
print(f"removing {files}")
41+
os.remove(files)
42+
if (data_class_content.name.endswith('.json')):
43+
print(f"editing {data_class_content}")
44+
metadata_file = data_class_content
45+
combined_metadata = {"tags": []}
46+
with metadata_file.open('r') as f:
47+
metadata = json.load(f)
48+
combined_metadata["tags"].extend(metadata.get("tags", []))
49+
print(f"Current tags: {combined_metadata}")
50+
51+
additional_tags = get_tags(data_folder.name)
52+
combined_metadata["tags"].extend(additional_tags)
53+
# Remove duplicates from combined_metadata
54+
combined_metadata["tags"] = list(set(combined_metadata["tags"]))
55+
56+
# Save the combined metadata at the data_folder level
57+
with metadata_file.open('w') as f:
58+
json.dump(combined_metadata, f, indent=4)
59+
print(f"Edited tags: {combined_metadata}")
60+
61+
if __name__ == "__main__":
62+
root_dir = str(b3d.get_shared_large() / 'unity').strip()
63+
process(root_dir)
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
import os
2+
import json
3+
from pathlib import Path
4+
import shutil
5+
import b3d
6+
7+
def get_tags(data_name):
8+
tags_dict = {
9+
1: 'dynamic camera',
10+
2: 'dynamic objects',
11+
3: 'panning',
12+
4: 'deformable objects',
13+
5: 'self-occlusion',
14+
6: 'occlusion',
15+
}
16+
17+
print(f"Available tags for {data_name}:")
18+
for key, value in tags_dict.items():
19+
print(f"{key}: {value}")
20+
21+
selected_tags = input(f"Enter the numbers corresponding to the tags for {data_name}, separated by commas: ").strip()
22+
tags = [tags_dict[int(num)] for num in selected_tags.split(",") if int(num) in tags_dict]
23+
24+
return tags
25+
26+
def get_additional_data(data_name):
27+
options = {
28+
1: 'None',
29+
2: 'mesh'
30+
}
31+
32+
print(f"Available additional data for {data_name}:")
33+
for key, value in options.items():
34+
print(f"{key}: {value}")
35+
36+
selected_data = input(f"Enter the number corresponding to the additional data for {data_name}: ").strip()
37+
additional_data = options.get(int(selected_data), 'None')
38+
39+
return [] if additional_data == 'None' else [additional_data]
40+
41+
def consolidate_metadata(root):
42+
root_path = Path(root)
43+
for scene_folder in root_path.iterdir():
44+
if scene_folder.is_dir():
45+
for data_folder in scene_folder.iterdir():
46+
if data_folder.is_dir():
47+
combined_metadata = {"tags": [], "additional_data": []}
48+
49+
for data_class_folder in data_folder.iterdir():
50+
if data_class_folder.is_dir():
51+
metadata_file = data_class_folder / "metadata.json"
52+
if metadata_file.exists():
53+
with metadata_file.open('r') as f:
54+
metadata = json.load(f)
55+
combined_metadata["tags"].extend(metadata.get("tags", []))
56+
combined_metadata["additional_data"].extend(metadata.get("additional_data", []))
57+
58+
# Remove the metadata file from the data_class folder
59+
metadata_file.unlink()
60+
61+
# Request user input for tags and additional data
62+
data_name = data_folder.name
63+
tags = get_tags(data_name)
64+
additional_data = get_additional_data(data_name)
65+
66+
# Combine user input with existing metadata
67+
combined_metadata["tags"].extend(tags)
68+
combined_metadata["additional_data"].extend(additional_data)
69+
70+
# Remove duplicates from combined_metadata
71+
combined_metadata["tags"] = list(set(combined_metadata["tags"]))
72+
combined_metadata["additional_data"] = list(set(combined_metadata["additional_data"]))
73+
74+
# Save the combined metadata at the data_folder level
75+
new_metadata_file = data_folder / "metadata.json"
76+
with new_metadata_file.open('w') as f:
77+
json.dump(combined_metadata, f, indent=4)
78+
79+
print(f"Consolidated metadata for {data_folder.name}")
80+
81+
if __name__ == "__main__":
82+
root_dir = str(b3d.get_shared_large() / 'unity').strip()
83+
consolidate_metadata(root_dir)
84+
print("Metadata consolidation complete.")

0 commit comments

Comments
 (0)