diff --git a/.gitattributes b/.gitattributes index a6344aac8c09253b3b630fb776ae94478aa0275b..d6d7754bd6a8b60e105b918c44467ab63f33cbf3 100644 --- a/.gitattributes +++ b/.gitattributes @@ -33,3 +33,15 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text *.zip filter=lfs diff=lfs merge=lfs -text *.zst filter=lfs diff=lfs merge=lfs -text *tfevents* filter=lfs diff=lfs merge=lfs -text +media/cocowb/9fcab59ec353483a0635_gt.jpg filter=lfs diff=lfs merge=lfs -text +media/cocowb/9fcab59ec353483a0635_rgb.jpg filter=lfs diff=lfs merge=lfs -text +media/genhumanego/team_gen-humanego_0_gt.jpg filter=lfs diff=lfs merge=lfs -text +media/genhumanego/team_gen-humanego_0_rgb.jpg filter=lfs diff=lfs merge=lfs -text +media/genhumanego/team_gen-humanego_1_gt.jpg filter=lfs diff=lfs merge=lfs -text +media/genhumanego/team_gen-humanego_1_rgb.jpg filter=lfs diff=lfs merge=lfs -text +media/genhumanego/team_gen-humanego_2_gt.jpg filter=lfs diff=lfs merge=lfs -text +media/genhumanego/team_gen-humanego_2_rgb.jpg filter=lfs diff=lfs merge=lfs -text +media/genhumanego/team_gen-humanego_3_gt.jpg filter=lfs diff=lfs merge=lfs -text +media/genhumanego/team_gen-humanego_3_rgb.jpg filter=lfs diff=lfs merge=lfs -text +media/mpiinzsl/mpiinzsl_047704994_01_r_native2d_gt.jpg filter=lfs diff=lfs merge=lfs -text +media/mpiinzsl/mpiinzsl_047704994_01_r_native2d_rgb.jpg filter=lfs diff=lfs merge=lfs -text diff --git a/README.md b/README.md index 6bd44ddbc5b9d726b9b8ac74b6dbffb31554f46d..94f7dd8999670f84eb839ae0f9dff621f150d6e0 100644 --- a/README.md +++ b/README.md @@ -33,6 +33,9 @@ data/previews.json # 样例登记 media// # 样例图片 tools/make_data.py # 编辑数据集信息的地方 tools/add_preview.py # 添加一对 RGB / GT 叠加样例 +tools/import_team_previews.py # 从团队 Space 导入已有叠加样例 +tools/server_sync.py # 在数据服务器上批量生成样例,传到 HF Dataset 仓库并登记 +tools/render_overlay.py # 把 MANO / SOMA 网格投影到 RGB 上生成叠加图 tools/build.py # 由 src/page.html 生成 index.html ``` @@ -46,6 +49,13 @@ vim tools/make_data.py && python tools/make_data.py python tools/add_preview.py hograspnet --rgb s01_rgb.png --gt s01_gt.png \ --caption "受试者 01,侧捏" --source "官方 MANO → SOMA" +# 在数据服务器上批量同步样例(推荐,见 tools/server_sync.py 顶部说明) +export HF_TOKEN=hf_xxx +python tools/server_sync.py manifest.jsonl --replace + +# 从团队图册同步已有样例 +python tools/import_team_previews.py --per 4 + # 改了页面源码后 python tools/build.py diff --git a/data/datasets.json b/data/datasets.json index 695109fd56704262e79e1d729ff8c44c580bb992..7dcafdad3b1f6b66969410f2d988a4c0ddec7970 100644 --- a/data/datasets.json +++ b/data/datasets.json @@ -1012,6 +1012,7 @@ "depth": true }, "fills": "手与表面接触的压力,带第一视角。", + "risk": "HaMeR 初始化后用多视角 RGB-D、分割、压力和时序约束拟合 MANO,手上没有 marker。", "links": [ { "label": "论文 arXiv:2409.02224", @@ -1024,7 +1025,6 @@ "url": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/egocentric_embodied_datasets_20261020/index.html" } ], - "risk": "", "subjects": "", "scale": "" }, @@ -1038,15 +1038,14 @@ ], "source": "ego", "method": "marker", - "gt": "手部 3D(光学动捕)", + "gt": "MANO(光捕 marker 经 markers2mano 拟合)", "tier": "S2", "route": "R1", - "camera": "第一视角 + 26 相机光学动捕", + "camera": "头戴 GoPro 60 FPS + 26 相机光学动捕", "rig": { "ego": true }, "fills": "第一视角与肌电同步,光学动捕真值。", - "risk": "手部模型格式待核。", "links": [ { "label": "论文 arXiv:2605.05712", @@ -1059,6 +1058,7 @@ "url": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/egocentric_embodied_datasets_20261020/index.html" } ], + "risk": "", "subjects": "", "scale": "" }, @@ -1075,14 +1075,14 @@ "gt": "MANO", "tier": "S3", "route": "R1", - "camera": "多台 RGB-D + 头显第一视角", + "camera": "多台 RGB-D + HoloLens 第一视角 RGB", "rig": { "ego": true, "exo": 8, "depth": true }, "fills": "手物交互,含第一视角。", - "risk": "标注细节待核。", + "risk": "多视角 RGB-D 与关键点约束拟合 MANO,不使用光捕。", "team": [ { "label": "团队图册:第一人称具身数据集", @@ -1112,7 +1112,7 @@ "exo": 12 }, "fills": "双手使用工具的交互。", - "risk": "标注方式待核,暂归入关键点三角化。", + "risk": "多视角 MMPose 三角化后做 MANO 接触与时序拟合,手上没有光捕。", "team": [ { "label": "团队图册:第一人称具身数据集", @@ -1720,10 +1720,10 @@ "第一人称图册" ], "source": "norgb", - "method": "pseudo", - "gt": "自动标注为主", - "tier": "S5", - "route": "R7", + "method": "mvkp", + "gt": "UmeTrack(另提供 MANO / MHR 转换)", + "tier": "S4", + "route": "R1", "camera": "黑白鱼眼", "rig": { "ego": true, @@ -1731,7 +1731,7 @@ "mono": true }, "fills": "团队已排除。", - "risk": "主标注自动生成,人工核验子集不具代表性;黑白鱼眼不满足真实 RGB 条件。", + "risk": "无标记多视角自动拟合,人工核验子集不具代表性;黑白鱼眼不满足真实 RGB 条件。", "team": [ { "label": "团队图册:第一人称具身数据集", diff --git a/data/previews.json b/data/previews.json index 0967ef424bce6791893e9a57bb952f80fd536e93..8d83c4b188d025344dfef0cc7ddcc3f61667e411 100644 --- a/data/previews.json +++ b/data/previews.json @@ -1 +1,652 @@ -{} +{ + "egodex": [ + { + "rgb": "media/egodex/team_egodex_0_rgb.jpg", + "gt": "media/egodex/team_egodex_0_gt.jpg", + "caption": "test/stock_unstock_fridge/1 / frame 201 · Vision Pro RGB · Apple EgoDex · 来源 CC-BY-NC-ND 4.0 · 复用已有研究对照画面", + "source": "RGB + 官方 ARKit 3D 骨架投影(估计标签)(团队图册 2026-10-22)" + }, + { + "rgb": "media/egodex/team_egodex_1_rgb.jpg", + "gt": "media/egodex/team_egodex_1_gt.jpg", + "caption": "test/stock_unstock_fridge/1 / frame 321 · Vision Pro RGB · Apple EgoDex · 来源 CC-BY-NC-ND 4.0 · 复用已有研究对照画面", + "source": "RGB + 官方 ARKit 3D 骨架投影(估计标签)(团队图册 2026-10-22)" + }, + { + "rgb": "media/egodex/team_egodex_2_rgb.jpg", + "gt": "media/egodex/team_egodex_2_gt.jpg", + "caption": "test/braid_unbraid/3 / frame 413 · Vision Pro RGB · Apple EgoDex · 来源 CC-BY-NC-ND 4.0 · 复用已有研究对照画面", + "source": "RGB + 官方 ARKit 3D 骨架投影(估计标签)(团队图册 2026-10-22)" + }, + { + "rgb": "media/egodex/team_egodex_3_rgb.jpg", + "gt": "media/egodex/team_egodex_3_gt.jpg", + "caption": "test/braid_unbraid/3 / frame 533 · Vision Pro RGB · Apple EgoDex · 来源 CC-BY-NC-ND 4.0 · 复用已有研究对照画面", + "source": "RGB + 官方 ARKit 3D 骨架投影(估计标签)(团队图册 2026-10-22)" + } + ], + "egoemg": [ + { + "rgb": "media/egoemg/team_egoemg_0_rgb.jpg", + "gt": "media/egoemg/team_egoemg_0_gt.jpg", + "caption": "episode_000028 · frame 600 · 10.00 s · 头戴 GoPro · 60 FPS · CC-BY-NC-4.0(论文 A.3);作者公开旧版镜像;本页作抽帧、缩放和 MANO 叠加", + "source": "RGB + 光捕重建 MANO(团队图册 2026-10-22)" + }, + { + "rgb": "media/egoemg/team_egoemg_1_rgb.jpg", + "gt": "media/egoemg/team_egoemg_1_gt.jpg", + "caption": "episode_000000 · frame 25139 · 418.98 s · gesture ID 40 · 头戴 GoPro · 60 FPS · CC-BY-NC-4.0(论文 A.3);Ziheng Xi et al.;作者公开旧版镜像;抽帧、缩放和 MANO 叠加", + "source": "RGB + 光捕重建 MANO(团队图册 2026-10-22)" + }, + { + "rgb": "media/egoemg/team_egoemg_2_rgb.jpg", + "gt": "media/egoemg/team_egoemg_2_gt.jpg", + "caption": "episode_000023 · frame 41250 · 687.50 s · gesture ID 12 · 头戴 GoPro · 60 FPS · CC-BY-NC-4.0(论文 A.3);Ziheng Xi et al.;作者公开旧版镜像;抽帧、缩放和 MANO 叠加", + "source": "RGB + 光捕重建 MANO(团队图册 2026-10-22)" + }, + { + "rgb": "media/egoemg/team_egoemg_3_rgb.jpg", + "gt": "media/egoemg/team_egoemg_3_gt.jpg", + "caption": "episode_000037 · frame 50260 · 837.67 s · gesture ID 59 · 手指姿态不贴合(原因未确认) · 头戴 GoPro · 60 FPS · CC-BY-NC-4.0(论文 A.3);Ziheng Xi et al.;作者公开旧版镜像;抽帧、缩放和 MANO 叠加", + "source": "RGB + 光捕重建 MANO(团队图册 2026-10-22)" + } + ], + "egopressure": [ + { + "rgb": "media/egopressure/team_egopressure_0_rgb.jpg", + "gt": "media/egopressure/team_egopressure_0_gt.jpg", + "caption": "p_001_index_press_low_x5_left · frame 28 · cam-d · 头戴 RGB-D 相机 · CC-BY-NC-SA-4.0;Zhao, Kwon, Streli, Pollefeys, Holz;MANO: Romero et al.;仅渲染图", + "source": "RGB + 官方拟合 MANO 网格(团队图册 2026-10-22)" + }, + { + "rgb": "media/egopressure/team_egopressure_1_rgb.jpg", + "gt": "media/egopressure/team_egopressure_1_gt.jpg", + "caption": "p_002_pinch_thumb-down_high_5x_left · frame 248 · cam-d · 头戴 RGB-D 相机 · CC-BY-NC-SA-4.0;Zhao, Kwon, Streli, Pollefeys, Holz;MANO: Romero et al.;仅渲染图", + "source": "RGB + 官方拟合 MANO 网格(团队图册 2026-10-22)" + }, + { + "rgb": "media/egopressure/team_egopressure_2_rgb.jpg", + "gt": "media/egopressure/team_egopressure_2_gt.jpg", + "caption": "p_003_press_fingers_high_5x_right · frame 115 · cam-d · 头戴 RGB-D 相机 · CC-BY-NC-SA-4.0;Zhao, Kwon, Streli, Pollefeys, Holz;MANO: Romero et al.;仅渲染图", + "source": "RGB + 官方拟合 MANO 网格(团队图册 2026-10-22)" + }, + { + "rgb": "media/egopressure/team_egopressure_3_rgb.jpg", + "gt": "media/egopressure/team_egopressure_3_gt.jpg", + "caption": "p_004_type_ipad_5x_right · frame 291 · cam-d · 头戴 RGB-D 相机 · CC-BY-NC-SA-4.0;Zhao, Kwon, Streli, Pollefeys, Holz;MANO: Romero et al.;仅渲染图", + "source": "RGB + 官方拟合 MANO 网格(团队图册 2026-10-22)" + } + ], + "egoverse": [ + { + "rgb": "media/egoverse/team_egoverse_0_rgb.jpg", + "gt": "media/egoverse/team_egoverse_0_gt.jpg", + "caption": "2025-09-20-18-44-29-000000 / frame 60 · Aria · front_1 · CC BY-SA 4.0 · RL2 / EgoVerse", + "source": "RGB + 官方 Aria 3D 关键点投影(估计标签)(团队图册 2026-10-22)" + }, + { + "rgb": "media/egoverse/team_egoverse_1_rgb.jpg", + "gt": "media/egoverse/team_egoverse_1_gt.jpg", + "caption": "2025-09-20-18-44-29-000000 / frame 150 · Aria · front_1 · CC BY-SA 4.0 · RL2 / EgoVerse", + "source": "RGB + 官方 Aria 3D 关键点投影(估计标签)(团队图册 2026-10-22)" + }, + { + "rgb": "media/egoverse/team_egoverse_2_rgb.jpg", + "gt": "media/egoverse/team_egoverse_2_gt.jpg", + "caption": "2025-09-20-18-44-29-000000 / frame 300 · Aria · front_1 · CC BY-SA 4.0 · RL2 / EgoVerse", + "source": "RGB + 官方 Aria 3D 关键点投影(估计标签)(团队图册 2026-10-22)" + }, + { + "rgb": "media/egoverse/team_egoverse_3_rgb.jpg", + "gt": "media/egoverse/team_egoverse_3_gt.jpg", + "caption": "2025-09-20-18-44-29-000000 / frame 600 · Aria · front_1 · CC BY-SA 4.0 · RL2 / EgoVerse", + "source": "RGB + 官方 Aria 3D 关键点投影(估计标签)(团队图册 2026-10-22)" + } + ], + "hocap": [ + { + "rgb": "media/hocap/team_hocap_0_rgb.jpg", + "gt": "media/hocap/team_hocap_0_gt.jpg", + "caption": "subject_7-20231022_192832 · frame 45 · HoloLens 第一视角 RGB · CC-BY-4.0;署名 Jikai Wang 等;已抽帧并叠加", + "source": "RGB + 官方 MANO 拟合标注(团队图册 2026-10-22)" + }, + { + "rgb": "media/hocap/team_hocap_1_rgb.jpg", + "gt": "media/hocap/team_hocap_1_gt.jpg", + "caption": "subject_7-20231022_192832 · frame 175 · HoloLens 第一视角 RGB · CC-BY-4.0;署名 Jikai Wang 等;已抽帧并叠加", + "source": "RGB + 官方 MANO 拟合标注(团队图册 2026-10-22)" + }, + { + "rgb": "media/hocap/team_hocap_2_rgb.jpg", + "gt": "media/hocap/team_hocap_2_gt.jpg", + "caption": "subject_7-20231022_192832 · frame 240 · HoloLens 第一视角 RGB · CC-BY-4.0;署名 Jikai Wang 等;已抽帧并叠加", + "source": "RGB + 官方 MANO 拟合标注(团队图册 2026-10-22)" + }, + { + "rgb": "media/hocap/team_hocap_3_rgb.jpg", + "gt": "media/hocap/team_hocap_3_gt.jpg", + "caption": "subject_7-20231022_192832 · frame 370 · HoloLens 第一视角 RGB · CC-BY-4.0;署名 Jikai Wang 等;已抽帧并叠加", + "source": "RGB + 官方 MANO 拟合标注(团队图册 2026-10-22)" + } + ], + "interhand": [ + { + "rgb": "media/interhand/interhand_test_C1_f27268_right_cam400375_rgb.jpg", + "gt": "media/interhand/interhand_test_C1_f27268_right_cam400375_gt.jpg", + "caption": "ROM07_Rt_Finger_Occlusions · 帧 27268 · 右手 · test", + "source": "MANO(团队图册 2026-10-13)" + }, + { + "rgb": "media/interhand/interhand_test_C1_f27502_right_cam400375_rgb.jpg", + "gt": "media/interhand/interhand_test_C1_f27502_right_cam400375_gt.jpg", + "caption": "ROM07_Rt_Finger_Occlusions · 帧 27502 · 右手 · test", + "source": "MANO(团队图册 2026-10-13)" + }, + { + "rgb": "media/interhand/interhand_test_C1_f28108_right_cam400285_rgb.jpg", + "gt": "media/interhand/interhand_test_C1_f28108_right_cam400285_gt.jpg", + "caption": "ROM07_Rt_Finger_Occlusions · 帧 28108 · 右手 · test", + "source": "MANO(团队图册 2026-10-13)" + }, + { + "rgb": "media/interhand/interhand_test_C1_f27376_right_cam400285_rgb.jpg", + "gt": "media/interhand/interhand_test_C1_f27376_right_cam400285_gt.jpg", + "caption": "ROM07_Rt_Finger_Occlusions · 帧 27376 · 右手 · test", + "source": "MANO(团队图册 2026-10-13)" + } + ], + "mpiinzsl": [ + { + "rgb": "media/mpiinzsl/mpiinzsl_025270786_01_l_native2d_rgb.jpg", + "gt": "media/mpiinzsl/mpiinzsl_025270786_01_l_native2d_gt.jpg", + "caption": "静态图像 · 帧 025270786.jpg · 左手 · manual_train", + "source": "2D(团队图册 2026-10-13)" + }, + { + "rgb": "media/mpiinzsl/mpiinzsl_047704994_01_r_native2d_rgb.jpg", + "gt": "media/mpiinzsl/mpiinzsl_047704994_01_r_native2d_gt.jpg", + "caption": "静态图像 · 帧 047704994.jpg · 右手 · manual_train", + "source": "2D(团队图册 2026-10-13)" + }, + { + "rgb": "media/mpiinzsl/mpiinzsl_Ricki_unit_8_flv_000040_l_native2d_rgb.jpg", + "gt": "media/mpiinzsl/mpiinzsl_Ricki_unit_8_flv_000040_l_native2d_gt.jpg", + "caption": "静态图像 · 帧 Ricki_unit_8.flv_000040 · 左手 · manual_train", + "source": "2D(团队图册 2026-10-13)" + }, + { + "rgb": "media/mpiinzsl/mpiinzsl_Jackie_unit_10_flv_000118_r_native2d_rgb.jpg", + "gt": "media/mpiinzsl/mpiinzsl_Jackie_unit_10_flv_000118_r_native2d_gt.jpg", + "caption": "静态图像 · 帧 Jackie_unit_10.flv_000118 · 右手 · manual_train", + "source": "2D(团队图册 2026-10-13)" + } + ], + "openaoe": [ + { + "rgb": "media/openaoe/team_openaoe_0_rgb.jpg", + "gt": "media/openaoe/team_openaoe_0_gt.jpg", + "caption": "aoe_20260131_193028_p000 · frame 400 · 第一视角 RGB(官方去畸变) · Open-AoE Dataset License;仅发布抽帧与叠加图", + "source": "RGB + 官方 MANO 拟合标注(团队图册 2026-10-22)" + }, + { + "rgb": "media/openaoe/team_openaoe_1_rgb.jpg", + "gt": "media/openaoe/team_openaoe_1_gt.jpg", + "caption": "aoe_20260131_193028_p000 · frame 1800 · 第一视角 RGB(官方去畸变) · Open-AoE Dataset License;仅发布抽帧与叠加图", + "source": "RGB + 官方 MANO 拟合标注(团队图册 2026-10-22)" + }, + { + "rgb": "media/openaoe/team_openaoe_2_rgb.jpg", + "gt": "media/openaoe/team_openaoe_2_gt.jpg", + "caption": "aoe_20260131_193028_p000 · frame 2600 · 第一视角 RGB(官方去畸变) · Open-AoE Dataset License;仅发布抽帧与叠加图", + "source": "RGB + 官方 MANO 拟合标注(团队图册 2026-10-22)" + }, + { + "rgb": "media/openaoe/team_openaoe_3_rgb.jpg", + "gt": "media/openaoe/team_openaoe_3_gt.jpg", + "caption": "aoe_20260131_193028_p000 · frame 4300 · 第一视角 RGB(官方去畸变) · Open-AoE Dataset License;仅发布抽帧与叠加图", + "source": "RGB + 官方 MANO 拟合标注(团队图册 2026-10-22)" + } + ], + "show3d": [ + { + "rgb": "media/show3d/team_show3d_0_rgb.jpg", + "gt": "media/show3d/team_show3d_0_gt.jpg", + "caption": "ASC023/aria_inspecting_f5e9 · frame 100 · headset0 · CC-BY-NC-4.0;缩放/裁出对应相机", + "source": "原图 + 官方 MANO mesh(团队图册 2026-10-22)" + }, + { + "rgb": "media/show3d/team_show3d_1_rgb.jpg", + "gt": "media/show3d/team_show3d_1_gt.jpg", + "caption": "LSU826/cancoke_opening_d68c · frame 1492 · headset0 · 单色 ego · CC-BY-NC-4.0;Meta SHOW3D;裁出对应相机、缩放", + "source": "原图 + 官方 MANO mesh(团队图册 2026-10-22)" + }, + { + "rgb": "media/show3d/team_show3d_2_rgb.jpg", + "gt": "media/show3d/team_show3d_2_gt.jpg", + "caption": "HLU829/keyboard2_clean-keyboard_1d3c · frame 2088 · headset1 · 单色 ego · CC-BY-NC-4.0;Meta SHOW3D;裁出对应相机、缩放", + "source": "原图 + 官方 MANO mesh(团队图册 2026-10-22)" + }, + { + "rgb": "media/show3d/team_show3d_3_rgb.jpg", + "gt": "media/show3d/team_show3d_3_gt.jpg", + "caption": "PRI519/balandabowl_covering-uncovering_1178 · frame 2386 · headset1 · 单色 ego · CC-BY-NC-4.0;Meta SHOW3D;裁出对应相机、缩放", + "source": "原图 + 官方 MANO mesh(团队图册 2026-10-22)" + } + ], + "taco": [ + { + "rgb": "media/taco/team_taco_0_rgb.jpg", + "gt": "media/taco/team_taco_0_gt.jpg", + "caption": "(brush, brush, box) · 20230930_038 · frame 26 · 头戴 ego RGB · CC-BY-4.0;署名 Yun Liu 等;已抽帧并叠加", + "source": "RGB + 官方 MANO 拟合标注(团队图册 2026-10-22)" + }, + { + "rgb": "media/taco/team_taco_1_rgb.jpg", + "gt": "media/taco/team_taco_1_gt.jpg", + "caption": "(brush, brush, box) · 20230930_038 · frame 106 · 头戴 ego RGB · CC-BY-4.0;署名 Yun Liu 等;已抽帧并叠加", + "source": "RGB + 官方 MANO 拟合标注(团队图册 2026-10-22)" + }, + { + "rgb": "media/taco/team_taco_2_rgb.jpg", + "gt": "media/taco/team_taco_2_gt.jpg", + "caption": "(stir, spoon, bowl) · 20231104_190 · frame 26 · 头戴 ego RGB · CC-BY-4.0;署名 Yun Liu 等;已抽帧并叠加", + "source": "RGB + 官方 MANO 拟合标注(团队图册 2026-10-22)" + }, + { + "rgb": "media/taco/team_taco_3_rgb.jpg", + "gt": "media/taco/team_taco_3_gt.jpg", + "caption": "(stir, spoon, bowl) · 20231104_190 · frame 105 · 头戴 ego RGB · CC-BY-4.0;署名 Yun Liu 等;已抽帧并叠加", + "source": "RGB + 官方 MANO 拟合标注(团队图册 2026-10-22)" + } + ], + "xperience": [ + { + "rgb": "media/xperience/team_xperience_0_rgb.jpg", + "gt": "media/xperience/team_xperience_0_gt.jpg", + "caption": "coffee sample · frame 500 · stereo_left · CC-BY-NC-4.0;MANO 解码/投影", + "source": "RGB + 官方 MANO mesh(团队图册 2026-10-22)" + }, + { + "rgb": "media/xperience/team_xperience_1_rgb.jpg", + "gt": "media/xperience/team_xperience_1_gt.jpg", + "caption": "coffee sample · frame 1500 · stereo_left · CC-BY-NC-4.0;MANO 解码/投影", + "source": "RGB + 官方 MANO mesh(团队图册 2026-10-22)" + }, + { + "rgb": "media/xperience/team_xperience_2_rgb.jpg", + "gt": "media/xperience/team_xperience_2_gt.jpg", + "caption": "coffee sample · frame 3000 · stereo_left · CC-BY-NC-4.0;MANO 解码/投影", + "source": "RGB + 官方 MANO mesh(团队图册 2026-10-22)" + }, + { + "rgb": "media/xperience/team_xperience_3_rgb.jpg", + "gt": "media/xperience/team_xperience_3_gt.jpg", + "caption": "coffee sample · frame 4500 · stereo_left · CC-BY-NC-4.0;MANO 解码/投影", + "source": "RGB + 官方 MANO mesh(团队图册 2026-10-22)" + } + ], + "arctic": [ + { + "rgb": "media/arctic/a213dd95256ccccad7bc_rgb.jpg", + "gt": "media/arctic/a213dd95256ccccad7bc_gt.jpg", + "caption": "s02/ketchup_use_02 · 帧 212 · 左手 · train", + "source": "MANO(团队图册 2026-10-13)" + }, + { + "rgb": "media/arctic/6057bab38e74308c02be_rgb.jpg", + "gt": "media/arctic/6057bab38e74308c02be_gt.jpg", + "caption": "s06/ketchup_use_01 · 帧 511 · 右手 · train", + "source": "MANO(团队图册 2026-10-13)" + }, + { + "rgb": "media/arctic/c4d53a1b79549c84e96d_rgb.jpg", + "gt": "media/arctic/c4d53a1b79549c84e96d_gt.jpg", + "caption": "s08/ketchup_use_01 · 帧 451 · 右手 · train", + "source": "MANO(团队图册 2026-10-13)" + }, + { + "rgb": "media/arctic/e68425daa275c68f6f5d_rgb.jpg", + "gt": "media/arctic/e68425daa275c68f6f5d_gt.jpg", + "caption": "s10/ketchup_use_01 · 帧 451 · 右手 · train", + "source": "MANO(团队图册 2026-10-13)" + } + ], + "cocowb": [ + { + "rgb": "media/cocowb/f59aa0ba82e64839e596_rgb.jpg", + "gt": "media/cocowb/f59aa0ba82e64839e596_gt.jpg", + "caption": "COCO validation · 帧 785 · 右手 · official validation example; not WiLoR processed train members; excluded from training candidates", + "source": "2D(团队图册 2026-10-13)" + }, + { + "rgb": "media/cocowb/9fcab59ec353483a0635_rgb.jpg", + "gt": "media/cocowb/9fcab59ec353483a0635_gt.jpg", + "caption": "COCO validation · 帧 1000 · 左手 · official validation example; not WiLoR processed train members; excluded from training candidates", + "source": "2D(团队图册 2026-10-13)" + }, + { + "rgb": "media/cocowb/780684ce08a2af76ddc4_rgb.jpg", + "gt": "media/cocowb/780684ce08a2af76ddc4_gt.jpg", + "caption": "COCO validation · 帧 196141 · 左手 · official validation example; not WiLoR processed train members; excluded from training candidates", + "source": "2D(团队图册 2026-10-13)" + }, + { + "rgb": "media/cocowb/7e7716c112039185cc5e_rgb.jpg", + "gt": "media/cocowb/7e7716c112039185cc5e_gt.jpg", + "caption": "COCO validation · 帧 197388 · 左手 · official validation example; not WiLoR processed train members; excluded from training candidates", + "source": "2D(团队图册 2026-10-13)" + } + ], + "dexycb": [ + { + "rgb": "media/dexycb/a128fbe7b45844ebb4e8_rgb.jpg", + "gt": "media/dexycb/a128fbe7b45844ebb4e8_gt.jpg", + "caption": "20200709-subject-01/20200709_141841 · 帧 36 · 右手 · official_s0_train_proxy", + "source": "MANO(团队图册 2026-10-13)" + }, + { + "rgb": "media/dexycb/8ffc14f49fff4b06cc73_rgb.jpg", + "gt": "media/dexycb/8ffc14f49fff4b06cc73_gt.jpg", + "caption": "20200820-subject-03/20200820_144644 · 帧 62 · 左手 · official_s0_train_proxy", + "source": "MANO(团队图册 2026-10-13)" + }, + { + "rgb": "media/dexycb/6df9d4ead4d92a187a28_rgb.jpg", + "gt": "media/dexycb/6df9d4ead4d92a187a28_gt.jpg", + "caption": "20200903-subject-04/20200903_105306 · 帧 60 · 左手 · official_s0_train_proxy", + "source": "MANO(团队图册 2026-10-13)" + }, + { + "rgb": "media/dexycb/7e32dcf09cb0a2254256_rgb.jpg", + "gt": "media/dexycb/7e32dcf09cb0a2254256_gt.jpg", + "caption": "20200928-subject-07/20200928_155118 · 帧 62 · 左手 · official_s0_train_proxy", + "source": "MANO(团队图册 2026-10-13)" + } + ], + "egorenderer": [ + { + "rgb": "media/egorenderer/egorenderer_v005_s7_camera_browse_1_110_rgb.jpg", + "gt": "media/egorenderer/egorenderer_v005_s7_camera_browse_1_110_gt.jpg", + "caption": "s7/camera_browse_1 · 帧 110 · 已交付合成数据", + "source": "MANO 拟合(团队图册 2026-10-13)" + }, + { + "rgb": "media/egorenderer/egorenderer_v005_s1_mug_drink_1_233_rgb.jpg", + "gt": "media/egorenderer/egorenderer_v005_s1_mug_drink_1_233_gt.jpg", + "caption": "s1/mug_drink_1 · 帧 233 · 已交付合成数据", + "source": "MANO 拟合(团队图册 2026-10-13)" + }, + { + "rgb": "media/egorenderer/egorenderer_v005_s6_banana_peel_1_104_rgb.jpg", + "gt": "media/egorenderer/egorenderer_v005_s6_banana_peel_1_104_gt.jpg", + "caption": "s6/banana_peel_1 · 帧 104 · 已交付合成数据", + "source": "MANO 拟合(团队图册 2026-10-13)" + }, + { + "rgb": "media/egorenderer/egorenderer_v005_s2_banana_peel_1_197_rgb.jpg", + "gt": "media/egorenderer/egorenderer_v005_s2_banana_peel_1_197_gt.jpg", + "caption": "s2/banana_peel_1 · 帧 197 · 已交付合成数据", + "source": "MANO 拟合(团队图册 2026-10-13)" + } + ], + "freihand": [ + { + "rgb": "media/freihand/57c00fd54a204e690012_rgb.jpg", + "gt": "media/freihand/57c00fd54a204e690012_gt.jpg", + "caption": "image_6909 · 帧 6909 · 右手 · official_v2_training_proxy", + "source": "MANO(团队图册 2026-10-13)" + }, + { + "rgb": "media/freihand/f66e6163a5a36bdd5ece_rgb.jpg", + "gt": "media/freihand/f66e6163a5a36bdd5ece_gt.jpg", + "caption": "image_17057 · 帧 17057 · 右手 · official_v2_training_proxy", + "source": "MANO(团队图册 2026-10-13)" + }, + { + "rgb": "media/freihand/0172018ef83c148a9a1c_rgb.jpg", + "gt": "media/freihand/0172018ef83c148a9a1c_gt.jpg", + "caption": "image_8002 · 帧 8002 · 右手 · official_v2_training_proxy", + "source": "MANO(团队图册 2026-10-13)" + }, + { + "rgb": "media/freihand/5d4682d7be033bd1ed70_rgb.jpg", + "gt": "media/freihand/5d4682d7be033bd1ed70_gt.jpg", + "caption": "image_8614 · 帧 8614 · 右手 · official_v2_training_proxy", + "source": "MANO(团队图册 2026-10-13)" + } + ], + "genhumanego": [ + { + "rgb": "media/genhumanego/team_gen-humanego_0_rgb.jpg", + "gt": "media/genhumanego/team_gen-humanego_0_gt.jpg", + "caption": "ee7adccdba994d8fbc1405d6e3f04edf · frame 30 · 1779872474945466000 ns · camera0 · CC-BY-SA-4.0;MANO 解码/投影/缩放", + "source": "RGB + 官方预测 MANO mesh(团队图册 2026-10-22)" + }, + { + "rgb": "media/genhumanego/team_gen-humanego_1_rgb.jpg", + "gt": "media/genhumanego/team_gen-humanego_1_gt.jpg", + "caption": "ee7adccdba994d8fbc1405d6e3f04edf · frame 30 · 1779872474945456000 ns · camera2 · CC-BY-SA-4.0;MANO 解码/投影/缩放", + "source": "RGB + 官方预测 MANO mesh(团队图册 2026-10-22)" + }, + { + "rgb": "media/genhumanego/team_gen-humanego_2_rgb.jpg", + "gt": "media/genhumanego/team_gen-humanego_2_gt.jpg", + "caption": "ee7adccdba994d8fbc1405d6e3f04edf · frame 150 · 1779872478945455000 ns · camera2 · CC-BY-SA-4.0;MANO 解码/投影/缩放", + "source": "RGB + 官方预测 MANO mesh(团队图册 2026-10-22)" + }, + { + "rgb": "media/genhumanego/team_gen-humanego_3_rgb.jpg", + "gt": "media/genhumanego/team_gen-humanego_3_gt.jpg", + "caption": "ee7adccdba994d8fbc1405d6e3f04edf · frame 150 · 1779872478912150000 ns · camera4 · CC-BY-SA-4.0;MANO 解码/投影/缩放", + "source": "RGB + 官方预测 MANO mesh(团队图册 2026-10-22)" + } + ], + "h2o": [ + { + "rgb": "media/h2o/a11122e7dd03fe259404_rgb.jpg", + "gt": "media/h2o/a11122e7dd03fe259404_gt.jpg", + "caption": "subject1/h2/6/cam4 · 帧 159 · 右手 · train", + "source": "MANO(团队图册 2026-10-13)" + }, + { + "rgb": "media/h2o/09a705df66acd8de1d4c_rgb.jpg", + "gt": "media/h2o/09a705df66acd8de1d4c_gt.jpg", + "caption": "subject1/o1/4/cam4 · 帧 138 · 右手 · train", + "source": "MANO(团队图册 2026-10-13)" + }, + { + "rgb": "media/h2o/f7c2550200511fea07b1_rgb.jpg", + "gt": "media/h2o/f7c2550200511fea07b1_gt.jpg", + "caption": "subject1/o1/7/cam4 · 帧 688 · 右手 · train", + "source": "MANO(团队图册 2026-10-13)" + }, + { + "rgb": "media/h2o/a2a8c1c9e2b969d45ef4_rgb.jpg", + "gt": "media/h2o/a2a8c1c9e2b969d45ef4_gt.jpg", + "caption": "subject1/o2/0/cam4 · 帧 30 · 左手 · train", + "source": "MANO(团队图册 2026-10-13)" + } + ], + "h2o3d": [ + { + "rgb": "media/h2o3d/h2o3d_train_MBC1_0104_rgb.jpg", + "gt": "media/h2o3d/h2o3d_train_MBC1_0104_gt.jpg", + "caption": "MBC1 · 帧 0104 · train", + "source": "MANO(团队图册 2026-10-13)" + }, + { + "rgb": "media/h2o3d/h2o3d_train_SHM0_0179_rgb.jpg", + "gt": "media/h2o3d/h2o3d_train_SHM0_0179_gt.jpg", + "caption": "SHM0 · 帧 0179 · train", + "source": "MANO(团队图册 2026-10-13)" + }, + { + "rgb": "media/h2o3d/h2o3d_train_SMB20_0218_rgb.jpg", + "gt": "media/h2o3d/h2o3d_train_SMB20_0218_gt.jpg", + "caption": "SMB20 · 帧 0218 · train", + "source": "MANO(团队图册 2026-10-13)" + }, + { + "rgb": "media/h2o3d/h2o3d_train_SSPD0_0427_rgb.jpg", + "gt": "media/h2o3d/h2o3d_train_SSPD0_0427_gt.jpg", + "caption": "SSPD0 · 帧 0427 · train", + "source": "MANO(团队图册 2026-10-13)" + } + ], + "halpe": [ + { + "rgb": "media/halpe/halpe_val_398905_485625_left_native2d_rgb.jpg", + "gt": "media/halpe/halpe_val_398905_485625_left_native2d_gt.jpg", + "caption": "静态图像 · 帧 398905 · 左手 · validation", + "source": "2D(团队图册 2026-10-13)" + }, + { + "rgb": "media/halpe/halpe_val_281032_458683_left_native2d_rgb.jpg", + "gt": "media/halpe/halpe_val_281032_458683_left_native2d_gt.jpg", + "caption": "静态图像 · 帧 281032 · 左手 · validation", + "source": "2D(团队图册 2026-10-13)" + }, + { + "rgb": "media/halpe/halpe_val_465179_514707_right_native2d_rgb.jpg", + "gt": "media/halpe/halpe_val_465179_514707_right_native2d_gt.jpg", + "caption": "静态图像 · 帧 465179 · 右手 · validation", + "source": "2D(团队图册 2026-10-13)" + }, + { + "rgb": "media/halpe/halpe_val_3156_477234_right_native2d_rgb.jpg", + "gt": "media/halpe/halpe_val_3156_477234_right_native2d_gt.jpg", + "caption": "静态图像 · 帧 3156 · 右手 · validation", + "source": "2D(团队图册 2026-10-13)" + } + ], + "ho3d": [ + { + "rgb": "media/ho3d/0d33dbb3cbe2379785a2_rgb.jpg", + "gt": "media/ho3d/0d33dbb3cbe2379785a2_gt.jpg", + "caption": "BB1 · 帧 572 · 右手 · v3_train_proxy", + "source": "MANO(团队图册 2026-10-13)" + }, + { + "rgb": "media/ho3d/fa5f136813986a79dd61_rgb.jpg", + "gt": "media/ho3d/fa5f136813986a79dd61_gt.jpg", + "caption": "MC · 帧 0 · 右手 · v3_train_proxy", + "source": "MANO(团队图册 2026-10-13)" + }, + { + "rgb": "media/ho3d/95d8470bf5dd56fde1c2_rgb.jpg", + "gt": "media/ho3d/95d8470bf5dd56fde1c2_gt.jpg", + "caption": "ND · 帧 703 · 右手 · v3_train_proxy", + "source": "MANO(团队图册 2026-10-13)" + }, + { + "rgb": "media/ho3d/377560e17ccaf120f789_rgb.jpg", + "gt": "media/ho3d/377560e17ccaf120f789_gt.jpg", + "caption": "SMu · 帧 1264 · 右手 · v3_train_proxy", + "source": "MANO(团队图册 2026-10-13)" + } + ], + "hot3d": [ + { + "rgb": "media/hot3d/e240c578abc5d1f941da_rgb.jpg", + "gt": "media/hot3d/e240c578abc5d1f941da_gt.jpg", + "caption": "P0002_59a84a3a · 帧 3416 · 左手 · train", + "source": "MANO(团队图册 2026-10-13)" + }, + { + "rgb": "media/hot3d/9984faeda44316bef1a4_rgb.jpg", + "gt": "media/hot3d/9984faeda44316bef1a4_gt.jpg", + "caption": "P0012_af3dab9a · 帧 3470 · 左手 · train", + "source": "MANO(团队图册 2026-10-13)" + }, + { + "rgb": "media/hot3d/cff8bd8ba9c8484f34a8_rgb.jpg", + "gt": "media/hot3d/cff8bd8ba9c8484f34a8_gt.jpg", + "caption": "P0015_3f46732d · 帧 1705 · 左手 · train", + "source": "MANO(团队图册 2026-10-13)" + }, + { + "rgb": "media/hot3d/b0bdc415670d0451624f_rgb.jpg", + "gt": "media/hot3d/b0bdc415670d0451624f_gt.jpg", + "caption": "P0015_53358a64 · 帧 3146 · 右手 · train", + "source": "MANO(团队图册 2026-10-13)" + } + ], + "mtc": [ + { + "rgb": "media/mtc/mtc_171204_pose2_f00023680_p4_right_0_rgb.jpg", + "gt": "media/mtc/mtc_171204_pose2_f00023680_p4_right_0_gt.jpg", + "caption": "171204_pose2 · 帧 23680 · 右手 · training_data", + "source": "3D → 2D(团队图册 2026-10-13)" + }, + { + "rgb": "media/mtc/mtc_171204_pose2_f00023680_p4_right_6_rgb.jpg", + "gt": "media/mtc/mtc_171204_pose2_f00023680_p4_right_6_gt.jpg", + "caption": "171204_pose2 · 帧 23680 · 右手 · training_data", + "source": "3D → 2D(团队图册 2026-10-13)" + }, + { + "rgb": "media/mtc/mtc_171204_pose2_f00028165_p5_right_3_rgb.jpg", + "gt": "media/mtc/mtc_171204_pose2_f00028165_p5_right_3_gt.jpg", + "caption": "171204_pose2 · 帧 28165 · 右手 · training_data", + "source": "3D → 2D(团队图册 2026-10-13)" + }, + { + "rgb": "media/mtc/mtc_171204_pose2_f00028165_p5_right_12_rgb.jpg", + "gt": "media/mtc/mtc_171204_pose2_f00028165_p5_right_12_gt.jpg", + "caption": "171204_pose2 · 帧 28165 · 右手 · training_data", + "source": "3D → 2D(团队图册 2026-10-13)" + } + ], + "reinterhand": [ + { + "rgb": "media/reinterhand/reinter_train_c0_f175271_right_400503_rgb.jpg", + "gt": "media/reinterhand/reinter_train_c0_f175271_right_400503_gt.jpg", + "caption": "m--20210701--1058--0000000--pilot--relightablehandsy--participant0--two-hands · 帧 175271 · 右手 · train", + "source": "3D → 2D(团队图册 2026-10-13)" + }, + { + "rgb": "media/reinterhand/reinter_train_c0_f202212_right_400503_rgb.jpg", + "gt": "media/reinterhand/reinter_train_c0_f202212_right_400503_gt.jpg", + "caption": "m--20210701--1058--0000000--pilot--relightablehandsy--participant0--two-hands · 帧 202212 · 右手 · train", + "source": "3D → 2D(团队图册 2026-10-13)" + }, + { + "rgb": "media/reinterhand/reinter_train_c0_f292944_right_400503_rgb.jpg", + "gt": "media/reinterhand/reinter_train_c0_f292944_right_400503_gt.jpg", + "caption": "m--20210701--1058--0000000--pilot--relightablehandsy--participant0--two-hands · 帧 292944 · 右手 · train", + "source": "3D → 2D(团队图册 2026-10-13)" + }, + { + "rgb": "media/reinterhand/reinter_train_c0_f303030_right_400503_rgb.jpg", + "gt": "media/reinterhand/reinter_train_c0_f303030_right_400503_gt.jpg", + "caption": "m--20210701--1058--0000000--pilot--relightablehandsy--participant0--two-hands · 帧 303030 · 右手 · train", + "source": "3D → 2D(团队图册 2026-10-13)" + } + ], + "rhd": [ + { + "rgb": "media/rhd/5807bcc820cac79abd07_rgb.jpg", + "gt": "media/rhd/5807bcc820cac79abd07_gt.jpg", + "caption": "image_30087 · 帧 30087 · 左手 · official_v1.1_training_proxy", + "source": "3D → 2D(团队图册 2026-10-13)" + }, + { + "rgb": "media/rhd/0941a85c7723f23e66bc_rgb.jpg", + "gt": "media/rhd/0941a85c7723f23e66bc_gt.jpg", + "caption": "image_33342 · 帧 33342 · 右手 · official_v1.1_training_proxy", + "source": "3D → 2D(团队图册 2026-10-13)" + }, + { + "rgb": "media/rhd/a8db512d6c52ae380d21_rgb.jpg", + "gt": "media/rhd/a8db512d6c52ae380d21_gt.jpg", + "caption": "image_13893 · 帧 13893 · 左手 · official_v1.1_training_proxy", + "source": "3D → 2D(团队图册 2026-10-13)" + }, + { + "rgb": "media/rhd/14514fa31d01d7d4624b_rgb.jpg", + "gt": "media/rhd/14514fa31d01d7d4624b_gt.jpg", + "caption": "image_29917 · 帧 29917 · 左手 · official_v1.1_training_proxy", + "source": "3D → 2D(团队图册 2026-10-13)" + } + ] +} diff --git a/index.html b/index.html index dc10eeb1fba2728d3872da57b8d936b9a1a20e1f..4a888ec9cf15264c292214bbd35513a036c9b56f 100644 --- a/index.html +++ b/index.html @@ -10,7 +10,7 @@ @@ -229,10 +248,10 @@ footer { font-size: 0.8rem; color: var(--muted); border-top: 1px solid var(--lin
SOMA 手部数据图谱
@@ -246,17 +265,24 @@ footer { font-size: 0.8rem; color: var(--muted); border-top: 1px solid var(--lin "use strict"; var DATA = null, PREV = {}, BYID = {}, M = {}; var app = document.getElementById("app"); - var filt = { source: "", method: "", tier: "", status: "", q: "" }; + var filt = { source: "", method: "", tier: "", q: "", hasPrev: false }; + var ORDER = ["own", "p0", "p1", "p2", "used", "surveyed", "no"]; + var TIER_OF = { scan: "S1", marker: "S2", rgbd: "S3", mvkp: "S4", device: "-", synth: "SY", manual2d: "-", pseudo: "S5" }; function esc(s) { return String(s == null ? "" : s).replace(/[&<>"']/g, function (c) { return { "&": "&", "<": "<", ">": ">", '"': """, "'": "'" }[c]; }); } function by(list) { var o = {}; list.forEach(function (x) { o[x.id] = x; }); return o; } - function stChip(id) { var s = M.status[id]; return '' + esc(s.name) + ""; } - function tierChip(id, title) { var t = M.tier[id]; return '' + esc(id === "-" ? "—" : id) + ""; } - function dsLink(d, cls) { return '' + esc(d.name) + ""; } - function statusOrder(s) { return ["own", "p0", "p1", "p2", "used", "surveyed", "no"].indexOf(s); } - function sorted(list) { return list.slice().sort(function (a, b) { return statusOrder(a.status) - statusOrder(b.status) || a.name.localeCompare(b.name); }); } + function stChip(id) { return '' + esc(M.status[id].name) + ""; } + function tierChip(id) { var t = M.tier[id]; return '' + (id === "-" ? "—" : esc(id)) + ""; } + function nPrev(d) { return (PREV[d.id] || []).length; } + function dsLink(d, showN) { var n = nPrev(d); return '' + esc(d.name) + (showN && n ? ' ' + n + "" : "") + ""; } + function sorted(list) { return list.slice().sort(function (a, b) { return ORDER.indexOf(a.status) - ORDER.indexOf(b.status) || a.name.localeCompare(b.name); }); } + function partHead(title, note) { return '

' + esc(title) + "

" + (note ? "

" + note + "

" : "") + "
"; } + function thumb(d) { + var p = (PREV[d.id] || [])[0]; + return p ? '' : '暂无样例'; + } - /* ---------- 采集装置示意图 ---------- */ + /* ---------- 采集装置示意 ---------- */ function rigSvg(d) { var r = d.rig || {}, W = 320, H = 200, cx = 160, cy = 118, out = []; out.push(''); @@ -288,7 +314,6 @@ footer { font-size: 0.8rem; color: var(--muted); border-top: 1px solid var(--lin out.push(''); out.push('' + (r.pseudoEgo ? "固定于眼高(模拟第一视角)" : (r.fisheye ? "第一视角 · 宽视场" : "第一视角")) + (r.mono ? " · 黑白" : "") + ""); } - // 手 var hx2 = cx, hy2 = cy + 10; out.push(''); out.push(''); @@ -301,194 +326,191 @@ footer { font-size: 0.8rem; color: var(--muted); border-top: 1px solid var(--lin out.push(''); out.push('无 RGB 图像'); } - if (r.synth) out.push('渲染生成'); - if (r.wild && !r.ego) out.push('网络 / 日常图像'); - if (r.scanner) out.push('扫描仪多相机环'); + var foot = r.synth ? "渲染生成" : (r.wild && !r.ego) ? "网络 / 日常图像" : r.scanner ? "扫描仪多相机环" : ""; + if (foot) out.push('' + foot + ""); out.push(""); return out.join(""); } + function flow(steps) { return '
' + steps.map(function (s, i) { return (i ? '' : "") + '' + esc(s) + ""; }).join("") + "
"; } - function flow(steps) { - return '
' + steps.map(function (s, i) { return (i ? '' : "") + '' + esc(s) + ""; }).join("") + "
"; - } - - /* ---------- 视图:总览 ---------- */ + /* ---------- 总览 ---------- */ function vOverview() { var ds = DATA.datasets, cnt = {}; ds.forEach(function (d) { cnt[d.status] = (cnt[d.status] || 0) + 1; }); - var h = []; - h.push('

按数据来源和标注方法看手部数据

' + esc(DATA.meta.goal) + " 矩阵的行按 shape 真值的可信度从高到低排列,列是数据来源;点任一数据集看详情、采集示意和样例。

"); - h.push('
' + DATA.meta.statuses.map(function (s) { return "
" + stChip(s.id) + '' + (cnt[s.id] || 0) + "
"; }).join("") + '
共 ' + ds.length + " 个
"); - h.push('
'); + var withPrev = ds.filter(function (d) { return nPrev(d); }).length; + var h = ['
']; + h.push('

手部数据集,按来源和标注方法分类

' + esc(DATA.meta.goal) + "

"); + h.push('
' + ds.length + '个数据集
' + withPrev + '个有样例
' + ORDER.map(function (s) { return "
" + stChip(s) + "" + (cnt[s] || 0) + "
"; }).join("") + "
"); + + h.push('
' + partHead("分布矩阵", "行是标注方法,按 shape 真值可信度从高到低;列是数据来源。点名称看详情。")); + h.push('
标注方法 \ 数据来源
'); DATA.meta.sources.forEach(function (s) { h.push(""); }); h.push(""); - var tierOf = { scan: "S1", marker: "S2", rgbd: "S3", mvkp: "S4", device: "-", synth: "SY", manual2d: "-", pseudo: "S5" }; DATA.meta.methods.forEach(function (m) { - h.push('"); + h.push('"); DATA.meta.sources.forEach(function (s) { var list = sorted(ds.filter(function (d) { return d.method === m.id && d.source === s.id; })); - h.push(""); + h.push(""); }); h.push(""); }); - h.push("
标注方法" + esc(s.name) + "" + esc(s.desc) + "
' + esc(m.name) + "
" + tierChip(tierOf[m.id]) + "
' + esc(m.name) + "" + tierChip(TIER_OF[m.id]) + "" + (list.length ? '
' + list.map(function (d) { return dsLink(d); }).join("") + "
" : '·') + "
" + (list.length ? '
' + list.map(function (d) { return dsLink(d); }).join("") + "
" : '·') + "
"); - h.push('
标签颜色表示状态:' + DATA.meta.statuses.map(function (s) { return "" + stChip(s.id) + esc(s.desc) + ""; }).join("") + "
"); + h.push('
状态:' + ORDER.map(stChip).join("") + "
"); - h.push('

shape 真值分层

大部分数据集的 β 是从图像或关键点拟合的。监督 SOMA shape 时只用 S1 到 S3 和合成数据,S4 当弱监督,S5 和“—”不参与 shape。

'); - DATA.meta.tiers.forEach(function (t) { h.push("
" + tierChip(t.id) + "" + esc(t.name) + '' + esc(t.desc) + "
"); }); - h.push("
"); var p0 = ds.filter(function (d) { return d.status === "p0"; }); - h.push('

建议先接入

    '); - p0.forEach(function (d) { h.push('
  1. ' + esc(d.name) + " " + esc(d.fills) + "
  2. "); }); - h.push('

完整理由和其余新增项见数据集目录,状态筛选选「P0 新增」到「P2 新增」。

'); - h.push("
"); + h.push('
' + partHead("建议先接入") + '
'); + p0.forEach(function (d) { h.push('' + stChip(d.status) + "" + esc(d.name) + '' + esc(d.fills) + ""); }); + h.push("
"); + h.push('
' + partHead("shape 真值分层", "只有 S1 到 S3 和合成数据用来监督 SOMA shape。") + '
'); + DATA.meta.tiers.forEach(function (t) { h.push("
" + tierChip(t.id) + "" + esc(t.name) + '' + esc(t.desc) + "
"); }); + h.push("
"); return h.join(""); } - /* ---------- 视图:目录 ---------- */ + /* ---------- 数据集目录 ---------- */ function opts(list, cur, all) { return '" + list.map(function (x) { return '"; }).join(""); } function vCatalog() { - var h = []; - h.push('

数据集目录

按数据来源、标注方法、shape 层级和状态筛选。每行是一个数据集,点开看完整信息。

'); - h.push(''); - h.push('

'); + var h = ['

数据集

按状态分组。缩略图是 GT 叠加样例,点开看完整信息。

']; + h.push('

'); + h.push('
'); return h.join(""); } function renderRows() { var q = filt.q.trim().toLowerCase(); - var list = sorted(DATA.datasets.filter(function (d) { + var list = DATA.datasets.filter(function (d) { if (filt.source && d.source !== filt.source) return false; if (filt.method && d.method !== filt.method) return false; if (filt.tier && d.tier !== filt.tier) return false; - if (filt.status && d.status !== filt.status) return false; + if (filt.hasPrev && !nPrev(d)) return false; if (q) { var hay = [d.name, d.camera, d.gt, d.fills, d.risk, d.scale, d.subjects, (d.tags || []).join(" ")].join(" ").toLowerCase(); if (hay.indexOf(q) < 0) return false; } return true; - })); - document.getElementById("cnt").textContent = "显示 " + list.length + " / " + DATA.datasets.length + " 个数据集"; - var h = ['
数据集数据来源标注方法真值shape规模状态
']; - if (!list.length) h.push('
没有符合条件的数据集。换一个筛选条件,或点「清除筛选」。
'); - list.forEach(function (d) { - h.push(''); - h.push('' + esc(d.name) + "" + esc(d.year) + ""); - h.push('数据来源' + esc(M.source[d.source].name) + ""); - h.push('标注方法' + esc(M.method[d.method].name) + ""); - h.push('真值' + esc(d.gt) + ""); - h.push('shape' + tierChip(d.tier) + ""); - h.push('规模' + esc([d.subjects, d.scale].filter(Boolean).join(";") || "—") + ""); - h.push('' + stChip(d.status) + ""); - h.push(""); }); - document.getElementById("rows").innerHTML = h.join(""); + document.getElementById("cnt").textContent = "显示 " + list.length + " / " + DATA.datasets.length + " 个"; + var h = []; + if (!list.length) h.push('

没有符合条件的数据集。换个条件,或点「清除」。

'); + ORDER.forEach(function (st) { + var g = list.filter(function (d) { return d.status === st; }).sort(function (a, b) { return a.name.localeCompare(b.name); }); + if (!g.length) return; + h.push('
' + stChip(st) + '' + esc(M.status[st].desc) + " · " + g.length + ' 个
"); + }); + document.getElementById("groups").innerHTML = h.join(""); } function bindCatalog() { - ["source", "method", "tier", "status"].forEach(function (k) { - document.getElementById("f-" + k).addEventListener("change", function (e) { filt[k] = e.target.value; renderRows(); }); - }); + ["source", "method", "tier"].forEach(function (k) { document.getElementById("f-" + k).addEventListener("change", function (e) { filt[k] = e.target.value; renderRows(); }); }); document.getElementById("f-q").addEventListener("input", function (e) { filt.q = e.target.value; renderRows(); }); + document.getElementById("f-prev").addEventListener("change", function (e) { filt.hasPrev = e.target.checked; renderRows(); }); document.getElementById("ff").addEventListener("submit", function (e) { e.preventDefault(); }); - document.getElementById("f-reset").addEventListener("click", function () { filt = { source: "", method: "", tier: "", status: "", q: "" }; render(); }); + document.getElementById("f-reset").addEventListener("click", function () { filt = { source: "", method: "", tier: "", q: "", hasPrev: false }; render(); }); renderRows(); } - /* ---------- 视图:标注方法 ---------- */ + /* ---------- 详情 ---------- */ + function vDetail(id) { + var d = BYID[id]; + if (!d) return '

找不到数据集「' + esc(id) + '」。回到数据集。

'; + var m = M.method[d.method], s = M.source[d.source], rt = M.route[d.route], t = M.tier[d.tier]; + var all = sorted(DATA.datasets), idx = all.indexOf(d), prev = all[idx - 1], next = all[idx + 1]; + var h = ['

数据集 / ' + esc(M.status[d.status].name) + "

"]; + + h.push('

' + esc(d.name) + '

' + stChip(d.status) + (d.year ? '' + esc(d.year) + "" : "") + (d.tags || []).filter(function (x) { return x !== "新增" && x !== "不建议"; }).map(function (x) { return '' + esc(x) + ""; }).join("") + '

' + esc(d.fills) + "

"); + + h.push('
'); + h.push('
数据来源' + esc(s.name) + "
"); + h.push('
标注方法' + esc(m.name) + "
"); + h.push('
真值' + esc(d.gt) + "
"); + h.push('
shape 层级' + tierChip(d.tier) + " " + esc(t.name) + "
"); + h.push('
转到 SOMA' + esc(rt.id + " " + rt.name) + "" + (rt.shape ? "" : '
不监督 shape') + "
"); + h.push("
"); + + var pv = PREV[d.id] || []; + h.push('
' + partHead("样例", pv.length ? "左:原始 RGB;右:GT 叠加。" : "")); + if (pv.length) { + h.push('"); + } else { + h.push('

还没有样例。添加方法见样例页。

' + ((d.team || []).length ? "

团队已有可视化:" + d.team.map(function (x) { return '' + esc(x.label.replace(/^团队(图册|视频):/, "")) + ""; }).join(",") + "

" : "") + "
"); + } + h.push("
"); + + h.push('

相机与规模

'); + h.push("
相机
" + esc(d.camera || "未列") + "
"); + h.push("
受试者
" + esc(d.subjects || "未列") + "
"); + h.push("
规模
" + esc(d.scale || "未列") + "
"); + if (d.risk) h.push('
注意

' + esc(d.risk) + "

"); + h.push('

采集与标注流程

' + rigSvg(d) + flow(m.steps) + '

按相机配置绘制的示意,不是真实画面;琥珀色圆点表示手上贴了光学 marker。

'); + + var links = (d.links || []).concat((d.team || []).map(function (x) { return { label: x.label, url: x.url }; })); + if (links.length) h.push('
' + partHead("链接") + '
"); + h.push('
' + (prev ? '← ' + esc(prev.name) + "" : "") + "" + (next ? '' + esc(next.name) + " →" : "") + "
"); + return h.join(""); + } + + /* ---------- 标注方法 ---------- */ function vMethods() { - var h = ['

标注方法

同一种标注方法得到的真值,可信度和适用范围相近。下面按 shape 真值可信度从高到低排列,每种方法给出流程、可信度、常见问题和转到 SOMA 的路线。

']; - var tierOf = { scan: "S1", marker: "S2", rgbd: "S3", mvkp: "S4", device: "-", synth: "SY", manual2d: "-", pseudo: "S5" }; + var h = ['

标注方法

按 shape 真值可信度从高到低排列。每种方法列出流程、可信度、常见问题、转到 SOMA 的路线和用到它的数据集。

']; + h.push('"); DATA.meta.methods.forEach(function (m) { var list = sorted(DATA.datasets.filter(function (d) { return d.method === m.id; })); - h.push('

' + esc(m.name) + "

" + tierChip(tierOf[m.id]) + '' + list.length + " 个数据集
"); - h.push(flow(m.steps)); - h.push('
可信度
' + esc(m.trust) + "
常见问题
" + esc(m.issues) + '
SOMA 路线
' + esc(m.route) + "
"); - h.push('
' + list.map(function (d) { return dsLink(d); }).join("") + "
"); + h.push('

' + esc(m.name) + "

" + tierChip(TIER_OF[m.id]) + '' + list.length + " 个数据集
" + flow(m.steps)); + h.push('
可信度
' + esc(m.trust) + "
常见问题
" + esc(m.issues) + '
转到 SOMA
' + esc(m.route) + '
' + list.map(function (d) { return dsLink(d); }).join("") + "
"); }); h.push("
"); return h.join(""); } - /* ---------- 视图:SOMA 转换 ---------- */ + /* ---------- 转到 SOMA ---------- */ function vSoma() { - var h = ['

转到 SOMA hand

没有公开数据集原生使用 SOMA 标注。SOMA-X 的 SOMAHandLayer 官方支持三种手部后端:SOMA 原生(20 维手型 identity)、MANO 和 MHR,许可为 Apache-2.0。转到 SOMA 拓扑之后,要监督原生 shape 还需要再拟合一次。

']; - h.push('
'); - h.push('

原始真值

  • 扫描网格
  • MANO 参数或网格
  • SMPL-X / SMPL-H
  • MHR 参数
  • 3D 关键点
  • 2D 关键点
'); - h.push('

映射到 SOMA 拓扑

  • SOMAHandLayer 的 MANO 后端
  • SOMAHandLayer 的 MHR 后端
  • SMPL-X 先取手部 MANO 部分
  • 关键点先定关节对应
'); - h.push('

SOMA 原生重拟合

  • 拟合 20 维 identity 和 pose
  • 按数据集统计顶点残差
  • 残差超阈值的帧不监督 shape
'); - h.push('

训练监督

  • shape:S1 到 S3、合成数据
  • pose:所有 3D 来源
  • 2D 重投影:全部带 2D 的来源
  • 伪标签只做弱监督
'); - h.push("
"); - h.push('

转换路线

'); + var h = ['

转到 SOMA hand

没有公开数据集原生使用 SOMA 标注。SOMA-X 的 SOMAHandLayer 官方支持 SOMA 原生、MANO、MHR 三种手部后端(Apache-2.0)。映射到 SOMA 拓扑后,要监督原生 shape 还需要再拟合一次。

']; + h.push('
' + partHead("四步流程") + '
'); + h.push('
1 · 原始真值
  • 扫描网格
  • MANO 参数或网格
  • SMPL-X / SMPL-H
  • MHR 参数
  • 3D / 2D 关键点
'); + h.push('
2 · 映射到 SOMA 拓扑
  • SOMAHandLayer 的 MANO 后端
  • SOMAHandLayer 的 MHR 后端
  • SMPL-X 先取手部
  • 关键点先定关节对应
'); + h.push('
3 · SOMA 原生重拟合
  • 拟合 20 维 identity 和 pose
  • 按数据集统计顶点残差
  • 残差超阈值不监督 shape
'); + h.push('
4 · 训练监督
  • shape:S1 到 S3、合成
  • pose:所有 3D 来源
  • 2D 重投影:带 2D 的来源
  • 伪标签只做弱监督
'); + h.push("
"); + h.push('
' + partHead("转换路线", "每张卡片对应一种原始真值格式。") + '
'); DATA.meta.routes.forEach(function (r) { - var n = DATA.datasets.filter(function (d) { return d.route === r.id; }).length; - h.push('
' + r.id + "

" + esc(r.name) + '

来源:' + esc(r.from) + "

" + esc(r.how) + '

' + (r.shape ? '可监督 shape' : '不监督 shape') + ' · ' + n + " 个数据集

"); + var list = DATA.datasets.filter(function (d) { return d.route === r.id; }); + h.push('
' + r.id + "

" + esc(r.name) + '

' + esc(r.how) + '

' + (r.shape ? '可监督 shape' : '不监督 shape') + ' · ' + list.length + " 个数据集

"); }); - h.push("
"); - h.push('

需要注意

    '); - h.push("
  • MANO 的 21 点里指尖取的是网格顶点,与 SOMA 关节定义不同,关键点类数据集必须先定对应表。
  • "); - h.push("
  • EgoRenderer 已经做过一次原始网格到 MANO 的 778 顶点拟合,再转 SOMA 是第二次转换,残差要分开记录。
  • "); - h.push("
  • shape 和尺度在单目里是耦合的;有内参时,shape 误差会表现为绝对尺度误差,评测时建议单独报标准姿态下的顶点误差和骨长误差。
  • "); + h.push("
"); + h.push('
' + partHead("注意事项") + '
    '); + h.push("
  • MANO 21 点的指尖是网格顶点,与 SOMA 关节定义不同;关键点类数据集要先定对应表。
  • "); + h.push("
  • EgoRenderer 已经做过一次原始网格到 MANO 的拟合,再转 SOMA 是第二次,残差分开记录。
  • "); + h.push("
  • 单目下 shape 和尺度耦合;评测单独报标准姿态下的顶点误差和骨长误差。
  • "); h.push("
  • SAM 3D Body 输出 MHR,可以走 R5 给野外图像生成伪标签;它的训练数据是否公开未查到。
  • "); - h.push('
'); - h.push("
"); + h.push('
'); return h.join(""); } - /* ---------- 视图:样例素材 ---------- */ + /* ---------- 样例 ---------- */ function vSamples() { - var h = ['

样例素材

每个数据集的详情页会显示「RGB / GT 叠加」样例对。样例登记在 data/previews.json,图片放在 media/<数据集 id>/。用脚本添加,不需要改页面代码。

']; - h.push('

添加一对样例

python tools/add_preview.py hograspnet \\\n  --rgb  /data/hograspnet/s01_0042_rgb.png \\\n  --gt   /data/hograspnet/s01_0042_gt.png \\\n  --caption "受试者 01,侧捏,第一视角相机" \\\n  --source "官方 MANO,经 R1 转为 SOMA 后渲染"

脚本会把图片转成最长边 960 像素的 JPEG 复制到 media 目录,并追加到 previews.json。同名样例会被覆盖。

'); - h.push('

previews.json 格式

{\n  "hograspnet": [\n    {\n      "rgb": "media/hograspnet/s01_0042_rgb.jpg",\n      "gt": "media/hograspnet/s01_0042_gt.jpg",\n      "caption": "受试者 01,侧捏",\n      "source": "官方 MANO → SOMA"\n    }\n  ]\n}
'); - h.push('

当前样例覆盖

'); - sorted(DATA.datasets).forEach(function (d) { - var n = (PREV[d.id] || []).length; - h.push('"); - }); - h.push("
数据集状态本站样例团队已有可视化
' + esc(d.name) + "" + stChip(d.status) + '' + (n || "—") + "" + ((d.team || []).map(function (t) { return '' + esc(t.label.replace("团队图册:", "").replace("团队视频:", "视频:")) + ""; }).join("
") || '无') + "
"); - return h.join(""); - } - - /* ---------- 视图:详情 ---------- */ - function vDetail(id) { - var d = BYID[id]; - if (!d) return '

找不到数据集「' + esc(id) + '」。回到数据集目录。

'; - var m = M.method[d.method], s = M.source[d.source], rt = M.route[d.route], t = M.tier[d.tier]; - var all = sorted(DATA.datasets), idx = all.indexOf(d), prev = all[idx - 1], next = all[idx + 1]; - var h = ['

数据集目录 / ' + esc(s.name) + " / " + esc(m.name) + "

"]; - h.push('

' + esc(d.name) + '

' + stChip(d.status) + (d.tags || []).map(function (x) { return '' + esc(x) + ""; }).join("") + '' + esc(d.year) + "
"); - h.push('

基本信息

'); - h.push("
数据来源
" + esc(s.name) + '
' + esc(s.desc) + "
"); - h.push("
相机
" + esc(d.camera || "—") + "
"); - h.push('
标注方法
' + esc(m.name) + "
"); - h.push("
真值格式
" + esc(d.gt) + "
"); - h.push("
shape 层级
" + tierChip(d.tier) + " " + esc(t.name) + ',' + esc(t.desc) + "
"); - h.push('
SOMA 路线
' + esc(rt.id + " " + rt.name) + "" + (rt.shape ? "" : ',不监督 shape') + "
"); - h.push("
受试者
" + esc(d.subjects || "—") + "
"); - h.push("
规模
" + esc(d.scale || "—") + "
"); - h.push('
补什么

' + esc(d.fills) + "

"); - if (d.risk) h.push('
注意

' + esc(d.risk) + "

"); - h.push("
"); - h.push('

采集与标注示意

' + rigSvg(d) + flow(m.steps) + '

示意图按数据集的相机配置绘制,不是真实画面。琥珀色圆点表示手上贴有光学 marker。

'); - var pv = PREV[d.id] || []; - h.push('

样例:RGB 与 GT 叠加

'); - if (pv.length) { - h.push('"); - } else { - h.push('

本站还没有这个数据集的样例。用 tools/add_preview.py ' + esc(d.id) + " 添加,步骤见样例素材。

"); - if ((d.team || []).length) h.push("

团队已有的可视化:" + d.team.map(function (x) { return '' + esc(x.label) + ""; }).join(",") + "

"); - h.push("
"); - } - h.push("
"); - if ((d.links || []).length) h.push('

链接

"); - h.push('
' + (prev ? '← ' + esc(prev.name) + "" : "") + "" + (next ? '' + esc(next.name) + " →" : "") + "
"); - h.push("
"); + var ds = sorted(DATA.datasets), have = ds.filter(nPrev), none = ds.filter(function (d) { return !nPrev(d); }); + var pairs = have.reduce(function (a, d) { return a + nPrev(d); }, 0); + var h = ['

样例

每对样例是同一帧的原始 RGB 和 GT 叠加。图片放在独立的 HF Dataset 仓库或本站 media 目录,登记在 data/previews.json。

']; + h.push('
' + partHead("覆盖情况", have.length + " 个数据集共 " + pairs + " 对;" + none.length + " 个还没有。") ); + h.push('
已有样例(数字为对数)
' + have.map(function (d) { return dsLink(d, true); }).join("") + "
"); + h.push('
暂无样例
' + none.map(function (d) { return dsLink(d); }).join("") + "
"); + h.push('
' + partHead("怎么添加", "三种方式,按场景选一种。") + '
'); + h.push('

在数据所在的服务器上批量同步(推荐)

在存放数据集的机器上运行。图片传到独立的 HF Dataset 仓库并固定版本,Space 只登记 URL,网页不依赖 SSH。可以直接给已渲染好的叠加图,也可以给原图加网格(MANO 或 SOMA)由脚本渲染。

export HF_TOKEN=hf_xxx\npython tools/server_sync.py manifest.jsonl \\\n  --media-repo DarthSoluke/EgoNetDatasetResearch-media \\\n  --space DarthSoluke/EgoNetDatasetResearch
{"dataset": "hograspnet",\n "rgb": "/SSD/hograspnet/s01/0042.png",\n "mesh": "/SSD/hograspnet/s01/0042_soma.npz",\n "caption": "受试者 01,侧捏",\n "source": "官方 MANO → R1 → SOMA"}
'); + h.push('

从团队图册导入

复用 nine-source Space 里已经做好的叠加图,每个数据集取若干对。

python tools/import_team_previews.py --per 4
'); + h.push('

手动加一对

已有一张 RGB 和一张叠加图时用。

python tools/add_preview.py hograspnet \\\n  --rgb a_rgb.png --gt a_gt.png \\\n  --caption "说明" --source "GT 来源"
'); + h.push("
"); return h.join(""); } @@ -502,7 +524,7 @@ footer { font-size: 0.8rem; color: var(--muted); border-top: 1px solid var(--lin else if (hash === "soma") html = vSoma(); else if (hash === "samples") html = vSamples(); else { html = vOverview(); view = "overview"; } - app.innerHTML = html + '
数据整理于 ' + esc(DATA.meta.updated) + "。数值来自论文、项目页和团队已有图册;标为「待核」的字段尚未确认。修改数据请编辑 tools/make_data.py 后重新生成。
"; + app.innerHTML = html + '
整理于 ' + esc(DATA.meta.updated) + "。数值来自论文、项目页和团队图册;标「待核」的字段尚未确认。
"; document.querySelectorAll("nav.tabs a").forEach(function (a) { if (a.getAttribute("data-v") === view) a.setAttribute("aria-current", "page"); else a.removeAttribute("aria-current"); }); if (hash === "catalog") bindCatalog(); if (pendingJump) { var el = document.getElementById(pendingJump); pendingJump = null; if (el) { el.scrollIntoView(); return; } } @@ -525,7 +547,7 @@ footer { font-size: 0.8rem; color: var(--muted); border-top: 1px solid var(--lin fetch("data/datasets.json").then(function (r) { if (!r.ok) throw new Error(r.status); return r.json(); }), fetch("data/previews.json").then(function (r) { return r.ok ? r.json() : {}; }).catch(function () { return {}; }) ]).then(function (x) { boot(x[0], x[1]); }).catch(function () { - app.innerHTML = '

没能读取 data/datasets.json。直接双击打开 HTML 文件时浏览器会拦截读取,请用 python -m http.server 在本目录启动后访问,或部署到 Hugging Face Space。

'; + app.innerHTML = '

没能读取 data/datasets.json。直接双击打开 HTML 时浏览器会拦截读取,请在本目录运行 python -m http.server 后访问,或部署到 Hugging Face Space。

'; }); })(); diff --git a/media/arctic/6057bab38e74308c02be_gt.jpg b/media/arctic/6057bab38e74308c02be_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0f5f35161b9bd664f9af9ca32702a4a165cbfec6 Binary files /dev/null and b/media/arctic/6057bab38e74308c02be_gt.jpg differ diff --git a/media/arctic/6057bab38e74308c02be_rgb.jpg b/media/arctic/6057bab38e74308c02be_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..30e725e9c214780b6f4d2e0d342102cda25d2ef7 Binary files /dev/null and b/media/arctic/6057bab38e74308c02be_rgb.jpg differ diff --git a/media/arctic/a213dd95256ccccad7bc_gt.jpg b/media/arctic/a213dd95256ccccad7bc_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d2968fd7a297a20fdc4524619f10a1155bf8f5fd Binary files /dev/null and b/media/arctic/a213dd95256ccccad7bc_gt.jpg differ diff --git a/media/arctic/a213dd95256ccccad7bc_rgb.jpg b/media/arctic/a213dd95256ccccad7bc_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..75bdda37a16cca4d3719faca806ea76b9cff0597 Binary files /dev/null and b/media/arctic/a213dd95256ccccad7bc_rgb.jpg differ diff --git a/media/arctic/c4d53a1b79549c84e96d_gt.jpg b/media/arctic/c4d53a1b79549c84e96d_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..58def721e678670cae02445194d4f12beaa14130 Binary files /dev/null and b/media/arctic/c4d53a1b79549c84e96d_gt.jpg differ diff --git a/media/arctic/c4d53a1b79549c84e96d_rgb.jpg b/media/arctic/c4d53a1b79549c84e96d_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6d1345aada73cf361dda792a38faa941d3c4654f Binary files /dev/null and b/media/arctic/c4d53a1b79549c84e96d_rgb.jpg differ diff --git a/media/arctic/e68425daa275c68f6f5d_gt.jpg b/media/arctic/e68425daa275c68f6f5d_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..92a85895e8a9d0535cb69de6ce5230c5e316631c Binary files /dev/null and b/media/arctic/e68425daa275c68f6f5d_gt.jpg differ diff --git a/media/arctic/e68425daa275c68f6f5d_rgb.jpg b/media/arctic/e68425daa275c68f6f5d_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4a19dac9652d9029efaa0a54965e564347f5fa07 Binary files /dev/null and b/media/arctic/e68425daa275c68f6f5d_rgb.jpg differ diff --git a/media/cocowb/780684ce08a2af76ddc4_gt.jpg b/media/cocowb/780684ce08a2af76ddc4_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..20b33677c2d3c63ff2fd52fca31b04c7fe5a9fde Binary files /dev/null and b/media/cocowb/780684ce08a2af76ddc4_gt.jpg differ diff --git a/media/cocowb/780684ce08a2af76ddc4_rgb.jpg b/media/cocowb/780684ce08a2af76ddc4_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2eb5530479f515b51e11fa6307c91584a9c03690 Binary files /dev/null and b/media/cocowb/780684ce08a2af76ddc4_rgb.jpg differ diff --git a/media/cocowb/7e7716c112039185cc5e_gt.jpg b/media/cocowb/7e7716c112039185cc5e_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..93347c6386fcd3ef53c40ce074766a2326ee639b Binary files /dev/null and b/media/cocowb/7e7716c112039185cc5e_gt.jpg differ diff --git a/media/cocowb/7e7716c112039185cc5e_rgb.jpg b/media/cocowb/7e7716c112039185cc5e_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..049ef0ae605e237a8f1aeba2f7dc2ca9d8051a9d Binary files /dev/null and b/media/cocowb/7e7716c112039185cc5e_rgb.jpg differ diff --git a/media/cocowb/9fcab59ec353483a0635_gt.jpg b/media/cocowb/9fcab59ec353483a0635_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..23e470bbd04fadf9f9af40944e4d18bac3266d4c --- /dev/null +++ b/media/cocowb/9fcab59ec353483a0635_gt.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4352032c4be9d2fd2810ebba3e9f3c0a5fa7b0ec9aec3abd04b2be40897eb44f +size 118042 diff --git a/media/cocowb/9fcab59ec353483a0635_rgb.jpg b/media/cocowb/9fcab59ec353483a0635_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..aa9ceaec416f1ffadd4d5e8411f53b9d0acac565 --- /dev/null +++ b/media/cocowb/9fcab59ec353483a0635_rgb.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4b65ac777858dd0b7a58deaa12a6704d7b8381695ffa1d7f3d0417984b803e3a +size 118000 diff --git a/media/cocowb/f59aa0ba82e64839e596_gt.jpg b/media/cocowb/f59aa0ba82e64839e596_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..666762fa01cbd07e9ab76ab5797aefaa65057b68 Binary files /dev/null and b/media/cocowb/f59aa0ba82e64839e596_gt.jpg differ diff --git a/media/cocowb/f59aa0ba82e64839e596_rgb.jpg b/media/cocowb/f59aa0ba82e64839e596_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a50a62e3be84c4d96dcf8969d8a71f9e218da348 Binary files /dev/null and b/media/cocowb/f59aa0ba82e64839e596_rgb.jpg differ diff --git a/media/dexycb/6df9d4ead4d92a187a28_gt.jpg b/media/dexycb/6df9d4ead4d92a187a28_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..326aa4b94edb23928f2f8e2a85f5c3a48d66c580 Binary files /dev/null and b/media/dexycb/6df9d4ead4d92a187a28_gt.jpg differ diff --git a/media/dexycb/6df9d4ead4d92a187a28_rgb.jpg b/media/dexycb/6df9d4ead4d92a187a28_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6e6cf38e4bbc8bd43cc0de330a7b7367befda139 Binary files /dev/null and b/media/dexycb/6df9d4ead4d92a187a28_rgb.jpg differ diff --git a/media/dexycb/7e32dcf09cb0a2254256_gt.jpg b/media/dexycb/7e32dcf09cb0a2254256_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..45d22b2e455a1895da0b80f115fe4193d7270a65 Binary files /dev/null and b/media/dexycb/7e32dcf09cb0a2254256_gt.jpg differ diff --git a/media/dexycb/7e32dcf09cb0a2254256_rgb.jpg b/media/dexycb/7e32dcf09cb0a2254256_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c2064e545c253ab4290db6d83f92d40e471d26fc Binary files /dev/null and b/media/dexycb/7e32dcf09cb0a2254256_rgb.jpg differ diff --git a/media/dexycb/8ffc14f49fff4b06cc73_gt.jpg b/media/dexycb/8ffc14f49fff4b06cc73_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..03acbc862397b1c9533fd1b6fbd3a4abc21427e4 Binary files /dev/null and b/media/dexycb/8ffc14f49fff4b06cc73_gt.jpg differ diff --git a/media/dexycb/8ffc14f49fff4b06cc73_rgb.jpg b/media/dexycb/8ffc14f49fff4b06cc73_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fe2b14c007be529afd3f8eaa7f7c0569ddb39e7b Binary files /dev/null and b/media/dexycb/8ffc14f49fff4b06cc73_rgb.jpg differ diff --git a/media/dexycb/a128fbe7b45844ebb4e8_gt.jpg b/media/dexycb/a128fbe7b45844ebb4e8_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bbcdb13fdab4b8a16ee4d95f9ace6b33c1960269 Binary files /dev/null and b/media/dexycb/a128fbe7b45844ebb4e8_gt.jpg differ diff --git a/media/dexycb/a128fbe7b45844ebb4e8_rgb.jpg b/media/dexycb/a128fbe7b45844ebb4e8_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bcd2e143e12facc415fc6996119ee668026434b8 Binary files /dev/null and b/media/dexycb/a128fbe7b45844ebb4e8_rgb.jpg differ diff --git a/media/egodex/team_egodex_0_gt.jpg b/media/egodex/team_egodex_0_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..17251074811db5925547a0e6bc51367cccdb1132 Binary files /dev/null and b/media/egodex/team_egodex_0_gt.jpg differ diff --git a/media/egodex/team_egodex_0_rgb.jpg b/media/egodex/team_egodex_0_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7f6aec708713c3db8110f98ee768d8e458fffa18 Binary files /dev/null and b/media/egodex/team_egodex_0_rgb.jpg differ diff --git a/media/egodex/team_egodex_1_gt.jpg b/media/egodex/team_egodex_1_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6ab4b6cbe0312ef365d41c2986e5ef5a392c3278 Binary files /dev/null and b/media/egodex/team_egodex_1_gt.jpg differ diff --git a/media/egodex/team_egodex_1_rgb.jpg b/media/egodex/team_egodex_1_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..45e2907c7d843ddca9fcb35c36c06cd035dbffa7 Binary files /dev/null and b/media/egodex/team_egodex_1_rgb.jpg differ diff --git a/media/egodex/team_egodex_2_gt.jpg b/media/egodex/team_egodex_2_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7c2eff2a5175b37b69ca9a81100dd3a363ded065 Binary files /dev/null and b/media/egodex/team_egodex_2_gt.jpg differ diff --git a/media/egodex/team_egodex_2_rgb.jpg b/media/egodex/team_egodex_2_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d7ca504ca6ff43fe64a9bc466cd2259ab4fe8de8 Binary files /dev/null and b/media/egodex/team_egodex_2_rgb.jpg differ diff --git a/media/egodex/team_egodex_3_gt.jpg b/media/egodex/team_egodex_3_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6e8649ac861c033f9cf35bde2b06ff411641d6e0 Binary files /dev/null and b/media/egodex/team_egodex_3_gt.jpg differ diff --git a/media/egodex/team_egodex_3_rgb.jpg b/media/egodex/team_egodex_3_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..001f6052001bc00cce6e5a6077c60d6725937076 Binary files /dev/null and b/media/egodex/team_egodex_3_rgb.jpg differ diff --git a/media/egoemg/team_egoemg_0_gt.jpg b/media/egoemg/team_egoemg_0_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9e66c42afce0e2f72f89796e52e8b8d7b8d23149 Binary files /dev/null and b/media/egoemg/team_egoemg_0_gt.jpg differ diff --git a/media/egoemg/team_egoemg_0_rgb.jpg b/media/egoemg/team_egoemg_0_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..097c23eb4f6eb9024bb41b91c43fb08216b5e86e Binary files /dev/null and b/media/egoemg/team_egoemg_0_rgb.jpg differ diff --git a/media/egoemg/team_egoemg_1_gt.jpg b/media/egoemg/team_egoemg_1_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..db6d2b8fc733a41aec638d84ae5cad3fcc90716a Binary files /dev/null and b/media/egoemg/team_egoemg_1_gt.jpg differ diff --git a/media/egoemg/team_egoemg_1_rgb.jpg b/media/egoemg/team_egoemg_1_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a6504938f0dea140b67d6a35ad4ed63a511cf344 Binary files /dev/null and b/media/egoemg/team_egoemg_1_rgb.jpg differ diff --git a/media/egoemg/team_egoemg_2_gt.jpg b/media/egoemg/team_egoemg_2_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3d148cbe961cc76ddc2bf89dd4cbecc7c2a847c8 Binary files /dev/null and b/media/egoemg/team_egoemg_2_gt.jpg differ diff --git a/media/egoemg/team_egoemg_2_rgb.jpg b/media/egoemg/team_egoemg_2_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e663c905e9c83af4cc3cd50b3bd8cc9b0a31a6ca Binary files /dev/null and b/media/egoemg/team_egoemg_2_rgb.jpg differ diff --git a/media/egoemg/team_egoemg_3_gt.jpg b/media/egoemg/team_egoemg_3_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2e6774e5e3f233f2ced43b11baf15d1a5903fa03 Binary files /dev/null and b/media/egoemg/team_egoemg_3_gt.jpg differ diff --git a/media/egoemg/team_egoemg_3_rgb.jpg b/media/egoemg/team_egoemg_3_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c9cbb2dc9de0a88dd6ed6f20b677b40b38edda9f Binary files /dev/null and b/media/egoemg/team_egoemg_3_rgb.jpg differ diff --git a/media/egopressure/team_egopressure_0_gt.jpg b/media/egopressure/team_egopressure_0_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..50ba93b61f31f75a481f76ad8d92fb5ae1632568 Binary files /dev/null and b/media/egopressure/team_egopressure_0_gt.jpg differ diff --git a/media/egopressure/team_egopressure_0_rgb.jpg b/media/egopressure/team_egopressure_0_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..491627122b95b1826252aacd783c7f77484f65c9 Binary files /dev/null and b/media/egopressure/team_egopressure_0_rgb.jpg differ diff --git a/media/egopressure/team_egopressure_1_gt.jpg b/media/egopressure/team_egopressure_1_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b15f8d9738e76b5dc014ba3a4035b79cb4eb8721 Binary files /dev/null and b/media/egopressure/team_egopressure_1_gt.jpg differ diff --git a/media/egopressure/team_egopressure_1_rgb.jpg b/media/egopressure/team_egopressure_1_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..044049fabab58fddb8e3d463ba5b05929ae0090e Binary files /dev/null and b/media/egopressure/team_egopressure_1_rgb.jpg differ diff --git a/media/egopressure/team_egopressure_2_gt.jpg b/media/egopressure/team_egopressure_2_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7ff0d78a86d1f1740729ff22331d878df26145d4 Binary files /dev/null and b/media/egopressure/team_egopressure_2_gt.jpg differ diff --git a/media/egopressure/team_egopressure_2_rgb.jpg b/media/egopressure/team_egopressure_2_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8d8f103977ddaba638bee97fbc9bc7f2258118c3 Binary files /dev/null and b/media/egopressure/team_egopressure_2_rgb.jpg differ diff --git a/media/egopressure/team_egopressure_3_gt.jpg b/media/egopressure/team_egopressure_3_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f32aca20d8ec423645326cbf3f5e6f5b6fe429df Binary files /dev/null and b/media/egopressure/team_egopressure_3_gt.jpg differ diff --git a/media/egopressure/team_egopressure_3_rgb.jpg b/media/egopressure/team_egopressure_3_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c7bb11247bd71861bc301a7d0e8c071c1c00fe19 Binary files /dev/null and b/media/egopressure/team_egopressure_3_rgb.jpg differ diff --git a/media/egorenderer/egorenderer_v005_s1_mug_drink_1_233_gt.jpg b/media/egorenderer/egorenderer_v005_s1_mug_drink_1_233_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..70ce02be82c067e12971d361519f87192b0f18bb Binary files /dev/null and b/media/egorenderer/egorenderer_v005_s1_mug_drink_1_233_gt.jpg differ diff --git a/media/egorenderer/egorenderer_v005_s1_mug_drink_1_233_rgb.jpg b/media/egorenderer/egorenderer_v005_s1_mug_drink_1_233_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..35b3798c54698a486625cd1902701ced9b4d15bb Binary files /dev/null and b/media/egorenderer/egorenderer_v005_s1_mug_drink_1_233_rgb.jpg differ diff --git a/media/egorenderer/egorenderer_v005_s2_banana_peel_1_197_gt.jpg b/media/egorenderer/egorenderer_v005_s2_banana_peel_1_197_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d8e7cc5b091256ba730f20517e2072e91705c05c Binary files /dev/null and b/media/egorenderer/egorenderer_v005_s2_banana_peel_1_197_gt.jpg differ diff --git a/media/egorenderer/egorenderer_v005_s2_banana_peel_1_197_rgb.jpg b/media/egorenderer/egorenderer_v005_s2_banana_peel_1_197_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..db26328496ff5d70eac7b7cd342f36b6c1e35de6 Binary files /dev/null and b/media/egorenderer/egorenderer_v005_s2_banana_peel_1_197_rgb.jpg differ diff --git a/media/egorenderer/egorenderer_v005_s6_banana_peel_1_104_gt.jpg b/media/egorenderer/egorenderer_v005_s6_banana_peel_1_104_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1fac4bc51dd94bdbc65ba60e237b448561fd461c Binary files /dev/null and b/media/egorenderer/egorenderer_v005_s6_banana_peel_1_104_gt.jpg differ diff --git a/media/egorenderer/egorenderer_v005_s6_banana_peel_1_104_rgb.jpg b/media/egorenderer/egorenderer_v005_s6_banana_peel_1_104_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e5cb22fbdadf9e6dd2c4c88128eacc5568ee2369 Binary files /dev/null and b/media/egorenderer/egorenderer_v005_s6_banana_peel_1_104_rgb.jpg differ diff --git a/media/egorenderer/egorenderer_v005_s7_camera_browse_1_110_gt.jpg b/media/egorenderer/egorenderer_v005_s7_camera_browse_1_110_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..05df4d4665cc3ea04b4427e132d2cac60873891b Binary files /dev/null and b/media/egorenderer/egorenderer_v005_s7_camera_browse_1_110_gt.jpg differ diff --git a/media/egorenderer/egorenderer_v005_s7_camera_browse_1_110_rgb.jpg b/media/egorenderer/egorenderer_v005_s7_camera_browse_1_110_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..77dc387e9e3876ade6230f77ea29993b7d731b4f Binary files /dev/null and b/media/egorenderer/egorenderer_v005_s7_camera_browse_1_110_rgb.jpg differ diff --git a/media/egoverse/team_egoverse_0_gt.jpg b/media/egoverse/team_egoverse_0_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9ea003aef381640bb02a8f3e0558e0605a3b7733 Binary files /dev/null and b/media/egoverse/team_egoverse_0_gt.jpg differ diff --git a/media/egoverse/team_egoverse_0_rgb.jpg b/media/egoverse/team_egoverse_0_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6d7887b24d567b5e1c6f74d6d39e9da1846c1362 Binary files /dev/null and b/media/egoverse/team_egoverse_0_rgb.jpg differ diff --git a/media/egoverse/team_egoverse_1_gt.jpg b/media/egoverse/team_egoverse_1_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f010f7a03d619ba8504e72ed1ba05a9d7b96cbd4 Binary files /dev/null and b/media/egoverse/team_egoverse_1_gt.jpg differ diff --git a/media/egoverse/team_egoverse_1_rgb.jpg b/media/egoverse/team_egoverse_1_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bbe33db1363b4a7fb1713c96ed2b063ac2c36e83 Binary files /dev/null and b/media/egoverse/team_egoverse_1_rgb.jpg differ diff --git a/media/egoverse/team_egoverse_2_gt.jpg b/media/egoverse/team_egoverse_2_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d55e1dda001135eb772d9141ac4d1bf4884df44e Binary files /dev/null and b/media/egoverse/team_egoverse_2_gt.jpg differ diff --git a/media/egoverse/team_egoverse_2_rgb.jpg b/media/egoverse/team_egoverse_2_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..25488694cce53ad57eec79eabedac035666c903f Binary files /dev/null and b/media/egoverse/team_egoverse_2_rgb.jpg differ diff --git a/media/egoverse/team_egoverse_3_gt.jpg b/media/egoverse/team_egoverse_3_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b81ee73f24466c03199eab86836e045d0114369a Binary files /dev/null and b/media/egoverse/team_egoverse_3_gt.jpg differ diff --git a/media/egoverse/team_egoverse_3_rgb.jpg b/media/egoverse/team_egoverse_3_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6dc81a88b2eb73ade15612055e45f1d00552f688 Binary files /dev/null and b/media/egoverse/team_egoverse_3_rgb.jpg differ diff --git a/media/freihand/0172018ef83c148a9a1c_gt.jpg b/media/freihand/0172018ef83c148a9a1c_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b130fd7dbf94bf0f639e3b76dca5ad1ddba3796b Binary files /dev/null and b/media/freihand/0172018ef83c148a9a1c_gt.jpg differ diff --git a/media/freihand/0172018ef83c148a9a1c_rgb.jpg b/media/freihand/0172018ef83c148a9a1c_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5b21658e37bf7079cf6da3c1bad5c0dd706b061e Binary files /dev/null and b/media/freihand/0172018ef83c148a9a1c_rgb.jpg differ diff --git a/media/freihand/57c00fd54a204e690012_gt.jpg b/media/freihand/57c00fd54a204e690012_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..45d01f39defec6879c6d4fcc03dfc16c30f4883b Binary files /dev/null and b/media/freihand/57c00fd54a204e690012_gt.jpg differ diff --git a/media/freihand/57c00fd54a204e690012_rgb.jpg b/media/freihand/57c00fd54a204e690012_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d369abf7de64b333312c20a3213e13da341dde0d Binary files /dev/null and b/media/freihand/57c00fd54a204e690012_rgb.jpg differ diff --git a/media/freihand/5d4682d7be033bd1ed70_gt.jpg b/media/freihand/5d4682d7be033bd1ed70_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..21585b32828b5c4395877855f57ebfe4da7b5307 Binary files /dev/null and b/media/freihand/5d4682d7be033bd1ed70_gt.jpg differ diff --git a/media/freihand/5d4682d7be033bd1ed70_rgb.jpg b/media/freihand/5d4682d7be033bd1ed70_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..78c1663b9624dd313fdcd0047ac231ca6f0b117a Binary files /dev/null and b/media/freihand/5d4682d7be033bd1ed70_rgb.jpg differ diff --git a/media/freihand/f66e6163a5a36bdd5ece_gt.jpg b/media/freihand/f66e6163a5a36bdd5ece_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f8cc621bd616395204d438e89f5ce0f2aa76ffb9 Binary files /dev/null and b/media/freihand/f66e6163a5a36bdd5ece_gt.jpg differ diff --git a/media/freihand/f66e6163a5a36bdd5ece_rgb.jpg b/media/freihand/f66e6163a5a36bdd5ece_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fab0184548a2a5c0a1a8af0f81e37dcd7c66258f Binary files /dev/null and b/media/freihand/f66e6163a5a36bdd5ece_rgb.jpg differ diff --git a/media/genhumanego/team_gen-humanego_0_gt.jpg b/media/genhumanego/team_gen-humanego_0_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6f10e5aedc0b2da2a4eae11d00f318947ec794da --- /dev/null +++ b/media/genhumanego/team_gen-humanego_0_gt.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:74d5d6c0ac6f7662dc949b7c1ecf4725e0169ac2b58e18c82b693dee515e33ad +size 168744 diff --git a/media/genhumanego/team_gen-humanego_0_rgb.jpg b/media/genhumanego/team_gen-humanego_0_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..26da5860fde4ad5bad010eb965153406d871e58e --- /dev/null +++ b/media/genhumanego/team_gen-humanego_0_rgb.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:80122f9396109db59af293697c38ed903f81573cd0063c4c5586e133cee39c5b +size 168626 diff --git a/media/genhumanego/team_gen-humanego_1_gt.jpg b/media/genhumanego/team_gen-humanego_1_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6eb012413e64d94042f14388c3b0c902b3fb8795 --- /dev/null +++ b/media/genhumanego/team_gen-humanego_1_gt.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:339eb5a1e83505ab9ffd37d86ed280bbc47295d33ee9394146e3696fc8d607fa +size 181774 diff --git a/media/genhumanego/team_gen-humanego_1_rgb.jpg b/media/genhumanego/team_gen-humanego_1_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..af37ade7c259f2bff8d2f8faa606fae49893898a --- /dev/null +++ b/media/genhumanego/team_gen-humanego_1_rgb.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9f5ef9ce9c17ab023decfe3723ea258aad5fa803f7c6d2633e67d332e188a684 +size 181763 diff --git a/media/genhumanego/team_gen-humanego_2_gt.jpg b/media/genhumanego/team_gen-humanego_2_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..99f1503984ed18eb83cee410a614bd8165c8939c --- /dev/null +++ b/media/genhumanego/team_gen-humanego_2_gt.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6e06aed9683b711ed1ad161cba37b1cf84eb11d03db0a662588444dd62276320 +size 211031 diff --git a/media/genhumanego/team_gen-humanego_2_rgb.jpg b/media/genhumanego/team_gen-humanego_2_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0822d589af4a2c2026868e5eb1fdc4d41db56dd8 --- /dev/null +++ b/media/genhumanego/team_gen-humanego_2_rgb.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3b6ca1793df0d5e45b6da103c8a30de9bf0e018c4533e86f0cf69b7be0bbd170 +size 210756 diff --git a/media/genhumanego/team_gen-humanego_3_gt.jpg b/media/genhumanego/team_gen-humanego_3_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..97c6a20a6f5270895168669a41f72d2697855f75 --- /dev/null +++ b/media/genhumanego/team_gen-humanego_3_gt.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cc173f941650a1a637cd185b1012895282d6f535d313da1db47761883cc24de2 +size 203136 diff --git a/media/genhumanego/team_gen-humanego_3_rgb.jpg b/media/genhumanego/team_gen-humanego_3_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e93cf73cc1fc75e53ded5ab5835a8a267d8ae774 --- /dev/null +++ b/media/genhumanego/team_gen-humanego_3_rgb.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e943f5f0618e8f239b4f496e937f8362710255acb8621d396e63b11c7b77dcc +size 203032 diff --git a/media/h2o/09a705df66acd8de1d4c_gt.jpg b/media/h2o/09a705df66acd8de1d4c_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fe850b200cadf8930ca2af214b2cdcef3473531a Binary files /dev/null and b/media/h2o/09a705df66acd8de1d4c_gt.jpg differ diff --git a/media/h2o/09a705df66acd8de1d4c_rgb.jpg b/media/h2o/09a705df66acd8de1d4c_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..30d311e10d4239d95ae5d410435c86d52d2bc9ff Binary files /dev/null and b/media/h2o/09a705df66acd8de1d4c_rgb.jpg differ diff --git a/media/h2o/a11122e7dd03fe259404_gt.jpg b/media/h2o/a11122e7dd03fe259404_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d63db53796c01f4c03a27ab057b5257f7b430f91 Binary files /dev/null and b/media/h2o/a11122e7dd03fe259404_gt.jpg differ diff --git a/media/h2o/a11122e7dd03fe259404_rgb.jpg b/media/h2o/a11122e7dd03fe259404_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..351901787b2506dfd14a8e490567cbf7302b895a Binary files /dev/null and b/media/h2o/a11122e7dd03fe259404_rgb.jpg differ diff --git a/media/h2o/a2a8c1c9e2b969d45ef4_gt.jpg b/media/h2o/a2a8c1c9e2b969d45ef4_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d60decc934895628aeceefc0e70ee71f09e4fd05 Binary files /dev/null and b/media/h2o/a2a8c1c9e2b969d45ef4_gt.jpg differ diff --git a/media/h2o/a2a8c1c9e2b969d45ef4_rgb.jpg b/media/h2o/a2a8c1c9e2b969d45ef4_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d6bbc190c6194e11b384c63751a07bde56c131b5 Binary files /dev/null and b/media/h2o/a2a8c1c9e2b969d45ef4_rgb.jpg differ diff --git a/media/h2o/f7c2550200511fea07b1_gt.jpg b/media/h2o/f7c2550200511fea07b1_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b9d48a8e769bd99c9efb14ee11896f7ff8e486b7 Binary files /dev/null and b/media/h2o/f7c2550200511fea07b1_gt.jpg differ diff --git a/media/h2o/f7c2550200511fea07b1_rgb.jpg b/media/h2o/f7c2550200511fea07b1_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bf97424ee7465a6d92ea2db3ebb4b675dfdb2fad Binary files /dev/null and b/media/h2o/f7c2550200511fea07b1_rgb.jpg differ diff --git a/media/h2o3d/h2o3d_train_MBC1_0104_gt.jpg b/media/h2o3d/h2o3d_train_MBC1_0104_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4b52abcb5b9156a03b177ca50b6d82d414778dcf Binary files /dev/null and b/media/h2o3d/h2o3d_train_MBC1_0104_gt.jpg differ diff --git a/media/h2o3d/h2o3d_train_MBC1_0104_rgb.jpg b/media/h2o3d/h2o3d_train_MBC1_0104_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..38e884d4ebe77ebdcd86e985dbc84cdc800234c8 Binary files /dev/null and b/media/h2o3d/h2o3d_train_MBC1_0104_rgb.jpg differ diff --git a/media/h2o3d/h2o3d_train_SHM0_0179_gt.jpg b/media/h2o3d/h2o3d_train_SHM0_0179_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8a467a73d7ee3ea2edf594f09b016ffe5c4c4ee3 Binary files /dev/null and b/media/h2o3d/h2o3d_train_SHM0_0179_gt.jpg differ diff --git a/media/h2o3d/h2o3d_train_SHM0_0179_rgb.jpg b/media/h2o3d/h2o3d_train_SHM0_0179_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5054e9f2fff090259c819fdff07dfa70b7cb1e4e Binary files /dev/null and b/media/h2o3d/h2o3d_train_SHM0_0179_rgb.jpg differ diff --git a/media/h2o3d/h2o3d_train_SMB20_0218_gt.jpg b/media/h2o3d/h2o3d_train_SMB20_0218_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fb35dbc4ab5f20ed936cf18bf8e271dedf2d2dad Binary files /dev/null and b/media/h2o3d/h2o3d_train_SMB20_0218_gt.jpg differ diff --git a/media/h2o3d/h2o3d_train_SMB20_0218_rgb.jpg b/media/h2o3d/h2o3d_train_SMB20_0218_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..eabc000f6ad68df344aec132435764a8437f298d Binary files /dev/null and b/media/h2o3d/h2o3d_train_SMB20_0218_rgb.jpg differ diff --git a/media/h2o3d/h2o3d_train_SSPD0_0427_gt.jpg b/media/h2o3d/h2o3d_train_SSPD0_0427_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ff796d3cbe5193d5c3436c64d6cbd1393508182b Binary files /dev/null and b/media/h2o3d/h2o3d_train_SSPD0_0427_gt.jpg differ diff --git a/media/h2o3d/h2o3d_train_SSPD0_0427_rgb.jpg b/media/h2o3d/h2o3d_train_SSPD0_0427_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..860c22f2f6e3739283ec780358b0eecb7fd2612c Binary files /dev/null and b/media/h2o3d/h2o3d_train_SSPD0_0427_rgb.jpg differ diff --git a/media/halpe/halpe_val_281032_458683_left_native2d_gt.jpg b/media/halpe/halpe_val_281032_458683_left_native2d_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f06899148e55b95df5397c97a8f130cbf8227bc8 Binary files /dev/null and b/media/halpe/halpe_val_281032_458683_left_native2d_gt.jpg differ diff --git a/media/halpe/halpe_val_281032_458683_left_native2d_rgb.jpg b/media/halpe/halpe_val_281032_458683_left_native2d_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..137b024d6dcc40ff96e632be059cb4485a28f3d2 Binary files /dev/null and b/media/halpe/halpe_val_281032_458683_left_native2d_rgb.jpg differ diff --git a/media/halpe/halpe_val_3156_477234_right_native2d_gt.jpg b/media/halpe/halpe_val_3156_477234_right_native2d_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..42d26e3558607f18a09ebd8951eab5eb3af6d3ed Binary files /dev/null and b/media/halpe/halpe_val_3156_477234_right_native2d_gt.jpg differ diff --git a/media/halpe/halpe_val_3156_477234_right_native2d_rgb.jpg b/media/halpe/halpe_val_3156_477234_right_native2d_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..91ae9bb9775fcfce6b2ab51eb4c20de36a98609c Binary files /dev/null and b/media/halpe/halpe_val_3156_477234_right_native2d_rgb.jpg differ diff --git a/media/halpe/halpe_val_398905_485625_left_native2d_gt.jpg b/media/halpe/halpe_val_398905_485625_left_native2d_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..549fab011076be86c0444ea0c0a3b6b6b02053d0 Binary files /dev/null and b/media/halpe/halpe_val_398905_485625_left_native2d_gt.jpg differ diff --git a/media/halpe/halpe_val_398905_485625_left_native2d_rgb.jpg b/media/halpe/halpe_val_398905_485625_left_native2d_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cc3e1a1f0acb702980b0ef85d51ab3864aeb0401 Binary files /dev/null and b/media/halpe/halpe_val_398905_485625_left_native2d_rgb.jpg differ diff --git a/media/halpe/halpe_val_465179_514707_right_native2d_gt.jpg b/media/halpe/halpe_val_465179_514707_right_native2d_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b1655afacb93c15b99eb1df4921eb6d56497a269 Binary files /dev/null and b/media/halpe/halpe_val_465179_514707_right_native2d_gt.jpg differ diff --git a/media/halpe/halpe_val_465179_514707_right_native2d_rgb.jpg b/media/halpe/halpe_val_465179_514707_right_native2d_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ccd5b4aa030aed7f0dde94bdab03aea0458b6049 Binary files /dev/null and b/media/halpe/halpe_val_465179_514707_right_native2d_rgb.jpg differ diff --git a/media/ho3d/0d33dbb3cbe2379785a2_gt.jpg b/media/ho3d/0d33dbb3cbe2379785a2_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1d3d169b1e407329a63bafda83721062f5b13646 Binary files /dev/null and b/media/ho3d/0d33dbb3cbe2379785a2_gt.jpg differ diff --git a/media/ho3d/0d33dbb3cbe2379785a2_rgb.jpg b/media/ho3d/0d33dbb3cbe2379785a2_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9f0cedb86bc42df5380834306995b86968c49901 Binary files /dev/null and b/media/ho3d/0d33dbb3cbe2379785a2_rgb.jpg differ diff --git a/media/ho3d/377560e17ccaf120f789_gt.jpg b/media/ho3d/377560e17ccaf120f789_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7561053094a3de82031206cba0b8984360c9a213 Binary files /dev/null and b/media/ho3d/377560e17ccaf120f789_gt.jpg differ diff --git a/media/ho3d/377560e17ccaf120f789_rgb.jpg b/media/ho3d/377560e17ccaf120f789_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cc5cdee5830dfb65665564f029c102ce1fe7c958 Binary files /dev/null and b/media/ho3d/377560e17ccaf120f789_rgb.jpg differ diff --git a/media/ho3d/95d8470bf5dd56fde1c2_gt.jpg b/media/ho3d/95d8470bf5dd56fde1c2_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2d7837012b1b626ffdc75b9b0dad45a539b4e352 Binary files /dev/null and b/media/ho3d/95d8470bf5dd56fde1c2_gt.jpg differ diff --git a/media/ho3d/95d8470bf5dd56fde1c2_rgb.jpg b/media/ho3d/95d8470bf5dd56fde1c2_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d346efd7bdbeae5f70ac8d22e075f4e5d18006e0 Binary files /dev/null and b/media/ho3d/95d8470bf5dd56fde1c2_rgb.jpg differ diff --git a/media/ho3d/fa5f136813986a79dd61_gt.jpg b/media/ho3d/fa5f136813986a79dd61_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4b17503fb76989273e2adbda5189e69fcd44fca5 Binary files /dev/null and b/media/ho3d/fa5f136813986a79dd61_gt.jpg differ diff --git a/media/ho3d/fa5f136813986a79dd61_rgb.jpg b/media/ho3d/fa5f136813986a79dd61_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cd980109a1de2ff9b10b814e3cc345ff8e111f0c Binary files /dev/null and b/media/ho3d/fa5f136813986a79dd61_rgb.jpg differ diff --git a/media/hocap/team_hocap_0_gt.jpg b/media/hocap/team_hocap_0_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dbc1c69ad0dd82875708d4bde1acc0c662e19411 Binary files /dev/null and b/media/hocap/team_hocap_0_gt.jpg differ diff --git a/media/hocap/team_hocap_0_rgb.jpg b/media/hocap/team_hocap_0_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3963396d85acdefb6444e65ed8e0617133982c35 Binary files /dev/null and b/media/hocap/team_hocap_0_rgb.jpg differ diff --git a/media/hocap/team_hocap_1_gt.jpg b/media/hocap/team_hocap_1_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b5124b1b22d5f9fdc6658fb207fd45228c4a989f Binary files /dev/null and b/media/hocap/team_hocap_1_gt.jpg differ diff --git a/media/hocap/team_hocap_1_rgb.jpg b/media/hocap/team_hocap_1_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1bca8f8a7fc4a488ec41e9d1a67ca05fe4a98cb0 Binary files /dev/null and b/media/hocap/team_hocap_1_rgb.jpg differ diff --git a/media/hocap/team_hocap_2_gt.jpg b/media/hocap/team_hocap_2_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..31945afcd5695784c447cbbab669474d7739f5de Binary files /dev/null and b/media/hocap/team_hocap_2_gt.jpg differ diff --git a/media/hocap/team_hocap_2_rgb.jpg b/media/hocap/team_hocap_2_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4d59157ade6f6553937f525e5813bf7e46552ce3 Binary files /dev/null and b/media/hocap/team_hocap_2_rgb.jpg differ diff --git a/media/hocap/team_hocap_3_gt.jpg b/media/hocap/team_hocap_3_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6ab24e382f5eb7fcafff35a162f3bfe2995af15b Binary files /dev/null and b/media/hocap/team_hocap_3_gt.jpg differ diff --git a/media/hocap/team_hocap_3_rgb.jpg b/media/hocap/team_hocap_3_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dc88caf9c1c22625ef31ec44bb530d8af401b2ab Binary files /dev/null and b/media/hocap/team_hocap_3_rgb.jpg differ diff --git a/media/hot3d/9984faeda44316bef1a4_gt.jpg b/media/hot3d/9984faeda44316bef1a4_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1f11e61005af511d2cab9e62429eac5dc56c72c7 Binary files /dev/null and b/media/hot3d/9984faeda44316bef1a4_gt.jpg differ diff --git a/media/hot3d/9984faeda44316bef1a4_rgb.jpg b/media/hot3d/9984faeda44316bef1a4_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5e67de2d296850744dc09610f4f371dddd2f345d Binary files /dev/null and b/media/hot3d/9984faeda44316bef1a4_rgb.jpg differ diff --git a/media/hot3d/b0bdc415670d0451624f_gt.jpg b/media/hot3d/b0bdc415670d0451624f_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4742afd84e64863eb10f0b653dcea6f81844f811 Binary files /dev/null and b/media/hot3d/b0bdc415670d0451624f_gt.jpg differ diff --git a/media/hot3d/b0bdc415670d0451624f_rgb.jpg b/media/hot3d/b0bdc415670d0451624f_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1b5275c3d74d5cbef3128f170ab5947d081fb6be Binary files /dev/null and b/media/hot3d/b0bdc415670d0451624f_rgb.jpg differ diff --git a/media/hot3d/cff8bd8ba9c8484f34a8_gt.jpg b/media/hot3d/cff8bd8ba9c8484f34a8_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d66e90ae19548ba4277cb9df89647523722aab14 Binary files /dev/null and b/media/hot3d/cff8bd8ba9c8484f34a8_gt.jpg differ diff --git a/media/hot3d/cff8bd8ba9c8484f34a8_rgb.jpg b/media/hot3d/cff8bd8ba9c8484f34a8_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..65181e7531316aadaf9afd1bc554862131a5d9f7 Binary files /dev/null and b/media/hot3d/cff8bd8ba9c8484f34a8_rgb.jpg differ diff --git a/media/hot3d/e240c578abc5d1f941da_gt.jpg b/media/hot3d/e240c578abc5d1f941da_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0da0db90b32dc9076661f272c3a06a0fa5565001 Binary files /dev/null and b/media/hot3d/e240c578abc5d1f941da_gt.jpg differ diff --git a/media/hot3d/e240c578abc5d1f941da_rgb.jpg b/media/hot3d/e240c578abc5d1f941da_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..65b7b6e276fed8ddf059040475cc0b2871f0579c Binary files /dev/null and b/media/hot3d/e240c578abc5d1f941da_rgb.jpg differ diff --git a/media/interhand/interhand_test_C1_f27268_right_cam400375_gt.jpg b/media/interhand/interhand_test_C1_f27268_right_cam400375_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6e1590ce9ae9e9426cdd546a1f8664cb05ff64a4 Binary files /dev/null and b/media/interhand/interhand_test_C1_f27268_right_cam400375_gt.jpg differ diff --git a/media/interhand/interhand_test_C1_f27268_right_cam400375_rgb.jpg b/media/interhand/interhand_test_C1_f27268_right_cam400375_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dc5a1a61cbbce7c6c79acdf29bc681ac2bca9a53 Binary files /dev/null and b/media/interhand/interhand_test_C1_f27268_right_cam400375_rgb.jpg differ diff --git a/media/interhand/interhand_test_C1_f27376_right_cam400285_gt.jpg b/media/interhand/interhand_test_C1_f27376_right_cam400285_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..92c5a4275fcd5896e7d36d3c4831e4e95516a209 Binary files /dev/null and b/media/interhand/interhand_test_C1_f27376_right_cam400285_gt.jpg differ diff --git a/media/interhand/interhand_test_C1_f27376_right_cam400285_rgb.jpg b/media/interhand/interhand_test_C1_f27376_right_cam400285_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..85dcca3066beb65548ef8bd3d26baa21a705c23c Binary files /dev/null and b/media/interhand/interhand_test_C1_f27376_right_cam400285_rgb.jpg differ diff --git a/media/interhand/interhand_test_C1_f27502_right_cam400375_gt.jpg b/media/interhand/interhand_test_C1_f27502_right_cam400375_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..41eae1ae75da8250468a157656a59ecdc3a93664 Binary files /dev/null and b/media/interhand/interhand_test_C1_f27502_right_cam400375_gt.jpg differ diff --git a/media/interhand/interhand_test_C1_f27502_right_cam400375_rgb.jpg b/media/interhand/interhand_test_C1_f27502_right_cam400375_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..72e3832983c907fb171fe0bc52fd86b279101f05 Binary files /dev/null and b/media/interhand/interhand_test_C1_f27502_right_cam400375_rgb.jpg differ diff --git a/media/interhand/interhand_test_C1_f28108_right_cam400285_gt.jpg b/media/interhand/interhand_test_C1_f28108_right_cam400285_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d17d2699203ea8765179c66ea3bab31a8539c8ed Binary files /dev/null and b/media/interhand/interhand_test_C1_f28108_right_cam400285_gt.jpg differ diff --git a/media/interhand/interhand_test_C1_f28108_right_cam400285_rgb.jpg b/media/interhand/interhand_test_C1_f28108_right_cam400285_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f9ff04f4f7a6934dced3f4aa7f224dbca250f07c Binary files /dev/null and b/media/interhand/interhand_test_C1_f28108_right_cam400285_rgb.jpg differ diff --git a/media/mpiinzsl/mpiinzsl_025270786_01_l_native2d_gt.jpg b/media/mpiinzsl/mpiinzsl_025270786_01_l_native2d_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..70511673b8c2db6eb078fae46e807b985dca0e0f Binary files /dev/null and b/media/mpiinzsl/mpiinzsl_025270786_01_l_native2d_gt.jpg differ diff --git a/media/mpiinzsl/mpiinzsl_025270786_01_l_native2d_rgb.jpg b/media/mpiinzsl/mpiinzsl_025270786_01_l_native2d_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c4500faf54eb50ae07848266195bf4458b01f6d0 Binary files /dev/null and b/media/mpiinzsl/mpiinzsl_025270786_01_l_native2d_rgb.jpg differ diff --git a/media/mpiinzsl/mpiinzsl_047704994_01_r_native2d_gt.jpg b/media/mpiinzsl/mpiinzsl_047704994_01_r_native2d_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fc993f29d628d4a3109e07e09341956b169b3161 --- /dev/null +++ b/media/mpiinzsl/mpiinzsl_047704994_01_r_native2d_gt.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e9fdbf9efae1c7a8e802c248c9e0160a281f5605aa311f625905317b20dda686 +size 135975 diff --git a/media/mpiinzsl/mpiinzsl_047704994_01_r_native2d_rgb.jpg b/media/mpiinzsl/mpiinzsl_047704994_01_r_native2d_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9e116ba018040e9cd13a204d2441f6da2ee8647c --- /dev/null +++ b/media/mpiinzsl/mpiinzsl_047704994_01_r_native2d_rgb.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b47305aa12fdcf6f5f851c4a4b460b5de23cbfd17a72fbfc4915ac241c8a61cd +size 135565 diff --git a/media/mpiinzsl/mpiinzsl_Jackie_unit_10_flv_000118_r_native2d_gt.jpg b/media/mpiinzsl/mpiinzsl_Jackie_unit_10_flv_000118_r_native2d_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ba7ea26cdc9a9ffbfc9783d64eb7db5f62b79868 Binary files /dev/null and b/media/mpiinzsl/mpiinzsl_Jackie_unit_10_flv_000118_r_native2d_gt.jpg differ diff --git a/media/mpiinzsl/mpiinzsl_Jackie_unit_10_flv_000118_r_native2d_rgb.jpg b/media/mpiinzsl/mpiinzsl_Jackie_unit_10_flv_000118_r_native2d_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b663e5def99a731e00ba021d4c018b5eb02d77ba Binary files /dev/null and b/media/mpiinzsl/mpiinzsl_Jackie_unit_10_flv_000118_r_native2d_rgb.jpg differ diff --git a/media/mpiinzsl/mpiinzsl_Ricki_unit_8_flv_000040_l_native2d_gt.jpg b/media/mpiinzsl/mpiinzsl_Ricki_unit_8_flv_000040_l_native2d_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9d86fbd38564305bcb26386ce4775e66226b9389 Binary files /dev/null and b/media/mpiinzsl/mpiinzsl_Ricki_unit_8_flv_000040_l_native2d_gt.jpg differ diff --git a/media/mpiinzsl/mpiinzsl_Ricki_unit_8_flv_000040_l_native2d_rgb.jpg b/media/mpiinzsl/mpiinzsl_Ricki_unit_8_flv_000040_l_native2d_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e6dc1efa574c57895b87209767b2f0042603c445 Binary files /dev/null and b/media/mpiinzsl/mpiinzsl_Ricki_unit_8_flv_000040_l_native2d_rgb.jpg differ diff --git a/media/mtc/mtc_171204_pose2_f00023680_p4_right_0_gt.jpg b/media/mtc/mtc_171204_pose2_f00023680_p4_right_0_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..808afaa4eb8957f5fedac70319a745eb6b309522 Binary files /dev/null and b/media/mtc/mtc_171204_pose2_f00023680_p4_right_0_gt.jpg differ diff --git a/media/mtc/mtc_171204_pose2_f00023680_p4_right_0_rgb.jpg b/media/mtc/mtc_171204_pose2_f00023680_p4_right_0_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..82cf1e9763e3dd0bbe67a84e0916b3f906ca4d3b Binary files /dev/null and b/media/mtc/mtc_171204_pose2_f00023680_p4_right_0_rgb.jpg differ diff --git a/media/mtc/mtc_171204_pose2_f00023680_p4_right_6_gt.jpg b/media/mtc/mtc_171204_pose2_f00023680_p4_right_6_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f2a0fb70ff5ece249341a5dec797b7b72ca1f414 Binary files /dev/null and b/media/mtc/mtc_171204_pose2_f00023680_p4_right_6_gt.jpg differ diff --git a/media/mtc/mtc_171204_pose2_f00023680_p4_right_6_rgb.jpg b/media/mtc/mtc_171204_pose2_f00023680_p4_right_6_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2a614548c6b147cc5eee934b9183a80df49b9898 Binary files /dev/null and b/media/mtc/mtc_171204_pose2_f00023680_p4_right_6_rgb.jpg differ diff --git a/media/mtc/mtc_171204_pose2_f00028165_p5_right_12_gt.jpg b/media/mtc/mtc_171204_pose2_f00028165_p5_right_12_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9f2a89c211c1fd1ab8102c79e661d812c3119f4f Binary files /dev/null and b/media/mtc/mtc_171204_pose2_f00028165_p5_right_12_gt.jpg differ diff --git a/media/mtc/mtc_171204_pose2_f00028165_p5_right_12_rgb.jpg b/media/mtc/mtc_171204_pose2_f00028165_p5_right_12_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..252ac9d6d407d71fe406aa1286ace7cc83c8b1c5 Binary files /dev/null and b/media/mtc/mtc_171204_pose2_f00028165_p5_right_12_rgb.jpg differ diff --git a/media/mtc/mtc_171204_pose2_f00028165_p5_right_3_gt.jpg b/media/mtc/mtc_171204_pose2_f00028165_p5_right_3_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..082d9f2ed8b150c7cb3b172d3489b2b6a7701477 Binary files /dev/null and b/media/mtc/mtc_171204_pose2_f00028165_p5_right_3_gt.jpg differ diff --git a/media/mtc/mtc_171204_pose2_f00028165_p5_right_3_rgb.jpg b/media/mtc/mtc_171204_pose2_f00028165_p5_right_3_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fed1a6feb9e632e30baee6e1cf4177d3f3e40cfc Binary files /dev/null and b/media/mtc/mtc_171204_pose2_f00028165_p5_right_3_rgb.jpg differ diff --git a/media/openaoe/team_openaoe_0_gt.jpg b/media/openaoe/team_openaoe_0_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5fd94d484303219abfd116e10fa980478fa4b425 Binary files /dev/null and b/media/openaoe/team_openaoe_0_gt.jpg differ diff --git a/media/openaoe/team_openaoe_0_rgb.jpg b/media/openaoe/team_openaoe_0_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..31e1a4178e5a86c11e14e635b73536b4a9d8d37c Binary files /dev/null and b/media/openaoe/team_openaoe_0_rgb.jpg differ diff --git a/media/openaoe/team_openaoe_1_gt.jpg b/media/openaoe/team_openaoe_1_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a3be373611ed758bb2837cd8b67ed23298e28485 Binary files /dev/null and b/media/openaoe/team_openaoe_1_gt.jpg differ diff --git a/media/openaoe/team_openaoe_1_rgb.jpg b/media/openaoe/team_openaoe_1_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6ca7b83e2a62fdfced05ae427d48ea53df865422 Binary files /dev/null and b/media/openaoe/team_openaoe_1_rgb.jpg differ diff --git a/media/openaoe/team_openaoe_2_gt.jpg b/media/openaoe/team_openaoe_2_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f9715a119749856797fbdf094ad25c248824d621 Binary files /dev/null and b/media/openaoe/team_openaoe_2_gt.jpg differ diff --git a/media/openaoe/team_openaoe_2_rgb.jpg b/media/openaoe/team_openaoe_2_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f0825e4c8fd47609f865411b0e5389425cc689e2 Binary files /dev/null and b/media/openaoe/team_openaoe_2_rgb.jpg differ diff --git a/media/openaoe/team_openaoe_3_gt.jpg b/media/openaoe/team_openaoe_3_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ce4795b88f34b8395fc6926ceea78fba99269d84 Binary files /dev/null and b/media/openaoe/team_openaoe_3_gt.jpg differ diff --git a/media/openaoe/team_openaoe_3_rgb.jpg b/media/openaoe/team_openaoe_3_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9d934f2641ec1e47d2019dfda032d02e3a658001 Binary files /dev/null and b/media/openaoe/team_openaoe_3_rgb.jpg differ diff --git a/media/reinterhand/reinter_train_c0_f175271_right_400503_gt.jpg b/media/reinterhand/reinter_train_c0_f175271_right_400503_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b528c13b1dbdb44f7c4ff24bcb1ce6555ea1b9ae Binary files /dev/null and b/media/reinterhand/reinter_train_c0_f175271_right_400503_gt.jpg differ diff --git a/media/reinterhand/reinter_train_c0_f175271_right_400503_rgb.jpg b/media/reinterhand/reinter_train_c0_f175271_right_400503_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..16edb460dec8cc7b57272f9fc0b46243a0c12a85 Binary files /dev/null and b/media/reinterhand/reinter_train_c0_f175271_right_400503_rgb.jpg differ diff --git a/media/reinterhand/reinter_train_c0_f202212_right_400503_gt.jpg b/media/reinterhand/reinter_train_c0_f202212_right_400503_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..773685427800b7542911d0365a9a8a9e759d1aeb Binary files /dev/null and b/media/reinterhand/reinter_train_c0_f202212_right_400503_gt.jpg differ diff --git a/media/reinterhand/reinter_train_c0_f202212_right_400503_rgb.jpg b/media/reinterhand/reinter_train_c0_f202212_right_400503_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ee8b9edf9ac70574ae51e2ba390af3184136145d Binary files /dev/null and b/media/reinterhand/reinter_train_c0_f202212_right_400503_rgb.jpg differ diff --git a/media/reinterhand/reinter_train_c0_f292944_right_400503_gt.jpg b/media/reinterhand/reinter_train_c0_f292944_right_400503_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7cf8453c612c0b47823e8e9a1a64ed85d625d1a8 Binary files /dev/null and b/media/reinterhand/reinter_train_c0_f292944_right_400503_gt.jpg differ diff --git a/media/reinterhand/reinter_train_c0_f292944_right_400503_rgb.jpg b/media/reinterhand/reinter_train_c0_f292944_right_400503_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..22418b7fce909ebde6b3b4d7b0e772acacbfb272 Binary files /dev/null and b/media/reinterhand/reinter_train_c0_f292944_right_400503_rgb.jpg differ diff --git a/media/reinterhand/reinter_train_c0_f303030_right_400503_gt.jpg b/media/reinterhand/reinter_train_c0_f303030_right_400503_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0f1e1dcafe9a6aa7043d93197890e3fc13dc5b88 Binary files /dev/null and b/media/reinterhand/reinter_train_c0_f303030_right_400503_gt.jpg differ diff --git a/media/reinterhand/reinter_train_c0_f303030_right_400503_rgb.jpg b/media/reinterhand/reinter_train_c0_f303030_right_400503_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..812cc7c8df83e232e6e4b7a584e64f85a7c41ee0 Binary files /dev/null and b/media/reinterhand/reinter_train_c0_f303030_right_400503_rgb.jpg differ diff --git a/media/rhd/0941a85c7723f23e66bc_gt.jpg b/media/rhd/0941a85c7723f23e66bc_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5d192bcbea3e0fa445708ee38d8df9ba7a0da086 Binary files /dev/null and b/media/rhd/0941a85c7723f23e66bc_gt.jpg differ diff --git a/media/rhd/0941a85c7723f23e66bc_rgb.jpg b/media/rhd/0941a85c7723f23e66bc_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f9c13006efb9c565a356614757af9a998ea1e485 Binary files /dev/null and b/media/rhd/0941a85c7723f23e66bc_rgb.jpg differ diff --git a/media/rhd/14514fa31d01d7d4624b_gt.jpg b/media/rhd/14514fa31d01d7d4624b_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..043d7137e9aacb4d335e7832d4e8be1bce9b97a3 Binary files /dev/null and b/media/rhd/14514fa31d01d7d4624b_gt.jpg differ diff --git a/media/rhd/14514fa31d01d7d4624b_rgb.jpg b/media/rhd/14514fa31d01d7d4624b_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..46e16bdcd0ea02c0f2dec31211bad38d8a91c177 Binary files /dev/null and b/media/rhd/14514fa31d01d7d4624b_rgb.jpg differ diff --git a/media/rhd/5807bcc820cac79abd07_gt.jpg b/media/rhd/5807bcc820cac79abd07_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..64b01450f8eb852cba7f27f946331e7c1e8d5f62 Binary files /dev/null and b/media/rhd/5807bcc820cac79abd07_gt.jpg differ diff --git a/media/rhd/5807bcc820cac79abd07_rgb.jpg b/media/rhd/5807bcc820cac79abd07_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d1b5fb040bbc5e93fff51b91b529648326f55c01 Binary files /dev/null and b/media/rhd/5807bcc820cac79abd07_rgb.jpg differ diff --git a/media/rhd/a8db512d6c52ae380d21_gt.jpg b/media/rhd/a8db512d6c52ae380d21_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9f2cd55fe0725ef43a3a60dcbf4d9954d973373d Binary files /dev/null and b/media/rhd/a8db512d6c52ae380d21_gt.jpg differ diff --git a/media/rhd/a8db512d6c52ae380d21_rgb.jpg b/media/rhd/a8db512d6c52ae380d21_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..80a8474f8a46138cd3e051a414a9e928422e96a0 Binary files /dev/null and b/media/rhd/a8db512d6c52ae380d21_rgb.jpg differ diff --git a/media/show3d/team_show3d_0_gt.jpg b/media/show3d/team_show3d_0_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..562556d27fa85261ffbf9b9b7701abd99316be1d Binary files /dev/null and b/media/show3d/team_show3d_0_gt.jpg differ diff --git a/media/show3d/team_show3d_0_rgb.jpg b/media/show3d/team_show3d_0_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..efb701b6a16dac568b55c130a6312da106dc838a Binary files /dev/null and b/media/show3d/team_show3d_0_rgb.jpg differ diff --git a/media/show3d/team_show3d_1_gt.jpg b/media/show3d/team_show3d_1_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5a91ca632fec23f2c58f27ae94e9081092b63a15 Binary files /dev/null and b/media/show3d/team_show3d_1_gt.jpg differ diff --git a/media/show3d/team_show3d_1_rgb.jpg b/media/show3d/team_show3d_1_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..20343a29a0d2a08149c552ada3ee725e10c92163 Binary files /dev/null and b/media/show3d/team_show3d_1_rgb.jpg differ diff --git a/media/show3d/team_show3d_2_gt.jpg b/media/show3d/team_show3d_2_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ff74d875ad73b4a9b7e93b46279a51bc9ef6ccac Binary files /dev/null and b/media/show3d/team_show3d_2_gt.jpg differ diff --git a/media/show3d/team_show3d_2_rgb.jpg b/media/show3d/team_show3d_2_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..23fb2c033b62b50e1c0d8fec17ad3105f9f57620 Binary files /dev/null and b/media/show3d/team_show3d_2_rgb.jpg differ diff --git a/media/show3d/team_show3d_3_gt.jpg b/media/show3d/team_show3d_3_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ae27cf9ec833f3e43152a087fa4aa8e26772d274 Binary files /dev/null and b/media/show3d/team_show3d_3_gt.jpg differ diff --git a/media/show3d/team_show3d_3_rgb.jpg b/media/show3d/team_show3d_3_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..157297224a5822e2e6fc3714ebe84fce3230bf54 Binary files /dev/null and b/media/show3d/team_show3d_3_rgb.jpg differ diff --git a/media/taco/team_taco_0_gt.jpg b/media/taco/team_taco_0_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cd417d8b311d0f7d23add7b7c47a4ac0432f6a5f Binary files /dev/null and b/media/taco/team_taco_0_gt.jpg differ diff --git a/media/taco/team_taco_0_rgb.jpg b/media/taco/team_taco_0_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..44f6aa515494663d0be0137eb8d8ff3b85dfe6f4 Binary files /dev/null and b/media/taco/team_taco_0_rgb.jpg differ diff --git a/media/taco/team_taco_1_gt.jpg b/media/taco/team_taco_1_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..984065b4f5102c1b4eeb65bc215d6701f477c64b Binary files /dev/null and b/media/taco/team_taco_1_gt.jpg differ diff --git a/media/taco/team_taco_1_rgb.jpg b/media/taco/team_taco_1_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9d28d76a6100f77dc2b27bef042e7654e5ed0979 Binary files /dev/null and b/media/taco/team_taco_1_rgb.jpg differ diff --git a/media/taco/team_taco_2_gt.jpg b/media/taco/team_taco_2_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f378c7dbf2dfbad6f6683455046a1cdc1b08e63b Binary files /dev/null and b/media/taco/team_taco_2_gt.jpg differ diff --git a/media/taco/team_taco_2_rgb.jpg b/media/taco/team_taco_2_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a77bdb78db68cea06c5f27db47b56246e30c2f21 Binary files /dev/null and b/media/taco/team_taco_2_rgb.jpg differ diff --git a/media/taco/team_taco_3_gt.jpg b/media/taco/team_taco_3_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b38351f6fb7a4c7f2a28b71b96a62ae39c4e3521 Binary files /dev/null and b/media/taco/team_taco_3_gt.jpg differ diff --git a/media/taco/team_taco_3_rgb.jpg b/media/taco/team_taco_3_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ee380bb0863dd3dbb4b0f3470c18163652deaf03 Binary files /dev/null and b/media/taco/team_taco_3_rgb.jpg differ diff --git a/media/xperience/team_xperience_0_gt.jpg b/media/xperience/team_xperience_0_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b99220c5d19e22bed5d11992da8e062ce2425da7 Binary files /dev/null and b/media/xperience/team_xperience_0_gt.jpg differ diff --git a/media/xperience/team_xperience_0_rgb.jpg b/media/xperience/team_xperience_0_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e71699356b78b0ceb08e0c26dc3a7829ac08bb8f Binary files /dev/null and b/media/xperience/team_xperience_0_rgb.jpg differ diff --git a/media/xperience/team_xperience_1_gt.jpg b/media/xperience/team_xperience_1_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f5a8ce74cf19f86079a84d63c0ceb5219abac4e6 Binary files /dev/null and b/media/xperience/team_xperience_1_gt.jpg differ diff --git a/media/xperience/team_xperience_1_rgb.jpg b/media/xperience/team_xperience_1_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d0e0af635af0624bf685adb1af65c07061b7a8ca Binary files /dev/null and b/media/xperience/team_xperience_1_rgb.jpg differ diff --git a/media/xperience/team_xperience_2_gt.jpg b/media/xperience/team_xperience_2_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5161ac4d76a6bce32ae9b763d913e9d39890ac5f Binary files /dev/null and b/media/xperience/team_xperience_2_gt.jpg differ diff --git a/media/xperience/team_xperience_2_rgb.jpg b/media/xperience/team_xperience_2_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a31ca6cd76027b30c1e0d028f3e23adc5f7ae88c Binary files /dev/null and b/media/xperience/team_xperience_2_rgb.jpg differ diff --git a/media/xperience/team_xperience_3_gt.jpg b/media/xperience/team_xperience_3_gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d71ae0aec88325f2e63832530b3bd2685c7987fd Binary files /dev/null and b/media/xperience/team_xperience_3_gt.jpg differ diff --git a/media/xperience/team_xperience_3_rgb.jpg b/media/xperience/team_xperience_3_rgb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1ac7b054ea66be3527a7142344c1adf43aa43f55 Binary files /dev/null and b/media/xperience/team_xperience_3_rgb.jpg differ diff --git a/src/page.html b/src/page.html index 1bf15795fb6a3df6f9c67fc3a3975c84a6ef0eed..f784ded220e281230cc90de3300f37621501e348 100644 --- a/src/page.html +++ b/src/page.html @@ -4,7 +4,7 @@ @@ -220,10 +239,10 @@ footer { font-size: 0.8rem; color: var(--muted); border-top: 1px solid var(--lin
SOMA 手部数据图谱
@@ -237,17 +256,24 @@ footer { font-size: 0.8rem; color: var(--muted); border-top: 1px solid var(--lin "use strict"; var DATA = null, PREV = {}, BYID = {}, M = {}; var app = document.getElementById("app"); - var filt = { source: "", method: "", tier: "", status: "", q: "" }; + var filt = { source: "", method: "", tier: "", q: "", hasPrev: false }; + var ORDER = ["own", "p0", "p1", "p2", "used", "surveyed", "no"]; + var TIER_OF = { scan: "S1", marker: "S2", rgbd: "S3", mvkp: "S4", device: "-", synth: "SY", manual2d: "-", pseudo: "S5" }; function esc(s) { return String(s == null ? "" : s).replace(/[&<>"']/g, function (c) { return { "&": "&", "<": "<", ">": ">", '"': """, "'": "'" }[c]; }); } function by(list) { var o = {}; list.forEach(function (x) { o[x.id] = x; }); return o; } - function stChip(id) { var s = M.status[id]; return '' + esc(s.name) + ""; } - function tierChip(id, title) { var t = M.tier[id]; return '' + esc(id === "-" ? "—" : id) + ""; } - function dsLink(d, cls) { return '' + esc(d.name) + ""; } - function statusOrder(s) { return ["own", "p0", "p1", "p2", "used", "surveyed", "no"].indexOf(s); } - function sorted(list) { return list.slice().sort(function (a, b) { return statusOrder(a.status) - statusOrder(b.status) || a.name.localeCompare(b.name); }); } + function stChip(id) { return '' + esc(M.status[id].name) + ""; } + function tierChip(id) { var t = M.tier[id]; return '' + (id === "-" ? "—" : esc(id)) + ""; } + function nPrev(d) { return (PREV[d.id] || []).length; } + function dsLink(d, showN) { var n = nPrev(d); return '' + esc(d.name) + (showN && n ? ' ' + n + "" : "") + ""; } + function sorted(list) { return list.slice().sort(function (a, b) { return ORDER.indexOf(a.status) - ORDER.indexOf(b.status) || a.name.localeCompare(b.name); }); } + function partHead(title, note) { return '

' + esc(title) + "

" + (note ? "

" + note + "

" : "") + "
"; } + function thumb(d) { + var p = (PREV[d.id] || [])[0]; + return p ? '' : '暂无样例'; + } - /* ---------- 采集装置示意图 ---------- */ + /* ---------- 采集装置示意 ---------- */ function rigSvg(d) { var r = d.rig || {}, W = 320, H = 200, cx = 160, cy = 118, out = []; out.push(''); @@ -279,7 +305,6 @@ footer { font-size: 0.8rem; color: var(--muted); border-top: 1px solid var(--lin out.push(''); out.push('' + (r.pseudoEgo ? "固定于眼高(模拟第一视角)" : (r.fisheye ? "第一视角 · 宽视场" : "第一视角")) + (r.mono ? " · 黑白" : "") + ""); } - // 手 var hx2 = cx, hy2 = cy + 10; out.push(''); out.push(''); @@ -292,194 +317,191 @@ footer { font-size: 0.8rem; color: var(--muted); border-top: 1px solid var(--lin out.push(''); out.push('无 RGB 图像'); } - if (r.synth) out.push('渲染生成'); - if (r.wild && !r.ego) out.push('网络 / 日常图像'); - if (r.scanner) out.push('扫描仪多相机环'); + var foot = r.synth ? "渲染生成" : (r.wild && !r.ego) ? "网络 / 日常图像" : r.scanner ? "扫描仪多相机环" : ""; + if (foot) out.push('' + foot + ""); out.push(""); return out.join(""); } + function flow(steps) { return '
' + steps.map(function (s, i) { return (i ? '' : "") + '' + esc(s) + ""; }).join("") + "
"; } - function flow(steps) { - return '
' + steps.map(function (s, i) { return (i ? '' : "") + '' + esc(s) + ""; }).join("") + "
"; - } - - /* ---------- 视图:总览 ---------- */ + /* ---------- 总览 ---------- */ function vOverview() { var ds = DATA.datasets, cnt = {}; ds.forEach(function (d) { cnt[d.status] = (cnt[d.status] || 0) + 1; }); - var h = []; - h.push('

按数据来源和标注方法看手部数据

' + esc(DATA.meta.goal) + " 矩阵的行按 shape 真值的可信度从高到低排列,列是数据来源;点任一数据集看详情、采集示意和样例。

"); - h.push('
' + DATA.meta.statuses.map(function (s) { return "
" + stChip(s.id) + '' + (cnt[s.id] || 0) + "
"; }).join("") + '
共 ' + ds.length + " 个
"); - h.push('
'); + var withPrev = ds.filter(function (d) { return nPrev(d); }).length; + var h = ['
']; + h.push('

手部数据集,按来源和标注方法分类

' + esc(DATA.meta.goal) + "

"); + h.push('
' + ds.length + '个数据集
' + withPrev + '个有样例
' + ORDER.map(function (s) { return "
" + stChip(s) + "" + (cnt[s] || 0) + "
"; }).join("") + "
"); + + h.push('
' + partHead("分布矩阵", "行是标注方法,按 shape 真值可信度从高到低;列是数据来源。点名称看详情。")); + h.push('
标注方法 \ 数据来源
'); DATA.meta.sources.forEach(function (s) { h.push(""); }); h.push(""); - var tierOf = { scan: "S1", marker: "S2", rgbd: "S3", mvkp: "S4", device: "-", synth: "SY", manual2d: "-", pseudo: "S5" }; DATA.meta.methods.forEach(function (m) { - h.push('"); + h.push('"); DATA.meta.sources.forEach(function (s) { var list = sorted(ds.filter(function (d) { return d.method === m.id && d.source === s.id; })); - h.push(""); + h.push(""); }); h.push(""); }); - h.push("
标注方法" + esc(s.name) + "" + esc(s.desc) + "
' + esc(m.name) + "
" + tierChip(tierOf[m.id]) + "
' + esc(m.name) + "" + tierChip(TIER_OF[m.id]) + "" + (list.length ? '
' + list.map(function (d) { return dsLink(d); }).join("") + "
" : '·') + "
" + (list.length ? '
' + list.map(function (d) { return dsLink(d); }).join("") + "
" : '·') + "
"); - h.push('
标签颜色表示状态:' + DATA.meta.statuses.map(function (s) { return "" + stChip(s.id) + esc(s.desc) + ""; }).join("") + "
"); + h.push('
状态:' + ORDER.map(stChip).join("") + "
"); - h.push('

shape 真值分层

大部分数据集的 β 是从图像或关键点拟合的。监督 SOMA shape 时只用 S1 到 S3 和合成数据,S4 当弱监督,S5 和“—”不参与 shape。

'); - DATA.meta.tiers.forEach(function (t) { h.push("
" + tierChip(t.id) + "" + esc(t.name) + '' + esc(t.desc) + "
"); }); - h.push("
"); var p0 = ds.filter(function (d) { return d.status === "p0"; }); - h.push('

建议先接入

    '); - p0.forEach(function (d) { h.push('
  1. ' + esc(d.name) + " " + esc(d.fills) + "
  2. "); }); - h.push('

完整理由和其余新增项见数据集目录,状态筛选选「P0 新增」到「P2 新增」。

'); - h.push("
"); + h.push('
' + partHead("建议先接入") + '
'); + p0.forEach(function (d) { h.push('' + stChip(d.status) + "" + esc(d.name) + '' + esc(d.fills) + ""); }); + h.push("
"); + h.push('
' + partHead("shape 真值分层", "只有 S1 到 S3 和合成数据用来监督 SOMA shape。") + '
'); + DATA.meta.tiers.forEach(function (t) { h.push("
" + tierChip(t.id) + "" + esc(t.name) + '' + esc(t.desc) + "
"); }); + h.push("
"); return h.join(""); } - /* ---------- 视图:目录 ---------- */ + /* ---------- 数据集目录 ---------- */ function opts(list, cur, all) { return '" + list.map(function (x) { return '"; }).join(""); } function vCatalog() { - var h = []; - h.push('

数据集目录

按数据来源、标注方法、shape 层级和状态筛选。每行是一个数据集,点开看完整信息。

'); - h.push(''); - h.push('

'); + var h = ['

数据集

按状态分组。缩略图是 GT 叠加样例,点开看完整信息。

']; + h.push('

'); + h.push('
'); return h.join(""); } function renderRows() { var q = filt.q.trim().toLowerCase(); - var list = sorted(DATA.datasets.filter(function (d) { + var list = DATA.datasets.filter(function (d) { if (filt.source && d.source !== filt.source) return false; if (filt.method && d.method !== filt.method) return false; if (filt.tier && d.tier !== filt.tier) return false; - if (filt.status && d.status !== filt.status) return false; + if (filt.hasPrev && !nPrev(d)) return false; if (q) { var hay = [d.name, d.camera, d.gt, d.fills, d.risk, d.scale, d.subjects, (d.tags || []).join(" ")].join(" ").toLowerCase(); if (hay.indexOf(q) < 0) return false; } return true; - })); - document.getElementById("cnt").textContent = "显示 " + list.length + " / " + DATA.datasets.length + " 个数据集"; - var h = ['
数据集数据来源标注方法真值shape规模状态
']; - if (!list.length) h.push('
没有符合条件的数据集。换一个筛选条件,或点「清除筛选」。
'); - list.forEach(function (d) { - h.push(''); - h.push('' + esc(d.name) + "" + esc(d.year) + ""); - h.push('数据来源' + esc(M.source[d.source].name) + ""); - h.push('标注方法' + esc(M.method[d.method].name) + ""); - h.push('真值' + esc(d.gt) + ""); - h.push('shape' + tierChip(d.tier) + ""); - h.push('规模' + esc([d.subjects, d.scale].filter(Boolean).join(";") || "—") + ""); - h.push('' + stChip(d.status) + ""); - h.push(""); }); - document.getElementById("rows").innerHTML = h.join(""); + document.getElementById("cnt").textContent = "显示 " + list.length + " / " + DATA.datasets.length + " 个"; + var h = []; + if (!list.length) h.push('

没有符合条件的数据集。换个条件,或点「清除」。

'); + ORDER.forEach(function (st) { + var g = list.filter(function (d) { return d.status === st; }).sort(function (a, b) { return a.name.localeCompare(b.name); }); + if (!g.length) return; + h.push('
' + stChip(st) + '' + esc(M.status[st].desc) + " · " + g.length + ' 个
"); + }); + document.getElementById("groups").innerHTML = h.join(""); } function bindCatalog() { - ["source", "method", "tier", "status"].forEach(function (k) { - document.getElementById("f-" + k).addEventListener("change", function (e) { filt[k] = e.target.value; renderRows(); }); - }); + ["source", "method", "tier"].forEach(function (k) { document.getElementById("f-" + k).addEventListener("change", function (e) { filt[k] = e.target.value; renderRows(); }); }); document.getElementById("f-q").addEventListener("input", function (e) { filt.q = e.target.value; renderRows(); }); + document.getElementById("f-prev").addEventListener("change", function (e) { filt.hasPrev = e.target.checked; renderRows(); }); document.getElementById("ff").addEventListener("submit", function (e) { e.preventDefault(); }); - document.getElementById("f-reset").addEventListener("click", function () { filt = { source: "", method: "", tier: "", status: "", q: "" }; render(); }); + document.getElementById("f-reset").addEventListener("click", function () { filt = { source: "", method: "", tier: "", q: "", hasPrev: false }; render(); }); renderRows(); } - /* ---------- 视图:标注方法 ---------- */ + /* ---------- 详情 ---------- */ + function vDetail(id) { + var d = BYID[id]; + if (!d) return '

找不到数据集「' + esc(id) + '」。回到数据集。

'; + var m = M.method[d.method], s = M.source[d.source], rt = M.route[d.route], t = M.tier[d.tier]; + var all = sorted(DATA.datasets), idx = all.indexOf(d), prev = all[idx - 1], next = all[idx + 1]; + var h = ['

数据集 / ' + esc(M.status[d.status].name) + "

"]; + + h.push('

' + esc(d.name) + '

' + stChip(d.status) + (d.year ? '' + esc(d.year) + "" : "") + (d.tags || []).filter(function (x) { return x !== "新增" && x !== "不建议"; }).map(function (x) { return '' + esc(x) + ""; }).join("") + '

' + esc(d.fills) + "

"); + + h.push('
'); + h.push('
数据来源' + esc(s.name) + "
"); + h.push('
标注方法' + esc(m.name) + "
"); + h.push('
真值' + esc(d.gt) + "
"); + h.push('
shape 层级' + tierChip(d.tier) + " " + esc(t.name) + "
"); + h.push('
转到 SOMA' + esc(rt.id + " " + rt.name) + "" + (rt.shape ? "" : '
不监督 shape') + "
"); + h.push("
"); + + var pv = PREV[d.id] || []; + h.push('
' + partHead("样例", pv.length ? "左:原始 RGB;右:GT 叠加。" : "")); + if (pv.length) { + h.push('"); + } else { + h.push('

还没有样例。添加方法见样例页。

' + ((d.team || []).length ? "

团队已有可视化:" + d.team.map(function (x) { return '' + esc(x.label.replace(/^团队(图册|视频):/, "")) + ""; }).join(",") + "

" : "") + "
"); + } + h.push("
"); + + h.push('

相机与规模

'); + h.push("
相机
" + esc(d.camera || "未列") + "
"); + h.push("
受试者
" + esc(d.subjects || "未列") + "
"); + h.push("
规模
" + esc(d.scale || "未列") + "
"); + if (d.risk) h.push('
注意

' + esc(d.risk) + "

"); + h.push('

采集与标注流程

' + rigSvg(d) + flow(m.steps) + '

按相机配置绘制的示意,不是真实画面;琥珀色圆点表示手上贴了光学 marker。

'); + + var links = (d.links || []).concat((d.team || []).map(function (x) { return { label: x.label, url: x.url }; })); + if (links.length) h.push('
' + partHead("链接") + '
"); + h.push('
' + (prev ? '← ' + esc(prev.name) + "" : "") + "" + (next ? '' + esc(next.name) + " →" : "") + "
"); + return h.join(""); + } + + /* ---------- 标注方法 ---------- */ function vMethods() { - var h = ['

标注方法

同一种标注方法得到的真值,可信度和适用范围相近。下面按 shape 真值可信度从高到低排列,每种方法给出流程、可信度、常见问题和转到 SOMA 的路线。

']; - var tierOf = { scan: "S1", marker: "S2", rgbd: "S3", mvkp: "S4", device: "-", synth: "SY", manual2d: "-", pseudo: "S5" }; + var h = ['

标注方法

按 shape 真值可信度从高到低排列。每种方法列出流程、可信度、常见问题、转到 SOMA 的路线和用到它的数据集。

']; + h.push('"); DATA.meta.methods.forEach(function (m) { var list = sorted(DATA.datasets.filter(function (d) { return d.method === m.id; })); - h.push('

' + esc(m.name) + "

" + tierChip(tierOf[m.id]) + '' + list.length + " 个数据集
"); - h.push(flow(m.steps)); - h.push('
可信度
' + esc(m.trust) + "
常见问题
" + esc(m.issues) + '
SOMA 路线
' + esc(m.route) + "
"); - h.push('
' + list.map(function (d) { return dsLink(d); }).join("") + "
"); + h.push('

' + esc(m.name) + "

" + tierChip(TIER_OF[m.id]) + '' + list.length + " 个数据集
" + flow(m.steps)); + h.push('
可信度
' + esc(m.trust) + "
常见问题
" + esc(m.issues) + '
转到 SOMA
' + esc(m.route) + '
' + list.map(function (d) { return dsLink(d); }).join("") + "
"); }); h.push("
"); return h.join(""); } - /* ---------- 视图:SOMA 转换 ---------- */ + /* ---------- 转到 SOMA ---------- */ function vSoma() { - var h = ['

转到 SOMA hand

没有公开数据集原生使用 SOMA 标注。SOMA-X 的 SOMAHandLayer 官方支持三种手部后端:SOMA 原生(20 维手型 identity)、MANO 和 MHR,许可为 Apache-2.0。转到 SOMA 拓扑之后,要监督原生 shape 还需要再拟合一次。

']; - h.push('
'); - h.push('

原始真值

  • 扫描网格
  • MANO 参数或网格
  • SMPL-X / SMPL-H
  • MHR 参数
  • 3D 关键点
  • 2D 关键点
'); - h.push('

映射到 SOMA 拓扑

  • SOMAHandLayer 的 MANO 后端
  • SOMAHandLayer 的 MHR 后端
  • SMPL-X 先取手部 MANO 部分
  • 关键点先定关节对应
'); - h.push('

SOMA 原生重拟合

  • 拟合 20 维 identity 和 pose
  • 按数据集统计顶点残差
  • 残差超阈值的帧不监督 shape
'); - h.push('

训练监督

  • shape:S1 到 S3、合成数据
  • pose:所有 3D 来源
  • 2D 重投影:全部带 2D 的来源
  • 伪标签只做弱监督
'); - h.push("
"); - h.push('

转换路线

'); + var h = ['

转到 SOMA hand

没有公开数据集原生使用 SOMA 标注。SOMA-X 的 SOMAHandLayer 官方支持 SOMA 原生、MANO、MHR 三种手部后端(Apache-2.0)。映射到 SOMA 拓扑后,要监督原生 shape 还需要再拟合一次。

']; + h.push('
' + partHead("四步流程") + '
'); + h.push('
1 · 原始真值
  • 扫描网格
  • MANO 参数或网格
  • SMPL-X / SMPL-H
  • MHR 参数
  • 3D / 2D 关键点
'); + h.push('
2 · 映射到 SOMA 拓扑
  • SOMAHandLayer 的 MANO 后端
  • SOMAHandLayer 的 MHR 后端
  • SMPL-X 先取手部
  • 关键点先定关节对应
'); + h.push('
3 · SOMA 原生重拟合
  • 拟合 20 维 identity 和 pose
  • 按数据集统计顶点残差
  • 残差超阈值不监督 shape
'); + h.push('
4 · 训练监督
  • shape:S1 到 S3、合成
  • pose:所有 3D 来源
  • 2D 重投影:带 2D 的来源
  • 伪标签只做弱监督
'); + h.push("
"); + h.push('
' + partHead("转换路线", "每张卡片对应一种原始真值格式。") + '
'); DATA.meta.routes.forEach(function (r) { - var n = DATA.datasets.filter(function (d) { return d.route === r.id; }).length; - h.push('
' + r.id + "

" + esc(r.name) + '

来源:' + esc(r.from) + "

" + esc(r.how) + '

' + (r.shape ? '可监督 shape' : '不监督 shape') + ' · ' + n + " 个数据集

"); + var list = DATA.datasets.filter(function (d) { return d.route === r.id; }); + h.push('
' + r.id + "

" + esc(r.name) + '

' + esc(r.how) + '

' + (r.shape ? '可监督 shape' : '不监督 shape') + ' · ' + list.length + " 个数据集

"); }); - h.push("
"); - h.push('

需要注意

    '); - h.push("
  • MANO 的 21 点里指尖取的是网格顶点,与 SOMA 关节定义不同,关键点类数据集必须先定对应表。
  • "); - h.push("
  • EgoRenderer 已经做过一次原始网格到 MANO 的 778 顶点拟合,再转 SOMA 是第二次转换,残差要分开记录。
  • "); - h.push("
  • shape 和尺度在单目里是耦合的;有内参时,shape 误差会表现为绝对尺度误差,评测时建议单独报标准姿态下的顶点误差和骨长误差。
  • "); + h.push("
"); + h.push('
' + partHead("注意事项") + '
    '); + h.push("
  • MANO 21 点的指尖是网格顶点,与 SOMA 关节定义不同;关键点类数据集要先定对应表。
  • "); + h.push("
  • EgoRenderer 已经做过一次原始网格到 MANO 的拟合,再转 SOMA 是第二次,残差分开记录。
  • "); + h.push("
  • 单目下 shape 和尺度耦合;评测单独报标准姿态下的顶点误差和骨长误差。
  • "); h.push("
  • SAM 3D Body 输出 MHR,可以走 R5 给野外图像生成伪标签;它的训练数据是否公开未查到。
  • "); - h.push('
'); - h.push("
"); + h.push('
'); return h.join(""); } - /* ---------- 视图:样例素材 ---------- */ + /* ---------- 样例 ---------- */ function vSamples() { - var h = ['

样例素材

每个数据集的详情页会显示「RGB / GT 叠加」样例对。样例登记在 data/previews.json,图片放在 media/<数据集 id>/。用脚本添加,不需要改页面代码。

']; - h.push('

添加一对样例

python tools/add_preview.py hograspnet \\\n  --rgb  /data/hograspnet/s01_0042_rgb.png \\\n  --gt   /data/hograspnet/s01_0042_gt.png \\\n  --caption "受试者 01,侧捏,第一视角相机" \\\n  --source "官方 MANO,经 R1 转为 SOMA 后渲染"

脚本会把图片转成最长边 960 像素的 JPEG 复制到 media 目录,并追加到 previews.json。同名样例会被覆盖。

'); - h.push('

previews.json 格式

{\n  "hograspnet": [\n    {\n      "rgb": "media/hograspnet/s01_0042_rgb.jpg",\n      "gt": "media/hograspnet/s01_0042_gt.jpg",\n      "caption": "受试者 01,侧捏",\n      "source": "官方 MANO → SOMA"\n    }\n  ]\n}
'); - h.push('

当前样例覆盖

'); - sorted(DATA.datasets).forEach(function (d) { - var n = (PREV[d.id] || []).length; - h.push('"); - }); - h.push("
数据集状态本站样例团队已有可视化
' + esc(d.name) + "" + stChip(d.status) + '' + (n || "—") + "" + ((d.team || []).map(function (t) { return '' + esc(t.label.replace("团队图册:", "").replace("团队视频:", "视频:")) + ""; }).join("
") || '无') + "
"); - return h.join(""); - } - - /* ---------- 视图:详情 ---------- */ - function vDetail(id) { - var d = BYID[id]; - if (!d) return '

找不到数据集「' + esc(id) + '」。回到数据集目录。

'; - var m = M.method[d.method], s = M.source[d.source], rt = M.route[d.route], t = M.tier[d.tier]; - var all = sorted(DATA.datasets), idx = all.indexOf(d), prev = all[idx - 1], next = all[idx + 1]; - var h = ['

数据集目录 / ' + esc(s.name) + " / " + esc(m.name) + "

"]; - h.push('

' + esc(d.name) + '

' + stChip(d.status) + (d.tags || []).map(function (x) { return '' + esc(x) + ""; }).join("") + '' + esc(d.year) + "
"); - h.push('

基本信息

'); - h.push("
数据来源
" + esc(s.name) + '
' + esc(s.desc) + "
"); - h.push("
相机
" + esc(d.camera || "—") + "
"); - h.push('
标注方法
' + esc(m.name) + "
"); - h.push("
真值格式
" + esc(d.gt) + "
"); - h.push("
shape 层级
" + tierChip(d.tier) + " " + esc(t.name) + ',' + esc(t.desc) + "
"); - h.push('
SOMA 路线
' + esc(rt.id + " " + rt.name) + "" + (rt.shape ? "" : ',不监督 shape') + "
"); - h.push("
受试者
" + esc(d.subjects || "—") + "
"); - h.push("
规模
" + esc(d.scale || "—") + "
"); - h.push('
补什么

' + esc(d.fills) + "

"); - if (d.risk) h.push('
注意

' + esc(d.risk) + "

"); - h.push("
"); - h.push('

采集与标注示意

' + rigSvg(d) + flow(m.steps) + '

示意图按数据集的相机配置绘制,不是真实画面。琥珀色圆点表示手上贴有光学 marker。

'); - var pv = PREV[d.id] || []; - h.push('

样例:RGB 与 GT 叠加

'); - if (pv.length) { - h.push('"); - } else { - h.push('

本站还没有这个数据集的样例。用 tools/add_preview.py ' + esc(d.id) + " 添加,步骤见样例素材。

"); - if ((d.team || []).length) h.push("

团队已有的可视化:" + d.team.map(function (x) { return '' + esc(x.label) + ""; }).join(",") + "

"); - h.push("
"); - } - h.push("
"); - if ((d.links || []).length) h.push('

链接

"); - h.push('
' + (prev ? '← ' + esc(prev.name) + "" : "") + "" + (next ? '' + esc(next.name) + " →" : "") + "
"); - h.push("
"); + var ds = sorted(DATA.datasets), have = ds.filter(nPrev), none = ds.filter(function (d) { return !nPrev(d); }); + var pairs = have.reduce(function (a, d) { return a + nPrev(d); }, 0); + var h = ['

样例

每对样例是同一帧的原始 RGB 和 GT 叠加。图片放在独立的 HF Dataset 仓库或本站 media 目录,登记在 data/previews.json。

']; + h.push('
' + partHead("覆盖情况", have.length + " 个数据集共 " + pairs + " 对;" + none.length + " 个还没有。") ); + h.push('
已有样例(数字为对数)
' + have.map(function (d) { return dsLink(d, true); }).join("") + "
"); + h.push('
暂无样例
' + none.map(function (d) { return dsLink(d); }).join("") + "
"); + h.push('
' + partHead("怎么添加", "三种方式,按场景选一种。") + '
'); + h.push('

在数据所在的服务器上批量同步(推荐)

在存放数据集的机器上运行。图片传到独立的 HF Dataset 仓库并固定版本,Space 只登记 URL,网页不依赖 SSH。可以直接给已渲染好的叠加图,也可以给原图加网格(MANO 或 SOMA)由脚本渲染。

export HF_TOKEN=hf_xxx\npython tools/server_sync.py manifest.jsonl \\\n  --media-repo DarthSoluke/EgoNetDatasetResearch-media \\\n  --space DarthSoluke/EgoNetDatasetResearch
{"dataset": "hograspnet",\n "rgb": "/SSD/hograspnet/s01/0042.png",\n "mesh": "/SSD/hograspnet/s01/0042_soma.npz",\n "caption": "受试者 01,侧捏",\n "source": "官方 MANO → R1 → SOMA"}
'); + h.push('

从团队图册导入

复用 nine-source Space 里已经做好的叠加图,每个数据集取若干对。

python tools/import_team_previews.py --per 4
'); + h.push('

手动加一对

已有一张 RGB 和一张叠加图时用。

python tools/add_preview.py hograspnet \\\n  --rgb a_rgb.png --gt a_gt.png \\\n  --caption "说明" --source "GT 来源"
'); + h.push("
"); return h.join(""); } @@ -493,7 +515,7 @@ footer { font-size: 0.8rem; color: var(--muted); border-top: 1px solid var(--lin else if (hash === "soma") html = vSoma(); else if (hash === "samples") html = vSamples(); else { html = vOverview(); view = "overview"; } - app.innerHTML = html + '
数据整理于 ' + esc(DATA.meta.updated) + "。数值来自论文、项目页和团队已有图册;标为「待核」的字段尚未确认。修改数据请编辑 tools/make_data.py 后重新生成。
"; + app.innerHTML = html + '
整理于 ' + esc(DATA.meta.updated) + "。数值来自论文、项目页和团队图册;标「待核」的字段尚未确认。
"; document.querySelectorAll("nav.tabs a").forEach(function (a) { if (a.getAttribute("data-v") === view) a.setAttribute("aria-current", "page"); else a.removeAttribute("aria-current"); }); if (hash === "catalog") bindCatalog(); if (pendingJump) { var el = document.getElementById(pendingJump); pendingJump = null; if (el) { el.scrollIntoView(); return; } } @@ -516,7 +538,7 @@ footer { font-size: 0.8rem; color: var(--muted); border-top: 1px solid var(--lin fetch("data/datasets.json").then(function (r) { if (!r.ok) throw new Error(r.status); return r.json(); }), fetch("data/previews.json").then(function (r) { return r.ok ? r.json() : {}; }).catch(function () { return {}; }) ]).then(function (x) { boot(x[0], x[1]); }).catch(function () { - app.innerHTML = '

没能读取 data/datasets.json。直接双击打开 HTML 文件时浏览器会拦截读取,请用 python -m http.server 在本目录启动后访问,或部署到 Hugging Face Space。

'; + app.innerHTML = '

没能读取 data/datasets.json。直接双击打开 HTML 时浏览器会拦截读取,请在本目录运行 python -m http.server 后访问,或部署到 Hugging Face Space。

'; }); })(); diff --git a/tools/import_team_previews.py b/tools/import_team_previews.py new file mode 100644 index 0000000000000000000000000000000000000000..3ea9bf1e419bbce2fd439f19154b9d1cbaa5da89 --- /dev/null +++ b/tools/import_team_previews.py @@ -0,0 +1,120 @@ +#!/usr/bin/env python3 +"""从团队 Space(yangzijing/nine-source-hand-data-browser)导入已有的 RGB / GT 叠加样例。 + + python tools/import_team_previews.py [--per 4] + +读取两份团队图册的数据(WiLoR 14 源图册、第一人称具身图册),按数据集取样例对, +缩放成 JPEG 存到 media//,写入 data/previews.json。只覆盖本脚本导入的条目, +用 add_preview.py 手动加的样例会保留。 +""" +import argparse +import io +import json +import re +import sys +import urllib.request +from pathlib import Path + +ROOT = Path(__file__).resolve().parent.parent +BASE = "https://huggingface.co/spaces/yangzijing/nine-source-hand-data-browser/resolve/main" +WILOR_DIR = "hand_dataset_browser_20261013" +EGO_DIR = "egocentric_embodied_datasets_20261020" +TAG = "团队图册" + +WILOR_MAP = {"arctic": "arctic", "h2o": "h2o", "hot3d": "hot3d", "mtc": "mtc", "dexycb": "dexycb", + "Re:InterHand": "reinterhand", "InterHand2.6M": "interhand", "HO3D": "ho3d", "H2O3D": "h2o3d", + "FreiHAND": "freihand", "RHD": "rhd", "COCO WholeBody": "cocowb", "Halpe": "halpe", + "MPII NZSL": "mpiinzsl", "egorenderer_v005": "egorenderer"} +EGO_MAP = {"xperience": "xperience", "gen-humanego": "genhumanego", "egoverse": "egoverse", "egoemg": "egoemg", + "egodex": "egodex", "openaoe": "openaoe", "taco": "taco", "hocap": "hocap", + "egopressure": "egopressure", "show3d": "show3d"} +HAND = {"left": "左手", "right": "右手"} + + +def get(url): + with urllib.request.urlopen(url, timeout=60) as r: + return r.read() + + +def save_jpg(raw, dst, max_side): + from PIL import Image + im = Image.open(io.BytesIO(raw)).convert("RGB") + s = max_side / max(im.size) + if s < 1: + im = im.resize((round(im.width * s), round(im.height * s)), Image.LANCZOS) + dst.parent.mkdir(parents=True, exist_ok=True) + im.save(dst, "JPEG", quality=86, optimize=True) + + +def pick(lst, n): + if len(lst) <= n: + return lst + return [lst[round(i * (len(lst) - 1) / (n - 1))] for i in range(n)] + + +def main(): + ap = argparse.ArgumentParser() + ap.add_argument("--per", type=int, default=4, help="每个数据集最多导入几对") + ap.add_argument("--max-side", type=int, default=960) + a = ap.parse_args() + + ids = {d["id"] for d in json.loads((ROOT / "data/datasets.json").read_text(encoding="utf-8"))["datasets"]} + jobs = {} # id -> [(rgb_url, gt_url, name, caption, source)] + + html = get(f"{BASE}/{WILOR_DIR}/index.html").decode("utf-8") + js = html[html.index("const DATA"):] + g, _ = json.JSONDecoder().raw_decode(js[js.index("{"):]) + assets = g["assets"] + for d in g["datasets"]: + key = WILOR_MAP.get(d["id"]) or WILOR_MAP.get(d["name"]) + if not key or key not in ids: + continue + for s in pick(d.get("samples", []), a.per): + ov = next(iter((s.get("overlays") or {}).items()), None) + if not ov or s["rgb"] not in assets or ov[1] not in assets: + continue + cap = " · ".join(x for x in [s.get("recording"), f"帧 {s['frame']}" if s.get("frame") is not None else "", + HAND.get(s.get("hand"), ""), s.get("split")] if x) + src = f"{ov[0]}({TAG} {g.get('date', '')})" + jobs.setdefault(key, []).append((f"{BASE}/{WILOR_DIR}/{assets[s['rgb']]}", f"{BASE}/{WILOR_DIR}/{assets[ov[1]]}", + re.sub(r"\W", "_", s["id"]), cap, src)) + + e = json.loads(get(f"{BASE}/{EGO_DIR}/sample_evidence.json")) + for k, lst in e["samples"].items(): + key = EGO_MAP.get(k) + if not key or key not in ids: + continue + for i, s in enumerate(pick(lst, a.per)): + if not s.get("rgb") or not s.get("overlay"): + continue + cap = " · ".join(x for x in [s.get("frame"), s.get("camera"), s.get("license")] if x) + src = f"{s.get('overlay_label') or s.get('label_type') or 'GT 叠加'}({TAG} {e.get('date', '')})" + jobs.setdefault(key, []).append((f"{BASE}/{EGO_DIR}/{s['rgb']}", f"{BASE}/{EGO_DIR}/{s['overlay']}", + f"team_{k}_{i}", cap, src)) + + pf = ROOT / "data/previews.json" + prev = json.loads(pf.read_text(encoding="utf-8")) if pf.exists() else {} + total = 0 + for key, items in sorted(jobs.items()): + kept = [p for p in prev.get(key, []) if TAG not in p.get("source", "")] + new = [] + for rgb_u, gt_u, name, cap, src in items: + try: + r_rgb, r_gt = f"media/{key}/{name}_rgb.jpg", f"media/{key}/{name}_gt.jpg" + save_jpg(get(rgb_u), ROOT / r_rgb, a.max_side) + save_jpg(get(gt_u), ROOT / r_gt, a.max_side) + new.append({"rgb": r_rgb, "gt": r_gt, "caption": cap, "source": src}) + except Exception as ex: # noqa: BLE001 + print(f" 跳过 {key}/{name}:{ex}", file=sys.stderr) + if new + kept: + prev[key] = new + kept + else: + prev.pop(key, None) + total += len(new) + print(f"{key}: {len(new)} 对") + pf.write_text(json.dumps(prev, ensure_ascii=False, indent=1) + "\n", encoding="utf-8") + print(f"共导入 {total} 对,覆盖 {len(jobs)} 个数据集") + + +if __name__ == "__main__": + main() diff --git a/tools/make_data.py b/tools/make_data.py index 9d16630378eb1f0f3767ab52bd8c07ae695e724d..39749ae99aa3c54e0e7e56c21dea8352f0273258 100644 --- a/tools/make_data.py +++ b/tools/make_data.py @@ -267,24 +267,24 @@ add(id="egopressure", name="EgoPressure", year="CVPR 2025", status="surveyed", t source="egoexo", method="rgbd", gt="MANO", tier="S3", route="R1", camera="头戴相机 + 多台外视角 RGB-D", rig={"ego": True, "exo": 7, "depth": True}, fills="手与表面接触的压力,带第一视角。", + risk="HaMeR 初始化后用多视角 RGB-D、分割、压力和时序约束拟合 MANO,手上没有 marker。", links=[arxiv("2409.02224")], team=[T_EGO]) add(id="egoemg", name="EgoEMG", year="2026", status="surveyed", tags=["第一人称图册"], - source="ego", method="marker", gt="手部 3D(光学动捕)", tier="S2", route="R1", - camera="第一视角 + 26 相机光学动捕", rig={"ego": True}, + source="ego", method="marker", gt="MANO(光捕 marker 经 markers2mano 拟合)", tier="S2", route="R1", + camera="头戴 GoPro 60 FPS + 26 相机光学动捕", rig={"ego": True}, fills="第一视角与肌电同步,光学动捕真值。", - risk="手部模型格式待核。", links=[arxiv("2605.05712")], team=[T_EGO]) add(id="hocap", name="HO-Cap", year="2024", status="surveyed", tags=["第一人称图册"], source="egoexo", method="rgbd", gt="MANO", tier="S3", route="R1", - camera="多台 RGB-D + 头显第一视角", rig={"ego": True, "exo": 8, "depth": True}, + camera="多台 RGB-D + HoloLens 第一视角 RGB", rig={"ego": True, "exo": 8, "depth": True}, fills="手物交互,含第一视角。", - risk="标注细节待核。", + risk="多视角 RGB-D 与关键点约束拟合 MANO,不使用光捕。", team=[T_EGO]) add(id="taco", name="TACO", year="CVPR 2024", status="surveyed", tags=["第一人称图册"], source="egoexo", method="mvkp", gt="MANO", tier="S4", route="R1", camera="多台外视角 + 1 个第一视角", rig={"ego": True, "exo": 12}, fills="双手使用工具的交互。", - risk="标注方式待核,暂归入关键点三角化。", + risk="多视角 MMPose 三角化后做 MANO 接触与时序拟合,手上没有光捕。", team=[T_EGO]) add(id="aceda0", name="ACE-Data-0", year="2026", status="surveyed", tags=["第一人称图册"], source="egoexo", method="marker", gt="手部动捕(格式待核)", tier="S2", route="R1", @@ -412,10 +412,10 @@ add(id="assemblyhands", name="AssemblyHands", year="CVPR 2023", status="no", tag risk="第一视角不是真实 RGB,与排除 SHOW3D 的理由相同。", links=[arxiv("2304.12301")]) add(id="show3d", name="SHOW3D", year="2026", status="no", tags=["不建议", "第一人称图册"], - source="norgb", method="pseudo", gt="自动标注为主", tier="S5", route="R7", + source="norgb", method="mvkp", gt="UmeTrack(另提供 MANO / MHR 转换)", tier="S4", route="R1", camera="黑白鱼眼", rig={"ego": True, "fisheye": True, "mono": True}, fills="团队已排除。", - risk="主标注自动生成,人工核验子集不具代表性;黑白鱼眼不满足真实 RGB 条件。", + risk="无标记多视角自动拟合,人工核验子集不具代表性;黑白鱼眼不满足真实 RGB 条件。", team=[T_EGO]) add(id="hiphi", name="HiPHI", year="2026", status="no", tags=["不建议"], source="norgb", method="marker", gt="BVH 骨架", tier="-", route="R3", diff --git a/tools/render_overlay.py b/tools/render_overlay.py new file mode 100644 index 0000000000000000000000000000000000000000..2b79b64347f25f069f0ad0ba7dcb436f61efe747 --- /dev/null +++ b/tools/render_overlay.py @@ -0,0 +1,90 @@ +#!/usr/bin/env python3 +"""把手部网格(MANO、SOMA 或任意三角网格)投影到 RGB 上,生成半透明叠加图。 + +只依赖 numpy 和 Pillow。可单独运行,也被 server_sync.py 调用: + + python tools/render_overlay.py --image frame.png --mesh hand.npz --out frame_gt.png + +mesh.npz 需要: + verts (N, 3) 相机坐标系下的顶点,单位米,z 朝前 + faces (F, 3) 三角面索引 + K (3, 3) 内参(也可用 --K 传入 JSON) +可选: + verts 可以是 (H, N, 3),表示多只手;faces 共用 + joints (J, 3) 或 (H, J, 3),会画成小圆点 +""" +import argparse +import json + +import numpy as np +from PIL import Image, ImageDraw + +HAND_COLORS = [(70, 140, 230), (235, 140, 50)] # 右手蓝、左手橙(按传入顺序) + + +def project(p, K): + z = np.clip(p[:, 2], 1e-6, None) + return np.stack([K[0, 0] * p[:, 0] / z + K[0, 2], K[1, 1] * p[:, 1] / z + K[1, 2]], 1) + + +def overlay(img, verts, faces, K, joints=None, alpha=0.55, colors=HAND_COLORS): + """img: PIL.Image;verts: (N,3) 或 (H,N,3);返回新的 PIL.Image。""" + base = img.convert("RGBA") + layer = Image.new("RGBA", base.size, (0, 0, 0, 0)) + draw = ImageDraw.Draw(layer) + V = np.asarray(verts, float) + if V.ndim == 2: + V = V[None] + F = np.asarray(faces, int) + K = np.asarray(K, float) + light = np.array([0.3, -0.4, -0.85]) + light /= np.linalg.norm(light) + + tris = [] # (depth, polygon, rgba) + for h, v in enumerate(V): + col = np.array(colors[h % len(colors)], float) + uv = project(v, K) + a, b, c = v[F[:, 0]], v[F[:, 1]], v[F[:, 2]] + n = np.cross(b - a, c - a) + n /= np.linalg.norm(n, axis=1, keepdims=True) + 1e-12 + shade = 0.45 + 0.55 * np.abs(n @ light) + depth = (a[:, 2] + b[:, 2] + c[:, 2]) / 3 + ok = (a[:, 2] > 0) & (b[:, 2] > 0) & (c[:, 2] > 0) + for i in np.nonzero(ok)[0]: + poly = [tuple(uv[j]) for j in F[i]] + rgb = tuple(int(x) for x in np.clip(col * shade[i], 0, 255)) + tris.append((depth[i], poly, rgb + (int(255 * alpha),))) + for _, poly, rgba in sorted(tris, key=lambda t: -t[0]): # 远的先画 + draw.polygon(poly, fill=rgba) + out = Image.alpha_composite(base, layer) + + if joints is not None: + J = np.asarray(joints, float) + if J.ndim == 2: + J = J[None] + d = ImageDraw.Draw(out) + r = max(2, round(min(out.size) / 220)) + for j in J: + for x, y in project(j, K): + d.ellipse([x - r, y - r, x + r, y + r], fill=(255, 255, 255, 255), outline=(20, 20, 20, 255)) + return out.convert("RGB") + + +def main(): + ap = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter) + ap.add_argument("--image", required=True) + ap.add_argument("--mesh", required=True, help="npz:verts, faces, 可选 K / joints") + ap.add_argument("--K", help="内参 JSON,例如 [[fx,0,cx],[0,fy,cy],[0,0,1]]") + ap.add_argument("--alpha", type=float, default=0.55) + ap.add_argument("--out", required=True) + a = ap.parse_args() + m = np.load(a.mesh) + K = np.array(json.loads(a.K)) if a.K else m["K"] + img = overlay(Image.open(a.image), m["verts"], m["faces"], K, + joints=m["joints"] if "joints" in m.files else None, alpha=a.alpha) + img.save(a.out) + print("写出", a.out) + + +if __name__ == "__main__": + main() diff --git a/tools/server_sync.py b/tools/server_sync.py new file mode 100644 index 0000000000000000000000000000000000000000..c197b7ab291371cc760e19df15339bc729628b12 --- /dev/null +++ b/tools/server_sync.py @@ -0,0 +1,136 @@ +#!/usr/bin/env python3 +"""在存放数据集的服务器上运行:批量生成样例并同步到 Hugging Face。 + +做法与团队 nine-source Space 一致:图片放进一个独立的 HF Dataset 仓库, +Space 只登记固定版本的 URL,网页不依赖 SSH、本机服务或临时隧道。 + + export HF_TOKEN=hf_xxx # 或先 hf auth login + python tools/server_sync.py manifest.jsonl \ + --media-repo DarthSoluke/EgoNetDatasetResearch-media \ + --space DarthSoluke/EgoNetDatasetResearch + +manifest.jsonl 每行一个样例,两种写法任选: + + 已经渲染好的叠加图 + {"dataset": "hograspnet", "rgb": "/SSD/.../0042.png", "gt": "/SSD/.../0042_overlay.png", + "caption": "受试者 01,侧捏", "source": "官方 MANO"} + + 只有原图和网格,由本脚本渲染(网格可以是 MANO,也可以是转换后的 SOMA) + {"dataset": "hograspnet", "rgb": "/SSD/.../0042.png", "mesh": "/SSD/.../0042_soma.npz", + "caption": "受试者 01,侧捏", "source": "官方 MANO → R1 → SOMA"} + mesh.npz 的格式见 render_overlay.py(verts、faces、K,可选 joints) + +可选字段:name(样例名,默认取 rgb 文件名)。 + +参数: + --replace 先清掉这些数据集里以前由本脚本同步的样例,再写入新的 + --local-only 只写到本地目录 --out(默认 ./sync_out),不上传,用于先检查 +""" +import argparse +import json +import os +import re +import shutil +import sys +import tempfile +from pathlib import Path + +from PIL import Image + +sys.path.insert(0, str(Path(__file__).resolve().parent)) +from render_overlay import overlay # noqa: E402 + +ORIGIN = "server_sync" + + +def to_jpg(img, dst, max_side): + img = img.convert("RGB") + s = max_side / max(img.size) + if s < 1: + img = img.resize((round(img.width * s), round(img.height * s)), Image.LANCZOS) + dst.parent.mkdir(parents=True, exist_ok=True) + img.save(dst, "JPEG", quality=86, optimize=True) + + +def build(manifest, stage, max_side): + import numpy as np + rows = [json.loads(l) for l in Path(manifest).read_text(encoding="utf-8").splitlines() if l.strip()] + items = {} + for i, r in enumerate(rows, 1): + ds = r["dataset"] + name = re.sub(r"[^\w\-]", "_", r.get("name") or Path(r["rgb"]).stem.removesuffix("_rgb")) + rgb = Image.open(r["rgb"]) + if r.get("gt"): + gt = Image.open(r["gt"]) + elif r.get("mesh"): + m = np.load(r["mesh"]) + K = np.array(r["K"]) if r.get("K") else m["K"] + gt = overlay(rgb, m["verts"], m["faces"], K, joints=m["joints"] if "joints" in m.files else None) + else: + sys.exit(f"第 {i} 行既没有 gt 也没有 mesh") + rel_rgb, rel_gt = f"media/{ds}/{name}_rgb.jpg", f"media/{ds}/{name}_gt.jpg" + to_jpg(rgb, stage / rel_rgb, max_side) + to_jpg(gt, stage / rel_gt, max_side) + items.setdefault(ds, []).append({"rgb": rel_rgb, "gt": rel_gt, "caption": r.get("caption", ""), + "source": r.get("source", ""), "origin": ORIGIN}) + print(f"[{i}/{len(rows)}] {ds}/{name}") + return items + + +def merge(prev, items, prefix, replace): + for ds, new in items.items(): + old = prev.get(ds, []) + if replace: + old = [p for p in old if p.get("origin") != ORIGIN] + new_paths = {prefix + n["rgb"] for n in new} + old = [p for p in old if p.get("rgb") not in new_paths] + prev[ds] = [dict(n, rgb=prefix + n["rgb"], gt=prefix + n["gt"]) for n in new] + old + return prev + + +def main(): + ap = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter) + ap.add_argument("manifest") + ap.add_argument("--media-repo", default="DarthSoluke/EgoNetDatasetResearch-media") + ap.add_argument("--space", default="DarthSoluke/EgoNetDatasetResearch") + ap.add_argument("--max-side", type=int, default=960) + ap.add_argument("--replace", action="store_true") + ap.add_argument("--local-only", action="store_true") + ap.add_argument("--out", default="sync_out") + a = ap.parse_args() + + if a.local_only: + out = Path(a.out) + items = build(a.manifest, out, a.max_side) + pf = out / "data/previews.json" + prev = json.loads(pf.read_text(encoding="utf-8")) if pf.exists() else {} + pf.parent.mkdir(parents=True, exist_ok=True) + pf.write_text(json.dumps(merge(prev, items, "", a.replace), ensure_ascii=False, indent=1) + "\n", encoding="utf-8") + print(f"已写到 {out}/,检查无误后去掉 --local-only 重新运行") + return + + from huggingface_hub import HfApi, hf_hub_download + api = HfApi(token=os.environ.get("HF_TOKEN")) + stage = Path(tempfile.mkdtemp(prefix="soma_sync_")) + try: + items = build(a.manifest, stage, a.max_side) + api.create_repo(a.media_repo, repo_type="dataset", exist_ok=True) + info = api.upload_folder(repo_id=a.media_repo, repo_type="dataset", folder_path=str(stage), + commit_message=f"同步 {sum(map(len, items.values()))} 对样例:{', '.join(sorted(items))}") + rev = info.oid + prefix = f"https://huggingface.co/datasets/{a.media_repo}/resolve/{rev}/" + + cur = hf_hub_download(a.space, "data/previews.json", repo_type="space", token=api.token) + prev = json.loads(Path(cur).read_text(encoding="utf-8")) + merged = merge(prev, items, prefix, a.replace) + tmp = stage / "previews.json" + tmp.write_text(json.dumps(merged, ensure_ascii=False, indent=1) + "\n", encoding="utf-8") + api.upload_file(path_or_fileobj=str(tmp), path_in_repo="data/previews.json", repo_id=a.space, repo_type="space", + commit_message=f"登记样例(媒体版本 {rev[:8]})") + print(f"完成:媒体仓库版本 {rev},已更新 {a.space} 的 data/previews.json") + finally: + shutil.rmtree(stage, ignore_errors=True) + + +if __name__ == "__main__": + main()