发布 SOMA 手部数据图谱:46 个数据集、100 对样例、服务器同步脚本
Browse filesThis view is limited to 50 files because it contains too many changes. See raw diff
- .gitattributes +12 -0
- README.md +10 -0
- data/datasets.json +12 -12
- data/previews.json +652 -1
- index.html +250 -228
- media/arctic/6057bab38e74308c02be_gt.jpg +0 -0
- media/arctic/6057bab38e74308c02be_rgb.jpg +0 -0
- media/arctic/a213dd95256ccccad7bc_gt.jpg +0 -0
- media/arctic/a213dd95256ccccad7bc_rgb.jpg +0 -0
- media/arctic/c4d53a1b79549c84e96d_gt.jpg +0 -0
- media/arctic/c4d53a1b79549c84e96d_rgb.jpg +0 -0
- media/arctic/e68425daa275c68f6f5d_gt.jpg +0 -0
- media/arctic/e68425daa275c68f6f5d_rgb.jpg +0 -0
- media/cocowb/780684ce08a2af76ddc4_gt.jpg +0 -0
- media/cocowb/780684ce08a2af76ddc4_rgb.jpg +0 -0
- media/cocowb/7e7716c112039185cc5e_gt.jpg +0 -0
- media/cocowb/7e7716c112039185cc5e_rgb.jpg +0 -0
- media/cocowb/9fcab59ec353483a0635_gt.jpg +3 -0
- media/cocowb/9fcab59ec353483a0635_rgb.jpg +3 -0
- media/cocowb/f59aa0ba82e64839e596_gt.jpg +0 -0
- media/cocowb/f59aa0ba82e64839e596_rgb.jpg +0 -0
- media/dexycb/6df9d4ead4d92a187a28_gt.jpg +0 -0
- media/dexycb/6df9d4ead4d92a187a28_rgb.jpg +0 -0
- media/dexycb/7e32dcf09cb0a2254256_gt.jpg +0 -0
- media/dexycb/7e32dcf09cb0a2254256_rgb.jpg +0 -0
- media/dexycb/8ffc14f49fff4b06cc73_gt.jpg +0 -0
- media/dexycb/8ffc14f49fff4b06cc73_rgb.jpg +0 -0
- media/dexycb/a128fbe7b45844ebb4e8_gt.jpg +0 -0
- media/dexycb/a128fbe7b45844ebb4e8_rgb.jpg +0 -0
- media/egodex/team_egodex_0_gt.jpg +0 -0
- media/egodex/team_egodex_0_rgb.jpg +0 -0
- media/egodex/team_egodex_1_gt.jpg +0 -0
- media/egodex/team_egodex_1_rgb.jpg +0 -0
- media/egodex/team_egodex_2_gt.jpg +0 -0
- media/egodex/team_egodex_2_rgb.jpg +0 -0
- media/egodex/team_egodex_3_gt.jpg +0 -0
- media/egodex/team_egodex_3_rgb.jpg +0 -0
- media/egoemg/team_egoemg_0_gt.jpg +0 -0
- media/egoemg/team_egoemg_0_rgb.jpg +0 -0
- media/egoemg/team_egoemg_1_gt.jpg +0 -0
- media/egoemg/team_egoemg_1_rgb.jpg +0 -0
- media/egoemg/team_egoemg_2_gt.jpg +0 -0
- media/egoemg/team_egoemg_2_rgb.jpg +0 -0
- media/egoemg/team_egoemg_3_gt.jpg +0 -0
- media/egoemg/team_egoemg_3_rgb.jpg +0 -0
- media/egopressure/team_egopressure_0_gt.jpg +0 -0
- media/egopressure/team_egopressure_0_rgb.jpg +0 -0
- media/egopressure/team_egopressure_1_gt.jpg +0 -0
- media/egopressure/team_egopressure_1_rgb.jpg +0 -0
- media/egopressure/team_egopressure_2_gt.jpg +0 -0
.gitattributes
CHANGED
|
@@ -33,3 +33,15 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
| 36 |
+
media/cocowb/9fcab59ec353483a0635_gt.jpg filter=lfs diff=lfs merge=lfs -text
|
| 37 |
+
media/cocowb/9fcab59ec353483a0635_rgb.jpg filter=lfs diff=lfs merge=lfs -text
|
| 38 |
+
media/genhumanego/team_gen-humanego_0_gt.jpg filter=lfs diff=lfs merge=lfs -text
|
| 39 |
+
media/genhumanego/team_gen-humanego_0_rgb.jpg filter=lfs diff=lfs merge=lfs -text
|
| 40 |
+
media/genhumanego/team_gen-humanego_1_gt.jpg filter=lfs diff=lfs merge=lfs -text
|
| 41 |
+
media/genhumanego/team_gen-humanego_1_rgb.jpg filter=lfs diff=lfs merge=lfs -text
|
| 42 |
+
media/genhumanego/team_gen-humanego_2_gt.jpg filter=lfs diff=lfs merge=lfs -text
|
| 43 |
+
media/genhumanego/team_gen-humanego_2_rgb.jpg filter=lfs diff=lfs merge=lfs -text
|
| 44 |
+
media/genhumanego/team_gen-humanego_3_gt.jpg filter=lfs diff=lfs merge=lfs -text
|
| 45 |
+
media/genhumanego/team_gen-humanego_3_rgb.jpg filter=lfs diff=lfs merge=lfs -text
|
| 46 |
+
media/mpiinzsl/mpiinzsl_047704994_01_r_native2d_gt.jpg filter=lfs diff=lfs merge=lfs -text
|
| 47 |
+
media/mpiinzsl/mpiinzsl_047704994_01_r_native2d_rgb.jpg filter=lfs diff=lfs merge=lfs -text
|
README.md
CHANGED
|
@@ -33,6 +33,9 @@ data/previews.json # 样例登记
|
|
| 33 |
media/<id>/ # 样例图片
|
| 34 |
tools/make_data.py # 编辑数据集信息的地方
|
| 35 |
tools/add_preview.py # 添加一对 RGB / GT 叠加样例
|
|
|
|
|
|
|
|
|
|
| 36 |
tools/build.py # 由 src/page.html 生成 index.html
|
| 37 |
```
|
| 38 |
|
|
@@ -46,6 +49,13 @@ vim tools/make_data.py && python tools/make_data.py
|
|
| 46 |
python tools/add_preview.py hograspnet --rgb s01_rgb.png --gt s01_gt.png \
|
| 47 |
--caption "受试者 01,侧捏" --source "官方 MANO → SOMA"
|
| 48 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 49 |
# 改了页面源码后
|
| 50 |
python tools/build.py
|
| 51 |
|
|
|
|
| 33 |
media/<id>/ # 样例图片
|
| 34 |
tools/make_data.py # 编辑数据集信息的地方
|
| 35 |
tools/add_preview.py # 添加一对 RGB / GT 叠加样例
|
| 36 |
+
tools/import_team_previews.py # 从团队 Space 导入已有叠加样例
|
| 37 |
+
tools/server_sync.py # 在数据服务器上批量生成样例,传到 HF Dataset 仓库并登记
|
| 38 |
+
tools/render_overlay.py # 把 MANO / SOMA 网格投影到 RGB 上生成叠加图
|
| 39 |
tools/build.py # 由 src/page.html 生成 index.html
|
| 40 |
```
|
| 41 |
|
|
|
|
| 49 |
python tools/add_preview.py hograspnet --rgb s01_rgb.png --gt s01_gt.png \
|
| 50 |
--caption "受试者 01,侧捏" --source "官方 MANO → SOMA"
|
| 51 |
|
| 52 |
+
# 在数据服务器上批量同步样例(推荐,见 tools/server_sync.py 顶部说明)
|
| 53 |
+
export HF_TOKEN=hf_xxx
|
| 54 |
+
python tools/server_sync.py manifest.jsonl --replace
|
| 55 |
+
|
| 56 |
+
# 从团队图册同步已有样例
|
| 57 |
+
python tools/import_team_previews.py --per 4
|
| 58 |
+
|
| 59 |
# 改了页面源码后
|
| 60 |
python tools/build.py
|
| 61 |
|
data/datasets.json
CHANGED
|
@@ -1012,6 +1012,7 @@
|
|
| 1012 |
"depth": true
|
| 1013 |
},
|
| 1014 |
"fills": "手与表面接触的压力,带第一视角。",
|
|
|
|
| 1015 |
"links": [
|
| 1016 |
{
|
| 1017 |
"label": "论文 arXiv:2409.02224",
|
|
@@ -1024,7 +1025,6 @@
|
|
| 1024 |
"url": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/egocentric_embodied_datasets_20261020/index.html"
|
| 1025 |
}
|
| 1026 |
],
|
| 1027 |
-
"risk": "",
|
| 1028 |
"subjects": "",
|
| 1029 |
"scale": ""
|
| 1030 |
},
|
|
@@ -1038,15 +1038,14 @@
|
|
| 1038 |
],
|
| 1039 |
"source": "ego",
|
| 1040 |
"method": "marker",
|
| 1041 |
-
"gt": "
|
| 1042 |
"tier": "S2",
|
| 1043 |
"route": "R1",
|
| 1044 |
-
"camera": "
|
| 1045 |
"rig": {
|
| 1046 |
"ego": true
|
| 1047 |
},
|
| 1048 |
"fills": "第一视角与肌电同步,光学动捕真值。",
|
| 1049 |
-
"risk": "手部模型格式待核。",
|
| 1050 |
"links": [
|
| 1051 |
{
|
| 1052 |
"label": "论文 arXiv:2605.05712",
|
|
@@ -1059,6 +1058,7 @@
|
|
| 1059 |
"url": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/egocentric_embodied_datasets_20261020/index.html"
|
| 1060 |
}
|
| 1061 |
],
|
|
|
|
| 1062 |
"subjects": "",
|
| 1063 |
"scale": ""
|
| 1064 |
},
|
|
@@ -1075,14 +1075,14 @@
|
|
| 1075 |
"gt": "MANO",
|
| 1076 |
"tier": "S3",
|
| 1077 |
"route": "R1",
|
| 1078 |
-
"camera": "多台 RGB-D +
|
| 1079 |
"rig": {
|
| 1080 |
"ego": true,
|
| 1081 |
"exo": 8,
|
| 1082 |
"depth": true
|
| 1083 |
},
|
| 1084 |
"fills": "手物交互,含第一视角。",
|
| 1085 |
-
"risk": "
|
| 1086 |
"team": [
|
| 1087 |
{
|
| 1088 |
"label": "团队图册:第一人称具身数据集",
|
|
@@ -1112,7 +1112,7 @@
|
|
| 1112 |
"exo": 12
|
| 1113 |
},
|
| 1114 |
"fills": "双手使用工具的交互。",
|
| 1115 |
-
"risk": "
|
| 1116 |
"team": [
|
| 1117 |
{
|
| 1118 |
"label": "团队图册:第一人称具身数据集",
|
|
@@ -1720,10 +1720,10 @@
|
|
| 1720 |
"第一人称图册"
|
| 1721 |
],
|
| 1722 |
"source": "norgb",
|
| 1723 |
-
"method": "
|
| 1724 |
-
"gt": "
|
| 1725 |
-
"tier": "
|
| 1726 |
-
"route": "
|
| 1727 |
"camera": "黑白鱼眼",
|
| 1728 |
"rig": {
|
| 1729 |
"ego": true,
|
|
@@ -1731,7 +1731,7 @@
|
|
| 1731 |
"mono": true
|
| 1732 |
},
|
| 1733 |
"fills": "团队已排除。",
|
| 1734 |
-
"risk": "
|
| 1735 |
"team": [
|
| 1736 |
{
|
| 1737 |
"label": "团队图册:第一人称具身数据集",
|
|
|
|
| 1012 |
"depth": true
|
| 1013 |
},
|
| 1014 |
"fills": "手与表面接触的压力,带第一视角。",
|
| 1015 |
+
"risk": "HaMeR 初始化后用多视角 RGB-D、分割、压力和时序约束拟合 MANO,手上没有 marker。",
|
| 1016 |
"links": [
|
| 1017 |
{
|
| 1018 |
"label": "论文 arXiv:2409.02224",
|
|
|
|
| 1025 |
"url": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/egocentric_embodied_datasets_20261020/index.html"
|
| 1026 |
}
|
| 1027 |
],
|
|
|
|
| 1028 |
"subjects": "",
|
| 1029 |
"scale": ""
|
| 1030 |
},
|
|
|
|
| 1038 |
],
|
| 1039 |
"source": "ego",
|
| 1040 |
"method": "marker",
|
| 1041 |
+
"gt": "MANO(光捕 marker 经 markers2mano 拟合)",
|
| 1042 |
"tier": "S2",
|
| 1043 |
"route": "R1",
|
| 1044 |
+
"camera": "头戴 GoPro 60 FPS + 26 相机光学动捕",
|
| 1045 |
"rig": {
|
| 1046 |
"ego": true
|
| 1047 |
},
|
| 1048 |
"fills": "第一视角与肌电同步,光学动捕真值。",
|
|
|
|
| 1049 |
"links": [
|
| 1050 |
{
|
| 1051 |
"label": "论文 arXiv:2605.05712",
|
|
|
|
| 1058 |
"url": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/egocentric_embodied_datasets_20261020/index.html"
|
| 1059 |
}
|
| 1060 |
],
|
| 1061 |
+
"risk": "",
|
| 1062 |
"subjects": "",
|
| 1063 |
"scale": ""
|
| 1064 |
},
|
|
|
|
| 1075 |
"gt": "MANO",
|
| 1076 |
"tier": "S3",
|
| 1077 |
"route": "R1",
|
| 1078 |
+
"camera": "多台 RGB-D + HoloLens 第一视角 RGB",
|
| 1079 |
"rig": {
|
| 1080 |
"ego": true,
|
| 1081 |
"exo": 8,
|
| 1082 |
"depth": true
|
| 1083 |
},
|
| 1084 |
"fills": "手物交互,含第一视角。",
|
| 1085 |
+
"risk": "多视角 RGB-D 与关键点约束拟合 MANO,不使用光捕。",
|
| 1086 |
"team": [
|
| 1087 |
{
|
| 1088 |
"label": "团队图册:第一人称具身数据集",
|
|
|
|
| 1112 |
"exo": 12
|
| 1113 |
},
|
| 1114 |
"fills": "双手使用工具的交互。",
|
| 1115 |
+
"risk": "多视角 MMPose 三角化后做 MANO 接触与时序拟合,手上没有光捕。",
|
| 1116 |
"team": [
|
| 1117 |
{
|
| 1118 |
"label": "团队图册:第一人称具身数据集",
|
|
|
|
| 1720 |
"第一人称图册"
|
| 1721 |
],
|
| 1722 |
"source": "norgb",
|
| 1723 |
+
"method": "mvkp",
|
| 1724 |
+
"gt": "UmeTrack(另提供 MANO / MHR 转换)",
|
| 1725 |
+
"tier": "S4",
|
| 1726 |
+
"route": "R1",
|
| 1727 |
"camera": "黑白鱼眼",
|
| 1728 |
"rig": {
|
| 1729 |
"ego": true,
|
|
|
|
| 1731 |
"mono": true
|
| 1732 |
},
|
| 1733 |
"fills": "团队已排除。",
|
| 1734 |
+
"risk": "无标记多视角自动拟合,人工核验子集不具代表性;黑白鱼眼不满足真实 RGB 条件。",
|
| 1735 |
"team": [
|
| 1736 |
{
|
| 1737 |
"label": "团队图册:第一人称具身数据集",
|
data/previews.json
CHANGED
|
@@ -1 +1,652 @@
|
|
| 1 |
-
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"egodex": [
|
| 3 |
+
{
|
| 4 |
+
"rgb": "media/egodex/team_egodex_0_rgb.jpg",
|
| 5 |
+
"gt": "media/egodex/team_egodex_0_gt.jpg",
|
| 6 |
+
"caption": "test/stock_unstock_fridge/1 / frame 201 · Vision Pro RGB · Apple EgoDex · 来源 CC-BY-NC-ND 4.0 · 复用已有研究对照画面",
|
| 7 |
+
"source": "RGB + 官方 ARKit 3D 骨架投影(估计标签)(团队图册 2026-10-22)"
|
| 8 |
+
},
|
| 9 |
+
{
|
| 10 |
+
"rgb": "media/egodex/team_egodex_1_rgb.jpg",
|
| 11 |
+
"gt": "media/egodex/team_egodex_1_gt.jpg",
|
| 12 |
+
"caption": "test/stock_unstock_fridge/1 / frame 321 · Vision Pro RGB · Apple EgoDex · 来源 CC-BY-NC-ND 4.0 · 复用已有研究对照画面",
|
| 13 |
+
"source": "RGB + 官方 ARKit 3D 骨架投影(估计标签)(团队图册 2026-10-22)"
|
| 14 |
+
},
|
| 15 |
+
{
|
| 16 |
+
"rgb": "media/egodex/team_egodex_2_rgb.jpg",
|
| 17 |
+
"gt": "media/egodex/team_egodex_2_gt.jpg",
|
| 18 |
+
"caption": "test/braid_unbraid/3 / frame 413 · Vision Pro RGB · Apple EgoDex · 来源 CC-BY-NC-ND 4.0 · 复用已有研究对照画面",
|
| 19 |
+
"source": "RGB + 官方 ARKit 3D 骨架投影(估计标签)(团队图册 2026-10-22)"
|
| 20 |
+
},
|
| 21 |
+
{
|
| 22 |
+
"rgb": "media/egodex/team_egodex_3_rgb.jpg",
|
| 23 |
+
"gt": "media/egodex/team_egodex_3_gt.jpg",
|
| 24 |
+
"caption": "test/braid_unbraid/3 / frame 533 · Vision Pro RGB · Apple EgoDex · 来源 CC-BY-NC-ND 4.0 · 复用已有研究对照画面",
|
| 25 |
+
"source": "RGB + 官方 ARKit 3D 骨架投影(估计标签)(团队图册 2026-10-22)"
|
| 26 |
+
}
|
| 27 |
+
],
|
| 28 |
+
"egoemg": [
|
| 29 |
+
{
|
| 30 |
+
"rgb": "media/egoemg/team_egoemg_0_rgb.jpg",
|
| 31 |
+
"gt": "media/egoemg/team_egoemg_0_gt.jpg",
|
| 32 |
+
"caption": "episode_000028 · frame 600 · 10.00 s · 头戴 GoPro · 60 FPS · CC-BY-NC-4.0(论文 A.3);作者公开旧版镜像;本页作抽帧、缩放和 MANO 叠加",
|
| 33 |
+
"source": "RGB + 光捕重建 MANO(团队图册 2026-10-22)"
|
| 34 |
+
},
|
| 35 |
+
{
|
| 36 |
+
"rgb": "media/egoemg/team_egoemg_1_rgb.jpg",
|
| 37 |
+
"gt": "media/egoemg/team_egoemg_1_gt.jpg",
|
| 38 |
+
"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 叠加",
|
| 39 |
+
"source": "RGB + 光捕重建 MANO(团队图册 2026-10-22)"
|
| 40 |
+
},
|
| 41 |
+
{
|
| 42 |
+
"rgb": "media/egoemg/team_egoemg_2_rgb.jpg",
|
| 43 |
+
"gt": "media/egoemg/team_egoemg_2_gt.jpg",
|
| 44 |
+
"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 叠加",
|
| 45 |
+
"source": "RGB + 光捕重建 MANO(团队图册 2026-10-22)"
|
| 46 |
+
},
|
| 47 |
+
{
|
| 48 |
+
"rgb": "media/egoemg/team_egoemg_3_rgb.jpg",
|
| 49 |
+
"gt": "media/egoemg/team_egoemg_3_gt.jpg",
|
| 50 |
+
"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 叠加",
|
| 51 |
+
"source": "RGB + 光捕重建 MANO(团队图册 2026-10-22)"
|
| 52 |
+
}
|
| 53 |
+
],
|
| 54 |
+
"egopressure": [
|
| 55 |
+
{
|
| 56 |
+
"rgb": "media/egopressure/team_egopressure_0_rgb.jpg",
|
| 57 |
+
"gt": "media/egopressure/team_egopressure_0_gt.jpg",
|
| 58 |
+
"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.;仅渲染图",
|
| 59 |
+
"source": "RGB + 官方拟合 MANO 网格(团队图册 2026-10-22)"
|
| 60 |
+
},
|
| 61 |
+
{
|
| 62 |
+
"rgb": "media/egopressure/team_egopressure_1_rgb.jpg",
|
| 63 |
+
"gt": "media/egopressure/team_egopressure_1_gt.jpg",
|
| 64 |
+
"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.;仅渲染图",
|
| 65 |
+
"source": "RGB + 官方拟合 MANO 网格(团队图册 2026-10-22)"
|
| 66 |
+
},
|
| 67 |
+
{
|
| 68 |
+
"rgb": "media/egopressure/team_egopressure_2_rgb.jpg",
|
| 69 |
+
"gt": "media/egopressure/team_egopressure_2_gt.jpg",
|
| 70 |
+
"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.;仅渲染图",
|
| 71 |
+
"source": "RGB + 官方拟合 MANO 网格(团队图册 2026-10-22)"
|
| 72 |
+
},
|
| 73 |
+
{
|
| 74 |
+
"rgb": "media/egopressure/team_egopressure_3_rgb.jpg",
|
| 75 |
+
"gt": "media/egopressure/team_egopressure_3_gt.jpg",
|
| 76 |
+
"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.;仅渲染图",
|
| 77 |
+
"source": "RGB + 官方拟合 MANO 网格(团队图册 2026-10-22)"
|
| 78 |
+
}
|
| 79 |
+
],
|
| 80 |
+
"egoverse": [
|
| 81 |
+
{
|
| 82 |
+
"rgb": "media/egoverse/team_egoverse_0_rgb.jpg",
|
| 83 |
+
"gt": "media/egoverse/team_egoverse_0_gt.jpg",
|
| 84 |
+
"caption": "2025-09-20-18-44-29-000000 / frame 60 · Aria · front_1 · CC BY-SA 4.0 · RL2 / EgoVerse",
|
| 85 |
+
"source": "RGB + 官方 Aria 3D 关键点投影(估计标签)(团队图册 2026-10-22)"
|
| 86 |
+
},
|
| 87 |
+
{
|
| 88 |
+
"rgb": "media/egoverse/team_egoverse_1_rgb.jpg",
|
| 89 |
+
"gt": "media/egoverse/team_egoverse_1_gt.jpg",
|
| 90 |
+
"caption": "2025-09-20-18-44-29-000000 / frame 150 · Aria · front_1 · CC BY-SA 4.0 · RL2 / EgoVerse",
|
| 91 |
+
"source": "RGB + 官方 Aria 3D 关键点投影(估计标签)(团队图册 2026-10-22)"
|
| 92 |
+
},
|
| 93 |
+
{
|
| 94 |
+
"rgb": "media/egoverse/team_egoverse_2_rgb.jpg",
|
| 95 |
+
"gt": "media/egoverse/team_egoverse_2_gt.jpg",
|
| 96 |
+
"caption": "2025-09-20-18-44-29-000000 / frame 300 · Aria · front_1 · CC BY-SA 4.0 · RL2 / EgoVerse",
|
| 97 |
+
"source": "RGB + 官方 Aria 3D 关键点投影(估计标签)(团队图册 2026-10-22)"
|
| 98 |
+
},
|
| 99 |
+
{
|
| 100 |
+
"rgb": "media/egoverse/team_egoverse_3_rgb.jpg",
|
| 101 |
+
"gt": "media/egoverse/team_egoverse_3_gt.jpg",
|
| 102 |
+
"caption": "2025-09-20-18-44-29-000000 / frame 600 · Aria · front_1 · CC BY-SA 4.0 · RL2 / EgoVerse",
|
| 103 |
+
"source": "RGB + 官方 Aria 3D 关键点投影(估计标签)(团队图册 2026-10-22)"
|
| 104 |
+
}
|
| 105 |
+
],
|
| 106 |
+
"hocap": [
|
| 107 |
+
{
|
| 108 |
+
"rgb": "media/hocap/team_hocap_0_rgb.jpg",
|
| 109 |
+
"gt": "media/hocap/team_hocap_0_gt.jpg",
|
| 110 |
+
"caption": "subject_7-20231022_192832 · frame 45 · HoloLens 第一视角 RGB · CC-BY-4.0;署名 Jikai Wang 等;已抽帧并叠加",
|
| 111 |
+
"source": "RGB + 官方 MANO 拟合标注(团队图册 2026-10-22)"
|
| 112 |
+
},
|
| 113 |
+
{
|
| 114 |
+
"rgb": "media/hocap/team_hocap_1_rgb.jpg",
|
| 115 |
+
"gt": "media/hocap/team_hocap_1_gt.jpg",
|
| 116 |
+
"caption": "subject_7-20231022_192832 · frame 175 · HoloLens 第一视角 RGB · CC-BY-4.0;署名 Jikai Wang 等;已抽帧并叠加",
|
| 117 |
+
"source": "RGB + 官方 MANO 拟合标注(团队图册 2026-10-22)"
|
| 118 |
+
},
|
| 119 |
+
{
|
| 120 |
+
"rgb": "media/hocap/team_hocap_2_rgb.jpg",
|
| 121 |
+
"gt": "media/hocap/team_hocap_2_gt.jpg",
|
| 122 |
+
"caption": "subject_7-20231022_192832 · frame 240 · HoloLens 第一视角 RGB · CC-BY-4.0;署名 Jikai Wang 等;已抽帧并叠加",
|
| 123 |
+
"source": "RGB + 官方 MANO 拟合标注(团队图册 2026-10-22)"
|
| 124 |
+
},
|
| 125 |
+
{
|
| 126 |
+
"rgb": "media/hocap/team_hocap_3_rgb.jpg",
|
| 127 |
+
"gt": "media/hocap/team_hocap_3_gt.jpg",
|
| 128 |
+
"caption": "subject_7-20231022_192832 · frame 370 · HoloLens 第一视角 RGB · CC-BY-4.0;署名 Jikai Wang 等;已抽帧并叠加",
|
| 129 |
+
"source": "RGB + 官方 MANO 拟合标注(团队图册 2026-10-22)"
|
| 130 |
+
}
|
| 131 |
+
],
|
| 132 |
+
"interhand": [
|
| 133 |
+
{
|
| 134 |
+
"rgb": "media/interhand/interhand_test_C1_f27268_right_cam400375_rgb.jpg",
|
| 135 |
+
"gt": "media/interhand/interhand_test_C1_f27268_right_cam400375_gt.jpg",
|
| 136 |
+
"caption": "ROM07_Rt_Finger_Occlusions · 帧 27268 · 右手 · test",
|
| 137 |
+
"source": "MANO(团队图册 2026-10-13)"
|
| 138 |
+
},
|
| 139 |
+
{
|
| 140 |
+
"rgb": "media/interhand/interhand_test_C1_f27502_right_cam400375_rgb.jpg",
|
| 141 |
+
"gt": "media/interhand/interhand_test_C1_f27502_right_cam400375_gt.jpg",
|
| 142 |
+
"caption": "ROM07_Rt_Finger_Occlusions · 帧 27502 · 右手 · test",
|
| 143 |
+
"source": "MANO(团队图册 2026-10-13)"
|
| 144 |
+
},
|
| 145 |
+
{
|
| 146 |
+
"rgb": "media/interhand/interhand_test_C1_f28108_right_cam400285_rgb.jpg",
|
| 147 |
+
"gt": "media/interhand/interhand_test_C1_f28108_right_cam400285_gt.jpg",
|
| 148 |
+
"caption": "ROM07_Rt_Finger_Occlusions · 帧 28108 · 右手 · test",
|
| 149 |
+
"source": "MANO(团队图册 2026-10-13)"
|
| 150 |
+
},
|
| 151 |
+
{
|
| 152 |
+
"rgb": "media/interhand/interhand_test_C1_f27376_right_cam400285_rgb.jpg",
|
| 153 |
+
"gt": "media/interhand/interhand_test_C1_f27376_right_cam400285_gt.jpg",
|
| 154 |
+
"caption": "ROM07_Rt_Finger_Occlusions · 帧 27376 · 右手 · test",
|
| 155 |
+
"source": "MANO(团队图册 2026-10-13)"
|
| 156 |
+
}
|
| 157 |
+
],
|
| 158 |
+
"mpiinzsl": [
|
| 159 |
+
{
|
| 160 |
+
"rgb": "media/mpiinzsl/mpiinzsl_025270786_01_l_native2d_rgb.jpg",
|
| 161 |
+
"gt": "media/mpiinzsl/mpiinzsl_025270786_01_l_native2d_gt.jpg",
|
| 162 |
+
"caption": "静态图像 · 帧 025270786.jpg · 左手 · manual_train",
|
| 163 |
+
"source": "2D(团队图册 2026-10-13)"
|
| 164 |
+
},
|
| 165 |
+
{
|
| 166 |
+
"rgb": "media/mpiinzsl/mpiinzsl_047704994_01_r_native2d_rgb.jpg",
|
| 167 |
+
"gt": "media/mpiinzsl/mpiinzsl_047704994_01_r_native2d_gt.jpg",
|
| 168 |
+
"caption": "静态图像 · 帧 047704994.jpg · 右手 · manual_train",
|
| 169 |
+
"source": "2D(团队图册 2026-10-13)"
|
| 170 |
+
},
|
| 171 |
+
{
|
| 172 |
+
"rgb": "media/mpiinzsl/mpiinzsl_Ricki_unit_8_flv_000040_l_native2d_rgb.jpg",
|
| 173 |
+
"gt": "media/mpiinzsl/mpiinzsl_Ricki_unit_8_flv_000040_l_native2d_gt.jpg",
|
| 174 |
+
"caption": "静态图像 · 帧 Ricki_unit_8.flv_000040 · 左手 · manual_train",
|
| 175 |
+
"source": "2D(团队图册 2026-10-13)"
|
| 176 |
+
},
|
| 177 |
+
{
|
| 178 |
+
"rgb": "media/mpiinzsl/mpiinzsl_Jackie_unit_10_flv_000118_r_native2d_rgb.jpg",
|
| 179 |
+
"gt": "media/mpiinzsl/mpiinzsl_Jackie_unit_10_flv_000118_r_native2d_gt.jpg",
|
| 180 |
+
"caption": "静态图像 · 帧 Jackie_unit_10.flv_000118 · 右手 · manual_train",
|
| 181 |
+
"source": "2D(团队图册 2026-10-13)"
|
| 182 |
+
}
|
| 183 |
+
],
|
| 184 |
+
"openaoe": [
|
| 185 |
+
{
|
| 186 |
+
"rgb": "media/openaoe/team_openaoe_0_rgb.jpg",
|
| 187 |
+
"gt": "media/openaoe/team_openaoe_0_gt.jpg",
|
| 188 |
+
"caption": "aoe_20260131_193028_p000 · frame 400 · 第一视角 RGB(官方去畸变) · Open-AoE Dataset License;仅发布抽帧与叠加图",
|
| 189 |
+
"source": "RGB + 官方 MANO 拟合标注(团队图册 2026-10-22)"
|
| 190 |
+
},
|
| 191 |
+
{
|
| 192 |
+
"rgb": "media/openaoe/team_openaoe_1_rgb.jpg",
|
| 193 |
+
"gt": "media/openaoe/team_openaoe_1_gt.jpg",
|
| 194 |
+
"caption": "aoe_20260131_193028_p000 · frame 1800 · 第一视角 RGB(官方去畸变) · Open-AoE Dataset License;仅发布抽帧与叠加图",
|
| 195 |
+
"source": "RGB + 官方 MANO 拟合标注(团队图册 2026-10-22)"
|
| 196 |
+
},
|
| 197 |
+
{
|
| 198 |
+
"rgb": "media/openaoe/team_openaoe_2_rgb.jpg",
|
| 199 |
+
"gt": "media/openaoe/team_openaoe_2_gt.jpg",
|
| 200 |
+
"caption": "aoe_20260131_193028_p000 · frame 2600 · 第一视角 RGB(官方去畸变) · Open-AoE Dataset License;仅发布抽帧与叠加图",
|
| 201 |
+
"source": "RGB + 官方 MANO 拟合标注(团队图册 2026-10-22)"
|
| 202 |
+
},
|
| 203 |
+
{
|
| 204 |
+
"rgb": "media/openaoe/team_openaoe_3_rgb.jpg",
|
| 205 |
+
"gt": "media/openaoe/team_openaoe_3_gt.jpg",
|
| 206 |
+
"caption": "aoe_20260131_193028_p000 · frame 4300 · 第一视角 RGB(官方去畸变) · Open-AoE Dataset License;仅发布抽帧与叠加图",
|
| 207 |
+
"source": "RGB + 官方 MANO 拟合标注(团队图册 2026-10-22)"
|
| 208 |
+
}
|
| 209 |
+
],
|
| 210 |
+
"show3d": [
|
| 211 |
+
{
|
| 212 |
+
"rgb": "media/show3d/team_show3d_0_rgb.jpg",
|
| 213 |
+
"gt": "media/show3d/team_show3d_0_gt.jpg",
|
| 214 |
+
"caption": "ASC023/aria_inspecting_f5e9 · frame 100 · headset0 · CC-BY-NC-4.0;缩放/裁出对应相机",
|
| 215 |
+
"source": "原图 + 官方 MANO mesh(团队图册 2026-10-22)"
|
| 216 |
+
},
|
| 217 |
+
{
|
| 218 |
+
"rgb": "media/show3d/team_show3d_1_rgb.jpg",
|
| 219 |
+
"gt": "media/show3d/team_show3d_1_gt.jpg",
|
| 220 |
+
"caption": "LSU826/cancoke_opening_d68c · frame 1492 · headset0 · 单色 ego · CC-BY-NC-4.0;Meta SHOW3D;裁出对应相机、缩放",
|
| 221 |
+
"source": "原图 + 官方 MANO mesh(团队图册 2026-10-22)"
|
| 222 |
+
},
|
| 223 |
+
{
|
| 224 |
+
"rgb": "media/show3d/team_show3d_2_rgb.jpg",
|
| 225 |
+
"gt": "media/show3d/team_show3d_2_gt.jpg",
|
| 226 |
+
"caption": "HLU829/keyboard2_clean-keyboard_1d3c · frame 2088 · headset1 · 单色 ego · CC-BY-NC-4.0;Meta SHOW3D;裁出对应相机、缩放",
|
| 227 |
+
"source": "原图 + 官方 MANO mesh(团队图册 2026-10-22)"
|
| 228 |
+
},
|
| 229 |
+
{
|
| 230 |
+
"rgb": "media/show3d/team_show3d_3_rgb.jpg",
|
| 231 |
+
"gt": "media/show3d/team_show3d_3_gt.jpg",
|
| 232 |
+
"caption": "PRI519/balandabowl_covering-uncovering_1178 · frame 2386 · headset1 · 单色 ego · CC-BY-NC-4.0;Meta SHOW3D;裁出对应相机、缩放",
|
| 233 |
+
"source": "原图 + 官方 MANO mesh(团队图册 2026-10-22)"
|
| 234 |
+
}
|
| 235 |
+
],
|
| 236 |
+
"taco": [
|
| 237 |
+
{
|
| 238 |
+
"rgb": "media/taco/team_taco_0_rgb.jpg",
|
| 239 |
+
"gt": "media/taco/team_taco_0_gt.jpg",
|
| 240 |
+
"caption": "(brush, brush, box) · 20230930_038 · frame 26 · 头戴 ego RGB · CC-BY-4.0;署名 Yun Liu 等;已抽帧并叠加",
|
| 241 |
+
"source": "RGB + 官方 MANO 拟合标注(团队图册 2026-10-22)"
|
| 242 |
+
},
|
| 243 |
+
{
|
| 244 |
+
"rgb": "media/taco/team_taco_1_rgb.jpg",
|
| 245 |
+
"gt": "media/taco/team_taco_1_gt.jpg",
|
| 246 |
+
"caption": "(brush, brush, box) · 20230930_038 · frame 106 · 头戴 ego RGB · CC-BY-4.0;署名 Yun Liu 等;已抽帧并叠加",
|
| 247 |
+
"source": "RGB + 官方 MANO 拟合标注(团队图册 2026-10-22)"
|
| 248 |
+
},
|
| 249 |
+
{
|
| 250 |
+
"rgb": "media/taco/team_taco_2_rgb.jpg",
|
| 251 |
+
"gt": "media/taco/team_taco_2_gt.jpg",
|
| 252 |
+
"caption": "(stir, spoon, bowl) · 20231104_190 · frame 26 · 头戴 ego RGB · CC-BY-4.0;署名 Yun Liu 等;已抽帧并叠加",
|
| 253 |
+
"source": "RGB + 官方 MANO 拟合标注(团队图册 2026-10-22)"
|
| 254 |
+
},
|
| 255 |
+
{
|
| 256 |
+
"rgb": "media/taco/team_taco_3_rgb.jpg",
|
| 257 |
+
"gt": "media/taco/team_taco_3_gt.jpg",
|
| 258 |
+
"caption": "(stir, spoon, bowl) · 20231104_190 · frame 105 · 头戴 ego RGB · CC-BY-4.0;署名 Yun Liu 等;已抽帧并叠加",
|
| 259 |
+
"source": "RGB + 官方 MANO 拟合标注(团队图册 2026-10-22)"
|
| 260 |
+
}
|
| 261 |
+
],
|
| 262 |
+
"xperience": [
|
| 263 |
+
{
|
| 264 |
+
"rgb": "media/xperience/team_xperience_0_rgb.jpg",
|
| 265 |
+
"gt": "media/xperience/team_xperience_0_gt.jpg",
|
| 266 |
+
"caption": "coffee sample · frame 500 · stereo_left · CC-BY-NC-4.0;MANO 解码/投影",
|
| 267 |
+
"source": "RGB + 官方 MANO mesh(团队图册 2026-10-22)"
|
| 268 |
+
},
|
| 269 |
+
{
|
| 270 |
+
"rgb": "media/xperience/team_xperience_1_rgb.jpg",
|
| 271 |
+
"gt": "media/xperience/team_xperience_1_gt.jpg",
|
| 272 |
+
"caption": "coffee sample · frame 1500 · stereo_left · CC-BY-NC-4.0;MANO 解码/投影",
|
| 273 |
+
"source": "RGB + 官方 MANO mesh(团队图册 2026-10-22)"
|
| 274 |
+
},
|
| 275 |
+
{
|
| 276 |
+
"rgb": "media/xperience/team_xperience_2_rgb.jpg",
|
| 277 |
+
"gt": "media/xperience/team_xperience_2_gt.jpg",
|
| 278 |
+
"caption": "coffee sample · frame 3000 · stereo_left · CC-BY-NC-4.0;MANO 解码/投影",
|
| 279 |
+
"source": "RGB + 官方 MANO mesh(团队图册 2026-10-22)"
|
| 280 |
+
},
|
| 281 |
+
{
|
| 282 |
+
"rgb": "media/xperience/team_xperience_3_rgb.jpg",
|
| 283 |
+
"gt": "media/xperience/team_xperience_3_gt.jpg",
|
| 284 |
+
"caption": "coffee sample · frame 4500 · stereo_left · CC-BY-NC-4.0;MANO 解码/投影",
|
| 285 |
+
"source": "RGB + 官方 MANO mesh(团队图册 2026-10-22)"
|
| 286 |
+
}
|
| 287 |
+
],
|
| 288 |
+
"arctic": [
|
| 289 |
+
{
|
| 290 |
+
"rgb": "media/arctic/a213dd95256ccccad7bc_rgb.jpg",
|
| 291 |
+
"gt": "media/arctic/a213dd95256ccccad7bc_gt.jpg",
|
| 292 |
+
"caption": "s02/ketchup_use_02 · 帧 212 · 左手 · train",
|
| 293 |
+
"source": "MANO(团队图册 2026-10-13)"
|
| 294 |
+
},
|
| 295 |
+
{
|
| 296 |
+
"rgb": "media/arctic/6057bab38e74308c02be_rgb.jpg",
|
| 297 |
+
"gt": "media/arctic/6057bab38e74308c02be_gt.jpg",
|
| 298 |
+
"caption": "s06/ketchup_use_01 · 帧 511 · 右手 · train",
|
| 299 |
+
"source": "MANO(团队图册 2026-10-13)"
|
| 300 |
+
},
|
| 301 |
+
{
|
| 302 |
+
"rgb": "media/arctic/c4d53a1b79549c84e96d_rgb.jpg",
|
| 303 |
+
"gt": "media/arctic/c4d53a1b79549c84e96d_gt.jpg",
|
| 304 |
+
"caption": "s08/ketchup_use_01 · 帧 451 · 右手 · train",
|
| 305 |
+
"source": "MANO(团队图册 2026-10-13)"
|
| 306 |
+
},
|
| 307 |
+
{
|
| 308 |
+
"rgb": "media/arctic/e68425daa275c68f6f5d_rgb.jpg",
|
| 309 |
+
"gt": "media/arctic/e68425daa275c68f6f5d_gt.jpg",
|
| 310 |
+
"caption": "s10/ketchup_use_01 · 帧 451 · 右手 · train",
|
| 311 |
+
"source": "MANO(团队图册 2026-10-13)"
|
| 312 |
+
}
|
| 313 |
+
],
|
| 314 |
+
"cocowb": [
|
| 315 |
+
{
|
| 316 |
+
"rgb": "media/cocowb/f59aa0ba82e64839e596_rgb.jpg",
|
| 317 |
+
"gt": "media/cocowb/f59aa0ba82e64839e596_gt.jpg",
|
| 318 |
+
"caption": "COCO validation · 帧 785 · 右手 · official validation example; not WiLoR processed train members; excluded from training candidates",
|
| 319 |
+
"source": "2D(团队图册 2026-10-13)"
|
| 320 |
+
},
|
| 321 |
+
{
|
| 322 |
+
"rgb": "media/cocowb/9fcab59ec353483a0635_rgb.jpg",
|
| 323 |
+
"gt": "media/cocowb/9fcab59ec353483a0635_gt.jpg",
|
| 324 |
+
"caption": "COCO validation · 帧 1000 · 左手 · official validation example; not WiLoR processed train members; excluded from training candidates",
|
| 325 |
+
"source": "2D(团队图册 2026-10-13)"
|
| 326 |
+
},
|
| 327 |
+
{
|
| 328 |
+
"rgb": "media/cocowb/780684ce08a2af76ddc4_rgb.jpg",
|
| 329 |
+
"gt": "media/cocowb/780684ce08a2af76ddc4_gt.jpg",
|
| 330 |
+
"caption": "COCO validation · 帧 196141 · 左手 · official validation example; not WiLoR processed train members; excluded from training candidates",
|
| 331 |
+
"source": "2D(团队图册 2026-10-13)"
|
| 332 |
+
},
|
| 333 |
+
{
|
| 334 |
+
"rgb": "media/cocowb/7e7716c112039185cc5e_rgb.jpg",
|
| 335 |
+
"gt": "media/cocowb/7e7716c112039185cc5e_gt.jpg",
|
| 336 |
+
"caption": "COCO validation · 帧 197388 · 左手 · official validation example; not WiLoR processed train members; excluded from training candidates",
|
| 337 |
+
"source": "2D(团队图册 2026-10-13)"
|
| 338 |
+
}
|
| 339 |
+
],
|
| 340 |
+
"dexycb": [
|
| 341 |
+
{
|
| 342 |
+
"rgb": "media/dexycb/a128fbe7b45844ebb4e8_rgb.jpg",
|
| 343 |
+
"gt": "media/dexycb/a128fbe7b45844ebb4e8_gt.jpg",
|
| 344 |
+
"caption": "20200709-subject-01/20200709_141841 · 帧 36 · 右手 · official_s0_train_proxy",
|
| 345 |
+
"source": "MANO(团队图册 2026-10-13)"
|
| 346 |
+
},
|
| 347 |
+
{
|
| 348 |
+
"rgb": "media/dexycb/8ffc14f49fff4b06cc73_rgb.jpg",
|
| 349 |
+
"gt": "media/dexycb/8ffc14f49fff4b06cc73_gt.jpg",
|
| 350 |
+
"caption": "20200820-subject-03/20200820_144644 · 帧 62 · 左手 · official_s0_train_proxy",
|
| 351 |
+
"source": "MANO(团队图册 2026-10-13)"
|
| 352 |
+
},
|
| 353 |
+
{
|
| 354 |
+
"rgb": "media/dexycb/6df9d4ead4d92a187a28_rgb.jpg",
|
| 355 |
+
"gt": "media/dexycb/6df9d4ead4d92a187a28_gt.jpg",
|
| 356 |
+
"caption": "20200903-subject-04/20200903_105306 · 帧 60 · 左手 · official_s0_train_proxy",
|
| 357 |
+
"source": "MANO(团队图册 2026-10-13)"
|
| 358 |
+
},
|
| 359 |
+
{
|
| 360 |
+
"rgb": "media/dexycb/7e32dcf09cb0a2254256_rgb.jpg",
|
| 361 |
+
"gt": "media/dexycb/7e32dcf09cb0a2254256_gt.jpg",
|
| 362 |
+
"caption": "20200928-subject-07/20200928_155118 · 帧 62 · 左手 · official_s0_train_proxy",
|
| 363 |
+
"source": "MANO(团队图册 2026-10-13)"
|
| 364 |
+
}
|
| 365 |
+
],
|
| 366 |
+
"egorenderer": [
|
| 367 |
+
{
|
| 368 |
+
"rgb": "media/egorenderer/egorenderer_v005_s7_camera_browse_1_110_rgb.jpg",
|
| 369 |
+
"gt": "media/egorenderer/egorenderer_v005_s7_camera_browse_1_110_gt.jpg",
|
| 370 |
+
"caption": "s7/camera_browse_1 · 帧 110 · 已交付合成数据",
|
| 371 |
+
"source": "MANO 拟合(团队图册 2026-10-13)"
|
| 372 |
+
},
|
| 373 |
+
{
|
| 374 |
+
"rgb": "media/egorenderer/egorenderer_v005_s1_mug_drink_1_233_rgb.jpg",
|
| 375 |
+
"gt": "media/egorenderer/egorenderer_v005_s1_mug_drink_1_233_gt.jpg",
|
| 376 |
+
"caption": "s1/mug_drink_1 · 帧 233 · 已交付合成数据",
|
| 377 |
+
"source": "MANO 拟合(团队图册 2026-10-13)"
|
| 378 |
+
},
|
| 379 |
+
{
|
| 380 |
+
"rgb": "media/egorenderer/egorenderer_v005_s6_banana_peel_1_104_rgb.jpg",
|
| 381 |
+
"gt": "media/egorenderer/egorenderer_v005_s6_banana_peel_1_104_gt.jpg",
|
| 382 |
+
"caption": "s6/banana_peel_1 · 帧 104 · 已交付合成数据",
|
| 383 |
+
"source": "MANO 拟合(团队图册 2026-10-13)"
|
| 384 |
+
},
|
| 385 |
+
{
|
| 386 |
+
"rgb": "media/egorenderer/egorenderer_v005_s2_banana_peel_1_197_rgb.jpg",
|
| 387 |
+
"gt": "media/egorenderer/egorenderer_v005_s2_banana_peel_1_197_gt.jpg",
|
| 388 |
+
"caption": "s2/banana_peel_1 · 帧 197 · 已交付合成数据",
|
| 389 |
+
"source": "MANO 拟合(团队图册 2026-10-13)"
|
| 390 |
+
}
|
| 391 |
+
],
|
| 392 |
+
"freihand": [
|
| 393 |
+
{
|
| 394 |
+
"rgb": "media/freihand/57c00fd54a204e690012_rgb.jpg",
|
| 395 |
+
"gt": "media/freihand/57c00fd54a204e690012_gt.jpg",
|
| 396 |
+
"caption": "image_6909 · 帧 6909 · 右手 · official_v2_training_proxy",
|
| 397 |
+
"source": "MANO(团队图册 2026-10-13)"
|
| 398 |
+
},
|
| 399 |
+
{
|
| 400 |
+
"rgb": "media/freihand/f66e6163a5a36bdd5ece_rgb.jpg",
|
| 401 |
+
"gt": "media/freihand/f66e6163a5a36bdd5ece_gt.jpg",
|
| 402 |
+
"caption": "image_17057 · 帧 17057 · 右手 · official_v2_training_proxy",
|
| 403 |
+
"source": "MANO(团队图册 2026-10-13)"
|
| 404 |
+
},
|
| 405 |
+
{
|
| 406 |
+
"rgb": "media/freihand/0172018ef83c148a9a1c_rgb.jpg",
|
| 407 |
+
"gt": "media/freihand/0172018ef83c148a9a1c_gt.jpg",
|
| 408 |
+
"caption": "image_8002 · 帧 8002 · 右手 · official_v2_training_proxy",
|
| 409 |
+
"source": "MANO(团队图册 2026-10-13)"
|
| 410 |
+
},
|
| 411 |
+
{
|
| 412 |
+
"rgb": "media/freihand/5d4682d7be033bd1ed70_rgb.jpg",
|
| 413 |
+
"gt": "media/freihand/5d4682d7be033bd1ed70_gt.jpg",
|
| 414 |
+
"caption": "image_8614 · 帧 8614 · 右手 · official_v2_training_proxy",
|
| 415 |
+
"source": "MANO(团队图册 2026-10-13)"
|
| 416 |
+
}
|
| 417 |
+
],
|
| 418 |
+
"genhumanego": [
|
| 419 |
+
{
|
| 420 |
+
"rgb": "media/genhumanego/team_gen-humanego_0_rgb.jpg",
|
| 421 |
+
"gt": "media/genhumanego/team_gen-humanego_0_gt.jpg",
|
| 422 |
+
"caption": "ee7adccdba994d8fbc1405d6e3f04edf · frame 30 · 1779872474945466000 ns · camera0 · CC-BY-SA-4.0;MANO 解码/投影/缩放",
|
| 423 |
+
"source": "RGB + 官方预测 MANO mesh(团队图册 2026-10-22)"
|
| 424 |
+
},
|
| 425 |
+
{
|
| 426 |
+
"rgb": "media/genhumanego/team_gen-humanego_1_rgb.jpg",
|
| 427 |
+
"gt": "media/genhumanego/team_gen-humanego_1_gt.jpg",
|
| 428 |
+
"caption": "ee7adccdba994d8fbc1405d6e3f04edf · frame 30 · 1779872474945456000 ns · camera2 · CC-BY-SA-4.0;MANO 解码/投影/缩放",
|
| 429 |
+
"source": "RGB + 官方预测 MANO mesh(团队图册 2026-10-22)"
|
| 430 |
+
},
|
| 431 |
+
{
|
| 432 |
+
"rgb": "media/genhumanego/team_gen-humanego_2_rgb.jpg",
|
| 433 |
+
"gt": "media/genhumanego/team_gen-humanego_2_gt.jpg",
|
| 434 |
+
"caption": "ee7adccdba994d8fbc1405d6e3f04edf · frame 150 · 1779872478945455000 ns · camera2 · CC-BY-SA-4.0;MANO 解码/投影/缩放",
|
| 435 |
+
"source": "RGB + 官方预测 MANO mesh(团队图册 2026-10-22)"
|
| 436 |
+
},
|
| 437 |
+
{
|
| 438 |
+
"rgb": "media/genhumanego/team_gen-humanego_3_rgb.jpg",
|
| 439 |
+
"gt": "media/genhumanego/team_gen-humanego_3_gt.jpg",
|
| 440 |
+
"caption": "ee7adccdba994d8fbc1405d6e3f04edf · frame 150 · 1779872478912150000 ns · camera4 · CC-BY-SA-4.0;MANO 解码/投影/缩放",
|
| 441 |
+
"source": "RGB + 官方预测 MANO mesh(团队图册 2026-10-22)"
|
| 442 |
+
}
|
| 443 |
+
],
|
| 444 |
+
"h2o": [
|
| 445 |
+
{
|
| 446 |
+
"rgb": "media/h2o/a11122e7dd03fe259404_rgb.jpg",
|
| 447 |
+
"gt": "media/h2o/a11122e7dd03fe259404_gt.jpg",
|
| 448 |
+
"caption": "subject1/h2/6/cam4 · 帧 159 · 右手 · train",
|
| 449 |
+
"source": "MANO(团队图册 2026-10-13)"
|
| 450 |
+
},
|
| 451 |
+
{
|
| 452 |
+
"rgb": "media/h2o/09a705df66acd8de1d4c_rgb.jpg",
|
| 453 |
+
"gt": "media/h2o/09a705df66acd8de1d4c_gt.jpg",
|
| 454 |
+
"caption": "subject1/o1/4/cam4 · 帧 138 · 右手 · train",
|
| 455 |
+
"source": "MANO(团队图册 2026-10-13)"
|
| 456 |
+
},
|
| 457 |
+
{
|
| 458 |
+
"rgb": "media/h2o/f7c2550200511fea07b1_rgb.jpg",
|
| 459 |
+
"gt": "media/h2o/f7c2550200511fea07b1_gt.jpg",
|
| 460 |
+
"caption": "subject1/o1/7/cam4 · 帧 688 · 右手 · train",
|
| 461 |
+
"source": "MANO(团队图册 2026-10-13)"
|
| 462 |
+
},
|
| 463 |
+
{
|
| 464 |
+
"rgb": "media/h2o/a2a8c1c9e2b969d45ef4_rgb.jpg",
|
| 465 |
+
"gt": "media/h2o/a2a8c1c9e2b969d45ef4_gt.jpg",
|
| 466 |
+
"caption": "subject1/o2/0/cam4 · 帧 30 · 左手 · train",
|
| 467 |
+
"source": "MANO(团队图册 2026-10-13)"
|
| 468 |
+
}
|
| 469 |
+
],
|
| 470 |
+
"h2o3d": [
|
| 471 |
+
{
|
| 472 |
+
"rgb": "media/h2o3d/h2o3d_train_MBC1_0104_rgb.jpg",
|
| 473 |
+
"gt": "media/h2o3d/h2o3d_train_MBC1_0104_gt.jpg",
|
| 474 |
+
"caption": "MBC1 · 帧 0104 · train",
|
| 475 |
+
"source": "MANO(团队图册 2026-10-13)"
|
| 476 |
+
},
|
| 477 |
+
{
|
| 478 |
+
"rgb": "media/h2o3d/h2o3d_train_SHM0_0179_rgb.jpg",
|
| 479 |
+
"gt": "media/h2o3d/h2o3d_train_SHM0_0179_gt.jpg",
|
| 480 |
+
"caption": "SHM0 · 帧 0179 · train",
|
| 481 |
+
"source": "MANO(团队图册 2026-10-13)"
|
| 482 |
+
},
|
| 483 |
+
{
|
| 484 |
+
"rgb": "media/h2o3d/h2o3d_train_SMB20_0218_rgb.jpg",
|
| 485 |
+
"gt": "media/h2o3d/h2o3d_train_SMB20_0218_gt.jpg",
|
| 486 |
+
"caption": "SMB20 · 帧 0218 · train",
|
| 487 |
+
"source": "MANO(团队图册 2026-10-13)"
|
| 488 |
+
},
|
| 489 |
+
{
|
| 490 |
+
"rgb": "media/h2o3d/h2o3d_train_SSPD0_0427_rgb.jpg",
|
| 491 |
+
"gt": "media/h2o3d/h2o3d_train_SSPD0_0427_gt.jpg",
|
| 492 |
+
"caption": "SSPD0 · 帧 0427 · train",
|
| 493 |
+
"source": "MANO(团队图册 2026-10-13)"
|
| 494 |
+
}
|
| 495 |
+
],
|
| 496 |
+
"halpe": [
|
| 497 |
+
{
|
| 498 |
+
"rgb": "media/halpe/halpe_val_398905_485625_left_native2d_rgb.jpg",
|
| 499 |
+
"gt": "media/halpe/halpe_val_398905_485625_left_native2d_gt.jpg",
|
| 500 |
+
"caption": "静态图像 · 帧 398905 · 左手 · validation",
|
| 501 |
+
"source": "2D(团队图册 2026-10-13)"
|
| 502 |
+
},
|
| 503 |
+
{
|
| 504 |
+
"rgb": "media/halpe/halpe_val_281032_458683_left_native2d_rgb.jpg",
|
| 505 |
+
"gt": "media/halpe/halpe_val_281032_458683_left_native2d_gt.jpg",
|
| 506 |
+
"caption": "静态图像 · 帧 281032 · 左手 · validation",
|
| 507 |
+
"source": "2D(团队图册 2026-10-13)"
|
| 508 |
+
},
|
| 509 |
+
{
|
| 510 |
+
"rgb": "media/halpe/halpe_val_465179_514707_right_native2d_rgb.jpg",
|
| 511 |
+
"gt": "media/halpe/halpe_val_465179_514707_right_native2d_gt.jpg",
|
| 512 |
+
"caption": "静态图像 · 帧 465179 · 右手 · validation",
|
| 513 |
+
"source": "2D(团队图册 2026-10-13)"
|
| 514 |
+
},
|
| 515 |
+
{
|
| 516 |
+
"rgb": "media/halpe/halpe_val_3156_477234_right_native2d_rgb.jpg",
|
| 517 |
+
"gt": "media/halpe/halpe_val_3156_477234_right_native2d_gt.jpg",
|
| 518 |
+
"caption": "静态图像 · 帧 3156 · 右手 · validation",
|
| 519 |
+
"source": "2D(团队图册 2026-10-13)"
|
| 520 |
+
}
|
| 521 |
+
],
|
| 522 |
+
"ho3d": [
|
| 523 |
+
{
|
| 524 |
+
"rgb": "media/ho3d/0d33dbb3cbe2379785a2_rgb.jpg",
|
| 525 |
+
"gt": "media/ho3d/0d33dbb3cbe2379785a2_gt.jpg",
|
| 526 |
+
"caption": "BB1 · 帧 572 · 右手 · v3_train_proxy",
|
| 527 |
+
"source": "MANO(团队图册 2026-10-13)"
|
| 528 |
+
},
|
| 529 |
+
{
|
| 530 |
+
"rgb": "media/ho3d/fa5f136813986a79dd61_rgb.jpg",
|
| 531 |
+
"gt": "media/ho3d/fa5f136813986a79dd61_gt.jpg",
|
| 532 |
+
"caption": "MC · 帧 0 · 右手 · v3_train_proxy",
|
| 533 |
+
"source": "MANO(团队图册 2026-10-13)"
|
| 534 |
+
},
|
| 535 |
+
{
|
| 536 |
+
"rgb": "media/ho3d/95d8470bf5dd56fde1c2_rgb.jpg",
|
| 537 |
+
"gt": "media/ho3d/95d8470bf5dd56fde1c2_gt.jpg",
|
| 538 |
+
"caption": "ND · 帧 703 · 右手 · v3_train_proxy",
|
| 539 |
+
"source": "MANO(团队图册 2026-10-13)"
|
| 540 |
+
},
|
| 541 |
+
{
|
| 542 |
+
"rgb": "media/ho3d/377560e17ccaf120f789_rgb.jpg",
|
| 543 |
+
"gt": "media/ho3d/377560e17ccaf120f789_gt.jpg",
|
| 544 |
+
"caption": "SMu · 帧 1264 · 右手 · v3_train_proxy",
|
| 545 |
+
"source": "MANO(团队图册 2026-10-13)"
|
| 546 |
+
}
|
| 547 |
+
],
|
| 548 |
+
"hot3d": [
|
| 549 |
+
{
|
| 550 |
+
"rgb": "media/hot3d/e240c578abc5d1f941da_rgb.jpg",
|
| 551 |
+
"gt": "media/hot3d/e240c578abc5d1f941da_gt.jpg",
|
| 552 |
+
"caption": "P0002_59a84a3a · 帧 3416 · 左手 · train",
|
| 553 |
+
"source": "MANO(团队图册 2026-10-13)"
|
| 554 |
+
},
|
| 555 |
+
{
|
| 556 |
+
"rgb": "media/hot3d/9984faeda44316bef1a4_rgb.jpg",
|
| 557 |
+
"gt": "media/hot3d/9984faeda44316bef1a4_gt.jpg",
|
| 558 |
+
"caption": "P0012_af3dab9a · 帧 3470 · 左手 · train",
|
| 559 |
+
"source": "MANO(团队图册 2026-10-13)"
|
| 560 |
+
},
|
| 561 |
+
{
|
| 562 |
+
"rgb": "media/hot3d/cff8bd8ba9c8484f34a8_rgb.jpg",
|
| 563 |
+
"gt": "media/hot3d/cff8bd8ba9c8484f34a8_gt.jpg",
|
| 564 |
+
"caption": "P0015_3f46732d · 帧 1705 · 左手 · train",
|
| 565 |
+
"source": "MANO(团队图册 2026-10-13)"
|
| 566 |
+
},
|
| 567 |
+
{
|
| 568 |
+
"rgb": "media/hot3d/b0bdc415670d0451624f_rgb.jpg",
|
| 569 |
+
"gt": "media/hot3d/b0bdc415670d0451624f_gt.jpg",
|
| 570 |
+
"caption": "P0015_53358a64 · 帧 3146 · 右手 · train",
|
| 571 |
+
"source": "MANO(团队图册 2026-10-13)"
|
| 572 |
+
}
|
| 573 |
+
],
|
| 574 |
+
"mtc": [
|
| 575 |
+
{
|
| 576 |
+
"rgb": "media/mtc/mtc_171204_pose2_f00023680_p4_right_0_rgb.jpg",
|
| 577 |
+
"gt": "media/mtc/mtc_171204_pose2_f00023680_p4_right_0_gt.jpg",
|
| 578 |
+
"caption": "171204_pose2 · 帧 23680 · 右手 · training_data",
|
| 579 |
+
"source": "3D → 2D(团队图册 2026-10-13)"
|
| 580 |
+
},
|
| 581 |
+
{
|
| 582 |
+
"rgb": "media/mtc/mtc_171204_pose2_f00023680_p4_right_6_rgb.jpg",
|
| 583 |
+
"gt": "media/mtc/mtc_171204_pose2_f00023680_p4_right_6_gt.jpg",
|
| 584 |
+
"caption": "171204_pose2 · 帧 23680 · 右手 · training_data",
|
| 585 |
+
"source": "3D → 2D(团队图册 2026-10-13)"
|
| 586 |
+
},
|
| 587 |
+
{
|
| 588 |
+
"rgb": "media/mtc/mtc_171204_pose2_f00028165_p5_right_3_rgb.jpg",
|
| 589 |
+
"gt": "media/mtc/mtc_171204_pose2_f00028165_p5_right_3_gt.jpg",
|
| 590 |
+
"caption": "171204_pose2 · 帧 28165 · 右手 · training_data",
|
| 591 |
+
"source": "3D → 2D(团队图册 2026-10-13)"
|
| 592 |
+
},
|
| 593 |
+
{
|
| 594 |
+
"rgb": "media/mtc/mtc_171204_pose2_f00028165_p5_right_12_rgb.jpg",
|
| 595 |
+
"gt": "media/mtc/mtc_171204_pose2_f00028165_p5_right_12_gt.jpg",
|
| 596 |
+
"caption": "171204_pose2 · 帧 28165 · 右手 · training_data",
|
| 597 |
+
"source": "3D → 2D(团队图册 2026-10-13)"
|
| 598 |
+
}
|
| 599 |
+
],
|
| 600 |
+
"reinterhand": [
|
| 601 |
+
{
|
| 602 |
+
"rgb": "media/reinterhand/reinter_train_c0_f175271_right_400503_rgb.jpg",
|
| 603 |
+
"gt": "media/reinterhand/reinter_train_c0_f175271_right_400503_gt.jpg",
|
| 604 |
+
"caption": "m--20210701--1058--0000000--pilot--relightablehandsy--participant0--two-hands · 帧 175271 · 右手 · train",
|
| 605 |
+
"source": "3D → 2D(团队图册 2026-10-13)"
|
| 606 |
+
},
|
| 607 |
+
{
|
| 608 |
+
"rgb": "media/reinterhand/reinter_train_c0_f202212_right_400503_rgb.jpg",
|
| 609 |
+
"gt": "media/reinterhand/reinter_train_c0_f202212_right_400503_gt.jpg",
|
| 610 |
+
"caption": "m--20210701--1058--0000000--pilot--relightablehandsy--participant0--two-hands · 帧 202212 · 右手 · train",
|
| 611 |
+
"source": "3D → 2D(团队图册 2026-10-13)"
|
| 612 |
+
},
|
| 613 |
+
{
|
| 614 |
+
"rgb": "media/reinterhand/reinter_train_c0_f292944_right_400503_rgb.jpg",
|
| 615 |
+
"gt": "media/reinterhand/reinter_train_c0_f292944_right_400503_gt.jpg",
|
| 616 |
+
"caption": "m--20210701--1058--0000000--pilot--relightablehandsy--participant0--two-hands · 帧 292944 · 右手 · train",
|
| 617 |
+
"source": "3D → 2D(团队图册 2026-10-13)"
|
| 618 |
+
},
|
| 619 |
+
{
|
| 620 |
+
"rgb": "media/reinterhand/reinter_train_c0_f303030_right_400503_rgb.jpg",
|
| 621 |
+
"gt": "media/reinterhand/reinter_train_c0_f303030_right_400503_gt.jpg",
|
| 622 |
+
"caption": "m--20210701--1058--0000000--pilot--relightablehandsy--participant0--two-hands · 帧 303030 · 右手 · train",
|
| 623 |
+
"source": "3D → 2D(团队图册 2026-10-13)"
|
| 624 |
+
}
|
| 625 |
+
],
|
| 626 |
+
"rhd": [
|
| 627 |
+
{
|
| 628 |
+
"rgb": "media/rhd/5807bcc820cac79abd07_rgb.jpg",
|
| 629 |
+
"gt": "media/rhd/5807bcc820cac79abd07_gt.jpg",
|
| 630 |
+
"caption": "image_30087 · 帧 30087 · 左手 · official_v1.1_training_proxy",
|
| 631 |
+
"source": "3D → 2D(团队图册 2026-10-13)"
|
| 632 |
+
},
|
| 633 |
+
{
|
| 634 |
+
"rgb": "media/rhd/0941a85c7723f23e66bc_rgb.jpg",
|
| 635 |
+
"gt": "media/rhd/0941a85c7723f23e66bc_gt.jpg",
|
| 636 |
+
"caption": "image_33342 · 帧 33342 · 右手 · official_v1.1_training_proxy",
|
| 637 |
+
"source": "3D → 2D(团队图册 2026-10-13)"
|
| 638 |
+
},
|
| 639 |
+
{
|
| 640 |
+
"rgb": "media/rhd/a8db512d6c52ae380d21_rgb.jpg",
|
| 641 |
+
"gt": "media/rhd/a8db512d6c52ae380d21_gt.jpg",
|
| 642 |
+
"caption": "image_13893 · 帧 13893 · 左手 · official_v1.1_training_proxy",
|
| 643 |
+
"source": "3D → 2D(团队图册 2026-10-13)"
|
| 644 |
+
},
|
| 645 |
+
{
|
| 646 |
+
"rgb": "media/rhd/14514fa31d01d7d4624b_rgb.jpg",
|
| 647 |
+
"gt": "media/rhd/14514fa31d01d7d4624b_gt.jpg",
|
| 648 |
+
"caption": "image_29917 · 帧 29917 · 左手 · official_v1.1_training_proxy",
|
| 649 |
+
"source": "3D → 2D(团队图册 2026-10-13)"
|
| 650 |
+
}
|
| 651 |
+
]
|
| 652 |
+
}
|
index.html
CHANGED
|
@@ -10,7 +10,7 @@
|
|
| 10 |
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
| 11 |
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500&family=Noto+Sans+SC:wght@400;500;700&family=Noto+Serif+SC:wght@600;700&display=swap">
|
| 12 |
<style>
|
| 13 |
-
/* 布局:顶部标签导航 + 单栏工作区;
|
| 14 |
:root {
|
| 15 |
--bg: #f4f6f8;
|
| 16 |
--surface: #ffffff;
|
|
@@ -18,7 +18,7 @@
|
|
| 18 |
--ink: #17212b;
|
| 19 |
--muted: #5a6573;
|
| 20 |
--line: #d9dfe6;
|
| 21 |
-
--accent: #a8560a; /* 反光 marker 的琥珀色
|
| 22 |
--accent-soft: #fbead7;
|
| 23 |
--link: #1d4f8f;
|
| 24 |
--t1: #0c3d5c; --t2: #1f6488; --t3: #4d8fb0; --t4: #8bbbd2; --t5: #c9dde8; --ty: #7a6aa8; --t0: #c3c9d1;
|
|
@@ -50,13 +50,15 @@ body::before { content: ""; position: fixed; inset: 0 0 auto; height: env(safe-a
|
|
| 50 |
a { color: var(--link); text-underline-offset: 2px; }
|
| 51 |
a:focus-visible, button:focus-visible, select:focus-visible, input:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
|
| 52 |
h1, h2, h3 { text-wrap: balance; margin: 0; }
|
| 53 |
-
h1 { font-family: var(--f-display); font-size: 1.
|
| 54 |
-
h2 { font-family: var(--f-display); font-size: 1.
|
| 55 |
-
h3 { font-size:
|
| 56 |
p { margin: 0; }
|
|
|
|
| 57 |
.mono { font-family: var(--f-mono); font-variant-numeric: tabular-nums; }
|
| 58 |
.muted { color: var(--muted); }
|
| 59 |
.small { font-size: 0.86rem; }
|
|
|
|
| 60 |
|
| 61 |
/* 顶栏 */
|
| 62 |
.top { position: sticky; top: env(safe-area-inset-top, 0px); z-index: 5; background: var(--surface); border-bottom: 1px solid var(--line); }
|
|
@@ -69,9 +71,12 @@ nav.tabs a { display: block; padding: 8px 12px 10px; color: var(--muted); text-d
|
|
| 69 |
nav.tabs a:hover { color: var(--ink); }
|
| 70 |
nav.tabs a[aria-current="page"] { color: var(--ink); border-bottom-color: var(--accent); }
|
| 71 |
|
| 72 |
-
main { max-width: 1240px; margin: 0 auto; padding-left: max(16px, env(safe-area-inset-left, 0px)); padding-right: max(16px, env(safe-area-inset-right, 0px)); padding-block: 28px 64px; display: grid; gap:
|
| 73 |
-
section.view { display: grid; gap:
|
| 74 |
-
.
|
|
|
|
|
|
|
|
|
|
| 75 |
.lead p { color: var(--muted); }
|
| 76 |
|
| 77 |
/* 标签 */
|
|
@@ -83,6 +88,7 @@ section.view { display: grid; gap: 24px; min-width: 0; }
|
|
| 83 |
.st-p2 { background: transparent; color: var(--ink); border: 1px dashed var(--accent); }
|
| 84 |
.st-own { background: var(--ink); color: var(--surface); font-weight: 700; }
|
| 85 |
.st-no { background: transparent; color: var(--muted); border-color: var(--line); text-decoration: line-through; }
|
|
|
|
| 86 |
.tier { display: inline-flex; align-items: center; justify-content: center; min-width: 2.4em; padding: 0 6px; border-radius: 4px; font-family: var(--f-mono); font-size: 0.78rem; font-weight: 500; line-height: 1.7; }
|
| 87 |
.tier-S1 { background: var(--t1); color: var(--t-on-dark); }
|
| 88 |
.tier-S2 { background: var(--t2); color: var(--t-on-dark); }
|
|
@@ -91,13 +97,15 @@ section.view { display: grid; gap: 24px; min-width: 0; }
|
|
| 91 |
.tier-S5 { background: var(--t5); color: var(--t-on-light); }
|
| 92 |
.tier-SY { background: var(--ty); color: var(--t-on-dark); }
|
| 93 |
.tier-- { background: var(--t0); color: var(--t-on-light); }
|
|
|
|
|
|
|
|
|
|
|
|
|
| 94 |
|
| 95 |
/* 总览 */
|
| 96 |
-
.stats { display: flex; flex-wrap: wrap; gap: 8px 18px; }
|
| 97 |
.stats div { display: flex; align-items: baseline; gap: 6px; }
|
| 98 |
-
.stats b { font-family: var(--f-mono); font-size: 1.
|
| 99 |
-
.legend { display: flex; flex-wrap: wrap; gap: 8px 16px; font-size: 0.84rem; color: var(--muted); }
|
| 100 |
-
.legend span { display: inline-flex; align-items: center; gap: 6px; }
|
| 101 |
.scroll-x { overflow-x: auto; min-width: 0; border: 1px solid var(--line); border-radius: var(--r); background: var(--surface); }
|
| 102 |
table.matrix { border-collapse: collapse; width: 100%; min-width: 980px; font-size: 0.86rem; }
|
| 103 |
.matrix th, .matrix td { border-bottom: 1px solid var(--line); border-right: 1px solid var(--line); padding: 8px; vertical-align: top; text-align: left; }
|
|
@@ -105,118 +113,129 @@ table.matrix { border-collapse: collapse; width: 100%; min-width: 980px; font-si
|
|
| 105 |
.matrix tbody tr:last-child > * { border-bottom: 0; }
|
| 106 |
.matrix thead th { background: var(--sunk); font-weight: 700; font-size: 0.82rem; }
|
| 107 |
.matrix thead th small { display: block; font-weight: 400; color: var(--muted); }
|
| 108 |
-
.matrix tbody th { width:
|
| 109 |
-
.matrix tbody th a { color: var(--ink); text-decoration: none; font-weight: 700; }
|
| 110 |
.matrix tbody th a:hover { text-decoration: underline; }
|
| 111 |
.matrix tbody th .tier { margin-top: 4px; }
|
| 112 |
-
.
|
| 113 |
-
.dchip { text-decoration: none; }
|
| 114 |
-
.dchip:hover { filter: brightness(0.95); text-decoration: underline; }
|
| 115 |
.empty-cell { color: var(--line); }
|
| 116 |
-
|
| 117 |
-
.cols2 { display: grid; grid-template-columns: repeat(auto-fit, minmax(
|
| 118 |
-
.block { display: grid; gap: 10px; min-width: 0; }
|
| 119 |
.tierbar { display: grid; gap: 6px; }
|
| 120 |
.tierbar div { display: grid; grid-template-columns: 2.8em 7.5em 1fr; gap: 10px; align-items: center; font-size: 0.88rem; }
|
| 121 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 122 |
|
| 123 |
/* 目录 */
|
| 124 |
.filters { display: flex; flex-wrap: wrap; gap: 10px 12px; align-items: end; padding: 14px; background: var(--surface); border: 1px solid var(--line); border-radius: var(--r); }
|
| 125 |
-
.filters label { display: grid; gap: 3px; font-size: 0.78rem; color: var(--muted); min-width: 0; }
|
| 126 |
-
.filters
|
| 127 |
-
.filters label:
|
|
|
|
| 128 |
.filters button { font: inherit; font-size: 0.86rem; background: none; border: 1px solid var(--line); border-radius: 4px; padding: 5px 10px; color: var(--ink); cursor: pointer; }
|
| 129 |
.count { font-size: 0.86rem; color: var(--muted); }
|
|
|
|
|
|
|
|
|
|
|
|
|
| 130 |
.rows { display: grid; border: 1px solid var(--line); border-radius: var(--r); background: var(--surface); overflow: hidden; }
|
| 131 |
-
.row
|
| 132 |
-
.row-h { background: var(--sunk); font-size: 0.78rem; color: var(--muted); font-weight: 500; }
|
| 133 |
-
.row { text-decoration: none; color: inherit; font-size: 0.88rem; }
|
| 134 |
.row:last-child { border-bottom: 0; }
|
| 135 |
.row:hover { background: var(--sunk); }
|
| 136 |
-
.row .nm b { display: block; }
|
| 137 |
-
.row .nm span { font-size: 0.78rem; color: var(--muted); }
|
| 138 |
.row > * { min-width: 0; }
|
| 139 |
-
.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 140 |
|
| 141 |
/* 方法 */
|
| 142 |
-
.
|
| 143 |
-
.
|
|
|
|
|
|
|
|
|
|
| 144 |
.flow { display: flex; flex-wrap: wrap; align-items: stretch; gap: 6px; }
|
| 145 |
-
.flow .step { background: var(--sunk); border: 1px solid var(--line); border-radius: 4px; padding:
|
| 146 |
.flow .arr { color: var(--muted); align-self: center; font-family: var(--f-mono); }
|
| 147 |
-
.
|
|
|
|
| 148 |
.kv dt { color: var(--muted); }
|
| 149 |
.kv dd { margin: 0; min-width: 0; }
|
| 150 |
|
| 151 |
/* SOMA */
|
| 152 |
-
.pipe { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr));
|
| 153 |
.pipe > div { padding: 14px; border-right: 1px solid var(--line); display: grid; gap: 6px; align-content: start; }
|
| 154 |
.pipe > div:last-child { border-right: 0; }
|
| 155 |
-
.pipe
|
| 156 |
-
.
|
| 157 |
-
.routes { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 12px; }
|
| 158 |
.route { padding: 14px; background: var(--surface); border: 1px solid var(--line); border-radius: var(--r); display: grid; gap: 8px; align-content: start; }
|
| 159 |
.route-h { display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap; }
|
| 160 |
.route-h .mono { color: var(--accent); font-weight: 500; }
|
| 161 |
.yes { color: var(--t2); font-weight: 700; }
|
| 162 |
.nop { color: var(--muted); }
|
|
|
|
| 163 |
|
| 164 |
-
/*
|
| 165 |
-
.
|
| 166 |
-
.
|
| 167 |
-
.
|
| 168 |
-
.
|
| 169 |
-
.panel { background: var(--surface); border: 1px solid var(--line); border-radius: var(--r); padding: 18px; display: grid; gap: 14px; min-width: 0; }
|
| 170 |
-
.panel > h2 { font-size: 1.05rem; }
|
| 171 |
-
.facts { display: grid; grid-template-columns: 7em 1fr; gap: 8px 14px; font-size: 0.92rem; margin: 0; }
|
| 172 |
-
.facts dt { color: var(--muted); }
|
| 173 |
-
.facts dd { margin: 0; min-width: 0; }
|
| 174 |
-
.note { border-left: 3px solid var(--line); padding-left: 12px; display: grid; gap: 2px; }
|
| 175 |
-
.note.warn { border-left-color: var(--accent); }
|
| 176 |
-
.note b { font-size: 0.8rem; color: var(--muted); font-weight: 500; letter-spacing: 0.04em; }
|
| 177 |
-
.rig { width: 100%; max-width: 360px; height: auto; display: block; }
|
| 178 |
-
.rig text { font-family: var(--f-body); }
|
| 179 |
-
.gallery { display: grid; gap: 14px; }
|
| 180 |
-
.pair { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
|
| 181 |
-
.pair figure { margin: 0; display: grid; gap: 4px; }
|
| 182 |
-
.pair img { width: 100%; border-radius: 4px; border: 1px solid var(--line); background: var(--sunk); }
|
| 183 |
-
.pair figcaption { font-size: 0.78rem; color: var(--muted); }
|
| 184 |
-
.empty { border: 1px dashed var(--line); border-radius: var(--r); padding: 16px; display: grid; gap: 8px; font-size: 0.9rem; color: var(--muted); }
|
| 185 |
-
.links { display: grid; gap: 6px; margin: 0; padding: 0; list-style: none; font-size: 0.92rem; }
|
| 186 |
-
.pager { display: flex; justify-content: space-between; gap: 12px; flex-wrap: wrap; font-size: 0.9rem; }
|
| 187 |
-
|
| 188 |
-
pre.code { background: var(--sunk); border: 1px solid var(--line); border-radius: var(--r); padding: 12px 14px; overflow-x: auto; font-family: var(--f-mono); font-size: 0.82rem; line-height: 1.6; margin: 0; }
|
| 189 |
-
.tbl-wrap { overflow-x: auto; border: 1px solid var(--line); border-radius: var(--r); background: var(--surface); }
|
| 190 |
-
table.plain { border-collapse: collapse; width: 100%; font-size: 0.88rem; min-width: 560px; }
|
| 191 |
-
.plain th, .plain td { padding: 8px 12px; border-bottom: 1px solid var(--line); text-align: left; vertical-align: top; }
|
| 192 |
-
.plain th { background: var(--sunk); font-size: 0.8rem; color: var(--muted); font-weight: 500; }
|
| 193 |
-
.plain tr:last-child td { border-bottom: 0; }
|
| 194 |
.err { padding: 16px; border: 1px solid var(--accent); border-radius: var(--r); background: var(--accent-soft); }
|
| 195 |
footer { font-size: 0.8rem; color: var(--muted); border-top: 1px solid var(--line); padding-top: 16px; }
|
| 196 |
|
| 197 |
-
@media (max-width:
|
| 198 |
-
.
|
|
|
|
|
|
|
|
|
|
|
|
|
| 199 |
.pipe { grid-template-columns: 1fr 1fr; }
|
| 200 |
.pipe > div:nth-child(2) { border-right: 0; }
|
| 201 |
.pipe > div:nth-child(-n+2) { border-bottom: 1px solid var(--line); }
|
| 202 |
-
.row
|
| 203 |
-
.row { grid-
|
| 204 |
-
.row .
|
| 205 |
-
.row .
|
| 206 |
-
.row .st { order: -1; }
|
| 207 |
-
.filters label { flex: 1 1 140px; }
|
| 208 |
-
.filters input { width: 100%; }
|
| 209 |
}
|
| 210 |
@media (max-width: 520px) {
|
| 211 |
-
h1 { font-size: 1.
|
| 212 |
.pipe { grid-template-columns: 1fr; }
|
| 213 |
.pipe > div { border-right: 0; border-bottom: 1px solid var(--line); }
|
| 214 |
.pipe > div:last-child { border-bottom: 0; }
|
| 215 |
-
.
|
| 216 |
-
.facts, .kv { grid-template-columns: 1fr; gap: 2px 0; }
|
| 217 |
.facts dd, .kv dd { margin-bottom: 8px; }
|
| 218 |
-
.filters
|
| 219 |
-
.
|
|
|
|
| 220 |
}
|
| 221 |
@media (prefers-reduced-motion: reduce) { * { scroll-behavior: auto !important; transition: none !important; } }
|
| 222 |
</style>
|
|
@@ -229,10 +248,10 @@ footer { font-size: 0.8rem; color: var(--muted); border-top: 1px solid var(--lin
|
|
| 229 |
<div class="brand"><b>SOMA 手部数据图谱</b><span id="upd"></span></div>
|
| 230 |
<nav class="tabs" aria-label="页面">
|
| 231 |
<a href="#overview" data-v="overview">总览</a>
|
| 232 |
-
<a href="#catalog" data-v="catalog">数据集
|
| 233 |
<a href="#methods" data-v="methods">标注方法</a>
|
| 234 |
-
<a href="#soma" data-v="soma">
|
| 235 |
-
<a href="#samples" data-v="samples">样例
|
| 236 |
</nav>
|
| 237 |
</div>
|
| 238 |
</header>
|
|
@@ -246,17 +265,24 @@ footer { font-size: 0.8rem; color: var(--muted); border-top: 1px solid var(--lin
|
|
| 246 |
"use strict";
|
| 247 |
var DATA = null, PREV = {}, BYID = {}, M = {};
|
| 248 |
var app = document.getElementById("app");
|
| 249 |
-
var filt = { source: "", method: "", tier: "",
|
|
|
|
|
|
|
| 250 |
|
| 251 |
function esc(s) { return String(s == null ? "" : s).replace(/[&<>"']/g, function (c) { return { "&": "&", "<": "<", ">": ">", '"': """, "'": "'" }[c]; }); }
|
| 252 |
function by(list) { var o = {}; list.forEach(function (x) { o[x.id] = x; }); return o; }
|
| 253 |
-
function stChip(id) {
|
| 254 |
-
function tierChip(id
|
| 255 |
-
function
|
| 256 |
-
function
|
| 257 |
-
function sorted(list) { return list.slice().sort(function (a, b) { return
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 258 |
|
| 259 |
-
/* ---------- 采集装置示意
|
| 260 |
function rigSvg(d) {
|
| 261 |
var r = d.rig || {}, W = 320, H = 200, cx = 160, cy = 118, out = [];
|
| 262 |
out.push('<svg class="rig" viewBox="0 0 ' + W + " " + H + '" role="img" aria-label="' + esc(d.name + " 采集装置示意") + '">');
|
|
@@ -288,7 +314,6 @@ footer { font-size: 0.8rem; color: var(--muted); border-top: 1px solid var(--lin
|
|
| 288 |
out.push('<rect x="' + (hx - 6) + '" y="' + (hy + 10) + '" width="12" height="8" rx="1.5" fill="' + col + '"/>');
|
| 289 |
out.push('<text x="12" y="22" font-size="12" fill="var(--muted)">' + (r.pseudoEgo ? "固定于眼高(模拟第一视角)" : (r.fisheye ? "第一视角 · 宽视场" : "第一视角")) + (r.mono ? " · 黑白" : "") + "</text>");
|
| 290 |
}
|
| 291 |
-
// 手
|
| 292 |
var hx2 = cx, hy2 = cy + 10;
|
| 293 |
out.push('<g fill="var(--surface)" stroke="var(--ink)" stroke-width="1.4" stroke-linejoin="round">');
|
| 294 |
out.push('<path d="M' + (hx2 - 15) + " " + (hy2 + 22) + " Q" + (hx2 - 19) + " " + (hy2 + 2) + " " + (hx2 - 14) + " " + (hy2 - 6) + " L" + (hx2 + 14) + " " + (hy2 - 6) + " Q" + (hx2 + 19) + " " + (hy2 + 4) + " " + (hx2 + 15) + " " + (hy2 + 22) + ' Z"/>');
|
|
@@ -301,194 +326,191 @@ footer { font-size: 0.8rem; color: var(--muted); border-top: 1px solid var(--lin
|
|
| 301 |
out.push('<g transform="translate(40 40)"><rect x="-12" y="-9" width="22" height="18" rx="2" fill="none" stroke="var(--muted)" stroke-width="1.5"/><line x1="-16" y1="-14" x2="16" y2="14" stroke="var(--accent)" stroke-width="2"/></g>');
|
| 302 |
out.push('<text x="62" y="45" font-size="12" fill="var(--muted)">��� RGB 图像</text>');
|
| 303 |
}
|
| 304 |
-
|
| 305 |
-
if (
|
| 306 |
-
if (r.scanner) out.push('<text x="12" y="' + (H - 12) + '" font-size="12" fill="var(--muted)">扫描仪多相机环</text>');
|
| 307 |
out.push("</svg>");
|
| 308 |
return out.join("");
|
| 309 |
}
|
|
|
|
| 310 |
|
| 311 |
-
|
| 312 |
-
return '<div class="flow">' + steps.map(function (s, i) { return (i ? '<span class="arr" aria-hidden="true">→</span>' : "") + '<span class="step">' + esc(s) + "</span>"; }).join("") + "</div>";
|
| 313 |
-
}
|
| 314 |
-
|
| 315 |
-
/* ---------- 视图:总览 ---------- */
|
| 316 |
function vOverview() {
|
| 317 |
var ds = DATA.datasets, cnt = {};
|
| 318 |
ds.forEach(function (d) { cnt[d.status] = (cnt[d.status] || 0) + 1; });
|
| 319 |
-
var
|
| 320 |
-
h
|
| 321 |
-
h.push('<div class="
|
| 322 |
-
h.push('<div class="
|
|
|
|
|
|
|
|
|
|
| 323 |
DATA.meta.sources.forEach(function (s) { h.push("<th>" + esc(s.name) + "<small>" + esc(s.desc) + "</small></th>"); });
|
| 324 |
h.push("</tr></thead><tbody>");
|
| 325 |
-
var tierOf = { scan: "S1", marker: "S2", rgbd: "S3", mvkp: "S4", device: "-", synth: "SY", manual2d: "-", pseudo: "S5" };
|
| 326 |
DATA.meta.methods.forEach(function (m) {
|
| 327 |
-
h.push('<tr><th><a href="#methods" data-jump="m-' + m.id + '">' + esc(m.name) + "</a>
|
| 328 |
DATA.meta.sources.forEach(function (s) {
|
| 329 |
var list = sorted(ds.filter(function (d) { return d.method === m.id && d.source === s.id; }));
|
| 330 |
-
h.push("<td>" + (list.length ? '<div class="
|
| 331 |
});
|
| 332 |
h.push("</tr>");
|
| 333 |
});
|
| 334 |
-
h.push(
|
| 335 |
-
h.push('<div class="legend"><span>标签颜色表示状态:</span>' + DATA.meta.statuses.map(function (s) { return "<span>" + stChip(s.id) + esc(s.desc) + "</span>"; }).join("") + "</div>");
|
| 336 |
|
| 337 |
-
h.push('<div class="cols2"><div class="block"><h2>shape 真值分层</h2><p class="muted small">大部分数据集的 β 是从图像或关键点拟合的。监督 SOMA shape 时只用 S1 到 S3 和合成数据,S4 当弱监督,S5 和“—”不参与 shape。</p><div class="tierbar">');
|
| 338 |
-
DATA.meta.tiers.forEach(function (t) { h.push("<div>" + tierChip(t.id) + "<b>" + esc(t.name) + '</b><span class="muted">' + esc(t.desc) + "</span></div>"); });
|
| 339 |
-
h.push("</div></div>");
|
| 340 |
var p0 = ds.filter(function (d) { return d.status === "p0"; });
|
| 341 |
-
h.push('<div class="
|
| 342 |
-
p0.forEach(function (d) { h.push('<
|
| 343 |
-
h.push(
|
| 344 |
-
h.push(
|
|
|
|
|
|
|
| 345 |
return h.join("");
|
| 346 |
}
|
| 347 |
|
| 348 |
-
/* ----------
|
| 349 |
function opts(list, cur, all) { return '<option value="">' + all + "</option>" + list.map(function (x) { return '<option value="' + x.id + '"' + (x.id === cur ? " selected" : "") + ">" + esc(x.name) + "</option>"; }).join(""); }
|
| 350 |
function vCatalog() {
|
| 351 |
-
var h = [];
|
| 352 |
-
h.push('<
|
| 353 |
-
h.push('<
|
| 354 |
-
h.push('<label for="f-
|
| 355 |
-
h.push('<label for="f-
|
| 356 |
-
h.push('<label for="f-
|
| 357 |
-
h.push('<label for="f-
|
| 358 |
-
h.push('<
|
| 359 |
-
h.push('<
|
| 360 |
-
h.push('<p class="count" id="cnt" aria-live="polite"></p><div class="rows" id="rows"></div></section>');
|
| 361 |
return h.join("");
|
| 362 |
}
|
| 363 |
function renderRows() {
|
| 364 |
var q = filt.q.trim().toLowerCase();
|
| 365 |
-
var list =
|
| 366 |
if (filt.source && d.source !== filt.source) return false;
|
| 367 |
if (filt.method && d.method !== filt.method) return false;
|
| 368 |
if (filt.tier && d.tier !== filt.tier) return false;
|
| 369 |
-
if (filt.
|
| 370 |
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; }
|
| 371 |
return true;
|
| 372 |
-
}));
|
| 373 |
-
document.getElementById("cnt").textContent = "显示 " + list.length + " / " + DATA.datasets.length + " 个数据集";
|
| 374 |
-
var h = ['<div class="row-h"><span>数据集</span><span>数据来源</span><span>标注方法</span><span>真值</span><span>shape</span><span>规模</span><span>状态</span></div>'];
|
| 375 |
-
if (!list.length) h.push('<div class="row"><span>没有符合条件的数据集。换一个筛选条件,或点「清除筛选」。</span></div>');
|
| 376 |
-
list.forEach(function (d) {
|
| 377 |
-
h.push('<a class="row" href="#ds-' + d.id + '">');
|
| 378 |
-
h.push('<span class="nm"><span><b>' + esc(d.name) + "</b><span>" + esc(d.year) + "</span></span></span>");
|
| 379 |
-
h.push('<span><span class="lab">数据来源</span>' + esc(M.source[d.source].name) + "</span>");
|
| 380 |
-
h.push('<span><span class="lab">标注方法</span>' + esc(M.method[d.method].name) + "</span>");
|
| 381 |
-
h.push('<span><span class="lab">真值</span>' + esc(d.gt) + "</span>");
|
| 382 |
-
h.push('<span><span class="lab">shape</span>' + tierChip(d.tier) + "</span>");
|
| 383 |
-
h.push('<span class="small"><span class="lab">规模</span>' + esc([d.subjects, d.scale].filter(Boolean).join(";") || "—") + "</span>");
|
| 384 |
-
h.push('<span class="st">' + stChip(d.status) + "</span>");
|
| 385 |
-
h.push("</a>");
|
| 386 |
});
|
| 387 |
-
document.getElementById("
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 388 |
}
|
| 389 |
function bindCatalog() {
|
| 390 |
-
["source", "method", "tier"
|
| 391 |
-
document.getElementById("f-" + k).addEventListener("change", function (e) { filt[k] = e.target.value; renderRows(); });
|
| 392 |
-
});
|
| 393 |
document.getElementById("f-q").addEventListener("input", function (e) { filt.q = e.target.value; renderRows(); });
|
|
|
|
| 394 |
document.getElementById("ff").addEventListener("submit", function (e) { e.preventDefault(); });
|
| 395 |
-
document.getElementById("f-reset").addEventListener("click", function () { filt = { source: "", method: "", tier: "",
|
| 396 |
renderRows();
|
| 397 |
}
|
| 398 |
|
| 399 |
-
/* ----------
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 400 |
function vMethods() {
|
| 401 |
-
var h = ['<section class="view"><div class="lead"><h1>标注方法</h1><p>
|
| 402 |
-
|
| 403 |
DATA.meta.methods.forEach(function (m) {
|
| 404 |
var list = sorted(DATA.datasets.filter(function (d) { return d.method === m.id; }));
|
| 405 |
-
h.push('<article class="method" id="m-' + m.id + '"><div class="method-
|
| 406 |
-
h.push(
|
| 407 |
-
h.push('<dl class="kv"><dt>可信度</dt><dd>' + esc(m.trust) + "</dd><dt>常见问题</dt><dd>" + esc(m.issues) + '</dd><dt>SOMA 路线</dt><dd><a href="#soma">' + esc(m.route) + "</a></dd></dl>");
|
| 408 |
-
h.push('<div class="cell">' + list.map(function (d) { return dsLink(d); }).join("") + "</div></article>");
|
| 409 |
});
|
| 410 |
h.push("</section>");
|
| 411 |
return h.join("");
|
| 412 |
}
|
| 413 |
|
| 414 |
-
/* ----------
|
| 415 |
function vSoma() {
|
| 416 |
-
var h = ['<section class="view"><div class="lead"><h1>转到 SOMA hand</h1><p>
|
| 417 |
-
h.push('<div class="pipe">');
|
| 418 |
-
h.push('<div><
|
| 419 |
-
h.push('<div><
|
| 420 |
-
h.push('<div><
|
| 421 |
-
h.push('<div><
|
| 422 |
-
h.push("</div>");
|
| 423 |
-
h.push('<
|
| 424 |
DATA.meta.routes.forEach(function (r) {
|
| 425 |
-
var
|
| 426 |
-
h.push('<div class="route"><div class="route-h"><span class="mono">' + r.id + "</span><h3>" + esc(r.name) + '</h3></div><p class="small
|
| 427 |
});
|
| 428 |
-
h.push("</div>");
|
| 429 |
-
h.push('<div class="cols2"><div class="
|
| 430 |
-
h.push("<li>MANO
|
| 431 |
-
h.push("<li>EgoRenderer 已经做过一次原始网格到 MANO 的
|
| 432 |
-
h.push("<li>shape 和尺度
|
| 433 |
h.push("<li>SAM 3D Body 输出 MHR,可以走 R5 给野外图像生成伪标签;它的训练数据是否公开未查到。</li>");
|
| 434 |
-
h.push('</ul></div><div class="
|
| 435 |
-
h.push("</section>");
|
| 436 |
return h.join("");
|
| 437 |
}
|
| 438 |
|
| 439 |
-
/* ----------
|
| 440 |
function vSamples() {
|
| 441 |
-
var
|
| 442 |
-
|
| 443 |
-
h
|
| 444 |
-
h.push('<
|
| 445 |
-
|
| 446 |
-
|
| 447 |
-
|
| 448 |
-
});
|
| 449 |
-
h.push("</
|
| 450 |
-
|
| 451 |
-
|
| 452 |
-
|
| 453 |
-
/* ---------- 视图:详情 ---------- */
|
| 454 |
-
function vDetail(id) {
|
| 455 |
-
var d = BYID[id];
|
| 456 |
-
if (!d) return '<section class="view"><p class="err">找不到数据集「' + esc(id) + '」。回到<a href="#catalog">数据集目录</a>。</p></section>';
|
| 457 |
-
var m = M.method[d.method], s = M.source[d.source], rt = M.route[d.route], t = M.tier[d.tier];
|
| 458 |
-
var all = sorted(DATA.datasets), idx = all.indexOf(d), prev = all[idx - 1], next = all[idx + 1];
|
| 459 |
-
var h = ['<section class="view"><p class="crumb"><a href="#catalog">数据集目录</a> / ' + esc(s.name) + " / " + esc(m.name) + "</p>"];
|
| 460 |
-
h.push('<div class="dhead"><h1>' + esc(d.name) + '</h1><div class="chips">' + stChip(d.status) + (d.tags || []).map(function (x) { return '<span class="chip st-surveyed">' + esc(x) + "</span>"; }).join("") + '<span class="chip st-surveyed">' + esc(d.year) + "</span></div></div>");
|
| 461 |
-
h.push('<div class="dgrid"><div class="panel"><h2>基本信息</h2><dl class="facts">');
|
| 462 |
-
h.push("<dt>数据来源</dt><dd>" + esc(s.name) + '<br><span class="muted small">' + esc(s.desc) + "</span></dd>");
|
| 463 |
-
h.push("<dt>相机</dt><dd>" + esc(d.camera || "—") + "</dd>");
|
| 464 |
-
h.push('<dt>标注方法</dt><dd><a href="#methods" data-jump="m-' + m.id + '">' + esc(m.name) + "</a></dd>");
|
| 465 |
-
h.push("<dt>真值格式</dt><dd>" + esc(d.gt) + "</dd>");
|
| 466 |
-
h.push("<dt>shape 层级</dt><dd>" + tierChip(d.tier) + " " + esc(t.name) + '<span class="muted small">,' + esc(t.desc) + "</span></dd>");
|
| 467 |
-
h.push('<dt>SOMA 路线</dt><dd><a href="#soma">' + esc(rt.id + " " + rt.name) + "</a>" + (rt.shape ? "" : '<span class="muted small">,不监督 shape</span>') + "</dd>");
|
| 468 |
-
h.push("<dt>受试者</dt><dd>" + esc(d.subjects || "—") + "</dd>");
|
| 469 |
-
h.push("<dt>规模</dt><dd>" + esc(d.scale || "—") + "</dd></dl>");
|
| 470 |
-
h.push('<div class="note"><b>补什么</b><p>' + esc(d.fills) + "</p></div>");
|
| 471 |
-
if (d.risk) h.push('<div class="note warn"><b>注意</b><p>' + esc(d.risk) + "</p></div>");
|
| 472 |
-
h.push("</div>");
|
| 473 |
-
h.push('<div class="panel"><h2>采集与标注示意</h2>' + rigSvg(d) + flow(m.steps) + '<p class="small muted">示意图按数据集的相机配置绘制,不是真实画面。琥珀色圆点表示手上贴有光学 marker。</p></div></div>');
|
| 474 |
-
var pv = PREV[d.id] || [];
|
| 475 |
-
h.push('<div class="panel"><h2>样例:RGB 与 GT 叠加</h2>');
|
| 476 |
-
if (pv.length) {
|
| 477 |
-
h.push('<div class="gallery">');
|
| 478 |
-
pv.forEach(function (p, i) {
|
| 479 |
-
h.push('<div class="pair"><figure><img loading="lazy" src="' + esc(p.rgb) + '" alt="' + esc(d.name + " 样例 " + (i + 1) + " RGB") + '"><figcaption>RGB</figcaption></figure><figure><img loading="lazy" src="' + esc(p.gt) + '" alt="' + esc(d.name + " 样例 " + (i + 1) + " GT 叠加") + '"><figcaption>GT 叠加' + (p.source ? ":" + esc(p.source) : "") + "</figcaption></figure></div>");
|
| 480 |
-
if (p.caption) h.push('<p class="small muted">' + esc(p.caption) + "</p>");
|
| 481 |
-
});
|
| 482 |
-
h.push("</div>");
|
| 483 |
-
} else {
|
| 484 |
-
h.push('<div class="empty"><p>本站还没有这个数据集的样例。用 <span class="mono">tools/add_preview.py ' + esc(d.id) + "</span> 添加,步骤见<a href=\"#samples\">样例素材</a>。</p>");
|
| 485 |
-
if ((d.team || []).length) h.push("<p>团队已有的可视化:" + d.team.map(function (x) { return '<a href="' + esc(x.url) + '" target="_blank" rel="noopener">' + esc(x.label) + "</a>"; }).join(",") + "</p>");
|
| 486 |
-
h.push("</div>");
|
| 487 |
-
}
|
| 488 |
-
h.push("</div>");
|
| 489 |
-
if ((d.links || []).length) h.push('<div class="panel"><h2>链接</h2><ul class="links">' + d.links.map(function (x) { return '<li><a href="' + esc(x.url) + '" target="_blank" rel="noopener">' + esc(x.label) + "</a></li>"; }).join("") + "</ul></div>");
|
| 490 |
-
h.push('<div class="pager"><span>' + (prev ? '← <a href="#ds-' + prev.id + '">' + esc(prev.name) + "</a>" : "") + "</span><span>" + (next ? '<a href="#ds-' + next.id + '">' + esc(next.name) + "</a> →" : "") + "</span></div>");
|
| 491 |
-
h.push("</section>");
|
| 492 |
return h.join("");
|
| 493 |
}
|
| 494 |
|
|
@@ -502,7 +524,7 @@ footer { font-size: 0.8rem; color: var(--muted); border-top: 1px solid var(--lin
|
|
| 502 |
else if (hash === "soma") html = vSoma();
|
| 503 |
else if (hash === "samples") html = vSamples();
|
| 504 |
else { html = vOverview(); view = "overview"; }
|
| 505 |
-
app.innerHTML = html + '<footer>
|
| 506 |
document.querySelectorAll("nav.tabs a").forEach(function (a) { if (a.getAttribute("data-v") === view) a.setAttribute("aria-current", "page"); else a.removeAttribute("aria-current"); });
|
| 507 |
if (hash === "catalog") bindCatalog();
|
| 508 |
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
|
|
| 525 |
fetch("data/datasets.json").then(function (r) { if (!r.ok) throw new Error(r.status); return r.json(); }),
|
| 526 |
fetch("data/previews.json").then(function (r) { return r.ok ? r.json() : {}; }).catch(function () { return {}; })
|
| 527 |
]).then(function (x) { boot(x[0], x[1]); }).catch(function () {
|
| 528 |
-
app.innerHTML = '<p class="err">没能读取 data/datasets.json。直接双击打开 HTML
|
| 529 |
});
|
| 530 |
})();
|
| 531 |
</script>
|
|
|
|
| 10 |
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
| 11 |
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500&family=Noto+Sans+SC:wght@400;500;700&family=Noto+Serif+SC:wght@600;700&display=swap">
|
| 12 |
<style>
|
| 13 |
+
/* 布局:顶部标签导航 + 单栏工作区;每页先给结论(一句话 + 关键字段),再分组给细节 */
|
| 14 |
:root {
|
| 15 |
--bg: #f4f6f8;
|
| 16 |
--surface: #ffffff;
|
|
|
|
| 18 |
--ink: #17212b;
|
| 19 |
--muted: #5a6573;
|
| 20 |
--line: #d9dfe6;
|
| 21 |
+
--accent: #a8560a; /* 反光 marker 的琥珀色:P0 与当前项 */
|
| 22 |
--accent-soft: #fbead7;
|
| 23 |
--link: #1d4f8f;
|
| 24 |
--t1: #0c3d5c; --t2: #1f6488; --t3: #4d8fb0; --t4: #8bbbd2; --t5: #c9dde8; --ty: #7a6aa8; --t0: #c3c9d1;
|
|
|
|
| 50 |
a { color: var(--link); text-underline-offset: 2px; }
|
| 51 |
a:focus-visible, button:focus-visible, select:focus-visible, input:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
|
| 52 |
h1, h2, h3 { text-wrap: balance; margin: 0; }
|
| 53 |
+
h1 { font-family: var(--f-display); font-size: 1.7rem; line-height: 1.3; }
|
| 54 |
+
h2 { font-family: var(--f-display); font-size: 1.2rem; line-height: 1.35; }
|
| 55 |
+
h3 { font-size: 0.98rem; font-weight: 700; }
|
| 56 |
p { margin: 0; }
|
| 57 |
+
ul { margin: 0; }
|
| 58 |
.mono { font-family: var(--f-mono); font-variant-numeric: tabular-nums; }
|
| 59 |
.muted { color: var(--muted); }
|
| 60 |
.small { font-size: 0.86rem; }
|
| 61 |
+
.label { font-size: 0.74rem; color: var(--muted); letter-spacing: 0.04em; }
|
| 62 |
|
| 63 |
/* 顶栏 */
|
| 64 |
.top { position: sticky; top: env(safe-area-inset-top, 0px); z-index: 5; background: var(--surface); border-bottom: 1px solid var(--line); }
|
|
|
|
| 71 |
nav.tabs a:hover { color: var(--ink); }
|
| 72 |
nav.tabs a[aria-current="page"] { color: var(--ink); border-bottom-color: var(--accent); }
|
| 73 |
|
| 74 |
+
main { max-width: 1240px; margin: 0 auto; padding-left: max(16px, env(safe-area-inset-left, 0px)); padding-right: max(16px, env(safe-area-inset-right, 0px)); padding-block: 28px 64px; display: grid; gap: 32px; }
|
| 75 |
+
section.view { display: grid; gap: 32px; min-width: 0; }
|
| 76 |
+
.part { display: grid; gap: 12px; min-width: 0; }
|
| 77 |
+
.part-h { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 12px; }
|
| 78 |
+
.part-h p { color: var(--muted); font-size: 0.86rem; }
|
| 79 |
+
.lead { max-width: 70ch; display: grid; gap: 8px; }
|
| 80 |
.lead p { color: var(--muted); }
|
| 81 |
|
| 82 |
/* 标签 */
|
|
|
|
| 88 |
.st-p2 { background: transparent; color: var(--ink); border: 1px dashed var(--accent); }
|
| 89 |
.st-own { background: var(--ink); color: var(--surface); font-weight: 700; }
|
| 90 |
.st-no { background: transparent; color: var(--muted); border-color: var(--line); text-decoration: line-through; }
|
| 91 |
+
.tag { background: transparent; color: var(--muted); border-color: var(--line); }
|
| 92 |
.tier { display: inline-flex; align-items: center; justify-content: center; min-width: 2.4em; padding: 0 6px; border-radius: 4px; font-family: var(--f-mono); font-size: 0.78rem; font-weight: 500; line-height: 1.7; }
|
| 93 |
.tier-S1 { background: var(--t1); color: var(--t-on-dark); }
|
| 94 |
.tier-S2 { background: var(--t2); color: var(--t-on-dark); }
|
|
|
|
| 97 |
.tier-S5 { background: var(--t5); color: var(--t-on-light); }
|
| 98 |
.tier-SY { background: var(--ty); color: var(--t-on-dark); }
|
| 99 |
.tier-- { background: var(--t0); color: var(--t-on-light); }
|
| 100 |
+
.chips { display: flex; flex-wrap: wrap; gap: 6px; }
|
| 101 |
+
.dchip { text-decoration: none; }
|
| 102 |
+
.dchip:hover { text-decoration: underline; }
|
| 103 |
+
.dchip .n { font-family: var(--f-mono); opacity: 0.75; }
|
| 104 |
|
| 105 |
/* 总览 */
|
| 106 |
+
.stats { display: flex; flex-wrap: wrap; gap: 8px 18px; align-items: center; }
|
| 107 |
.stats div { display: flex; align-items: baseline; gap: 6px; }
|
| 108 |
+
.stats b { font-family: var(--f-mono); font-size: 1.02rem; }
|
|
|
|
|
|
|
| 109 |
.scroll-x { overflow-x: auto; min-width: 0; border: 1px solid var(--line); border-radius: var(--r); background: var(--surface); }
|
| 110 |
table.matrix { border-collapse: collapse; width: 100%; min-width: 980px; font-size: 0.86rem; }
|
| 111 |
.matrix th, .matrix td { border-bottom: 1px solid var(--line); border-right: 1px solid var(--line); padding: 8px; vertical-align: top; text-align: left; }
|
|
|
|
| 113 |
.matrix tbody tr:last-child > * { border-bottom: 0; }
|
| 114 |
.matrix thead th { background: var(--sunk); font-weight: 700; font-size: 0.82rem; }
|
| 115 |
.matrix thead th small { display: block; font-weight: 400; color: var(--muted); }
|
| 116 |
+
.matrix tbody th { width: 160px; background: var(--sunk); }
|
| 117 |
+
.matrix tbody th a { color: var(--ink); text-decoration: none; font-weight: 700; display: block; }
|
| 118 |
.matrix tbody th a:hover { text-decoration: underline; }
|
| 119 |
.matrix tbody th .tier { margin-top: 4px; }
|
| 120 |
+
.matrix .chips { gap: 4px; }
|
|
|
|
|
|
|
| 121 |
.empty-cell { color: var(--line); }
|
| 122 |
+
.legend { display: flex; flex-wrap: wrap; gap: 6px 10px; align-items: center; font-size: 0.8rem; color: var(--muted); }
|
| 123 |
+
.cols2 { display: grid; grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); gap: 32px; }
|
|
|
|
| 124 |
.tierbar { display: grid; gap: 6px; }
|
| 125 |
.tierbar div { display: grid; grid-template-columns: 2.8em 7.5em 1fr; gap: 10px; align-items: center; font-size: 0.88rem; }
|
| 126 |
+
.pick { display: grid; gap: 10px; }
|
| 127 |
+
.pick a { display: grid; grid-template-columns: auto 1fr; gap: 2px 10px; padding: 10px 12px; border: 1px solid var(--line); border-radius: var(--r); background: var(--surface); text-decoration: none; color: inherit; }
|
| 128 |
+
.pick a:hover { border-color: var(--accent); }
|
| 129 |
+
.pick b { font-size: 0.95rem; }
|
| 130 |
+
.pick span.d { grid-column: 1 / -1; font-size: 0.86rem; color: var(--muted); }
|
| 131 |
|
| 132 |
/* 目录 */
|
| 133 |
.filters { display: flex; flex-wrap: wrap; gap: 10px 12px; align-items: end; padding: 14px; background: var(--surface); border: 1px solid var(--line); border-radius: var(--r); }
|
| 134 |
+
.filters label { display: grid; gap: 3px; font-size: 0.78rem; color: var(--muted); min-width: 0; flex: 1 1 150px; max-width: 240px; }
|
| 135 |
+
.filters label.q { max-width: 320px; flex-basis: 200px; }
|
| 136 |
+
.filters label.ck { display: flex; align-items: center; gap: 6px; flex: 0 0 auto; font-size: 0.86rem; color: var(--ink); padding-bottom: 6px; }
|
| 137 |
+
.filters select, .filters input[type="search"] { width: 100%; font: inherit; font-size: 0.88rem; color: var(--ink); background: var(--bg); border: 1px solid var(--line); border-radius: 4px; padding: 5px 8px; }
|
| 138 |
.filters button { font: inherit; font-size: 0.86rem; background: none; border: 1px solid var(--line); border-radius: 4px; padding: 5px 10px; color: var(--ink); cursor: pointer; }
|
| 139 |
.count { font-size: 0.86rem; color: var(--muted); }
|
| 140 |
+
.groups { display: grid; gap: 28px; }
|
| 141 |
+
.group { display: grid; gap: 8px; }
|
| 142 |
+
.group-h { display: flex; align-items: center; gap: 10px; }
|
| 143 |
+
.group-h .muted { font-size: 0.84rem; }
|
| 144 |
.rows { display: grid; border: 1px solid var(--line); border-radius: var(--r); background: var(--surface); overflow: hidden; }
|
| 145 |
+
.row { display: grid; grid-template-columns: 96px minmax(150px, 1.3fr) minmax(150px, 1.3fr) minmax(120px, 1fr) minmax(140px, 1.4fr); gap: 14px; padding: 10px 14px; align-items: center; border-bottom: 1px solid var(--line); text-decoration: none; color: inherit; font-size: 0.88rem; }
|
|
|
|
|
|
|
| 146 |
.row:last-child { border-bottom: 0; }
|
| 147 |
.row:hover { background: var(--sunk); }
|
|
|
|
|
|
|
| 148 |
.row > * { min-width: 0; }
|
| 149 |
+
.thumb { width: 96px; aspect-ratio: 16 / 10; max-width: 100%; border-radius: 4px; background: var(--sunk); border: 1px solid var(--line); object-fit: cover; display: block; }
|
| 150 |
+
.thumb.none { display: grid; place-items: center; font-size: 0.7rem; color: var(--muted); }
|
| 151 |
+
.row .nm b { display: block; font-size: 0.95rem; }
|
| 152 |
+
.row .two span { display: block; }
|
| 153 |
+
.row .clip { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
|
| 154 |
+
|
| 155 |
+
/* 详情 */
|
| 156 |
+
.crumb { font-size: 0.86rem; }
|
| 157 |
+
.dhead { display: grid; gap: 10px; }
|
| 158 |
+
.keys { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); border: 1px solid var(--line); border-radius: var(--r); background: var(--surface); }
|
| 159 |
+
.keys > div { padding: 12px 14px; border-right: 1px solid var(--line); display: grid; gap: 4px; align-content: start; min-width: 0; }
|
| 160 |
+
.keys > div:last-child { border-right: 0; }
|
| 161 |
+
.keys .v { font-size: 0.92rem; }
|
| 162 |
+
.panel { background: var(--surface); border: 1px solid var(--line); border-radius: var(--r); padding: 18px; display: grid; gap: 14px; min-width: 0; align-content: start; }
|
| 163 |
+
.dgrid { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 24px; align-items: start; }
|
| 164 |
+
.facts { display: grid; grid-template-columns: 5em 1fr; gap: 8px 14px; font-size: 0.92rem; margin: 0; }
|
| 165 |
+
.facts dt { color: var(--muted); }
|
| 166 |
+
.facts dd { margin: 0; min-width: 0; }
|
| 167 |
+
.note { border-left: 3px solid var(--accent); padding-left: 12px; display: grid; gap: 2px; font-size: 0.92rem; }
|
| 168 |
+
.rig { width: 100%; max-width: 380px; height: auto; display: block; }
|
| 169 |
+
.rig text { font-family: var(--f-body); }
|
| 170 |
+
.gallery { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 500px), 1fr)); gap: 18px 24px; }
|
| 171 |
+
.sample { display: grid; gap: 6px; align-content: start; min-width: 0; }
|
| 172 |
+
.pair { display: grid; grid-template-columns: 1fr 1fr; gap: 6px; }
|
| 173 |
+
.pair figure { margin: 0; display: grid; gap: 3px; }
|
| 174 |
+
.pair img { width: 100%; border-radius: 4px; border: 1px solid var(--line); background: var(--sunk); }
|
| 175 |
+
.pair figcaption { font-size: 0.74rem; color: var(--muted); }
|
| 176 |
+
.empty { border: 1px dashed var(--line); border-radius: var(--r); padding: 14px; font-size: 0.9rem; color: var(--muted); display: grid; gap: 6px; }
|
| 177 |
+
.links { display: grid; gap: 6px; padding: 0; list-style: none; font-size: 0.92rem; }
|
| 178 |
+
.pager { display: flex; justify-content: space-between; gap: 12px; flex-wrap: wrap; font-size: 0.9rem; border-top: 1px solid var(--line); padding-top: 14px; }
|
| 179 |
|
| 180 |
/* 方法 */
|
| 181 |
+
.toc { display: flex; flex-wrap: wrap; gap: 6px; }
|
| 182 |
+
.toc a { font-size: 0.85rem; padding: 3px 10px; border: 1px solid var(--line); border-radius: 999px; text-decoration: none; color: var(--ink); background: var(--surface); }
|
| 183 |
+
.toc a:hover { border-color: var(--accent); }
|
| 184 |
+
.method { display: grid; gap: 14px; padding: 18px; background: var(--surface); border: 1px solid var(--line); border-radius: var(--r); scroll-margin-top: 90px; }
|
| 185 |
+
.method-h { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; }
|
| 186 |
.flow { display: flex; flex-wrap: wrap; align-items: stretch; gap: 6px; }
|
| 187 |
+
.flow .step { background: var(--sunk); border: 1px solid var(--line); border-radius: 4px; padding: 5px 10px; font-size: 0.85rem; max-width: 100%; }
|
| 188 |
.flow .arr { color: var(--muted); align-self: center; font-family: var(--f-mono); }
|
| 189 |
+
.mgrid { display: grid; grid-template-columns: minmax(0, 1.2fr) minmax(0, 1fr); gap: 20px; }
|
| 190 |
+
.kv { display: grid; grid-template-columns: 5.5em 1fr; gap: 6px 12px; font-size: 0.9rem; margin: 0; }
|
| 191 |
.kv dt { color: var(--muted); }
|
| 192 |
.kv dd { margin: 0; min-width: 0; }
|
| 193 |
|
| 194 |
/* SOMA */
|
| 195 |
+
.pipe { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); border: 1px solid var(--line); border-radius: var(--r); background: var(--surface); overflow: hidden; }
|
| 196 |
.pipe > div { padding: 14px; border-right: 1px solid var(--line); display: grid; gap: 6px; align-content: start; }
|
| 197 |
.pipe > div:last-child { border-right: 0; }
|
| 198 |
+
.pipe ul { padding-left: 1.1em; font-size: 0.88rem; }
|
| 199 |
+
.routes { display: grid; grid-template-columns: repeat(auto-fill, minmax(270px, 1fr)); gap: 12px; }
|
|
|
|
| 200 |
.route { padding: 14px; background: var(--surface); border: 1px solid var(--line); border-radius: var(--r); display: grid; gap: 8px; align-content: start; }
|
| 201 |
.route-h { display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap; }
|
| 202 |
.route-h .mono { color: var(--accent); font-weight: 500; }
|
| 203 |
.yes { color: var(--t2); font-weight: 700; }
|
| 204 |
.nop { color: var(--muted); }
|
| 205 |
+
.bul { padding-left: 1.2em; display: grid; gap: 6px; font-size: 0.9rem; }
|
| 206 |
|
| 207 |
+
/* 样例来源 */
|
| 208 |
+
.ways { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 14px; }
|
| 209 |
+
.way { padding: 16px; background: var(--surface); border: 1px solid var(--line); border-radius: var(--r); display: grid; gap: 10px; align-content: start; min-width: 0; }
|
| 210 |
+
.way.rec { border-color: var(--accent); }
|
| 211 |
+
pre.code { background: var(--sunk); border: 1px solid var(--line); border-radius: var(--r); padding: 10px 12px; overflow-x: auto; font-family: var(--f-mono); font-size: 0.8rem; line-height: 1.6; margin: 0; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 212 |
.err { padding: 16px; border: 1px solid var(--accent); border-radius: var(--r); background: var(--accent-soft); }
|
| 213 |
footer { font-size: 0.8rem; color: var(--muted); border-top: 1px solid var(--line); padding-top: 16px; }
|
| 214 |
|
| 215 |
+
@media (max-width: 960px) {
|
| 216 |
+
.keys { grid-template-columns: repeat(2, minmax(0, 1fr)); }
|
| 217 |
+
.keys > div { border-bottom: 1px solid var(--line); }
|
| 218 |
+
.keys > div:nth-child(2n) { border-right: 0; }
|
| 219 |
+
.keys > div:last-child { grid-column: 1 / -1; border-bottom: 0; }
|
| 220 |
+
.dgrid, .mgrid { grid-template-columns: 1fr; }
|
| 221 |
.pipe { grid-template-columns: 1fr 1fr; }
|
| 222 |
.pipe > div:nth-child(2) { border-right: 0; }
|
| 223 |
.pipe > div:nth-child(-n+2) { border-bottom: 1px solid var(--line); }
|
| 224 |
+
.row { grid-template-columns: 84px minmax(0, 1fr); gap: 4px 12px; align-items: start; }
|
| 225 |
+
.row .thumb { grid-row: span 4; width: 84px; }
|
| 226 |
+
.row .two span { display: inline; }
|
| 227 |
+
.row .two span + span::before { content: " · "; color: var(--muted); }
|
|
|
|
|
|
|
|
|
|
| 228 |
}
|
| 229 |
@media (max-width: 520px) {
|
| 230 |
+
h1 { font-size: 1.42rem; }
|
| 231 |
.pipe { grid-template-columns: 1fr; }
|
| 232 |
.pipe > div { border-right: 0; border-bottom: 1px solid var(--line); }
|
| 233 |
.pipe > div:last-child { border-bottom: 0; }
|
| 234 |
+
.facts, .kv { grid-template-columns: 1fr; gap: 0; }
|
|
|
|
| 235 |
.facts dd, .kv dd { margin-bottom: 8px; }
|
| 236 |
+
.filters label, .filters label.q { max-width: none; flex-basis: 100%; }
|
| 237 |
+
.row { grid-template-columns: 72px minmax(0, 1fr); }
|
| 238 |
+
.row .thumb { width: 72px; }
|
| 239 |
}
|
| 240 |
@media (prefers-reduced-motion: reduce) { * { scroll-behavior: auto !important; transition: none !important; } }
|
| 241 |
</style>
|
|
|
|
| 248 |
<div class="brand"><b>SOMA 手部数据图谱</b><span id="upd"></span></div>
|
| 249 |
<nav class="tabs" aria-label="页面">
|
| 250 |
<a href="#overview" data-v="overview">总览</a>
|
| 251 |
+
<a href="#catalog" data-v="catalog">数据集</a>
|
| 252 |
<a href="#methods" data-v="methods">标注方法</a>
|
| 253 |
+
<a href="#soma" data-v="soma">转到 SOMA</a>
|
| 254 |
+
<a href="#samples" data-v="samples">样例</a>
|
| 255 |
</nav>
|
| 256 |
</div>
|
| 257 |
</header>
|
|
|
|
| 265 |
"use strict";
|
| 266 |
var DATA = null, PREV = {}, BYID = {}, M = {};
|
| 267 |
var app = document.getElementById("app");
|
| 268 |
+
var filt = { source: "", method: "", tier: "", q: "", hasPrev: false };
|
| 269 |
+
var ORDER = ["own", "p0", "p1", "p2", "used", "surveyed", "no"];
|
| 270 |
+
var TIER_OF = { scan: "S1", marker: "S2", rgbd: "S3", mvkp: "S4", device: "-", synth: "SY", manual2d: "-", pseudo: "S5" };
|
| 271 |
|
| 272 |
function esc(s) { return String(s == null ? "" : s).replace(/[&<>"']/g, function (c) { return { "&": "&", "<": "<", ">": ">", '"': """, "'": "'" }[c]; }); }
|
| 273 |
function by(list) { var o = {}; list.forEach(function (x) { o[x.id] = x; }); return o; }
|
| 274 |
+
function stChip(id) { return '<span class="chip st-' + id + '" title="' + esc(M.status[id].desc) + '">' + esc(M.status[id].name) + "</span>"; }
|
| 275 |
+
function tierChip(id) { var t = M.tier[id]; return '<span class="tier tier-' + id + '" title="' + esc(t.name + ":" + t.desc) + '">' + (id === "-" ? "—" : esc(id)) + "</span>"; }
|
| 276 |
+
function nPrev(d) { return (PREV[d.id] || []).length; }
|
| 277 |
+
function dsLink(d, showN) { var n = nPrev(d); return '<a class="chip dchip st-' + d.status + '" href="#ds-' + d.id + '">' + esc(d.name) + (showN && n ? ' <span class="n">' + n + "</span>" : "") + "</a>"; }
|
| 278 |
+
function sorted(list) { return list.slice().sort(function (a, b) { return ORDER.indexOf(a.status) - ORDER.indexOf(b.status) || a.name.localeCompare(b.name); }); }
|
| 279 |
+
function partHead(title, note) { return '<div class="part-h"><h2>' + esc(title) + "</h2>" + (note ? "<p>" + note + "</p>" : "") + "</div>"; }
|
| 280 |
+
function thumb(d) {
|
| 281 |
+
var p = (PREV[d.id] || [])[0];
|
| 282 |
+
return p ? '<img class="thumb" loading="lazy" src="' + esc(p.gt) + '" alt="">' : '<span class="thumb none">暂无样例</span>';
|
| 283 |
+
}
|
| 284 |
|
| 285 |
+
/* ---------- 采集装置示意 ---------- */
|
| 286 |
function rigSvg(d) {
|
| 287 |
var r = d.rig || {}, W = 320, H = 200, cx = 160, cy = 118, out = [];
|
| 288 |
out.push('<svg class="rig" viewBox="0 0 ' + W + " " + H + '" role="img" aria-label="' + esc(d.name + " 采集装置示意") + '">');
|
|
|
|
| 314 |
out.push('<rect x="' + (hx - 6) + '" y="' + (hy + 10) + '" width="12" height="8" rx="1.5" fill="' + col + '"/>');
|
| 315 |
out.push('<text x="12" y="22" font-size="12" fill="var(--muted)">' + (r.pseudoEgo ? "固定于眼高(模拟第一视角)" : (r.fisheye ? "第一视角 · 宽视场" : "第一视角")) + (r.mono ? " · 黑白" : "") + "</text>");
|
| 316 |
}
|
|
|
|
| 317 |
var hx2 = cx, hy2 = cy + 10;
|
| 318 |
out.push('<g fill="var(--surface)" stroke="var(--ink)" stroke-width="1.4" stroke-linejoin="round">');
|
| 319 |
out.push('<path d="M' + (hx2 - 15) + " " + (hy2 + 22) + " Q" + (hx2 - 19) + " " + (hy2 + 2) + " " + (hx2 - 14) + " " + (hy2 - 6) + " L" + (hx2 + 14) + " " + (hy2 - 6) + " Q" + (hx2 + 19) + " " + (hy2 + 4) + " " + (hx2 + 15) + " " + (hy2 + 22) + ' Z"/>');
|
|
|
|
| 326 |
out.push('<g transform="translate(40 40)"><rect x="-12" y="-9" width="22" height="18" rx="2" fill="none" stroke="var(--muted)" stroke-width="1.5"/><line x1="-16" y1="-14" x2="16" y2="14" stroke="var(--accent)" stroke-width="2"/></g>');
|
| 327 |
out.push('<text x="62" y="45" font-size="12" fill="var(--muted)">��� RGB 图像</text>');
|
| 328 |
}
|
| 329 |
+
var foot = r.synth ? "渲染生成" : (r.wild && !r.ego) ? "网络 / 日常图像" : r.scanner ? "扫描仪多相机环" : "";
|
| 330 |
+
if (foot) out.push('<text x="12" y="' + (H - 12) + '" font-size="12" fill="var(--muted)">' + foot + "</text>");
|
|
|
|
| 331 |
out.push("</svg>");
|
| 332 |
return out.join("");
|
| 333 |
}
|
| 334 |
+
function flow(steps) { return '<div class="flow">' + steps.map(function (s, i) { return (i ? '<span class="arr" aria-hidden="true">→</span>' : "") + '<span class="step">' + esc(s) + "</span>"; }).join("") + "</div>"; }
|
| 335 |
|
| 336 |
+
/* ---------- 总览 ---------- */
|
|
|
|
|
|
|
|
|
|
|
|
|
| 337 |
function vOverview() {
|
| 338 |
var ds = DATA.datasets, cnt = {};
|
| 339 |
ds.forEach(function (d) { cnt[d.status] = (cnt[d.status] || 0) + 1; });
|
| 340 |
+
var withPrev = ds.filter(function (d) { return nPrev(d); }).length;
|
| 341 |
+
var h = ['<section class="view">'];
|
| 342 |
+
h.push('<div class="lead"><h1>手部数据集,按来源和标注方法分类</h1><p>' + esc(DATA.meta.goal) + "</p></div>");
|
| 343 |
+
h.push('<div class="stats"><div><b>' + ds.length + '</b><span class="muted">个数据集</span></div><div><b>' + withPrev + '</b><span class="muted">个有样例</span></div>' + ORDER.map(function (s) { return "<div>" + stChip(s) + "<b>" + (cnt[s] || 0) + "</b></div>"; }).join("") + "</div>");
|
| 344 |
+
|
| 345 |
+
h.push('<div class="part">' + partHead("分布矩阵", "行是标注方法,按 shape 真值可信度从高到低;列是数据来源。点名称看详情。"));
|
| 346 |
+
h.push('<div class="scroll-x"><table class="matrix"><thead><tr><th>标注方法</th>');
|
| 347 |
DATA.meta.sources.forEach(function (s) { h.push("<th>" + esc(s.name) + "<small>" + esc(s.desc) + "</small></th>"); });
|
| 348 |
h.push("</tr></thead><tbody>");
|
|
|
|
| 349 |
DATA.meta.methods.forEach(function (m) {
|
| 350 |
+
h.push('<tr><th><a href="#methods" data-jump="m-' + m.id + '">' + esc(m.name) + "</a>" + tierChip(TIER_OF[m.id]) + "</th>");
|
| 351 |
DATA.meta.sources.forEach(function (s) {
|
| 352 |
var list = sorted(ds.filter(function (d) { return d.method === m.id && d.source === s.id; }));
|
| 353 |
+
h.push("<td>" + (list.length ? '<div class="chips">' + list.map(function (d) { return dsLink(d); }).join("") + "</div>" : '<span class="empty-cell" aria-label="无">·</span>') + "</td>");
|
| 354 |
});
|
| 355 |
h.push("</tr>");
|
| 356 |
});
|
| 357 |
+
h.push('</tbody></table></div><div class="legend"><span>状态:</span>' + ORDER.map(stChip).join("") + "</div></div>");
|
|
|
|
| 358 |
|
|
|
|
|
|
|
|
|
|
| 359 |
var p0 = ds.filter(function (d) { return d.status === "p0"; });
|
| 360 |
+
h.push('<div class="cols2"><div class="part">' + partHead("建议先接入") + '<div class="pick">');
|
| 361 |
+
p0.forEach(function (d) { h.push('<a href="#ds-' + d.id + '">' + stChip(d.status) + "<b>" + esc(d.name) + '</b><span class="d">' + esc(d.fills) + "</span></a>"); });
|
| 362 |
+
h.push("</div></div>");
|
| 363 |
+
h.push('<div class="part">' + partHead("shape 真值分层", "只有 S1 到 S3 和合成数据用来监督 SOMA shape。") + '<div class="tierbar">');
|
| 364 |
+
DATA.meta.tiers.forEach(function (t) { h.push("<div>" + tierChip(t.id) + "<b>" + esc(t.name) + '</b><span class="muted">' + esc(t.desc) + "</span></div>"); });
|
| 365 |
+
h.push("</div></div></div></section>");
|
| 366 |
return h.join("");
|
| 367 |
}
|
| 368 |
|
| 369 |
+
/* ---------- 数据集目录 ---------- */
|
| 370 |
function opts(list, cur, all) { return '<option value="">' + all + "</option>" + list.map(function (x) { return '<option value="' + x.id + '"' + (x.id === cur ? " selected" : "") + ">" + esc(x.name) + "</option>"; }).join(""); }
|
| 371 |
function vCatalog() {
|
| 372 |
+
var h = ['<section class="view"><div class="lead"><h1>数据集</h1><p>按状态分组。缩略图是 GT 叠加样例,点开看完整信息。</p></div>'];
|
| 373 |
+
h.push('<div class="part"><form class="filters" id="ff" role="search">');
|
| 374 |
+
h.push('<label for="f-source">数据来源<select id="f-source">' + opts(DATA.meta.sources, filt.source, "全部") + "</select></label>");
|
| 375 |
+
h.push('<label for="f-method">标注方法<select id="f-method">' + opts(DATA.meta.methods, filt.method, "全部") + "</select></label>");
|
| 376 |
+
h.push('<label for="f-tier">shape 层级<select id="f-tier">' + opts(DATA.meta.tiers.map(function (t) { return { id: t.id, name: (t.id === "-" ? "—" : t.id) + " " + t.name }; }), filt.tier, "全部") + "</select></label>");
|
| 377 |
+
h.push('<label class="q" for="f-q">搜索<input id="f-q" type="search" placeholder="名称、相机、真值…" value="' + esc(filt.q) + '"></label>');
|
| 378 |
+
h.push('<label class="ck" for="f-prev"><input id="f-prev" type="checkbox"' + (filt.hasPrev ? " checked" : "") + ">只看有样例</label>");
|
| 379 |
+
h.push('<button type="button" id="f-reset">清除</button></form><p class="count" id="cnt" aria-live="polite"></p></div>');
|
| 380 |
+
h.push('<div id="groups" class="groups"></div></section>');
|
|
|
|
| 381 |
return h.join("");
|
| 382 |
}
|
| 383 |
function renderRows() {
|
| 384 |
var q = filt.q.trim().toLowerCase();
|
| 385 |
+
var list = DATA.datasets.filter(function (d) {
|
| 386 |
if (filt.source && d.source !== filt.source) return false;
|
| 387 |
if (filt.method && d.method !== filt.method) return false;
|
| 388 |
if (filt.tier && d.tier !== filt.tier) return false;
|
| 389 |
+
if (filt.hasPrev && !nPrev(d)) return false;
|
| 390 |
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; }
|
| 391 |
return true;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 392 |
});
|
| 393 |
+
document.getElementById("cnt").textContent = "显示 " + list.length + " / " + DATA.datasets.length + " 个";
|
| 394 |
+
var h = [];
|
| 395 |
+
if (!list.length) h.push('<p class="empty">没有符合条件的数据集。换个条件,或点「清除」。</p>');
|
| 396 |
+
ORDER.forEach(function (st) {
|
| 397 |
+
var g = list.filter(function (d) { return d.status === st; }).sort(function (a, b) { return a.name.localeCompare(b.name); });
|
| 398 |
+
if (!g.length) return;
|
| 399 |
+
h.push('<div class="group"><div class="group-h">' + stChip(st) + '<span class="muted">' + esc(M.status[st].desc) + " · " + g.length + ' 个</span></div><div class="rows">');
|
| 400 |
+
g.forEach(function (d) {
|
| 401 |
+
h.push('<a class="row" href="#ds-' + d.id + '">' + thumb(d));
|
| 402 |
+
h.push('<span class="nm"><b>' + esc(d.name) + '</b><span class="muted small">' + esc(d.year) + "</span></span>");
|
| 403 |
+
h.push('<span class="two small"><span>' + esc(M.source[d.source].name) + '</span><span class="muted">' + esc(M.method[d.method].name) + "</span></span>");
|
| 404 |
+
h.push('<span class="small">' + tierChip(d.tier) + " " + esc(d.gt) + "</span>");
|
| 405 |
+
h.push('<span class="small muted clip">' + esc([d.subjects, d.scale].filter(Boolean).join(";") || "规模未列") + "</span></a>");
|
| 406 |
+
});
|
| 407 |
+
h.push("</div></div>");
|
| 408 |
+
});
|
| 409 |
+
document.getElementById("groups").innerHTML = h.join("");
|
| 410 |
}
|
| 411 |
function bindCatalog() {
|
| 412 |
+
["source", "method", "tier"].forEach(function (k) { document.getElementById("f-" + k).addEventListener("change", function (e) { filt[k] = e.target.value; renderRows(); }); });
|
|
|
|
|
|
|
| 413 |
document.getElementById("f-q").addEventListener("input", function (e) { filt.q = e.target.value; renderRows(); });
|
| 414 |
+
document.getElementById("f-prev").addEventListener("change", function (e) { filt.hasPrev = e.target.checked; renderRows(); });
|
| 415 |
document.getElementById("ff").addEventListener("submit", function (e) { e.preventDefault(); });
|
| 416 |
+
document.getElementById("f-reset").addEventListener("click", function () { filt = { source: "", method: "", tier: "", q: "", hasPrev: false }; render(); });
|
| 417 |
renderRows();
|
| 418 |
}
|
| 419 |
|
| 420 |
+
/* ---------- 详情 ---------- */
|
| 421 |
+
function vDetail(id) {
|
| 422 |
+
var d = BYID[id];
|
| 423 |
+
if (!d) return '<section class="view"><p class="err">找不到数据集「' + esc(id) + '」。回到<a href="#catalog">数据集</a>。</p></section>';
|
| 424 |
+
var m = M.method[d.method], s = M.source[d.source], rt = M.route[d.route], t = M.tier[d.tier];
|
| 425 |
+
var all = sorted(DATA.datasets), idx = all.indexOf(d), prev = all[idx - 1], next = all[idx + 1];
|
| 426 |
+
var h = ['<section class="view"><p class="crumb"><a href="#catalog">数据集</a> / ' + esc(M.status[d.status].name) + "</p>"];
|
| 427 |
+
|
| 428 |
+
h.push('<div class="dhead"><h1>' + esc(d.name) + '</h1><div class="chips">' + stChip(d.status) + (d.year ? '<span class="chip tag">' + esc(d.year) + "</span>" : "") + (d.tags || []).filter(function (x) { return x !== "新增" && x !== "不建议"; }).map(function (x) { return '<span class="chip tag">' + esc(x) + "</span>"; }).join("") + '</div><p class="lead"><span>' + esc(d.fills) + "</span></p></div>");
|
| 429 |
+
|
| 430 |
+
h.push('<div class="keys">');
|
| 431 |
+
h.push('<div><span class="label">数据来源</span><span class="v">' + esc(s.name) + "</span></div>");
|
| 432 |
+
h.push('<div><span class="label">标注方法</span><span class="v"><a href="#methods" data-jump="m-' + m.id + '">' + esc(m.name) + "</a></span></div>");
|
| 433 |
+
h.push('<div><span class="label">真值</span><span class="v">' + esc(d.gt) + "</span></div>");
|
| 434 |
+
h.push('<div><span class="label">shape 层级</span><span class="v">' + tierChip(d.tier) + " " + esc(t.name) + "</span></div>");
|
| 435 |
+
h.push('<div><span class="label">转到 SOMA</span><span class="v"><a href="#soma">' + esc(rt.id + " " + rt.name) + "</a>" + (rt.shape ? "" : '<br><span class="muted small">不监督 shape</span>') + "</span></div>");
|
| 436 |
+
h.push("</div>");
|
| 437 |
+
|
| 438 |
+
var pv = PREV[d.id] || [];
|
| 439 |
+
h.push('<div class="part">' + partHead("样例", pv.length ? "左:原始 RGB;右:GT 叠加。" : ""));
|
| 440 |
+
if (pv.length) {
|
| 441 |
+
h.push('<div class="gallery">');
|
| 442 |
+
pv.forEach(function (p, i) {
|
| 443 |
+
h.push('<div class="sample"><div class="pair"><figure><img loading="lazy" src="' + esc(p.rgb) + '" alt="' + esc(d.name + " 样例 " + (i + 1) + " RGB") + '"><figcaption>RGB</figcaption></figure><figure><img loading="lazy" src="' + esc(p.gt) + '" alt="' + esc(d.name + " 样例 " + (i + 1) + " GT 叠加") + '"><figcaption>' + esc(p.source || "GT 叠加") + "</figcaption></figure></div>" + (p.caption ? '<p class="small muted">' + esc(p.caption) + "</p>" : "") + "</div>");
|
| 444 |
+
});
|
| 445 |
+
h.push("</div>");
|
| 446 |
+
} else {
|
| 447 |
+
h.push('<div class="empty"><p>还没有样例。添加方法见<a href="#samples">样例</a>页。</p>' + ((d.team || []).length ? "<p>团队已有可视化:" + d.team.map(function (x) { return '<a href="' + esc(x.url) + '" target="_blank" rel="noopener">' + esc(x.label.replace(/^团队(图册|视频):/, "")) + "</a>"; }).join(",") + "</p>" : "") + "</div>");
|
| 448 |
+
}
|
| 449 |
+
h.push("</div>");
|
| 450 |
+
|
| 451 |
+
h.push('<div class="dgrid"><div class="panel"><h2>相机与规模</h2><dl class="facts">');
|
| 452 |
+
h.push("<dt>相机</dt><dd>" + esc(d.camera || "未列") + "</dd>");
|
| 453 |
+
h.push("<dt>受试者</dt><dd>" + esc(d.subjects || "未列") + "</dd>");
|
| 454 |
+
h.push("<dt>规模</dt><dd>" + esc(d.scale || "未列") + "</dd></dl>");
|
| 455 |
+
if (d.risk) h.push('<div class="note"><span class="label">注意</span><p>' + esc(d.risk) + "</p></div>");
|
| 456 |
+
h.push('</div><div class="panel"><h2>采集与标注流程</h2>' + rigSvg(d) + flow(m.steps) + '<p class="small muted">按相机配置绘制的示意,不是真实画面;琥珀色圆点表示手上贴了光学 marker。</p></div></div>');
|
| 457 |
+
|
| 458 |
+
var links = (d.links || []).concat((d.team || []).map(function (x) { return { label: x.label, url: x.url }; }));
|
| 459 |
+
if (links.length) h.push('<div class="part">' + partHead("链接") + '<ul class="links">' + links.map(function (x) { return '<li><a href="' + esc(x.url) + '" target="_blank" rel="noopener">' + esc(x.label) + "</a></li>"; }).join("") + "</ul></div>");
|
| 460 |
+
h.push('<div class="pager"><span>' + (prev ? '← <a href="#ds-' + prev.id + '">' + esc(prev.name) + "</a>" : "") + "</span><span>" + (next ? '<a href="#ds-' + next.id + '">' + esc(next.name) + "</a> →" : "") + "</span></div></section>");
|
| 461 |
+
return h.join("");
|
| 462 |
+
}
|
| 463 |
+
|
| 464 |
+
/* ---------- 标注方法 ---------- */
|
| 465 |
function vMethods() {
|
| 466 |
+
var h = ['<section class="view"><div class="lead"><h1>标注方法</h1><p>按 shape 真值可信度从高到低排列。每种方法列出流程、可信度、常见问题、转到 SOMA 的路线和用到它的数据集。</p></div>'];
|
| 467 |
+
h.push('<nav class="toc" aria-label="方法目录">' + DATA.meta.methods.map(function (m) { return '<a href="#methods" data-jump="m-' + m.id + '">' + esc(m.name) + "</a>"; }).join("") + "</nav>");
|
| 468 |
DATA.meta.methods.forEach(function (m) {
|
| 469 |
var list = sorted(DATA.datasets.filter(function (d) { return d.method === m.id; }));
|
| 470 |
+
h.push('<article class="method" id="m-' + m.id + '"><div class="method-h"><h2>' + esc(m.name) + "</h2>" + tierChip(TIER_OF[m.id]) + '<span class="muted small">' + list.length + " 个数据集</span></div>" + flow(m.steps));
|
| 471 |
+
h.push('<div class="mgrid"><dl class="kv"><dt>可信度</dt><dd>' + esc(m.trust) + "</dd><dt>常见问题</dt><dd>" + esc(m.issues) + '</dd><dt>转到 SOMA</dt><dd><a href="#soma">' + esc(m.route) + '</a></dd></dl><div class="chips" style="align-content:start">' + list.map(function (d) { return dsLink(d); }).join("") + "</div></div></article>");
|
|
|
|
|
|
|
| 472 |
});
|
| 473 |
h.push("</section>");
|
| 474 |
return h.join("");
|
| 475 |
}
|
| 476 |
|
| 477 |
+
/* ---------- 转到 SOMA ---------- */
|
| 478 |
function vSoma() {
|
| 479 |
+
var h = ['<section class="view"><div class="lead"><h1>转到 SOMA hand</h1><p>没有公开数据集原生使用 SOMA 标注。SOMA-X 的 <span class="mono">SOMAHandLayer</span> 官方支持 SOMA 原生、MANO、MHR 三种手部后端(Apache-2.0)。映射到 SOMA 拓扑后,要监督原生 shape 还需要再拟合一次。</p></div>'];
|
| 480 |
+
h.push('<div class="part">' + partHead("四步流程") + '<div class="pipe">');
|
| 481 |
+
h.push('<div><span class="label">1 · 原始真值</span><ul><li>扫描网格</li><li>MANO 参数或网格</li><li>SMPL-X / SMPL-H</li><li>MHR 参数</li><li>3D / 2D 关键点</li></ul></div>');
|
| 482 |
+
h.push('<div><span class="label">2 · 映射到 SOMA 拓扑</span><ul><li>SOMAHandLayer 的 MANO 后端</li><li>SOMAHandLayer 的 MHR 后端</li><li>SMPL-X 先取手部</li><li>关键点先定关节对应</li></ul></div>');
|
| 483 |
+
h.push('<div><span class="label">3 · SOMA 原生重拟合</span><ul><li>拟合 20 维 identity 和 pose</li><li>按数据集统计顶点残差</li><li>残差超阈值不监督 shape</li></ul></div>');
|
| 484 |
+
h.push('<div><span class="label">4 · 训练监督</span><ul><li>shape:S1 到 S3、合成</li><li>pose:所有 3D 来源</li><li>2D 重投影:带 2D 的来源</li><li>伪标签只做弱监督</li></ul></div>');
|
| 485 |
+
h.push("</div></div>");
|
| 486 |
+
h.push('<div class="part">' + partHead("转换路线", "每张卡片对应一种原始真值格式。") + '<div class="routes">');
|
| 487 |
DATA.meta.routes.forEach(function (r) {
|
| 488 |
+
var list = DATA.datasets.filter(function (d) { return d.route === r.id; });
|
| 489 |
+
h.push('<div class="route"><div class="route-h"><span class="mono">' + r.id + "</span><h3>" + esc(r.name) + '</h3></div><p class="small">' + esc(r.how) + '</p><p class="small">' + (r.shape ? '<span class="yes">可监督 shape</span>' : '<span class="nop">不监督 shape</span>') + ' · <span class="muted">' + list.length + " 个数据集</span></p></div>");
|
| 490 |
});
|
| 491 |
+
h.push("</div></div>");
|
| 492 |
+
h.push('<div class="cols2"><div class="part">' + partHead("注意事项") + '<ul class="bul">');
|
| 493 |
+
h.push("<li>MANO 21 点的指尖是网格顶点,与 SOMA 关节定义不同;关键点类数据集要先定对应表。</li>");
|
| 494 |
+
h.push("<li>EgoRenderer 已经做过一次原始网格到 MANO 的拟合,再转 SOMA 是第二次,残差分开记录。</li>");
|
| 495 |
+
h.push("<li>单目下 shape 和尺度耦合;评测单独报标准姿态下的顶点误差和骨长误差。</li>");
|
| 496 |
h.push("<li>SAM 3D Body 输出 MHR,可以走 R5 给野外图像生成伪标签;它的训练数据是否公开未查到。</li>");
|
| 497 |
+
h.push('</ul></div><div class="part">' + partHead("参考") + '<ul class="links"><li><a href="https://github.com/NVlabs/SOMA-X" target="_blank" rel="noopener">NVlabs/SOMA-X(代码与手部资产)</a></li><li><a href="https://arxiv.org/abs/2603.16858" target="_blank" rel="noopener">SOMA,arXiv:2603.16858</a></li><li><a href="https://arxiv.org/abs/2602.15989" target="_blank" rel="noopener">SAM 3D Body,arXiv:2602.15989</a></li></ul></div></div></section>');
|
|
|
|
| 498 |
return h.join("");
|
| 499 |
}
|
| 500 |
|
| 501 |
+
/* ---------- 样例 ---------- */
|
| 502 |
function vSamples() {
|
| 503 |
+
var ds = sorted(DATA.datasets), have = ds.filter(nPrev), none = ds.filter(function (d) { return !nPrev(d); });
|
| 504 |
+
var pairs = have.reduce(function (a, d) { return a + nPrev(d); }, 0);
|
| 505 |
+
var h = ['<section class="view"><div class="lead"><h1>样例</h1><p>每对样例是同一帧的原始 RGB 和 GT 叠加。图片放在独立的 HF Dataset 仓库或本站 media 目录,登记在 <span class="mono">data/previews.json</span>。</p></div>'];
|
| 506 |
+
h.push('<div class="part">' + partHead("覆盖情况", have.length + " 个数据集共 " + pairs + " 对;" + none.length + " 个还没有。") );
|
| 507 |
+
h.push('<div class="group"><span class="label">已有样例(数字为对数)</span><div class="chips">' + have.map(function (d) { return dsLink(d, true); }).join("") + "</div></div>");
|
| 508 |
+
h.push('<div class="group"><span class="label">暂无样例</span><div class="chips">' + none.map(function (d) { return dsLink(d); }).join("") + "</div></div></div>");
|
| 509 |
+
h.push('<div class="part">' + partHead("怎么添加", "三种方式,按场景选一种。") + '<div class="ways">');
|
| 510 |
+
h.push('<div class="way rec"><h3>在数据所在的服务器上批量同步(推荐)</h3><p class="small">在存放数据集的机器上运行。图片传到独立的 HF Dataset 仓库并固定版本,Space 只登记 URL,网页不依赖 SSH。可以直接给已渲染好的叠加图,也可以给原图加网格(MANO 或 SOMA)由脚本渲染。</p><pre class="code">export HF_TOKEN=hf_xxx\npython tools/server_sync.py manifest.jsonl \\\n --media-repo DarthSoluke/EgoNetDatasetResearch-media \\\n --space DarthSoluke/EgoNetDatasetResearch</pre><pre class="code">{"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"}</pre></div>');
|
| 511 |
+
h.push('<div class="way"><h3>从团队图册导入</h3><p class="small">复用 nine-source Space 里已经做好的叠加图,每个数据集取若干对。</p><pre class="code">python tools/import_team_previews.py --per 4</pre></div>');
|
| 512 |
+
h.push('<div class="way"><h3>手动加一对</h3><p class="small">已有一张 RGB 和一张叠加图时用。</p><pre class="code">python tools/add_preview.py hograspnet \\\n --rgb a_rgb.png --gt a_gt.png \\\n --caption "说明" --source "GT 来源"</pre></div>');
|
| 513 |
+
h.push("</div></div></section>");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 514 |
return h.join("");
|
| 515 |
}
|
| 516 |
|
|
|
|
| 524 |
else if (hash === "soma") html = vSoma();
|
| 525 |
else if (hash === "samples") html = vSamples();
|
| 526 |
else { html = vOverview(); view = "overview"; }
|
| 527 |
+
app.innerHTML = html + '<footer>整理于 ' + esc(DATA.meta.updated) + "。数值来自论文、项目页和团队图册;标「待���」的字段尚未确认。</footer>";
|
| 528 |
document.querySelectorAll("nav.tabs a").forEach(function (a) { if (a.getAttribute("data-v") === view) a.setAttribute("aria-current", "page"); else a.removeAttribute("aria-current"); });
|
| 529 |
if (hash === "catalog") bindCatalog();
|
| 530 |
if (pendingJump) { var el = document.getElementById(pendingJump); pendingJump = null; if (el) { el.scrollIntoView(); return; } }
|
|
|
|
| 547 |
fetch("data/datasets.json").then(function (r) { if (!r.ok) throw new Error(r.status); return r.json(); }),
|
| 548 |
fetch("data/previews.json").then(function (r) { return r.ok ? r.json() : {}; }).catch(function () { return {}; })
|
| 549 |
]).then(function (x) { boot(x[0], x[1]); }).catch(function () {
|
| 550 |
+
app.innerHTML = '<p class="err">没能读取 data/datasets.json。直接双击打开 HTML 时浏览器会拦截读取,请在本目录运行 <span class="mono">python -m http.server</span> 后访问,或部署到 Hugging Face Space。</p>';
|
| 551 |
});
|
| 552 |
})();
|
| 553 |
</script>
|
media/arctic/6057bab38e74308c02be_gt.jpg
ADDED
|
media/arctic/6057bab38e74308c02be_rgb.jpg
ADDED
|
media/arctic/a213dd95256ccccad7bc_gt.jpg
ADDED
|
media/arctic/a213dd95256ccccad7bc_rgb.jpg
ADDED
|
media/arctic/c4d53a1b79549c84e96d_gt.jpg
ADDED
|
media/arctic/c4d53a1b79549c84e96d_rgb.jpg
ADDED
|
media/arctic/e68425daa275c68f6f5d_gt.jpg
ADDED
|
media/arctic/e68425daa275c68f6f5d_rgb.jpg
ADDED
|
media/cocowb/780684ce08a2af76ddc4_gt.jpg
ADDED
|
media/cocowb/780684ce08a2af76ddc4_rgb.jpg
ADDED
|
media/cocowb/7e7716c112039185cc5e_gt.jpg
ADDED
|
media/cocowb/7e7716c112039185cc5e_rgb.jpg
ADDED
|
media/cocowb/9fcab59ec353483a0635_gt.jpg
ADDED
|
Git LFS Details
|
media/cocowb/9fcab59ec353483a0635_rgb.jpg
ADDED
|
Git LFS Details
|
media/cocowb/f59aa0ba82e64839e596_gt.jpg
ADDED
|
media/cocowb/f59aa0ba82e64839e596_rgb.jpg
ADDED
|
media/dexycb/6df9d4ead4d92a187a28_gt.jpg
ADDED
|
media/dexycb/6df9d4ead4d92a187a28_rgb.jpg
ADDED
|
media/dexycb/7e32dcf09cb0a2254256_gt.jpg
ADDED
|
media/dexycb/7e32dcf09cb0a2254256_rgb.jpg
ADDED
|
media/dexycb/8ffc14f49fff4b06cc73_gt.jpg
ADDED
|
media/dexycb/8ffc14f49fff4b06cc73_rgb.jpg
ADDED
|
media/dexycb/a128fbe7b45844ebb4e8_gt.jpg
ADDED
|
media/dexycb/a128fbe7b45844ebb4e8_rgb.jpg
ADDED
|
media/egodex/team_egodex_0_gt.jpg
ADDED
|
media/egodex/team_egodex_0_rgb.jpg
ADDED
|
media/egodex/team_egodex_1_gt.jpg
ADDED
|
media/egodex/team_egodex_1_rgb.jpg
ADDED
|
media/egodex/team_egodex_2_gt.jpg
ADDED
|
media/egodex/team_egodex_2_rgb.jpg
ADDED
|
media/egodex/team_egodex_3_gt.jpg
ADDED
|
media/egodex/team_egodex_3_rgb.jpg
ADDED
|
media/egoemg/team_egoemg_0_gt.jpg
ADDED
|
media/egoemg/team_egoemg_0_rgb.jpg
ADDED
|
media/egoemg/team_egoemg_1_gt.jpg
ADDED
|
media/egoemg/team_egoemg_1_rgb.jpg
ADDED
|
media/egoemg/team_egoemg_2_gt.jpg
ADDED
|
media/egoemg/team_egoemg_2_rgb.jpg
ADDED
|
media/egoemg/team_egoemg_3_gt.jpg
ADDED
|
media/egoemg/team_egoemg_3_rgb.jpg
ADDED
|
media/egopressure/team_egopressure_0_gt.jpg
ADDED
|
media/egopressure/team_egopressure_0_rgb.jpg
ADDED
|
media/egopressure/team_egopressure_1_gt.jpg
ADDED
|
media/egopressure/team_egopressure_1_rgb.jpg
ADDED
|
media/egopressure/team_egopressure_2_gt.jpg
ADDED
|