yangzijing commited on
Commit
c8ca84b
·
verified ·
1 Parent(s): 898bcdc

Show per-member coverage of external pose classes against three-source plus EgoRenderer reference

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. .gitattributes +139 -0
  2. pose_recluster_distinct_20261014/app.coverage_v2.js +61 -0
  3. pose_recluster_distinct_20261014/data.coverage_v2.js +0 -0
  4. pose_recluster_distinct_20261014/downloads/coverage/REPRODUCE.md +22 -0
  5. pose_recluster_distinct_20261014/downloads/coverage/RESULTS_ZH.md +21 -0
  6. pose_recluster_distinct_20261014/downloads/coverage/calibration.json +94 -0
  7. pose_recluster_distinct_20261014/downloads/coverage/calibration_members.json +0 -0
  8. pose_recluster_distinct_20261014/downloads/coverage/class_coverage.csv +115 -0
  9. pose_recluster_distinct_20261014/downloads/coverage/code/aggregate_coverage.py +54 -0
  10. pose_recluster_distinct_20261014/downloads/coverage/code/build_coverage_site.py +116 -0
  11. pose_recluster_distinct_20261014/downloads/coverage/code/check_coverage_browser.js +45 -0
  12. pose_recluster_distinct_20261014/downloads/coverage/code/cluster_common.py +39 -0
  13. pose_recluster_distinct_20261014/downloads/coverage/code/coverage_visuals.py +55 -0
  14. pose_recluster_distinct_20261014/downloads/coverage/code/exact_coverage.py +75 -0
  15. pose_recluster_distinct_20261014/downloads/coverage/code/freeze_coverage.py +34 -0
  16. pose_recluster_distinct_20261014/downloads/coverage/code/prepare_publication.py +32 -0
  17. pose_recluster_distinct_20261014/downloads/coverage/code/publish_coverage.py +44 -0
  18. pose_recluster_distinct_20261014/downloads/coverage/code/update_web.py +47 -0
  19. pose_recluster_distinct_20261014/downloads/coverage/code/validate_coverage.py +35 -0
  20. pose_recluster_distinct_20261014/downloads/coverage/code/verify_public_assets.py +38 -0
  21. pose_recluster_distinct_20261014/downloads/coverage/code/visualize.py +166 -0
  22. pose_recluster_distinct_20261014/downloads/coverage/code/web/app.js +61 -0
  23. pose_recluster_distinct_20261014/downloads/coverage/code/web/index.html +16 -0
  24. pose_recluster_distinct_20261014/downloads/coverage/code/web/style.css +4 -0
  25. pose_recluster_distinct_20261014/downloads/coverage/coverage_protocol.json +41 -0
  26. pose_recluster_distinct_20261014/downloads/coverage/coverage_visual_checks.json +1322 -0
  27. pose_recluster_distinct_20261014/downloads/coverage/display_selection_amendment.json +6 -0
  28. pose_recluster_distinct_20261014/downloads/coverage/displayed_member_links.json +211 -0
  29. pose_recluster_distinct_20261014/downloads/coverage/exact_engine.json +10 -0
  30. pose_recluster_distinct_20261014/downloads/coverage/frozen_protocol_sha256.json +4 -0
  31. pose_recluster_distinct_20261014/downloads/coverage/input_sha256.json +23 -0
  32. pose_recluster_distinct_20261014/downloads/coverage/local_coverage_browser.json +474 -0
  33. pose_recluster_distinct_20261014/downloads/coverage/member_coverage.csv.gz +3 -0
  34. pose_recluster_distinct_20261014/downloads/coverage/new_media_sha256.json +444 -0
  35. pose_recluster_distinct_20261014/downloads/coverage/numerical_validation.json +493 -0
  36. pose_recluster_distinct_20261014/downloads/coverage/reference_unit_codes.json +0 -0
  37. pose_recluster_distinct_20261014/downloads/coverage/source_coverage.csv +15 -0
  38. pose_recluster_distinct_20261014/downloads/coverage/summary.json +73 -0
  39. pose_recluster_distinct_20261014/downloads/coverage/threshold_sensitivity.csv +0 -0
  40. pose_recluster_distinct_20261014/index.html +7 -6
  41. pose_recluster_distinct_20261014/index_before_coverage.html +15 -0
  42. pose_recluster_distinct_20261014/media/051488f34a7b81d90530_crop.jpg +0 -0
  43. pose_recluster_distinct_20261014/media/051488f34a7b81d90530_full.jpg +3 -0
  44. pose_recluster_distinct_20261014/media/0706b91076bbbfac27c5_crop.jpg +0 -0
  45. pose_recluster_distinct_20261014/media/0706b91076bbbfac27c5_full.jpg +3 -0
  46. pose_recluster_distinct_20261014/media/0b30c6ac8b8a0fb34665_crop.jpg +0 -0
  47. pose_recluster_distinct_20261014/media/0b30c6ac8b8a0fb34665_full.jpg +0 -0
  48. pose_recluster_distinct_20261014/media/0c9121f9b810877ab40a_crop.jpg +0 -0
  49. pose_recluster_distinct_20261014/media/0c9121f9b810877ab40a_full.jpg +3 -0
  50. pose_recluster_distinct_20261014/media/1155d85f7d67fdea5ca4_crop.jpg +0 -0
.gitattributes CHANGED
@@ -1321,3 +1321,142 @@ pose_recluster_distinct_20261014/media/ref10_f9919f0225f804f03b15_full.jpg filte
1321
  pose_recluster_distinct_20261014/media/ref10_fa18d41ed0700501d3a5_full.jpg filter=lfs diff=lfs merge=lfs -text
1322
  pose_recluster_distinct_20261014/media/ref10_fe3c36b17d60b2d9ed8c_full.jpg filter=lfs diff=lfs merge=lfs -text
1323
  pose_recluster_distinct_20261014/media/ref10_fe3e6e43948390566593_full.jpg filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1321
  pose_recluster_distinct_20261014/media/ref10_fa18d41ed0700501d3a5_full.jpg filter=lfs diff=lfs merge=lfs -text
1322
  pose_recluster_distinct_20261014/media/ref10_fe3c36b17d60b2d9ed8c_full.jpg filter=lfs diff=lfs merge=lfs -text
1323
  pose_recluster_distinct_20261014/media/ref10_fe3e6e43948390566593_full.jpg filter=lfs diff=lfs merge=lfs -text
1324
+ pose_recluster_distinct_20261014/media/051488f34a7b81d90530_full.jpg filter=lfs diff=lfs merge=lfs -text
1325
+ pose_recluster_distinct_20261014/media/0706b91076bbbfac27c5_full.jpg filter=lfs diff=lfs merge=lfs -text
1326
+ pose_recluster_distinct_20261014/media/0c9121f9b810877ab40a_full.jpg filter=lfs diff=lfs merge=lfs -text
1327
+ pose_recluster_distinct_20261014/media/1155d85f7d67fdea5ca4_full.jpg filter=lfs diff=lfs merge=lfs -text
1328
+ pose_recluster_distinct_20261014/media/1484a4fa916d38805fbd_full.jpg filter=lfs diff=lfs merge=lfs -text
1329
+ pose_recluster_distinct_20261014/media/1c3e2d6266babd3546e4_full.jpg filter=lfs diff=lfs merge=lfs -text
1330
+ pose_recluster_distinct_20261014/media/1f23bff3fd47fb3d88e5_full.jpg filter=lfs diff=lfs merge=lfs -text
1331
+ pose_recluster_distinct_20261014/media/22caad7a50fba7e5a48c_full.jpg filter=lfs diff=lfs merge=lfs -text
1332
+ pose_recluster_distinct_20261014/media/26ecc41219db0bb6833e_full.jpg filter=lfs diff=lfs merge=lfs -text
1333
+ pose_recluster_distinct_20261014/media/314f2995e77109844488_full.jpg filter=lfs diff=lfs merge=lfs -text
1334
+ pose_recluster_distinct_20261014/media/3fb96c47d1e53b61c15a_full.jpg filter=lfs diff=lfs merge=lfs -text
1335
+ pose_recluster_distinct_20261014/media/4170659ac3b73692c561_full.jpg filter=lfs diff=lfs merge=lfs -text
1336
+ pose_recluster_distinct_20261014/media/424addca86b89fee040efda7_full.jpg filter=lfs diff=lfs merge=lfs -text
1337
+ pose_recluster_distinct_20261014/media/426d44a4aecf394cce74_full.jpg filter=lfs diff=lfs merge=lfs -text
1338
+ pose_recluster_distinct_20261014/media/481d81d40a4872823842_full.jpg filter=lfs diff=lfs merge=lfs -text
1339
+ pose_recluster_distinct_20261014/media/49a2ec37f0d860cf4e5f_full.jpg filter=lfs diff=lfs merge=lfs -text
1340
+ pose_recluster_distinct_20261014/media/51fa51d203ef3894e730_full.jpg filter=lfs diff=lfs merge=lfs -text
1341
+ pose_recluster_distinct_20261014/media/52e61ba8574c1c21171f_full.jpg filter=lfs diff=lfs merge=lfs -text
1342
+ pose_recluster_distinct_20261014/media/68c621ec6f25af92b6d2_full.jpg filter=lfs diff=lfs merge=lfs -text
1343
+ pose_recluster_distinct_20261014/media/7013cfedf62948731c5ac3c6_full.jpg filter=lfs diff=lfs merge=lfs -text
1344
+ pose_recluster_distinct_20261014/media/7a659401c102ee6c4d53_full.jpg filter=lfs diff=lfs merge=lfs -text
1345
+ pose_recluster_distinct_20261014/media/7ad41e661baf307e75a0_full.jpg filter=lfs diff=lfs merge=lfs -text
1346
+ pose_recluster_distinct_20261014/media/7cbee0066bf73c1230ec_full.jpg filter=lfs diff=lfs merge=lfs -text
1347
+ pose_recluster_distinct_20261014/media/7e9540aab42ca1f283f1_full.jpg filter=lfs diff=lfs merge=lfs -text
1348
+ pose_recluster_distinct_20261014/media/8fc44d37c06f82c2bccfe0a7_full.jpg filter=lfs diff=lfs merge=lfs -text
1349
+ pose_recluster_distinct_20261014/media/9186e37ea320e67eea4cc4b3_full.jpg filter=lfs diff=lfs merge=lfs -text
1350
+ pose_recluster_distinct_20261014/media/9b7689bc046883d6812ad365_full.jpg filter=lfs diff=lfs merge=lfs -text
1351
+ pose_recluster_distinct_20261014/media/a3c7b0983f4f67c9774a9d1d_full.jpg filter=lfs diff=lfs merge=lfs -text
1352
+ pose_recluster_distinct_20261014/media/a9e4dfb5604a2cc763fa_full.jpg filter=lfs diff=lfs merge=lfs -text
1353
+ pose_recluster_distinct_20261014/media/b079d1f7948614710a25_full.jpg filter=lfs diff=lfs merge=lfs -text
1354
+ pose_recluster_distinct_20261014/media/c3dea54e8a31e289b3c8_full.jpg filter=lfs diff=lfs merge=lfs -text
1355
+ pose_recluster_distinct_20261014/media/cf6ac3e1e3049c217238_full.jpg filter=lfs diff=lfs merge=lfs -text
1356
+ pose_recluster_distinct_20261014/media/d0a7a93ffcf0c93fb543_full.jpg filter=lfs diff=lfs merge=lfs -text
1357
+ pose_recluster_distinct_20261014/media/e1707af66b16c44ca22f217e_full.jpg filter=lfs diff=lfs merge=lfs -text
1358
+ pose_recluster_distinct_20261014/media/e233df5f771af8c53fc3_full.jpg filter=lfs diff=lfs merge=lfs -text
1359
+ pose_recluster_distinct_20261014/media/e526bda05cfc730b524c_full.jpg filter=lfs diff=lfs merge=lfs -text
1360
+ pose_recluster_distinct_20261014/media/e60f1e573b15059b28a6a89d_full.jpg filter=lfs diff=lfs merge=lfs -text
1361
+ pose_recluster_distinct_20261014/media/e819135ae0a98c833798_full.jpg filter=lfs diff=lfs merge=lfs -text
1362
+ pose_recluster_distinct_20261014/media/e84ccd22e73178c16b417d29_full.jpg filter=lfs diff=lfs merge=lfs -text
1363
+ pose_recluster_distinct_20261014/media/e8ba03215a0dee415f9f_full.jpg filter=lfs diff=lfs merge=lfs -text
1364
+ pose_recluster_distinct_20261014/media/ego005_37f310961c5fbd09a2f3_full.jpg filter=lfs diff=lfs merge=lfs -text
1365
+ pose_recluster_distinct_20261014/media/ego005_5e5edc77f0229c182a82_full.jpg filter=lfs diff=lfs merge=lfs -text
1366
+ pose_recluster_distinct_20261014/media/ego005_6c39df0ee7ed048412a3_full.jpg filter=lfs diff=lfs merge=lfs -text
1367
+ pose_recluster_distinct_20261014/media/ego005_77557dd1cc89456bbda8_full.jpg filter=lfs diff=lfs merge=lfs -text
1368
+ pose_recluster_distinct_20261014/media/ego005_af4e1989a0b734de5391_full.jpg filter=lfs diff=lfs merge=lfs -text
1369
+ pose_recluster_distinct_20261014/media/ego005_d3a520f3ef45ba8fb1ec_full.jpg filter=lfs diff=lfs merge=lfs -text
1370
+ pose_recluster_distinct_20261014/media/f627d873be8bbdf466ab2122_full.jpg filter=lfs diff=lfs merge=lfs -text
1371
+ pose_recluster_distinct_20261014/media/f8701460479562a2b8576134_full.jpg filter=lfs diff=lfs merge=lfs -text
1372
+ pose_recluster_distinct_20261014/media/f9e4b832088ad843ce26fc9a_full.jpg filter=lfs diff=lfs merge=lfs -text
1373
+ pose_recluster_distinct_20261014/media/ref10_0001a1db0911402d9ff7_full.jpg filter=lfs diff=lfs merge=lfs -text
1374
+ pose_recluster_distinct_20261014/media/ref10_02f8aaec7aff1e473573_full.jpg filter=lfs diff=lfs merge=lfs -text
1375
+ pose_recluster_distinct_20261014/media/ref10_05b875fc9a446e018429_full.jpg filter=lfs diff=lfs merge=lfs -text
1376
+ pose_recluster_distinct_20261014/media/ref10_08f3951ff7357505f937_full.jpg filter=lfs diff=lfs merge=lfs -text
1377
+ pose_recluster_distinct_20261014/media/ref10_094ff03480e89a370c5f_full.jpg filter=lfs diff=lfs merge=lfs -text
1378
+ pose_recluster_distinct_20261014/media/ref10_0d4aa62ee94d3db2e998_full.jpg filter=lfs diff=lfs merge=lfs -text
1379
+ pose_recluster_distinct_20261014/media/ref10_15ed71e38b6ecbfadad4_full.jpg filter=lfs diff=lfs merge=lfs -text
1380
+ pose_recluster_distinct_20261014/media/ref10_1835ccaf3facbadfab41_full.jpg filter=lfs diff=lfs merge=lfs -text
1381
+ pose_recluster_distinct_20261014/media/ref10_1c56e06b352d8543c362_full.jpg filter=lfs diff=lfs merge=lfs -text
1382
+ pose_recluster_distinct_20261014/media/ref10_2072780ada026a0d7ebc_full.jpg filter=lfs diff=lfs merge=lfs -text
1383
+ pose_recluster_distinct_20261014/media/ref10_22907852d24f216f0501_full.jpg filter=lfs diff=lfs merge=lfs -text
1384
+ pose_recluster_distinct_20261014/media/ref10_23728cf3de5e9f52bd29_full.jpg filter=lfs diff=lfs merge=lfs -text
1385
+ pose_recluster_distinct_20261014/media/ref10_25cf29a950e98346a3f2_full.jpg filter=lfs diff=lfs merge=lfs -text
1386
+ pose_recluster_distinct_20261014/media/ref10_2784e08a1eac608ccd67_full.jpg filter=lfs diff=lfs merge=lfs -text
1387
+ pose_recluster_distinct_20261014/media/ref10_283a2252c93fbe346f8a_full.jpg filter=lfs diff=lfs merge=lfs -text
1388
+ pose_recluster_distinct_20261014/media/ref10_323ca73ddb0e1cda0475_full.jpg filter=lfs diff=lfs merge=lfs -text
1389
+ pose_recluster_distinct_20261014/media/ref10_3244e021f8036886f6e1_full.jpg filter=lfs diff=lfs merge=lfs -text
1390
+ pose_recluster_distinct_20261014/media/ref10_330a0f3ff938db824f91_full.jpg filter=lfs diff=lfs merge=lfs -text
1391
+ pose_recluster_distinct_20261014/media/ref10_334bec23e4b8fdf5f897_full.jpg filter=lfs diff=lfs merge=lfs -text
1392
+ pose_recluster_distinct_20261014/media/ref10_33dcace2cb5c25ef8d59_full.jpg filter=lfs diff=lfs merge=lfs -text
1393
+ pose_recluster_distinct_20261014/media/ref10_3b3b2ae829c7ed4dbb20_full.jpg filter=lfs diff=lfs merge=lfs -text
1394
+ pose_recluster_distinct_20261014/media/ref10_3c1068063775a7207d09_full.jpg filter=lfs diff=lfs merge=lfs -text
1395
+ pose_recluster_distinct_20261014/media/ref10_3d2cdb827cb35f1167e7_full.jpg filter=lfs diff=lfs merge=lfs -text
1396
+ pose_recluster_distinct_20261014/media/ref10_3da66484077075d113a4_full.jpg filter=lfs diff=lfs merge=lfs -text
1397
+ pose_recluster_distinct_20261014/media/ref10_3faeb3df79dd10a13f8f_full.jpg filter=lfs diff=lfs merge=lfs -text
1398
+ pose_recluster_distinct_20261014/media/ref10_428da3fc456c0f7f5bd9_full.jpg filter=lfs diff=lfs merge=lfs -text
1399
+ pose_recluster_distinct_20261014/media/ref10_42d6e45604cc7f94eba6_full.jpg filter=lfs diff=lfs merge=lfs -text
1400
+ pose_recluster_distinct_20261014/media/ref10_459cacf80c9097ad62e3_full.jpg filter=lfs diff=lfs merge=lfs -text
1401
+ pose_recluster_distinct_20261014/media/ref10_4cd4de6310dae3044e3e_full.jpg filter=lfs diff=lfs merge=lfs -text
1402
+ pose_recluster_distinct_20261014/media/ref10_4e4b78d0e18ae1999a6b_full.jpg filter=lfs diff=lfs merge=lfs -text
1403
+ pose_recluster_distinct_20261014/media/ref10_4ef0983dbb591a65151b_full.jpg filter=lfs diff=lfs merge=lfs -text
1404
+ pose_recluster_distinct_20261014/media/ref10_4fe12917b31a4b99543e_full.jpg filter=lfs diff=lfs merge=lfs -text
1405
+ pose_recluster_distinct_20261014/media/ref10_502d38c8ebed6b4c7568_full.jpg filter=lfs diff=lfs merge=lfs -text
1406
+ pose_recluster_distinct_20261014/media/ref10_53b476e2a5bc06a72dc6_full.jpg filter=lfs diff=lfs merge=lfs -text
1407
+ pose_recluster_distinct_20261014/media/ref10_5871642b42470dd41dd2_full.jpg filter=lfs diff=lfs merge=lfs -text
1408
+ pose_recluster_distinct_20261014/media/ref10_5aa342b065e3fcde6ce5_full.jpg filter=lfs diff=lfs merge=lfs -text
1409
+ pose_recluster_distinct_20261014/media/ref10_61758efe55ebddfdc9e8_full.jpg filter=lfs diff=lfs merge=lfs -text
1410
+ pose_recluster_distinct_20261014/media/ref10_64dc4bd695eb9f7216a2_full.jpg filter=lfs diff=lfs merge=lfs -text
1411
+ pose_recluster_distinct_20261014/media/ref10_6527f63a2a0d595aaad3_full.jpg filter=lfs diff=lfs merge=lfs -text
1412
+ pose_recluster_distinct_20261014/media/ref10_68a5018288bf3bca4b84_full.jpg filter=lfs diff=lfs merge=lfs -text
1413
+ pose_recluster_distinct_20261014/media/ref10_694efa944cbb978ef90c_full.jpg filter=lfs diff=lfs merge=lfs -text
1414
+ pose_recluster_distinct_20261014/media/ref10_6c6a8b52de0c39e024ea_full.jpg filter=lfs diff=lfs merge=lfs -text
1415
+ pose_recluster_distinct_20261014/media/ref10_6d2c636693b221c74f9f_full.jpg filter=lfs diff=lfs merge=lfs -text
1416
+ pose_recluster_distinct_20261014/media/ref10_70026ced4236fd8eaf58_full.jpg filter=lfs diff=lfs merge=lfs -text
1417
+ pose_recluster_distinct_20261014/media/ref10_70906980aef1331db72d_full.jpg filter=lfs diff=lfs merge=lfs -text
1418
+ pose_recluster_distinct_20261014/media/ref10_736e54c60c2853720322_full.jpg filter=lfs diff=lfs merge=lfs -text
1419
+ pose_recluster_distinct_20261014/media/ref10_73b967af7527f5a986e7_full.jpg filter=lfs diff=lfs merge=lfs -text
1420
+ pose_recluster_distinct_20261014/media/ref10_74d5665e918e57d9c0f1_full.jpg filter=lfs diff=lfs merge=lfs -text
1421
+ pose_recluster_distinct_20261014/media/ref10_75b44c46fe87e61319bc_full.jpg filter=lfs diff=lfs merge=lfs -text
1422
+ pose_recluster_distinct_20261014/media/ref10_828ddb1896c200cb9fdf_full.jpg filter=lfs diff=lfs merge=lfs -text
1423
+ pose_recluster_distinct_20261014/media/ref10_8a4d2ab24eadf2b2a1dc_full.jpg filter=lfs diff=lfs merge=lfs -text
1424
+ pose_recluster_distinct_20261014/media/ref10_8b89f03f368b27a4b106_full.jpg filter=lfs diff=lfs merge=lfs -text
1425
+ pose_recluster_distinct_20261014/media/ref10_9195ae0eeebe9a10405d_full.jpg filter=lfs diff=lfs merge=lfs -text
1426
+ pose_recluster_distinct_20261014/media/ref10_95d494476fea561be7de_full.jpg filter=lfs diff=lfs merge=lfs -text
1427
+ pose_recluster_distinct_20261014/media/ref10_97d56477f8576667070b_full.jpg filter=lfs diff=lfs merge=lfs -text
1428
+ pose_recluster_distinct_20261014/media/ref10_9bf52bd2736baf6e2600_full.jpg filter=lfs diff=lfs merge=lfs -text
1429
+ pose_recluster_distinct_20261014/media/ref10_9d30a1b36c5f11364705_full.jpg filter=lfs diff=lfs merge=lfs -text
1430
+ pose_recluster_distinct_20261014/media/ref10_9d331a5404e6a497cc67_full.jpg filter=lfs diff=lfs merge=lfs -text
1431
+ pose_recluster_distinct_20261014/media/ref10_9da92f6cca53109c71de_full.jpg filter=lfs diff=lfs merge=lfs -text
1432
+ pose_recluster_distinct_20261014/media/ref10_a04c634be123809562e3_full.jpg filter=lfs diff=lfs merge=lfs -text
1433
+ pose_recluster_distinct_20261014/media/ref10_a578bbf73cf69ec40d01_full.jpg filter=lfs diff=lfs merge=lfs -text
1434
+ pose_recluster_distinct_20261014/media/ref10_ac6638a497ab3b4629eb_full.jpg filter=lfs diff=lfs merge=lfs -text
1435
+ pose_recluster_distinct_20261014/media/ref10_ad1af63ef186a3da9178_full.jpg filter=lfs diff=lfs merge=lfs -text
1436
+ pose_recluster_distinct_20261014/media/ref10_ad8a85fa6b7b36725c38_full.jpg filter=lfs diff=lfs merge=lfs -text
1437
+ pose_recluster_distinct_20261014/media/ref10_adff3a16786b520e4324_full.jpg filter=lfs diff=lfs merge=lfs -text
1438
+ pose_recluster_distinct_20261014/media/ref10_b015cdb29bbfb752ac6a_full.jpg filter=lfs diff=lfs merge=lfs -text
1439
+ pose_recluster_distinct_20261014/media/ref10_b041c3d2a3903239264a_full.jpg filter=lfs diff=lfs merge=lfs -text
1440
+ pose_recluster_distinct_20261014/media/ref10_b54fd37648672f6685cb_full.jpg filter=lfs diff=lfs merge=lfs -text
1441
+ pose_recluster_distinct_20261014/media/ref10_b6e179eb646f3c8e6bc3_full.jpg filter=lfs diff=lfs merge=lfs -text
1442
+ pose_recluster_distinct_20261014/media/ref10_bc1fd1bc3616192ffe52_full.jpg filter=lfs diff=lfs merge=lfs -text
1443
+ pose_recluster_distinct_20261014/media/ref10_c3678d32ce9cd0c2dd32_full.jpg filter=lfs diff=lfs merge=lfs -text
1444
+ pose_recluster_distinct_20261014/media/ref10_c4a2ed10bca93d16a96e_full.jpg filter=lfs diff=lfs merge=lfs -text
1445
+ pose_recluster_distinct_20261014/media/ref10_c4b65d739edea3b49f29_full.jpg filter=lfs diff=lfs merge=lfs -text
1446
+ pose_recluster_distinct_20261014/media/ref10_c6f953cc767494e3edbd_full.jpg filter=lfs diff=lfs merge=lfs -text
1447
+ pose_recluster_distinct_20261014/media/ref10_c7bc79eb04c42383781d_full.jpg filter=lfs diff=lfs merge=lfs -text
1448
+ pose_recluster_distinct_20261014/media/ref10_c87ce4642faaf033c8fc_full.jpg filter=lfs diff=lfs merge=lfs -text
1449
+ pose_recluster_distinct_20261014/media/ref10_cbc1a5ac144473694b9f_full.jpg filter=lfs diff=lfs merge=lfs -text
1450
+ pose_recluster_distinct_20261014/media/ref10_d7d78ea52e337bcadf1f_full.jpg filter=lfs diff=lfs merge=lfs -text
1451
+ pose_recluster_distinct_20261014/media/ref10_d989a7827ba8e0ed1aa5_full.jpg filter=lfs diff=lfs merge=lfs -text
1452
+ pose_recluster_distinct_20261014/media/ref10_ddfdaa2c9eeb6917bb36_full.jpg filter=lfs diff=lfs merge=lfs -text
1453
+ pose_recluster_distinct_20261014/media/ref10_e33cbd101bae629f3064_full.jpg filter=lfs diff=lfs merge=lfs -text
1454
+ pose_recluster_distinct_20261014/media/ref10_eb4c5acb8afed80484e0_full.jpg filter=lfs diff=lfs merge=lfs -text
1455
+ pose_recluster_distinct_20261014/media/ref10_edf692a38bea15a04563_full.jpg filter=lfs diff=lfs merge=lfs -text
1456
+ pose_recluster_distinct_20261014/media/ref10_ee37ce0ff6137544b9a0_full.jpg filter=lfs diff=lfs merge=lfs -text
1457
+ pose_recluster_distinct_20261014/media/ref10_f0cb7d99020eb6258d62_full.jpg filter=lfs diff=lfs merge=lfs -text
1458
+ pose_recluster_distinct_20261014/media/ref10_f309ba9e509f314d39f7_full.jpg filter=lfs diff=lfs merge=lfs -text
1459
+ pose_recluster_distinct_20261014/media/ref10_f64b454e1a1c66e5c39f_full.jpg filter=lfs diff=lfs merge=lfs -text
1460
+ pose_recluster_distinct_20261014/media/ref10_f7ba7e80e93ac7d9624c_full.jpg filter=lfs diff=lfs merge=lfs -text
1461
+ pose_recluster_distinct_20261014/media/ref10_f98dbaef3bbbbb8705ea_full.jpg filter=lfs diff=lfs merge=lfs -text
1462
+ pose_recluster_distinct_20261014/media/ref10_fb6c35ccec55bf44f406_full.jpg filter=lfs diff=lfs merge=lfs -text
pose_recluster_distinct_20261014/app.coverage_v2.js ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ const D=window.AUDIT_DATA;
2
+ // Retry transient failures on the image CDN while keeping permanent source URLs.
3
+ document.addEventListener('error',e=>{const im=e.target;if(im?.tagName!=='IMG')return;const n=Number(im.dataset.networkRetry||0);if(n<2){im.dataset.networkRetry=String(n+1);setTimeout(()=>{if(im.isConnected)im.src=im.getAttribute('src')},600*(n+1))}},true);
4
+ const $=s=>document.querySelector(s), nf=n=>Number(n).toLocaleString('en-US'), esc=s=>String(s??'').replace(/[&<>"']/g,c=>({'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;',"'":'&#39;'}[c]));
5
+ let hand='right',level='distinct',view='oblique',tab='overview',poseSerial=0,activeDetail='',coverageFilter='all',coverageSort='gap';
6
+ const colors=['#b8852f','#39896e','#437eb0','#9061ab','#c66e70'];
7
+ const poses=new Map(), allClasses={};
8
+ Object.values(D.models).forEach(m=>['fine','distinct'].forEach(l=>m[l].forEach(c=>allClasses[c.key]=c)));
9
+ const model=g=>D.models[g+'_'+hand], cname=s=>D.names[s]||s;
10
+ function poseCanvas(joints,label='',overlay=null){const id='pose'+poseSerial++;poses.set(id,{joints,overlay,rot:[0,0],label});return `<canvas class="pose" id="${id}" aria-label="${esc(label)},可拖动旋转"></canvas>`}
11
+ function drawPose(canvas,p){
12
+ const ratio=Math.min(devicePixelRatio||1,2),w=canvas.clientWidth||300,h=canvas.clientHeight||170;canvas.width=w*ratio;canvas.height=h*ratio;const ctx=canvas.getContext('2d');ctx.scale(ratio,ratio);ctx.clearRect(0,0,w,h);
13
+ let base=view==='palm'?[0,0]:view==='side'?[Math.PI/2,0]:[.48,-.16],a=base[0]+p.rot[0],b=base[1]+p.rot[1];
14
+ function project(j){let [x,y,z]=j;const xx=x*Math.cos(a)+z*Math.sin(a),zz=-x*Math.sin(a)+z*Math.cos(a);return [xx,y*Math.cos(b)-zz*Math.sin(b),y*Math.sin(b)+zz*Math.cos(b)]}
15
+ const pts=p.joints.map(project),other=p.overlay?.map(project),all=other?pts.concat(other):pts;let x0=Math.min(...all.map(v=>v[0])),x1=Math.max(...all.map(v=>v[0])),y0=Math.min(...all.map(v=>v[1])),y1=Math.max(...all.map(v=>v[1]));let scale=Math.min((w-45)/Math.max(x1-x0,.7),(h-40)/Math.max(y1-y0,.8));
16
+ const screen=q=>[w/2+(q[0]-(x0+x1)/2)*scale,h/2-(q[1]-(y0+y1)/2)*scale+3];
17
+ function handdraw(j,faded){ctx.globalAlpha=faded?.35:1;for(let f=0;f<5;f++){const ids=[0,f*4+1,f*4+2,f*4+3,f*4+4];ctx.strokeStyle=faded?'#7b8492':colors[f];ctx.fillStyle=ctx.strokeStyle;ctx.lineWidth=faded?2:3.2;ctx.beginPath();ids.forEach((id,k)=>{const q=screen(j[id]);k?ctx.lineTo(...q):ctx.moveTo(...q)});ctx.stroke();ids.slice(1).forEach(id=>{const q=screen(j[id]);ctx.beginPath();ctx.arc(...q,2.6,0,Math.PI*2);ctx.fill()})}ctx.globalAlpha=1}
18
+ if(other)handdraw(other,true);handdraw(pts,false);ctx.fillStyle='#7e8b99';ctx.font='10px system-ui';ctx.fillText(p.label,9,14);
19
+ }
20
+ function wirePoses(){document.querySelectorAll('canvas.pose').forEach(c=>{const p=poses.get(c.id);if(!p)return;drawPose(c,p);let drag=null;c.onpointerdown=e=>{drag=[e.clientX,e.clientY];c.setPointerCapture(e.pointerId)};c.onpointermove=e=>{if(!drag)return;p.rot[0]+=(e.clientX-drag[0])*.012;p.rot[1]+=(e.clientY-drag[1])*.012;drag=[e.clientX,e.clientY];drawPose(c,p)};c.onpointerup=()=>drag=null;})}
21
+ const pct=x=>(100*x).toFixed(1)+'%';
22
+ function coverageBar(v,compact=false){if(!v)return '';return `<div class="coverage-breakdown ${compact?'compact':''}"><div class="coverage-bar" role="img" aria-label="已覆盖 ${pct(v.covered_fraction)},低覆盖 ${pct(v.low_fraction)},未覆盖 ${pct(v.uncovered_fraction)}"><span class="covered" style="width:${v.covered_fraction*100}%"></span><span class="low" style="width:${v.low_fraction*100}%"></span><span class="uncovered" style="width:${v.uncovered_fraction*100}%"></span></div><div class="coverage-values"><span class="covered-text">已覆盖 ${pct(v.covered_fraction)}</span><span class="low-text">低覆盖 ${pct(v.low_fraction)}</span><span class="uncovered-text">未覆盖 ${pct(v.uncovered_fraction)}</span></div>${compact?'':`<p class="metric">分母 ${nf(v.n)} 个实际分析手帧:${nf(v.covered)} 已覆盖 / ${nf(v.low)} 低覆盖 / ${nf(v.uncovered)} 未覆盖。</p>`}</div>`}
23
+ function classBadge(c){const v=c.coverage;if(!v)return '';const label=v.status==='uncovered'?'整类未覆盖':v.status==='covered'?'≥90% 已覆盖':'部分覆盖';return `<span class="coverage-badge ${v.status}" title="以逐成员比例为准;整类未覆盖要求所有成员都没有相似参照。">${label}</span>`}
24
+ function filteredExternal(){return [...model('external')[level]].filter(c=>coverageFilter==='all'||coverageFilter==='entire'&&c.coverage.uncovered===c.n||coverageFilter==='mostly_gap'&&c.coverage.uncovered_fraction>=.5||coverageFilter==='mostly_covered'&&c.coverage.covered_fraction>=.7).sort((a,b)=>coverageSort==='id'?a.number-b.number:coverageSort==='covered'?b.coverage.covered_fraction-a.coverage.covered_fraction:b.coverage.uncovered_fraction-a.coverage.uncovered_fraction)}
25
+ function renderCoverage(){const v=D.coverage.summary[hand],cal=D.coverage.calibration[hand],cs=model('external')[level],entire=cs.filter(c=>c.coverage.status==='uncovered').length;$('#coverageSummary').innerHTML=`<div class="coverage-summary">${coverageBar(v,true)}<span class="metric">${hand==='left'?'左':'右'}手 ${nf(v.n)} 个外部手帧 · ${cs.length} 类中 ${entire} 类整类未覆盖 · 相似阈值 ${cal.thresholds_deg.q95.toFixed(2)}°</span></div>`;
26
+ const sens=D.coverage.sensitivity.filter(x=>x.key==='external_'+hand&&['q90','q95','q99'].includes(x.threshold));$('#coverageMethodBody').innerHTML=`<p class="hint">距离使用来源 GT 的 20 根 3D 骨方向,在掌部坐标系中计算平均夹角,去除手腕整体运动和骨长差异;左右手分开。不是 2D 图上距离,也不是 MANO 参数直接相减。</p><p class="hint">参照:H2O+ARCTIC+HOT3D+EgoRenderer Ver.005,共 271,543 手帧;本侧 ${nf(cal.reference_n)} 手帧、${nf(cal.reference_units)} 段独立录制/源动作。用本侧 4,096 个内部留出样本校准,检索时排除同录制全部帧;四源及各录制均衡加权,取最近距离的 95% 分位。每个外部成员穷举检索全部同侧参照。</p><table><thead><tr><th>校准分位</th><th>阈值</th><th>已覆盖</th><th>低覆盖</th><th>未覆盖</th></tr></thead><tbody>${sens.map(x=>`<tr><td>${x.threshold==='q95'?'95%(本页)':x.threshold.slice(1)+'%'}</td><td>${x.threshold_deg.toFixed(2)}°</td><td>${pct(x.covered_fraction)}</td><td>${pct(x.low_fraction)}</td><td>${pct(x.uncovered_fraction)}</td></tr>`).join('')}</tbody></table><p class="hint">类标签:≥90% 成员已覆盖才标“≥90% 已覆盖”;所有成员无近邻才标“整类未覆盖”;其余标“部分覆盖”。90% 是显示约定,完整比例始终保留。统计分母是本轮分析样本,不是 WiLoR 官方全量;2D 来源不作 3D 覆盖判断。我们参照使用已核对训练成员的来源 GT,最终 canonical 标签和 loss mask 尚未验收。</p>`}
27
+ function memberBadge(s){const v=s.coverage;if(!v)return '';return `<p class="sample-coverage"><span class="coverage-badge ${v.status}">${{covered:'已覆盖',low:'低覆盖',uncovered:'抽样库未覆盖'}[v.status]}</span> 最近距离 ${v.distance_deg.toFixed(2)}° / 阈值 ${v.threshold_deg.toFixed(2)}° · ${nf(v.support_recordings)} 段相似参照录制</p>`}
28
+ function gapBlock(v){const s=D.samples[v.id],n=v.nearest;return `<article class="gap-case"><h3>未覆盖成员 · ${esc(cname(s.source))} · ${s.hand==='left'?'左手':'右手'} · 帧 ${s.frame}</h3><p class="evidence">${esc(s.recording)} · ${esc(s.label)} · 距该类原型 ${v.prototype_distance_deg.toFixed(2)}°</p>${memberBadge(s)}<div class="pair"><div><h4>外部实际成员</h4>${poseCanvas(v.joints,'该未覆盖成员的 GT 姿态')}<a href="${s.assets.full}" target="_blank"><img class="gap-image" src="${s.assets.crop}" loading="lazy" alt="外部未覆盖成员:原图与 GT 叠加"></a><p class="metric">原图 | GT 叠加 · 点击看完整原画面</p></div><div><h4>我们库中的精确最近邻</h4>${poseCanvas(n.joints,'该成员的精确最近 GT 姿态')}${n.media?`<a href="${n.media.assets.full}" target="_blank"><img class="gap-image" src="${n.media.assets.crop}" loading="lazy" alt="精确最近邻:原图与 GT 叠加"></a><p class="metric">原图 | GT 叠加 · 点击看完整原画面</p>`:'<p class="warning">这个精确最近邻未通过原图可读性检查,保留其 GT 骨架;没有用其他样本替代。</p>'}<p class="evidence">${esc(cname(n.source))} · ${esc(n.recording)} · 帧 ${n.frame} · ${n.hand==='left'?'左':'右'}手</p></div></div><details><summary>相机与 GT 证据</summary><p class="evidence">外部:${esc(s.camera)}。${esc(s.gt_status)}</p><p class="evidence">最近邻:${esc(n.media?.evidence?.camera??n.media_missing_reason)}。图像叠加仅供核查,覆盖距离不构成 GT 可靠性结论。</p></details></article>`}
29
+ function related(c){return D.pairs.some(p=>p.related && p.group===c.key.split('_')[0]&&p.hand===hand&&(p.a===c.id||p.b===c.id))}
30
+ function card(c){const v=c.examples[0],s=D.samples[v.id];return `<article class="card" data-key="${c.key}"><div class="card-head"><h3>${c.id}</h3><span>${classBadge(c)}${related(c)&&level==='distinct'?'<span class="badge">有相近类</span>':''}</span></div><div class="card-meta">${nf(c.n)} 手帧 · ${Object.keys(c.sources).length} 来源</div>${c.coverage?coverageBar(c.coverage,true):''}${poseCanvas(c.joints,'GT 类原型')}<img src="${s.assets.crop}" alt="${esc(cname(s.source))} 原图与 GT 叠加" loading="lazy"><div class="card-foot">${esc(cname(s.source))} · ${v.is_prototype?'原型本人':`同类图例,距原型 ${v.prototype_distance_deg.toFixed(1)}°`}</div><button class="open" data-open="${c.key}">${c.coverage?'未覆盖成员 / 原图 / 近邻':'原图 / GT 叠加 / 近邻'}</button></article>`}
31
+ function countTable(){const rows=['ours','external'].map(g=>{const m=model(g);return `<tr><td class="${g}">${g==='ours'?'我们三源+合成':'WiLoR 外部 3D 来源'}</td><td>${nf(m.n)}</td><td>${m[level].length}</td><td>${m.fine.length-m.distinct.length}</td></tr>`}).join('');$('#countTable').innerHTML=`<table><thead><tr><th>组别 · ${hand==='left'?'左手':'右手'}</th><th>参与手帧</th><th>当前类数</th><th>合并减少细类数</th></tr></thead><tbody>${rows}</tbody></table>`}
32
+ function renderOverview(){countTable();for(const g of ['ours','external']){const cs=g==='external'?filteredExternal():model(g)[level];$('#'+g+'Cards').innerHTML=cs.map(card).join('')||'<p class="hint">当前筛选没有类别。</p>';$('#'+g+'Count').textContent=`${cs.length} / ${model(g)[level].length} 类`}scatter()}
33
+ function pairTile(c){const s=D.samples[c.examples[0].id];return `<div><h3><a data-open="${c.key}">${c.id} · ${esc(cname(c.prototype.source))}</a></h3>${poseCanvas(c.joints,'GT 类原型')}<img src="${s.assets.crop}" loading="lazy" alt="同类 RGB 与 GT 图例"><p class="metric">图例 ${esc(cname(s.source))} · 距原型 ${c.examples[0].prototype_distance_deg.toFixed(1)}°</p></div>`}
34
+ function renderCompare(){const sorted=filteredExternal();$('#comparisonRows').innerHTML=sorted.map(c=>{const n=c.nearest_reference,a=allClasses[n.nearest_our_key];return `<div class="row"><div class="row-title"><strong>我们 ${a.id} ↔ 外部 ${c.id}</strong>${classBadge(c)}</div>${coverageBar(c.coverage)}<div class="pair">${pairTile(a)}${pairTile(c)}</div><p class="metric">类原型差 ${n.class_prototype_mean_deg.toFixed(1)}° · 外部原型最近参照 ${n.mean_deg.toFixed(1)}°(原型示意;覆盖统计来自全类成员)</p><button data-open="${c.key}">看该类未覆盖成员、原图与精确最近邻</button></div>`}).join('')||'<p class="hint">当前筛选没有类别。</p>'}
35
+ function renderSimilar(){const summaries=D.summary.filter(s=>s.hand===hand);$('#duplicateSummary').innerHTML=`<table><thead><tr><th>组别</th><th>32 细类中的相近对</th><th>合并后相近对</th><th>主视图类数</th></tr></thead><tbody>${summaries.map(s=>`<tr><td>${s.group==='ours'?'我们':'外部'}</td><td>${s.stages.fine.near_pairs}</td><td>${s.stages.distinct.near_pairs}</td><td>${s.stages.distinct.k}</td></tr>`).join('')}</tbody></table><p class="hint">“相近”按原型或数值中心的 20 骨平均夹角 ≤12°,且每根手指平均夹角 ≤20° 判断;这是本页查看粒度,不是通用手势标准。</p>`;
36
+ const pp=D.pairs.filter(p=>p.hand===hand&&p.related);$('#relatedPairs').innerHTML=pp.map(p=>{const a=allClasses[`${p.group}_${hand}_distinct_${p.a}`],b=allClasses[`${p.group}_${hand}_distinct_${p.b}`];return `<div class="row"><strong>${p.group==='ours'?'我们':'外部'} ${p.a} / ${p.b}</strong><div class="finger-values">${p.finger_deg.map((v,i)=>`${['拇','食','中','环','小'][i]}指 ${v.toFixed(1)}°`).join(' · ')}</div><div class="pair">${pairTile(a)}${pairTile(b)}</div><p class="metric">原型整体 ${p.mean_deg.toFixed(1)}° · 跨录制近邻更靠近另一类的比例 ${(100*p.member_diagnostic.cross_cluster_closer_fraction).toFixed(1)}%</p></div>`}).join('')||'<p class="hint">本侧没有满足判据的剩余相近类对。</p>';
37
+ $('#mergeRows').innerHTML=D.merges.filter(m=>m.hand===hand).map(m=>`<div class="row"><div class="row-title"><strong>${m.group==='ours'?'我们':'外部'}:${m.children.join(' + ')} → 主类 ${m.cluster}</strong><span class="metric">${nf(m.n)} 手帧</span></div><div class="children">${m.child_keys.map(k=>{const c=allClasses[k];return `<div class="child"><a data-open="${k}">${c.id} · 细类</a>${poseCanvas(c.joints,'GT 原型')}</div>`}).join('')}</div></div>`).join('')}
38
+ function renderSources(){$('#sourceTable').innerHTML='<thead><tr><th>来源组</th><th>数据集 / 可视化</th><th>实际参与手帧</th><th>版本与范围</th><th>本轮用途</th><th>对参照库覆盖</th></tr></thead><tbody>'+D.sources.map(s=>`<tr><td>${s.group}</td><td><button class="source-button" data-source="${s.id}">${esc(s.name)}</button></td><td>${nf(s.cluster_n||0)}</td><td>${esc(s.scope)}</td><td>${esc(s.role)}</td><td>${D.coverage.sources[s.id]?coverageBar(D.coverage.sources[s.id],true):s.group==='我们'?'参照库':s.gallery_source?'与参照重叠,不单计':'不作 3D 判断'}</td></tr>`).join('')+'</tbody>'}
39
+ function sampleBlock(s,v){return `<section class="example">${memberBadge(s)}<h3>${esc(cname(s.source))} · ${esc(s.hand)} · 帧 ${esc(s.frame??'—')}</h3><p class="evidence">${esc(s.recording??s.split??'')} · ${esc(s.label)}${v?` · 距类原型 ${v.prototype_distance_deg.toFixed(2)}°`:''}</p><a href="${s.assets.full}" target="_blank"><img class="detail-pair" src="${s.assets.full}" alt="原图与对应 GT 叠加"></a><p class="evidence">${esc(s.camera??s.note??'')} · ${esc(s.gt_status??'仅可核查相应标注,不参与3D聚类')}</p></section>`}
40
+ function openClass(key){const c=allClasses[key],g=key.split('_')[0];let head=`<h2>${g==='ours'?'我们':'外部'} · ${key.includes('_left_')?'左手':'右手'} · ${c.id}${key.includes('_fine_')?'(细类)':''}</h2><p class="evidence">原型:${esc(cname(c.prototype.source))} · ${esc(c.prototype.recording)} · 帧 ${c.prototype.frame}。${nf(c.n)} 个成员。</p>`;
41
+ head+=c.coverage?classBadge(c)+coverageBar(c.coverage):'';
42
+ let top=`<div class="dialog-top"><div>${poseCanvas(c.joints,'精确 GT 类原型')}<p class="hint">统一掌部坐标与骨长,仅用于姿态比较。</p></div>`;
43
+ if(c.nearest_reference){const n=c.nearest_reference;top+=`<div>${poseCanvas(n.nearest_joints,'全部参照库中的最近 GT 样本')}<p class="metric">对全部同侧三源+合成样本检索:${n.mean_deg.toFixed(2)}°。不使用散点图距离。</p></div>`}else top+=`<div><h3>来源组成</h3>${Object.entries(c.sources).sort((a,b)=>b[1]-a[1]).map(([s,n])=>`<p class="metric">${esc(cname(s))}:${nf(n)}</p>`).join('')}</div>`;
44
+ top+='</div>';
45
+ let note=c.examples[0].prototype_distance_deg>8?'<p class="warning">当前可读 RGB 图例与类原型仍有较大差别。上方骨架才是精确原型;下面图片保留实际成员身份与距离。</p>':'';
46
+ const gaps=D.coverage.examples[key]||[],gapIds=new Set(gaps.map(v=>v.id)),other=c.examples.filter(v=>!gapIds.has(v.id));
47
+ $('#detailBody').innerHTML=head+(c.coverage?'<details class="prototype-details"><summary>类原型与其最近邻</summary>'+top+note+'</details>':top+note)+(gaps.length?'<h3 class="gap-title">本类实际未覆盖成员</h3>'+gaps.map(gapBlock).join(''):'')+(other.length?'<h3>其他同类成员</h3>'+other.map(v=>sampleBlock(D.samples[v.id],v)).join(''):'');if(!$('#detail').open)$('#detail').showModal();wirePoses();activeDetail='class='+encodeURIComponent(key);location.hash=activeDetail}
48
+ function openSource(src){const s=D.sources.find(x=>x.id===src),target=s.gallery_source||src,ids=D.gallery[target]||[],two=D.two_d[src]||[];let body=`<h2>${esc(s.name)} · ${esc(s.group)}</h2><p>${esc(s.scope)}</p>`;
49
+ if(D.coverage.sources[src])body+=coverageBar(D.coverage.sources[src]);
50
+ if(two.length)body+=two.map(v=>sampleBlock(v,null)).join('');
51
+ else if(ids.length){body+='<p class="hint">以下图例均属于本轮冻结成员;点击原图可放大。手侧保留逐样本标记。</p>';body+=ids.slice(0,20).map(id=>sampleBlock(D.samples[id],null)).join('')}
52
+ else body+=`<p class="warning">${src==='wilor_bedlam'?'按用户要求跳过,本轮没有读取或聚类。':'当前聚类使用该源 GT;本页未选到该源配对图例。'}</p>`;
53
+ $('#detailBody').innerHTML=body;if(!$('#detail').open)$('#detail').showModal();activeDetail='source='+encodeURIComponent(src);location.hash=activeDetail}
54
+ function scatter(){const c=$('#scatter'),ctx=c.getContext('2d');ctx.clearRect(0,0,c.width,c.height);const all=['ours','external'].flatMap(g=>model(g)[level].map(x=>({...x,g})));let xx=all.map(c=>c.display_xy[0]),yy=all.map(c=>c.display_xy[1]),xmin=Math.min(...xx),xmax=Math.max(...xx),ymin=Math.min(...yy),ymax=Math.max(...yy);const points=[];for(const p of all){let x=45+(p.display_xy[0]-xmin)/(xmax-xmin)*1000,y=400-(p.display_xy[1]-ymin)/(ymax-ymin)*350;ctx.fillStyle=p.g==='ours'?'#276a9c':'#79569d';ctx.beginPath();ctx.arc(x,y,6,0,Math.PI*2);ctx.fill();ctx.fillText(p.id,x+8,y+4);points.push({x,y,key:p.key})}c.onclick=e=>{const r=c.getBoundingClientRect(),x=(e.clientX-r.left)*c.width/r.width,y=(e.clientY-r.top)*c.height/r.height;const hit=points.find(p=>Math.hypot(x-p.x,y-p.y)<15);if(hit)openClass(hit.key)}}
55
+ function render(){poses.clear();renderCoverage();if(tab==='overview')renderOverview();if(tab==='compare')renderCompare();if(tab==='similar')renderSimilar();if(tab==='sources')renderSources();wirePoses()}
56
+ function changeTab(t){tab=t;document.querySelectorAll('.tab').forEach(e=>e.hidden=e.id!==t);document.querySelectorAll('nav button').forEach(e=>e.classList.toggle('active',e.dataset.tab===t));render()}
57
+ document.addEventListener('click',e=>{const open=e.target.closest('[data-open]'),source=e.target.closest('[data-source]'),tb=e.target.closest('[data-tab]');if(open){e.preventDefault();openClass(open.dataset.open)}if(source)openSource(source.dataset.source);if(tb)changeTab(tb.dataset.tab)});
58
+ $('#coverageFilter').onchange=e=>{coverageFilter=e.target.value;render()};$('#coverageSort').onchange=e=>{coverageSort=e.target.value;render()};
59
+ $('#hand').onchange=e=>{hand=e.target.value;render()};$('#level').onchange=e=>{level=e.target.value;render()};$('#view').onchange=e=>{view=e.target.value;wirePoses()};$('#reset').onclick=()=>{poses.forEach(p=>p.rot=[0,0]);wirePoses()};$('#closeDetail').onclick=()=>$('#detail').close();$('#detail').addEventListener('close',()=>{activeDetail='';history.replaceState(null,'',location.pathname+location.search)});window.addEventListener('resize',()=>wirePoses());
60
+ function restoreHash(){const hash=location.hash.slice(1);if(hash===activeDetail)return;const initial=new URLSearchParams(hash);if(initial.has('class')&&allClasses[initial.get('class')])openClass(initial.get('class'));else if(initial.has('source')&&D.sources.some(s=>s.id===initial.get('source')))openSource(initial.get('source'));else if(!hash&&$('#detail').open)$('#detail').close()}
61
+ window.addEventListener('hashchange',restoreHash);render();restoreHash();
pose_recluster_distinct_20261014/data.coverage_v2.js ADDED
The diff for this file is too large to render. See raw diff
 
pose_recluster_distinct_20261014/downloads/coverage/REPRODUCE.md ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # 复现覆盖更新
2
+
3
+ 实验目录:/SSD3/yangzijing/Hand_class_coverage_20261014
4
+ 只读聚类与 GT 缓存:/SSD3/yangzijing/Hand_pose_recluster_distinct_20261014
5
+
6
+ ```bash
7
+ cd /SSD3/yangzijing/Hand_class_coverage_20261014
8
+ PY=/SSD2/jiasen/envs/foundation_hand/bin/python
9
+ # freeze_coverage.py 仅第一次在空实验目录执行;已有冻结清单不可重写。
10
+ CUDA_VISIBLE_DEVICES=1 OMP_NUM_THREADS=2 OPENBLAS_NUM_THREADS=2 MKL_NUM_THREADS=2 "$PY" code/exact_coverage.py
11
+ OMP_NUM_THREADS=2 OPENBLAS_NUM_THREADS=2 "$PY" code/aggregate_coverage.py
12
+ OMP_NUM_THREADS=2 OPENBLAS_NUM_THREADS=2 "$PY" code/validate_coverage.py
13
+ CUDA_VISIBLE_DEVICES='' OMP_NUM_THREADS=2 OPENBLAS_NUM_THREADS=2 "$PY" code/coverage_visuals.py
14
+ "$PY" code/update_web.py
15
+ "$PY" code/build_coverage_site.py
16
+ ```
17
+
18
+ freeze_coverage.py 固定种子 2026101407、8192 个校准成员和阈值规则,然后才进行外部检索。逐成员距离为精确穷举;既有缓存可恢复。记录单位排除整段动作,不把邻帧支持计为独立录制。原始成员 SHA256、类分配、特征和网页旧版 SHA256 见 input_sha256.json。
19
+
20
+ 本目录代码复用前序审计的标定投影和 source GT 读取代码;完整依赖地址保留在 visualize.py / cluster_common.py,旧版代码与原始聚类说明在网页 downloads/code 和 downloads/REPRODUCE.md。原始数据及授权可读环境需要保留;衍生网页不包含原始数据包、模型权重或凭据。
21
+
22
+ 媒体检查不是 GT 独立验收。精确最近邻图像不可读时,另选同类未覆盖成员展示;其最近邻索引绝不替换。CSV 只有实际已渲染成员才填 image_overlay_link,其他留空。
pose_recluster_distinct_20261014/downloads/coverage/RESULTS_ZH.md ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # 逐成员覆盖更新(2026-10-14)
2
+
3
+ 本轮对全部 214,481 个可读外部来源聚类手帧逐一检索,参照为 H2O / ARCTIC / HOT3D / EgoRenderer Ver.005 的 271,543 个冻结抽样手帧,左右手分开;没有重新聚类或改动 GT。
4
+
5
+ - 已覆盖:99,408(46.35%),阈值内至少 3 段独立录制/源动作。
6
+ - 低覆盖:15,430(7.19%),阈值内只有 1–2 段独立录制/源动作。
7
+ - 抽样库未覆盖:99,643(46.46%),本次参照库中无阈值内近邻。
8
+
9
+ 外部 50 个主类中,7 类全部成员未覆盖,43 类为部分覆盖。不存在达到“90% 成员已覆盖”的主类;这不表示各类中的已覆盖成员也未覆盖。网页优先展示完整成员比例。
10
+
11
+ 整类未覆盖:left B2, left B5, left B16, left B21, right B4, right B13, right B20。
12
+
13
+ 距离是来源 GT 的 20 根掌部局部 3D 单位骨方向的平均夹角;不是 MANO 参数欧氏距离、不是 2D 图上距离。阈值先使用 8,192 个内部校准手帧、检索排除同录制的全部帧确定:左手 9.4976°,右手 9.2521°。四源均衡,源内录制均衡。q90/q99 与 10°/20°/30° 的敏感性均在 CSV 保留。至少 3 个独立录制是支持量的显示约定;类 90% 汇总阈值也不是普适标准。
14
+
15
+ 主统计是本轮分析成员的自然计数,不代表官方全量的无偏发生比例。来源/录制均衡聚类权重下未覆盖比例为 41.41%;单位均衡权重还会受静态图像单位与视频录制单位数量差异影响,因此仅用于敏感性,不作为总体发生率。
16
+
17
+ 114 个外部主类/细类均给出实际未覆盖成员:原图、按来源相机投影的 MANO 或 GT 骨架、精确最近邻及距离;没有把同类原型替换成“未覆盖样本”。显示样本优先接近类原型,且要求其精确最近邻也有可读 RGB 叠加,故图例不是概率抽样,不用于估计比例。图像读取失败只影响图例选择,不改统计成员、阈值或最近邻。
18
+
19
+ 覆盖与 GT 可靠性独立。未覆盖可能包含真实姿态缺口、来源定义差异或标签问题;不能把上述数目称为可靠补充样本数量。来源一致性、图片叠加不等于独立三维验收。参照使用已核对训练成员的来源 GT;最终 canonical 标签与 loss mask 尚未验收。外部 8 源是 WiLoR 官方源数据代理,ARCTIC/HOT3D 重叠、2D 来源和跳过的 BEDLAM 不重复记入外部 3D 分母。
20
+
21
+ 数值检查:32 个查询(含阈值边界)用 CPU float64 全库复算;114 个类原型与已有独立最近邻结果对照,分类一致。详细证据见 numerical_validation.json。
pose_recluster_distinct_20261014/downloads/coverage/calibration.json ADDED
@@ -0,0 +1,94 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "left": {
3
+ "n": 4096,
4
+ "reference_n": 135504,
5
+ "reference_units": 1924,
6
+ "thresholds_deg": {
7
+ "q90": 8.31766128540039,
8
+ "q95": 9.49763298034668,
9
+ "q99": 12.101940155029297
10
+ },
11
+ "weighted_within_q95": 0.9501579125434737,
12
+ "weighted_stable_covered_q95": 0.901272850543289,
13
+ "source_diagnostics": {
14
+ "ours_arctic": {
15
+ "n": 1024,
16
+ "recordings": 266,
17
+ "q50": 7.079188346862793,
18
+ "q95": 11.210945129394531,
19
+ "within_main_threshold": 0.862781954887218,
20
+ "stable_covered_main": 0.7202380952380951
21
+ },
22
+ "ours_h2o": {
23
+ "n": 1024,
24
+ "recordings": 114,
25
+ "q50": 4.817780494689941,
26
+ "q95": 8.082184791564941,
27
+ "within_main_threshold": 0.9766081871345029,
28
+ "stable_covered_main": 0.9626844890002785
29
+ },
30
+ "ours_hot3d": {
31
+ "n": 1024,
32
+ "recordings": 230,
33
+ "q50": 3.6003682613372803,
34
+ "q95": 6.79738712310791,
35
+ "within_main_threshold": 0.9876086956521739,
36
+ "stable_covered_main": 0.9817391304347827
37
+ },
38
+ "synthetic": {
39
+ "n": 1024,
40
+ "recordings": 1024,
41
+ "q50": 2.8987925052642822,
42
+ "q95": 8.5874605178833,
43
+ "within_main_threshold": 0.9736328125,
44
+ "stable_covered_main": 0.9404296875
45
+ }
46
+ }
47
+ },
48
+ "right": {
49
+ "n": 4096,
50
+ "reference_n": 136039,
51
+ "reference_units": 1924,
52
+ "thresholds_deg": {
53
+ "q90": 8.300768852233887,
54
+ "q95": 9.252071380615234,
55
+ "q99": 11.218984603881836
56
+ },
57
+ "weighted_within_q95": 0.9501955061737223,
58
+ "weighted_stable_covered_q95": 0.8825766848620646,
59
+ "source_diagnostics": {
60
+ "ours_arctic": {
61
+ "n": 1024,
62
+ "recordings": 266,
63
+ "q50": 6.840930938720703,
64
+ "q95": 10.529808044433594,
65
+ "within_main_threshold": 0.8728070175438596,
66
+ "stable_covered_main": 0.7039473684210527
67
+ },
68
+ "ours_h2o": {
69
+ "n": 1024,
70
+ "recordings": 114,
71
+ "q50": 5.4153594970703125,
72
+ "q95": 8.352627754211426,
73
+ "within_main_threshold": 0.9815789473684211,
74
+ "stable_covered_main": 0.9435672514619884
75
+ },
76
+ "ours_hot3d": {
77
+ "n": 1024,
78
+ "recordings": 230,
79
+ "q50": 3.777343511581421,
80
+ "q95": 6.837747573852539,
81
+ "within_main_threshold": 0.9991304347826087,
82
+ "stable_covered_main": 0.9882608695652174
83
+ },
84
+ "synthetic": {
85
+ "n": 1024,
86
+ "recordings": 1024,
87
+ "q50": 5.286046028137207,
88
+ "q95": 9.388495445251465,
89
+ "within_main_threshold": 0.947265625,
90
+ "stable_covered_main": 0.89453125
91
+ }
92
+ }
93
+ }
94
+ }
pose_recluster_distinct_20261014/downloads/coverage/calibration_members.json ADDED
The diff for this file is too large to render. See raw diff
 
pose_recluster_distinct_20261014/downloads/coverage/class_coverage.csv ADDED
@@ -0,0 +1,115 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ n,covered,low,uncovered,covered_fraction,low_fraction,uncovered_fraction,any_match_fraction,status,status_label,fit_weighted_fractions,equal_unit_fractions,independent_units,key,hand,level,id,threshold_deg,distance_p50_deg,distance_p95_deg,max_distance_deg,source_counts
2
+ 957,0,1,956,0.0,0.0010449320794148381,0.9989550679205852,0.0010449320794148065,low,低覆盖,"[0.0, 0.0006819989186126367, 0.9993180010813872]","[0.0, 0.0005030181086519114, 0.9994969818913482]",284,external_left_fine_B1,left,fine,B1,9.49763298034668,17.770145416259766,33.662847900390624,68.93052673339844,"{""wilor_rhd"": 187, ""wilor_interhand26m"": 491, ""wilor_mtc"": 118, ""wilor_reinter"": 161}"
3
+ 305,0,0,305,0.0,0.0,1.0,0.0,uncovered,抽样库未覆盖,"[0.0, 0.0, 1.0]","[0.0, 0.0, 1.0]",156,external_left_fine_B2,left,fine,B2,9.49763298034668,21.449251174926758,29.474415206909182,35.25153732299805,"{""wilor_rhd"": 106, ""wilor_interhand26m"": 91, ""wilor_mtc"": 98, ""wilor_reinter"": 10}"
4
+ 4358,0,2,4356,0.0,0.0004589261128958238,0.9995410738871042,0.00045892611289577445,low,低覆盖,"[0.0, 0.00032881964136443346, 0.9996711803586357]","[0.0, 0.00011140819964349375, 0.9998885918003565]",3400,external_left_fine_B3,left,fine,B3,9.49763298034668,14.459971904754639,17.235001564025875,54.535888671875,"{""wilor_rhd"": 3656, ""wilor_interhand26m"": 264, ""wilor_mtc"": 312, ""wilor_reinter"": 126}"
5
+ 1904,50,66,1788,0.026260504201680673,0.03466386554621849,0.9390756302521008,0.060924369747899165,low,低覆盖,"[0.0312471646602513, 0.07401681908528633, 0.8947360162544625]","[0.00744860643789431, 0.00842278290809309, 0.9841286106540125]",995,external_left_fine_B4,left,fine,B4,9.49763298034668,14.209616661071777,22.362558841705315,34.26322937011719,"{""wilor_rhd"": 1153, ""wilor_dex"": 19, ""wilor_interhand26m"": 175, ""wilor_mtc"": 329, ""wilor_reinter"": 228}"
6
+ 1001,0,0,1001,0.0,0.0,1.0,0.0,uncovered,抽样库未覆盖,"[0.0, 0.0, 1.0]","[0.0, 0.0, 1.0]",960,external_left_fine_B5,left,fine,B5,9.49763298034668,20.789093017578125,22.490758895874023,34.86929702758789,"{""wilor_rhd"": 925, ""wilor_interhand26m"": 28, ""wilor_mtc"": 38, ""wilor_reinter"": 10}"
7
+ 5670,1196,156,4318,0.2109347442680776,0.027513227513227514,0.7615520282186948,0.23844797178130517,low,低覆盖,"[0.350644787550694, 0.09175245223714362, 0.5576027602121624]","[0.1508577203091623, 0.02206640375082836, 0.8270758759400094]",517,external_left_fine_B6,left,fine,B6,9.49763298034668,11.848321437835693,13.771859073638918,29.364564895629883,"{""wilor_rhd"": 3699, ""wilor_dex"": 1131, ""wilor_interhand26m"": 156, ""wilor_mtc"": 330, ""wilor_reinter"": 354}"
8
+ 757,34,13,710,0.04491413474240423,0.017173051519154558,0.9379128137384413,0.062087186261558736,low,低覆盖,"[0.02837713024492711, 0.01634265056118991, 0.9552802191938828]","[0.02636954788533109, 0.01795159737179234, 0.9556788547428765]",153,external_left_fine_B7,left,fine,B7,9.49763298034668,13.97718620300293,20.250528717041014,30.29688835144043,"{""wilor_rhd"": 3, ""wilor_dex"": 28, ""wilor_interhand26m"": 350, ""wilor_mtc"": 29, ""wilor_reinter"": 347}"
9
+ 3202,1043,200,1959,0.3257339163023111,0.06246096189881324,0.6118051217988757,0.3881948782011243,low,低覆盖,"[0.3112932970184011, 0.07306468623052814, 0.6156420167510707]","[0.15538628955372125, 0.07038482269025442, 0.7742288877560243]",969,external_left_fine_B8,left,fine,B8,9.49763298034668,10.336248874664307,14.753903007507324,35.33476257324219,"{""wilor_rhd"": 730, ""wilor_dex"": 823, ""wilor_interhand26m"": 658, ""wilor_mtc"": 210, ""wilor_reinter"": 781}"
10
+ 1643,793,214,636,0.48265368228849664,0.13024954351795495,0.3870967741935484,0.6129032258064516,low,低覆盖,"[0.5248195579634503, 0.19697873792993303, 0.27820170410661693]","[0.5158039305589938, 0.12386155481913401, 0.3603345146218722]",608,external_left_fine_B9,left,fine,B9,9.49763298034668,8.942516326904297,14.363667774200438,29.51561737060547,"{""wilor_rhd"": 360, ""wilor_dex"": 301, ""wilor_interhand26m"": 373, ""wilor_mtc"": 59, ""wilor_h2o3d"": 142, ""wilor_reinter"": 408}"
11
+ 2052,1363,137,552,0.6642300194931774,0.06676413255360623,0.26900584795321636,0.7309941520467836,low,低覆盖,"[0.45535600056903813, 0.1343326247191284, 0.41031137471183354]","[0.39782336858766865, 0.11263537819297602, 0.4895412532193555]",309,external_left_fine_B10,left,fine,B10,9.49763298034668,6.594670057296753,12.154699182510376,23.656810760498047,"{""wilor_rhd"": 113, ""wilor_dex"": 1204, ""wilor_interhand26m"": 303, ""wilor_mtc"": 11, ""wilor_h2o3d"": 152, ""wilor_reinter"": 269}"
12
+ 1569,40,5,1524,0.025493945188017845,0.0031867431485022306,0.97131931166348,0.028680688336520044,low,低覆盖,"[0.03269455947162975, 0.0037103771199735475, 0.9635950634083968]","[0.005865088529638183, 0.0004864506163582376, 0.9936484608540035]",866,external_left_fine_B11,left,fine,B11,9.49763298034668,13.924688339233398,17.32938232421875,20.491647720336914,"{""wilor_rhd"": 1327, ""wilor_dex"": 56, ""wilor_interhand26m"": 55, ""wilor_mtc"": 25, ""wilor_reinter"": 106}"
13
+ 778,219,54,505,0.2814910025706941,0.06940874035989718,0.6491002570694088,0.35089974293059123,low,低覆盖,"[0.17452989658821816, 0.07041409881948912, 0.7550560045922924]","[0.09780966767371602, 0.025755287009063446, 0.8764350453172206]",331,external_left_fine_B12,left,fine,B12,9.49763298034668,11.265559673309326,15.61582899093628,34.806514739990234,"{""wilor_rhd"": 417, ""wilor_dex"": 183, ""wilor_interhand26m"": 72, ""wilor_mtc"": 4, ""wilor_h2o3d"": 26, ""wilor_reinter"": 76}"
14
+ 6394,3724,628,2042,0.5824210197059744,0.09821707851110416,0.3193619017829215,0.6806380982170785,low,低覆盖,"[0.6893652933365401, 0.0788791001580195, 0.2317556065054405]","[0.4241424221243644, 0.16952437552573804, 0.40633320234989745]",2885,external_left_fine_B13,left,fine,B13,9.49763298034668,8.754323959350586,11.654617118835448,36.636138916015625,"{""wilor_rhd"": 3215, ""wilor_dex"": 1514, ""wilor_interhand26m"": 312, ""wilor_mtc"": 1096, ""wilor_h2o3d"": 4, ""wilor_reinter"": 253}"
15
+ 4345,1941,354,2050,0.44672036823935557,0.08147295742232451,0.4718066743383199,0.5281933256616801,low,低覆盖,"[0.44937231137766076, 0.09437967576084247, 0.4562480128614969]","[0.16086429948022454, 0.03938309444616991, 0.7997526060736058]",1406,external_left_fine_B14,left,fine,B14,9.49763298034668,9.1389799118042,14.48231830596924,30.715425491333008,"{""wilor_rhd"": 1655, ""wilor_dex"": 2155, ""wilor_interhand26m"": 215, ""wilor_mtc"": 164, ""wilor_h2o3d"": 11, ""wilor_reinter"": 145}"
16
+ 1385,989,134,262,0.7140794223826715,0.09675090252707581,0.1891696750902527,0.8108303249097473,low,低覆盖,"[0.42107906879413015, 0.15459798882476652, 0.4243229423811034]","[0.5542837123581176, 0.0693488721767804, 0.37636741546510194]",183,external_left_fine_B15,left,fine,B15,9.49763298034668,7.1735429763793945,11.55076332092285,34.16762924194336,"{""wilor_rhd"": 2, ""wilor_dex"": 875, ""wilor_interhand26m"": 185, ""wilor_mtc"": 4, ""wilor_h2o3d"": 199, ""wilor_reinter"": 120}"
17
+ 6043,4556,393,1094,0.7539301671355287,0.06503392354790667,0.18103590931656463,0.8189640906834353,low,低覆盖,"[0.8423320447292648, 0.03684152109509557, 0.12082643417563976]","[0.5351122871164468, 0.11874664657202716, 0.3461410663115261]",1923,external_left_fine_B16,left,fine,B16,9.49763298034668,7.051662445068359,10.398628616333006,17.75185203552246,"{""wilor_rhd"": 1972, ""wilor_dex"": 2645, ""wilor_interhand26m"": 365, ""wilor_mtc"": 811, ""wilor_h2o3d"": 84, ""wilor_reinter"": 166}"
18
+ 2437,2021,93,323,0.829298317603611,0.038161674189577346,0.13254000820681167,0.8674599917931883,low,低覆盖,"[0.7180757687950806, 0.10348867556837865, 0.1784355556365406]","[0.70726132949254, 0.04155699783717742, 0.2511816726702825]",465,external_left_fine_B17,left,fine,B17,9.49763298034668,6.494642734527588,12.936913681030259,22.35643768310547,"{""wilor_rhd"": 158, ""wilor_dex"": 1712, ""wilor_interhand26m"": 234, ""wilor_mtc"": 41, ""wilor_h2o3d"": 173, ""wilor_reinter"": 119}"
19
+ 4586,3012,604,970,0.6567815089402529,0.13170518970780637,0.21151330135194069,0.7884866986480593,low,低覆盖,"[0.7001709096405897, 0.10488844863598464, 0.19494064172342573]","[0.6073670920284657, 0.16404314264301606, 0.2285897653285182]",2529,external_left_fine_B18,left,fine,B18,9.49763298034668,8.484198570251465,11.652318716049194,22.997819900512695,"{""wilor_rhd"": 2214, ""wilor_dex"": 416, ""wilor_interhand26m"": 998, ""wilor_mtc"": 330, ""wilor_h2o3d"": 47, ""wilor_reinter"": 581}"
20
+ 6320,5547,264,509,0.8776898734177215,0.04177215189873418,0.0805379746835443,0.9194620253164557,low,低覆盖,"[0.8585765985164301, 0.042818138822823947, 0.0986052626607461]","[0.5340491606866136, 0.0800227171996027, 0.3859281221137838]",673,external_left_fine_B19,left,fine,B19,9.49763298034668,6.734456300735474,10.251062440872191,23.881214141845703,"{""wilor_rhd"": 301, ""wilor_dex"": 5840, ""wilor_interhand26m"": 113, ""wilor_mtc"": 12, ""wilor_h2o3d"": 1, ""wilor_reinter"": 53}"
21
+ 1247,0,0,1247,0.0,0.0,1.0,0.0,uncovered,抽样库未覆盖,"[0.0, 0.0, 1.0]","[0.0, 0.0, 1.0]",1091,external_left_fine_B20,left,fine,B20,9.49763298034668,16.972991943359375,24.505570793151858,28.6693058013916,"{""wilor_rhd"": 1033, ""wilor_interhand26m"": 115, ""wilor_mtc"": 21, ""wilor_reinter"": 78}"
22
+ 2501,1583,176,742,0.6329468212714914,0.0703718512594962,0.2966813274690124,0.7033186725309877,low,低覆盖,"[0.7358824578246955, 0.08887268981720826, 0.17524485235809625]","[0.5541538862527574, 0.13689385005109836, 0.30895226369614426]",911,external_left_fine_B21,left,fine,B21,9.49763298034668,7.901134967803955,13.278962135314941,16.455108642578125,"{""wilor_rhd"": 1116, ""wilor_dex"": 973, ""wilor_interhand26m"": 101, ""wilor_mtc"": 86, ""wilor_h2o3d"": 150, ""wilor_reinter"": 75}"
23
+ 2614,293,298,2023,0.11208875286916603,0.11400153022188217,0.7739097169089518,0.22609028309104817,low,低覆盖,"[0.14053292820241495, 0.12900821657964384, 0.7304588552179413]","[0.21086057149963067, 0.10478310697554942, 0.6843563215248198]",266,external_left_fine_B22,left,fine,B22,9.49763298034668,10.88214635848999,16.46778659820556,45.58646011352539,"{""wilor_rhd"": 41, ""wilor_interhand26m"": 662, ""wilor_mtc"": 207, ""wilor_reinter"": 1704}"
24
+ 4895,4301,175,419,0.8786516853932584,0.03575076608784474,0.08559754851889684,0.9144024514811031,low,低覆盖,"[0.8624684384616301, 0.03991772879602693, 0.09761383274234282]","[0.672994238476453, 0.08528862357707155, 0.24171713794647548]",416,external_left_fine_B23,left,fine,B23,9.49763298034668,6.6624579429626465,11.093380165100104,20.63935661315918,"{""wilor_rhd"": 169, ""wilor_dex"": 4491, ""wilor_interhand26m"": 125, ""wilor_mtc"": 24, ""wilor_h2o3d"": 9, ""wilor_reinter"": 77}"
25
+ 645,222,154,269,0.34418604651162793,0.23875968992248062,0.4170542635658915,0.5829457364341085,low,低覆盖,"[0.6085973936731306, 0.20432918189155733, 0.1870734244353121]","[0.38802760891754573, 0.18122600807130929, 0.43074638301114493]",184,external_left_fine_B24,left,fine,B24,9.49763298034668,9.179900169372559,13.160082626342772,24.0723876953125,"{""wilor_rhd"": 92, ""wilor_dex"": 94, ""wilor_interhand26m"": 142, ""wilor_mtc"": 126, ""wilor_h2o3d"": 65, ""wilor_reinter"": 126}"
26
+ 4850,3213,435,1202,0.6624742268041237,0.08969072164948454,0.24783505154639177,0.7521649484536083,low,低覆盖,"[0.7531587219579603, 0.06253903637336465, 0.18430224166867484]","[0.6200723287593087, 0.09860202025069781, 0.2813256509899934]",2261,external_left_fine_B25,left,fine,B25,9.49763298034668,8.251009464263916,12.027929544448856,23.52761459350586,"{""wilor_rhd"": 1877, ""wilor_dex"": 124, ""wilor_interhand26m"": 1265, ""wilor_mtc"": 409, ""wilor_h2o3d"": 51, ""wilor_reinter"": 1124}"
27
+ 3296,2128,224,944,0.6456310679611651,0.06796116504854369,0.28640776699029125,0.7135922330097088,low,低覆盖,"[0.6734961656390336, 0.059968449530467136, 0.26653538483049916]","[0.6249635984027109, 0.08494112419286255, 0.29009527740442653]",587,external_left_fine_B26,left,fine,B26,9.49763298034668,8.285791873931885,13.637461423873901,26.55930519104004,"{""wilor_rhd"": 152, ""wilor_dex"": 129, ""wilor_interhand26m"": 1094, ""wilor_mtc"": 112, ""wilor_h2o3d"": 51, ""wilor_reinter"": 1758}"
28
+ 262,0,0,262,0.0,0.0,1.0,0.0,uncovered,抽样库未覆盖,"[0.0, 0.0, 1.0]","[0.0, 0.0, 1.0]",87,external_left_fine_B27,left,fine,B27,9.49763298034668,28.08455467224121,31.430563354492186,32.29803466796875,"{""wilor_rhd"": 4, ""wilor_interhand26m"": 249, ""wilor_mtc"": 4, ""wilor_reinter"": 5}"
29
+ 2131,20,100,2011,0.009385265133740028,0.04692632566870014,0.9436884091975598,0.05631159080244019,low,低覆盖,"[0.008927299731298242, 0.04696573827712419, 0.9441069619915776]","[0.006612714820935348, 0.019394540940504513, 0.9739927442385601]",1434,external_left_fine_B28,left,fine,B28,9.49763298034668,13.311511993408203,18.50288963317871,34.42958068847656,"{""wilor_rhd"": 1624, ""wilor_dex"": 113, ""wilor_interhand26m"": 295, ""wilor_mtc"": 2, ""wilor_reinter"": 97}"
30
+ 1067,0,7,1060,0.0,0.006560449859418931,0.993439550140581,0.006560449859418949,low,低覆盖,"[0.0, 0.0055712827086024964, 0.9944287172913976]","[0.0, 0.0012357217030114227, 0.9987642782969886]",450,external_left_fine_B29,left,fine,B29,9.49763298034668,15.255627632141113,19.79076690673828,28.854854583740234,"{""wilor_rhd"": 446, ""wilor_interhand26m"": 162, ""wilor_mtc"": 15, ""wilor_reinter"": 444}"
31
+ 2835,856,320,1659,0.3019400352733686,0.1128747795414462,0.5851851851851851,0.41481481481481486,low,低覆盖,"[0.313374678312726, 0.11189030416587281, 0.5747350175214011]","[0.2917381910449484, 0.12071516780178554, 0.587546641153266]",1885,external_left_fine_B30,left,fine,B30,9.49763298034668,10.01617431640625,13.733166313171386,25.315275192260742,"{""wilor_rhd"": 1817, ""wilor_dex"": 266, ""wilor_interhand26m"": 231, ""wilor_mtc"": 123, ""wilor_reinter"": 398}"
32
+ 2723,1336,378,1009,0.4906353286816012,0.13881748071979436,0.37054719059860447,0.6294528094013956,low,低覆盖,"[0.6401484604987809, 0.09972980902185757, 0.26012173047936127]","[0.38746993714056954, 0.14300869313562292, 0.46952136972380737]",748,external_left_fine_B31,left,fine,B31,9.49763298034668,8.89091968536377,13.222776794433594,29.43329429626465,"{""wilor_rhd"": 575, ""wilor_interhand26m"": 1002, ""wilor_mtc"": 306, ""wilor_h2o3d"": 124, ""wilor_reinter"": 716}"
33
+ 1260,45,26,1189,0.03571428571428571,0.020634920634920634,0.9436507936507936,0.05634920634920637,low,低覆盖,"[0.033213577940571004, 0.020819311613976085, 0.945967110445453]","[0.0034803951153761035, 0.02143158911219748, 0.9750880157724264]",789,external_left_fine_B32,left,fine,B32,9.49763298034668,13.050553798675537,23.870503425598145,61.350528717041016,"{""wilor_rhd"": 980, ""wilor_dex"": 60, ""wilor_interhand26m"": 151, ""wilor_mtc"": 2, ""wilor_h2o3d"": 2, ""wilor_reinter"": 65}"
34
+ 957,0,1,956,0.0,0.0010449320794148381,0.9989550679205852,0.0010449320794148065,low,低覆盖,"[0.0, 0.0006819989186126367, 0.9993180010813872]","[0.0, 0.0005030181086519114, 0.9994969818913482]",284,external_left_distinct_B1,left,distinct,B1,9.49763298034668,17.770145416259766,33.662847900390624,68.93052673339844,"{""wilor_rhd"": 187, ""wilor_interhand26m"": 491, ""wilor_mtc"": 118, ""wilor_reinter"": 161}"
35
+ 305,0,0,305,0.0,0.0,1.0,0.0,uncovered,抽样库未覆盖,"[0.0, 0.0, 1.0]","[0.0, 0.0, 1.0]",156,external_left_distinct_B2,left,distinct,B2,9.49763298034668,21.449251174926758,29.474415206909182,35.25153732299805,"{""wilor_rhd"": 106, ""wilor_interhand26m"": 91, ""wilor_mtc"": 98, ""wilor_reinter"": 10}"
36
+ 4358,0,2,4356,0.0,0.0004589261128958238,0.9995410738871042,0.00045892611289577445,low,低覆盖,"[0.0, 0.00032881964136443346, 0.9996711803586357]","[0.0, 0.00011140819964349375, 0.9998885918003565]",3400,external_left_distinct_B3,left,distinct,B3,9.49763298034668,14.459971904754639,17.235001564025875,54.535888671875,"{""wilor_rhd"": 3656, ""wilor_interhand26m"": 264, ""wilor_mtc"": 312, ""wilor_reinter"": 126}"
37
+ 1904,50,66,1788,0.026260504201680673,0.03466386554621849,0.9390756302521008,0.060924369747899165,low,低覆盖,"[0.0312471646602513, 0.07401681908528633, 0.8947360162544625]","[0.00744860643789431, 0.00842278290809309, 0.9841286106540125]",995,external_left_distinct_B4,left,distinct,B4,9.49763298034668,14.209616661071777,22.362558841705315,34.26322937011719,"{""wilor_rhd"": 1153, ""wilor_dex"": 19, ""wilor_interhand26m"": 175, ""wilor_mtc"": 329, ""wilor_reinter"": 228}"
38
+ 1001,0,0,1001,0.0,0.0,1.0,0.0,uncovered,抽样库未覆盖,"[0.0, 0.0, 1.0]","[0.0, 0.0, 1.0]",960,external_left_distinct_B5,left,distinct,B5,9.49763298034668,20.789093017578125,22.490758895874023,34.86929702758789,"{""wilor_rhd"": 925, ""wilor_interhand26m"": 28, ""wilor_mtc"": 38, ""wilor_reinter"": 10}"
39
+ 5670,1196,156,4318,0.2109347442680776,0.027513227513227514,0.7615520282186948,0.23844797178130517,low,低覆盖,"[0.350644787550694, 0.09175245223714362, 0.5576027602121624]","[0.1508577203091623, 0.02206640375082836, 0.8270758759400094]",517,external_left_distinct_B6,left,distinct,B6,9.49763298034668,11.848321437835693,13.771859073638918,29.364564895629883,"{""wilor_rhd"": 3699, ""wilor_dex"": 1131, ""wilor_interhand26m"": 156, ""wilor_mtc"": 330, ""wilor_reinter"": 354}"
40
+ 757,34,13,710,0.04491413474240423,0.017173051519154558,0.9379128137384413,0.062087186261558736,low,低覆盖,"[0.02837713024492711, 0.01634265056118991, 0.9552802191938828]","[0.02636954788533109, 0.01795159737179234, 0.9556788547428765]",153,external_left_distinct_B7,left,distinct,B7,9.49763298034668,13.97718620300293,20.250528717041014,30.29688835144043,"{""wilor_rhd"": 3, ""wilor_dex"": 28, ""wilor_interhand26m"": 350, ""wilor_mtc"": 29, ""wilor_reinter"": 347}"
41
+ 3202,1043,200,1959,0.3257339163023111,0.06246096189881324,0.6118051217988757,0.3881948782011243,low,低覆盖,"[0.3112932970184011, 0.07306468623052814, 0.6156420167510707]","[0.15538628955372125, 0.07038482269025442, 0.7742288877560243]",969,external_left_distinct_B8,left,distinct,B8,9.49763298034668,10.336248874664307,14.753903007507324,35.33476257324219,"{""wilor_rhd"": 730, ""wilor_dex"": 823, ""wilor_interhand26m"": 658, ""wilor_mtc"": 210, ""wilor_reinter"": 781}"
42
+ 2052,1363,137,552,0.6642300194931774,0.06676413255360623,0.26900584795321636,0.7309941520467836,low,低覆盖,"[0.45535600056903813, 0.1343326247191284, 0.41031137471183354]","[0.39782336858766865, 0.11263537819297602, 0.4895412532193555]",309,external_left_distinct_B9,left,distinct,B9,9.49763298034668,6.594670057296753,12.154699182510376,23.656810760498047,"{""wilor_rhd"": 113, ""wilor_dex"": 1204, ""wilor_interhand26m"": 303, ""wilor_mtc"": 11, ""wilor_h2o3d"": 152, ""wilor_reinter"": 269}"
43
+ 1569,40,5,1524,0.025493945188017845,0.0031867431485022306,0.97131931166348,0.028680688336520044,low,低覆盖,"[0.03269455947162975, 0.0037103771199735475, 0.9635950634083968]","[0.005865088529638183, 0.0004864506163582376, 0.9936484608540035]",866,external_left_distinct_B10,left,distinct,B10,9.49763298034668,13.924688339233398,17.32938232421875,20.491647720336914,"{""wilor_rhd"": 1327, ""wilor_dex"": 56, ""wilor_interhand26m"": 55, ""wilor_mtc"": 25, ""wilor_reinter"": 106}"
44
+ 778,219,54,505,0.2814910025706941,0.06940874035989718,0.6491002570694088,0.35089974293059123,low,低覆盖,"[0.17452989658821816, 0.07041409881948912, 0.7550560045922924]","[0.09780966767371602, 0.025755287009063446, 0.8764350453172206]",331,external_left_distinct_B11,left,distinct,B11,9.49763298034668,11.265559673309326,15.61582899093628,34.806514739990234,"{""wilor_rhd"": 417, ""wilor_dex"": 183, ""wilor_interhand26m"": 72, ""wilor_mtc"": 4, ""wilor_h2o3d"": 26, ""wilor_reinter"": 76}"
45
+ 14080,9073,1235,3772,0.6443892045454546,0.08771306818181818,0.26789772727272726,0.7321022727272728,low,低覆盖,"[0.7222989777967671, 0.08318653506673751, 0.1945144871364954]","[0.4398150777024166, 0.15684095371711176, 0.4033439685804716]",4936,external_left_distinct_B12,left,distinct,B12,9.49763298034668,8.177695274353027,11.52519426345825,36.636138916015625,"{""wilor_rhd"": 5547, ""wilor_dex"": 4460, ""wilor_interhand26m"": 1050, ""wilor_mtc"": 1966, ""wilor_h2o3d"": 230, ""wilor_reinter"": 827}"
46
+ 4345,1941,354,2050,0.44672036823935557,0.08147295742232451,0.4718066743383199,0.5281933256616801,low,低覆盖,"[0.44937231137766076, 0.09437967576084247, 0.4562480128614969]","[0.16086429948022454, 0.03938309444616991, 0.7997526060736058]",1406,external_left_distinct_B13,left,distinct,B13,9.49763298034668,9.1389799118042,14.48231830596924,30.715425491333008,"{""wilor_rhd"": 1655, ""wilor_dex"": 2155, ""wilor_interhand26m"": 215, ""wilor_mtc"": 164, ""wilor_h2o3d"": 11, ""wilor_reinter"": 145}"
47
+ 1385,989,134,262,0.7140794223826715,0.09675090252707581,0.1891696750902527,0.8108303249097473,low,低覆盖,"[0.42107906879413015, 0.15459798882476652, 0.4243229423811034]","[0.5542837123581176, 0.0693488721767804, 0.37636741546510194]",183,external_left_distinct_B14,left,distinct,B14,9.49763298034668,7.1735429763793945,11.55076332092285,34.16762924194336,"{""wilor_rhd"": 2, ""wilor_dex"": 875, ""wilor_interhand26m"": 185, ""wilor_mtc"": 4, ""wilor_h2o3d"": 199, ""wilor_reinter"": 120}"
48
+ 4586,3012,604,970,0.6567815089402529,0.13170518970780637,0.21151330135194069,0.7884866986480593,low,低覆盖,"[0.7001709096405897, 0.10488844863598464, 0.19494064172342573]","[0.6073670920284657, 0.16404314264301606, 0.2285897653285182]",2529,external_left_distinct_B15,left,distinct,B15,9.49763298034668,8.484198570251465,11.652318716049194,22.997819900512695,"{""wilor_rhd"": 2214, ""wilor_dex"": 416, ""wilor_interhand26m"": 998, ""wilor_mtc"": 330, ""wilor_h2o3d"": 47, ""wilor_reinter"": 581}"
49
+ 1247,0,0,1247,0.0,0.0,1.0,0.0,uncovered,抽样库未覆盖,"[0.0, 0.0, 1.0]","[0.0, 0.0, 1.0]",1091,external_left_distinct_B16,left,distinct,B16,9.49763298034668,16.972991943359375,24.505570793151858,28.6693058013916,"{""wilor_rhd"": 1033, ""wilor_interhand26m"": 115, ""wilor_mtc"": 21, ""wilor_reinter"": 78}"
50
+ 16153,13452,708,1993,0.8327864792917724,0.04383086733114592,0.12338265337708165,0.8766173466229183,low,低覆盖,"[0.7996445135822496, 0.06639554940574824, 0.13395993701200232]","[0.5064881900286149, 0.11489311997041547, 0.37861869000096976]",1844,external_left_distinct_B17,left,distinct,B17,9.49763298034668,6.782214164733887,12.420542907714843,23.881214141845703,"{""wilor_rhd"": 1744, ""wilor_dex"": 13016, ""wilor_interhand26m"": 573, ""wilor_mtc"": 163, ""wilor_h2o3d"": 333, ""wilor_reinter"": 324}"
51
+ 2614,293,298,2023,0.11208875286916603,0.11400153022188217,0.7739097169089518,0.22609028309104817,low,低覆盖,"[0.14053292820241495, 0.12900821657964384, 0.7304588552179413]","[0.21086057149963067, 0.10478310697554942, 0.6843563215248198]",266,external_left_distinct_B18,left,distinct,B18,9.49763298034668,10.88214635848999,16.46778659820556,45.58646011352539,"{""wilor_rhd"": 41, ""wilor_interhand26m"": 662, ""wilor_mtc"": 207, ""wilor_reinter"": 1704}"
52
+ 645,222,154,269,0.34418604651162793,0.23875968992248062,0.4170542635658915,0.5829457364341085,low,低覆盖,"[0.6085973936731306, 0.20432918189155733, 0.1870734244353121]","[0.38802760891754573, 0.18122600807130929, 0.43074638301114493]",184,external_left_distinct_B19,left,distinct,B19,9.49763298034668,9.179900169372559,13.160082626342772,24.0723876953125,"{""wilor_rhd"": 92, ""wilor_dex"": 94, ""wilor_interhand26m"": 142, ""wilor_mtc"": 126, ""wilor_h2o3d"": 65, ""wilor_reinter"": 126}"
53
+ 13704,7533,1357,4814,0.5496935201401051,0.09902218330414478,0.35128429655575016,0.6487157034442499,low,低覆盖,"[0.6417604277806683, 0.07968476557908322, 0.2785548066402483]","[0.45864277439102935, 0.1151298693226762, 0.42622735628629455]",4886,external_left_distinct_B20,left,distinct,B20,9.49763298034668,8.692762851715088,13.147455072402952,29.43329429626465,"{""wilor_rhd"": 4421, ""wilor_dex"": 519, ""wilor_interhand26m"": 3592, ""wilor_mtc"": 950, ""wilor_h2o3d"": 226, ""wilor_reinter"": 3996}"
54
+ 262,0,0,262,0.0,0.0,1.0,0.0,uncovered,抽样库未覆盖,"[0.0, 0.0, 1.0]","[0.0, 0.0, 1.0]",87,external_left_distinct_B21,left,distinct,B21,9.49763298034668,28.08455467224121,31.430563354492186,32.29803466796875,"{""wilor_rhd"": 4, ""wilor_interhand26m"": 249, ""wilor_mtc"": 4, ""wilor_reinter"": 5}"
55
+ 2131,20,100,2011,0.009385265133740028,0.04692632566870014,0.9436884091975598,0.05631159080244019,low,低覆盖,"[0.008927299731298242, 0.04696573827712419, 0.9441069619915776]","[0.006612714820935348, 0.019394540940504513, 0.9739927442385601]",1434,external_left_distinct_B22,left,distinct,B22,9.49763298034668,13.311511993408203,18.50288963317871,34.42958068847656,"{""wilor_rhd"": 1624, ""wilor_dex"": 113, ""wilor_interhand26m"": 295, ""wilor_mtc"": 2, ""wilor_reinter"": 97}"
56
+ 1067,0,7,1060,0.0,0.006560449859418931,0.993439550140581,0.006560449859418949,low,低覆盖,"[0.0, 0.0055712827086024964, 0.9944287172913976]","[0.0, 0.0012357217030114227, 0.9987642782969886]",450,external_left_distinct_B23,left,distinct,B23,9.49763298034668,15.255627632141113,19.79076690673828,28.854854583740234,"{""wilor_rhd"": 446, ""wilor_interhand26m"": 162, ""wilor_mtc"": 15, ""wilor_reinter"": 444}"
57
+ 1260,45,26,1189,0.03571428571428571,0.020634920634920634,0.9436507936507936,0.05634920634920637,low,低覆盖,"[0.033213577940571004, 0.020819311613976085, 0.945967110445453]","[0.0034803951153761035, 0.02143158911219748, 0.9750880157724264]",789,external_left_distinct_B24,left,distinct,B24,9.49763298034668,13.050553798675537,23.870503425598145,61.350528717041016,"{""wilor_rhd"": 980, ""wilor_dex"": 60, ""wilor_interhand26m"": 151, ""wilor_mtc"": 2, ""wilor_h2o3d"": 2, ""wilor_reinter"": 65}"
58
+ 1032,0,3,1029,0.0,0.0029069767441860465,0.997093023255814,0.0029069767441860517,low,低覆盖,"[0.0, 0.0027669567455739993, 0.9972330432544262]","[0.0, 0.0016195524146054182, 0.9983804475853945]",283,external_right_fine_B1,right,fine,B1,9.252071380615234,16.09415054321289,29.51508560180664,33.34939956665039,"{""wilor_freihand"": 32, ""wilor_rhd"": 195, ""wilor_interhand26m"": 494, ""wilor_mtc"": 135, ""wilor_reinter"": 176}"
59
+ 492,0,1,491,0.0,0.0020325203252032522,0.9979674796747967,0.002032520325203291,low,低覆盖,"[0.0, 0.001260702316862762, 0.9987392976831372]","[0.0, 0.004329004329004329, 0.9956709956709957]",231,external_right_fine_B2,right,fine,B2,9.252071380615234,16.76012897491455,22.280033683776853,33.24413299560547,"{""wilor_freihand"": 184, ""wilor_rhd"": 162, ""wilor_dex"": 1, ""wilor_interhand26m"": 91, ""wilor_mtc"": 52, ""wilor_reinter"": 2}"
60
+ 4658,24,56,4578,0.005152425933877201,0.012022327179046801,0.982825246887076,0.017174753112924046,low,低覆盖,"[0.002898725070245564, 0.008104511327779366, 0.9889967636019751]","[0.0008472182999152782, 0.002016910573815403, 0.9971358711262692]",3541,external_right_fine_B3,right,fine,B3,9.252071380615234,13.483551502227783,16.439379119873045,50.315032958984375,"{""wilor_freihand"": 160, ""wilor_rhd"": 3668, ""wilor_interhand26m"": 265, ""wilor_mtc"": 416, ""wilor_reinter"": 149}"
61
+ 1078,0,0,1078,0.0,0.0,1.0,0.0,uncovered,抽样库未覆盖,"[0.0, 0.0, 1.0]","[0.0, 0.0, 1.0]",842,external_right_fine_B4,right,fine,B4,9.252071380615234,17.85080909729004,21.442168617248534,36.31260299682617,"{""wilor_freihand"": 184, ""wilor_rhd"": 780, ""wilor_interhand26m"": 26, ""wilor_mtc"": 72, ""wilor_reinter"": 16}"
62
+ 4429,538,238,3653,0.12147211560171596,0.05373673515466245,0.8247911492436216,0.17520885075637838,low,低覆盖,"[0.14467737274999184, 0.09666480545829527, 0.7586578217917128]","[0.043388968650744146, 0.023947796090001687, 0.9326632352592542]",1123,external_right_fine_B5,right,fine,B5,9.252071380615234,11.781124114990234,15.474595260620116,30.491758346557617,"{""wilor_freihand"": 760, ""wilor_rhd"": 2289, ""wilor_dex"": 268, ""wilor_interhand26m"": 206, ""wilor_mtc"": 527, ""wilor_ho3d"": 65, ""wilor_reinter"": 314}"
63
+ 3465,892,236,2337,0.25743145743145746,0.0681096681096681,0.6744588744588744,0.3255411255411256,low,低覆盖,"[0.356631861389781, 0.05523674681026089, 0.5881313917999582]","[0.07269984717169979, 0.030423564935954894, 0.8968765878923453]",1139,external_right_fine_B6,right,fine,B6,9.252071380615234,10.203381538391113,13.806207275390623,27.509233474731445,"{""wilor_freihand"": 704, ""wilor_rhd"": 991, ""wilor_dex"": 339, ""wilor_interhand26m"": 470, ""wilor_mtc"": 60, ""wilor_ho3d"": 433, ""wilor_h2o3d"": 13, ""wilor_reinter"": 455}"
64
+ 4018,1541,282,2195,0.3835241413638626,0.07018417122946739,0.54629168740667,0.45370831259333,low,低覆盖,"[0.33346863064158727, 0.07481856903031535, 0.5917128003280974]","[0.32427397462883256, 0.04986250782909566, 0.6258635175420718]",578,external_right_fine_B7,right,fine,B7,9.252071380615234,9.591028690338135,15.868682956695551,23.114944458007812,"{""wilor_freihand"": 840, ""wilor_rhd"": 434, ""wilor_dex"": 902, ""wilor_interhand26m"": 356, ""wilor_mtc"": 378, ""wilor_ho3d"": 558, ""wilor_reinter"": 550}"
65
+ 1452,15,77,1360,0.010330578512396695,0.05303030303030303,0.9366391184573003,0.0633608815426997,low,低覆盖,"[0.007139996081754413, 0.03956472083516249, 0.9532952830830829]","[0.011920009966884967, 0.0436041760179969, 0.944475814015118]",264,external_right_fine_B8,right,fine,B8,9.252071380615234,12.68548059463501,18.450111103057864,26.912817001342773,"{""wilor_freihand"": 656, ""wilor_rhd"": 62, ""wilor_dex"": 7, ""wilor_interhand26m"": 356, ""wilor_mtc"": 24, ""wilor_ho3d"": 51, ""wilor_reinter"": 296}"
66
+ 4536,1584,278,2674,0.3492063492063492,0.06128747795414462,0.5895061728395061,0.4104938271604939,low,低覆盖,"[0.36951867552556344, 0.0620180338996728, 0.5684632905747636]","[0.14412194218229143, 0.043879620611320454, 0.8119984372063881]",904,external_right_fine_B9,right,fine,B9,9.252071380615234,9.874313831329346,14.39888072013855,23.693410873413086,"{""wilor_freihand"": 1608, ""wilor_rhd"": 1137, ""wilor_dex"": 1051, ""wilor_interhand26m"": 156, ""wilor_mtc"": 231, ""wilor_ho3d"": 170, ""wilor_reinter"": 183}"
67
+ 4099,1461,338,2300,0.3564283971700415,0.08245913637472554,0.5611124664552329,0.43888753354476706,low,低覆盖,"[0.47574800123429584, 0.08776580520314235, 0.4364861935625618]","[0.27668370666050945, 0.10394497898250263, 0.619371314356988]",801,external_right_fine_B10,right,fine,B10,9.252071380615234,9.514245986938477,13.587471961975098,23.28925132751465,"{""wilor_freihand"": 1008, ""wilor_rhd"": 1255, ""wilor_dex"": 574, ""wilor_interhand26m"": 279, ""wilor_mtc"": 46, ""wilor_ho3d"": 555, ""wilor_h2o3d"": 44, ""wilor_reinter"": 338}"
68
+ 9444,6545,587,2312,0.6930326132994494,0.06215586615840746,0.24481152054214317,0.7551884794578568,low,低覆盖,"[0.7589549791840582, 0.050542085843791364, 0.19050293497215054]","[0.5312411722077317, 0.08246534362502882, 0.3862934841672394]",2486,external_right_fine_B11,right,fine,B11,9.252071380615234,7.7916905879974365,11.240390872955322,22.897846221923828,"{""wilor_freihand"": 2280, ""wilor_rhd"": 2289, ""wilor_dex"": 3069, ""wilor_interhand26m"": 254, ""wilor_mtc"": 1134, ""wilor_ho3d"": 189, ""wilor_reinter"": 229}"
69
+ 2410,1403,228,779,0.5821576763485478,0.0946058091286307,0.3232365145228216,0.6767634854771785,low,低覆盖,"[0.7387294963823989, 0.10433943648783431, 0.15693106712976707]","[0.3276128620479963, 0.09562546223209378, 0.57676167571991]",401,external_right_fine_B12,right,fine,B12,9.252071380615234,8.320358753204346,11.743942117691034,24.59847068786621,"{""wilor_freihand"": 201, ""wilor_rhd"": 238, ""wilor_dex"": 333, ""wilor_interhand26m"": 272, ""wilor_mtc"": 19, ""wilor_ho3d"": 1003, ""wilor_h2o3d"": 175, ""wilor_reinter"": 169}"
70
+ 1650,1025,210,415,0.6212121212121212,0.12727272727272726,0.2515151515151515,0.7484848484848485,low,低覆盖,"[0.6306041201313147, 0.12380540167803858, 0.24559047819064675]","[0.4192536016977874, 0.11964623789372575, 0.4611001604084868]",96,external_right_fine_B13,right,fine,B13,9.252071380615234,7.984917163848877,11.82774338722229,19.809581756591797,"{""wilor_freihand"": 56, ""wilor_dex"": 224, ""wilor_interhand26m"": 144, ""wilor_mtc"": 3, ""wilor_ho3d"": 954, ""wilor_h2o3d"": 194, ""wilor_reinter"": 75}"
71
+ 364,0,0,364,0.0,0.0,1.0,0.0,uncovered,抽样库未覆盖,"[0.0, 0.0, 1.0]","[0.0, 0.0, 1.0]",69,external_right_fine_B14,right,fine,B14,9.252071380615234,15.501802444458008,24.739180469512938,27.0179500579834,"{""wilor_freihand"": 8, ""wilor_rhd"": 64, ""wilor_interhand26m"": 1, ""wilor_ho3d"": 291}"
72
+ 7276,6163,311,802,0.8470313358988455,0.04274326553051127,0.11022539857064322,0.8897746014293568,low,低覆盖,"[0.846450886922589, 0.03876546250607641, 0.11478365057133477]","[0.6427211303120679, 0.0758756694376324, 0.28140320025029986]",628,external_right_fine_B15,right,fine,B15,9.252071380615234,6.273130178451538,10.714917421340942,19.164508819580078,"{""wilor_freihand"": 1104, ""wilor_rhd"": 114, ""wilor_dex"": 5433, ""wilor_interhand26m"": 41, ""wilor_mtc"": 13, ""wilor_ho3d"": 484, ""wilor_h2o3d"": 52, ""wilor_reinter"": 35}"
73
+ 2749,1766,258,725,0.6424154237904692,0.09385230993088396,0.26373226627864677,0.7362677337213532,low,低覆盖,"[0.634346337959954, 0.11615577124562143, 0.24949789079442458]","[0.5997578789480356, 0.09340658991462011, 0.3068355311373444]",373,external_right_fine_B16,right,fine,B16,9.252071380615234,8.029752731323242,12.461999893188475,22.539953231811523,"{""wilor_freihand"": 536, ""wilor_rhd"": 85, ""wilor_dex"": 920, ""wilor_interhand26m"": 142, ""wilor_mtc"": 25, ""wilor_ho3d"": 539, ""wilor_h2o3d"": 401, ""wilor_reinter"": 101}"
74
+ 6909,4209,882,1818,0.6092053842813722,0.1276595744680851,0.26313504125054277,0.7368649587494572,low,低覆盖,"[0.7308856082327897, 0.07029753109520494, 0.19881686067200546]","[0.4636343364514462, 0.12968424241767862, 0.40668142113087524]",2432,external_right_fine_B17,right,fine,B17,9.252071380615234,8.294952392578125,11.266800689697265,38.2083625793457,"{""wilor_freihand"": 1119, ""wilor_rhd"": 2580, ""wilor_dex"": 711, ""wilor_interhand26m"": 651, ""wilor_mtc"": 1466, ""wilor_ho3d"": 65, ""wilor_h2o3d"": 14, ""wilor_reinter"": 303}"
75
+ 4609,44,21,4544,0.00954653937947494,0.004556302885658494,0.9858971577348665,0.014102842265133475,low,低覆盖,"[0.013755699700190275, 0.00601553059768336, 0.9802287697021262]","[0.0031720565579757528, 0.0012994789359284332, 0.9955284645060959]",1707,external_right_fine_B18,right,fine,B18,9.252071380615234,14.84779167175293,17.65075225830078,50.51320266723633,"{""wilor_freihand"": 528, ""wilor_rhd"": 3178, ""wilor_dex"": 70, ""wilor_interhand26m"": 231, ""wilor_mtc"": 17, ""wilor_ho3d"": 6, ""wilor_reinter"": 579}"
76
+ 1596,32,11,1553,0.020050125313283207,0.006892230576441102,0.9730576441102757,0.026942355889724268,low,低覆盖,"[0.012654654200441203, 0.0038842896553651363, 0.9834610561441934]","[0.001524390243902439, 0.0016629711751662971, 0.9968126385809313]",902,external_right_fine_B19,right,fine,B19,9.252071380615234,13.922243118286133,22.840292930603027,27.99265480041504,"{""wilor_freihand"": 400, ""wilor_rhd"": 823, ""wilor_dex"": 42, ""wilor_interhand26m"": 28, ""wilor_mtc"": 10, ""wilor_ho3d"": 267, ""wilor_reinter"": 26}"
77
+ 2952,1411,470,1071,0.4779810298102981,0.15921409214092141,0.3628048780487805,0.6371951219512195,low,低覆盖,"[0.3529200982320983, 0.20319261333685845, 0.44388728843104336]","[0.4394581193407975, 0.10543505073329744, 0.45510682992590495]",94,external_right_fine_B20,right,fine,B20,9.252071380615234,8.725767135620117,12.478687286376953,21.58528709411621,"{""wilor_freihand"": 192, ""wilor_rhd"": 5, ""wilor_dex"": 359, ""wilor_interhand26m"": 15, ""wilor_mtc"": 2, ""wilor_ho3d"": 2362, ""wilor_h2o3d"": 13, ""wilor_reinter"": 4}"
78
+ 6236,5443,231,562,0.8728351507376524,0.03704297626683772,0.09012187299550994,0.90987812700449,low,低覆盖,"[0.8401419527718204, 0.03242657911537356, 0.12743146811280628]","[0.7219516732385867, 0.05274736501520837, 0.22530096174620504]",505,external_right_fine_B21,right,fine,B21,9.252071380615234,6.885923385620117,10.343169689178467,23.797868728637695,"{""wilor_freihand"": 624, ""wilor_rhd"": 41, ""wilor_dex"": 4875, ""wilor_interhand26m"": 129, ""wilor_mtc"": 24, ""wilor_ho3d"": 376, ""wilor_h2o3d"": 36, ""wilor_reinter"": 131}"
79
+ 5234,1499,330,3405,0.28639663737103555,0.06304929308368361,0.6505540695452808,0.34944593045471917,low,低覆盖,"[0.25784822822447423, 0.05048131056075014, 0.6916704612147757]","[0.1316564123077974, 0.03916119798521021, 0.8291823897069924]",1208,external_right_fine_B22,right,fine,B22,9.252071380615234,10.373049259185791,14.586898374557494,29.426952362060547,"{""wilor_freihand"": 2608, ""wilor_rhd"": 981, ""wilor_dex"": 1164, ""wilor_interhand26m"": 157, ""wilor_mtc"": 14, ""wilor_ho3d"": 146, ""wilor_h2o3d"": 31, ""wilor_reinter"": 133}"
80
+ 6535,3676,908,1951,0.5625095638867635,0.1389441469013007,0.2985462892119357,0.7014537107880643,low,低覆盖,"[0.6224216883081707, 0.11365625187137333, 0.26392205982045597]","[0.4788086588440452, 0.16215883678759144, 0.3590325043683633]",3127,external_right_fine_B23,right,fine,B23,9.252071380615234,8.537426948547363,11.445512294769285,21.130720138549805,"{""wilor_freihand"": 1304, ""wilor_rhd"": 2620, ""wilor_dex"": 445, ""wilor_interhand26m"": 1067, ""wilor_mtc"": 423, ""wilor_ho3d"": 48, ""wilor_h2o3d"": 39, ""wilor_reinter"": 589}"
81
+ 322,0,0,322,0.0,0.0,1.0,0.0,uncovered,抽样库未覆盖,"[0.0, 0.0, 1.0]","[0.0, 0.0, 1.0]",132,external_right_fine_B24,right,fine,B24,9.252071380615234,25.06973934173584,30.032165813446046,35.582008361816406,"{""wilor_freihand"": 24, ""wilor_rhd"": 45, ""wilor_interhand26m"": 250, ""wilor_mtc"": 3}"
82
+ 5507,3989,348,1170,0.7243508262211731,0.06319230070818958,0.21245687307063738,0.7875431269293627,low,低覆盖,"[0.7088134348481366, 0.10732527661781506, 0.18386128853404807]","[0.5730637274333208, 0.09145453986111478, 0.33548173270556436]",986,external_right_fine_B25,right,fine,B25,9.252071380615234,7.526406764984131,12.564207935333252,21.74848747253418,"{""wilor_freihand"": 1008, ""wilor_rhd"": 771, ""wilor_dex"": 2675, ""wilor_interhand26m"": 250, ""wilor_mtc"": 135, ""wilor_ho3d"": 259, ""wilor_h2o3d"": 187, ""wilor_reinter"": 222}"
83
+ 3099,202,87,2810,0.06518231687641174,0.028073572120038724,0.9067441110035496,0.09325588899645043,low,低覆盖,"[0.06526719533240705, 0.031114641762878013, 0.903618162904715]","[0.016195106529653003, 0.012913078377804022, 0.970891815092543]",1560,external_right_fine_B26,right,fine,B26,9.252071380615234,13.296533584594727,18.64644432067871,38.916622161865234,"{""wilor_freihand"": 768, ""wilor_rhd"": 1594, ""wilor_dex"": 316, ""wilor_interhand26m"": 273, ""wilor_mtc"": 9, ""wilor_ho3d"": 20, ""wilor_reinter"": 119}"
84
+ 8015,5001,948,2066,0.623955084217093,0.11827822832189644,0.2577666874610106,0.7422333125389894,low,低覆盖,"[0.7020687696559937, 0.08992600454249673, 0.2080052258015093]","[0.5640584142981206, 0.16167949528680844, 0.2742620904150709]",2282,external_right_fine_B27,right,fine,B27,9.252071380615234,8.155202865600586,11.852626132965087,33.23221206665039,"{""wilor_freihand"": 3304, ""wilor_rhd"": 1349, ""wilor_dex"": 57, ""wilor_interhand26m"": 1469, ""wilor_mtc"": 365, ""wilor_ho3d"": 40, ""wilor_h2o3d"": 128, ""wilor_reinter"": 1303}"
85
+ 5327,1432,680,3215,0.2688192228271072,0.1276515862586822,0.6035291909142106,0.39647080908578936,low,低覆盖,"[0.23972914190920744, 0.13770662532344302, 0.6225642327673496]","[0.2984422348756878, 0.13197150650574463, 0.5695862586185675]",679,external_right_fine_B28,right,fine,B28,9.252071380615234,9.786434173583984,14.943235588073728,38.65951156616211,"{""wilor_freihand"": 2048, ""wilor_rhd"": 125, ""wilor_dex"": 24, ""wilor_interhand26m"": 826, ""wilor_mtc"": 353, ""wilor_ho3d"": 5, ""wilor_reinter"": 1946}"
86
+ 1595,0,1,1594,0.0,0.0006269592476489029,0.9993730407523511,0.0006269592476488839,low,低覆盖,"[0.0, 0.0006202459641446586, 0.9993797540358553]","[0.0, 0.000591016548463357, 0.9994089834515366]",564,external_right_fine_B29,right,fine,B29,9.252071380615234,16.721981048583984,24.15742301940918,28.399572372436523,"{""wilor_freihand"": 984, ""wilor_rhd"": 370, ""wilor_dex"": 3, ""wilor_interhand26m"": 163, ""wilor_mtc"": 17, ""wilor_reinter"": 58}"
87
+ 5279,1968,818,2493,0.372797878386058,0.154953589695018,0.472248531918924,0.527751468081076,low,低覆盖,"[0.30251057108064777, 0.13503090113640664, 0.5624585277829456]","[0.2359834547029039, 0.20798605030287406, 0.556030494994222]",1942,external_right_fine_B30,right,fine,B30,9.252071380615234,9.116421699523926,13.266911029815667,23.76369285583496,"{""wilor_freihand"": 1480, ""wilor_rhd"": 1647, ""wilor_dex"": 894, ""wilor_interhand26m"": 171, ""wilor_mtc"": 491, ""wilor_ho3d"": 68, ""wilor_reinter"": 528}"
88
+ 1746,9,33,1704,0.005154639175257732,0.018900343642611683,0.9759450171821306,0.02405498281786944,low,低覆盖,"[0.0069222252749280575, 0.009082921793140483, 0.9839948529319315]","[0.00733695652173913, 0.013519021739130437, 0.9791440217391304]",736,external_right_fine_B31,right,fine,B31,9.252071380615234,14.203126907348633,20.6509747505188,24.091218948364258,"{""wilor_freihand"": 480, ""wilor_rhd"": 943, ""wilor_dex"": 7, ""wilor_interhand26m"": 189, ""wilor_mtc"": 3, ""wilor_ho3d"": 46, ""wilor_reinter"": 78}"
89
+ 10336,7011,948,2377,0.6783088235294118,0.09171826625386997,0.22997291021671826,0.7700270897832817,low,低覆盖,"[0.6842323034329114, 0.08869766672403687, 0.22707002984305155]","[0.6384177110694337, 0.10193063411950833, 0.25965165481105795]",1766,external_right_fine_B32,right,fine,B32,9.252071380615234,7.796813726425171,12.466526508331299,47.25800704956055,"{""wilor_freihand"": 5368, ""wilor_rhd"": 787, ""wilor_dex"": 2, ""wilor_interhand26m"": 1693, ""wilor_mtc"": 574, ""wilor_ho3d"": 10, ""wilor_h2o3d"": 29, ""wilor_reinter"": 1873}"
90
+ 1032,0,3,1029,0.0,0.0029069767441860465,0.997093023255814,0.0029069767441860517,low,低覆盖,"[0.0, 0.0027669567455739993, 0.9972330432544262]","[0.0, 0.0016195524146054182, 0.9983804475853945]",283,external_right_distinct_B1,right,distinct,B1,9.252071380615234,16.09415054321289,29.51508560180664,33.34939956665039,"{""wilor_freihand"": 32, ""wilor_rhd"": 195, ""wilor_interhand26m"": 494, ""wilor_mtc"": 135, ""wilor_reinter"": 176}"
91
+ 492,0,1,491,0.0,0.0020325203252032522,0.9979674796747967,0.002032520325203291,low,低覆盖,"[0.0, 0.001260702316862762, 0.9987392976831372]","[0.0, 0.004329004329004329, 0.9956709956709957]",231,external_right_distinct_B2,right,distinct,B2,9.252071380615234,16.76012897491455,22.280033683776853,33.24413299560547,"{""wilor_freihand"": 184, ""wilor_rhd"": 162, ""wilor_dex"": 1, ""wilor_interhand26m"": 91, ""wilor_mtc"": 52, ""wilor_reinter"": 2}"
92
+ 4658,24,56,4578,0.005152425933877201,0.012022327179046801,0.982825246887076,0.017174753112924046,low,低覆盖,"[0.002898725070245564, 0.008104511327779366, 0.9889967636019751]","[0.0008472182999152782, 0.002016910573815403, 0.9971358711262692]",3541,external_right_distinct_B3,right,distinct,B3,9.252071380615234,13.483551502227783,16.439379119873045,50.315032958984375,"{""wilor_freihand"": 160, ""wilor_rhd"": 3668, ""wilor_interhand26m"": 265, ""wilor_mtc"": 416, ""wilor_reinter"": 149}"
93
+ 1078,0,0,1078,0.0,0.0,1.0,0.0,uncovered,抽样库未覆盖,"[0.0, 0.0, 1.0]","[0.0, 0.0, 1.0]",842,external_right_distinct_B4,right,distinct,B4,9.252071380615234,17.85080909729004,21.442168617248534,36.31260299682617,"{""wilor_freihand"": 184, ""wilor_rhd"": 780, ""wilor_interhand26m"": 26, ""wilor_mtc"": 72, ""wilor_reinter"": 16}"
94
+ 4429,538,238,3653,0.12147211560171596,0.05373673515466245,0.8247911492436216,0.17520885075637838,low,低覆盖,"[0.14467737274999184, 0.09666480545829527, 0.7586578217917128]","[0.043388968650744146, 0.023947796090001687, 0.9326632352592542]",1123,external_right_distinct_B5,right,distinct,B5,9.252071380615234,11.781124114990234,15.474595260620116,30.491758346557617,"{""wilor_freihand"": 760, ""wilor_rhd"": 2289, ""wilor_dex"": 268, ""wilor_interhand26m"": 206, ""wilor_mtc"": 527, ""wilor_ho3d"": 65, ""wilor_reinter"": 314}"
95
+ 3465,892,236,2337,0.25743145743145746,0.0681096681096681,0.6744588744588744,0.3255411255411256,low,低覆盖,"[0.356631861389781, 0.05523674681026089, 0.5881313917999582]","[0.07269984717169979, 0.030423564935954894, 0.8968765878923453]",1139,external_right_distinct_B6,right,distinct,B6,9.252071380615234,10.203381538391113,13.806207275390623,27.509233474731445,"{""wilor_freihand"": 704, ""wilor_rhd"": 991, ""wilor_dex"": 339, ""wilor_interhand26m"": 470, ""wilor_mtc"": 60, ""wilor_ho3d"": 433, ""wilor_h2o3d"": 13, ""wilor_reinter"": 455}"
96
+ 4018,1541,282,2195,0.3835241413638626,0.07018417122946739,0.54629168740667,0.45370831259333,low,低覆盖,"[0.33346863064158727, 0.07481856903031535, 0.5917128003280974]","[0.32427397462883256, 0.04986250782909566, 0.6258635175420718]",578,external_right_distinct_B7,right,distinct,B7,9.252071380615234,9.591028690338135,15.868682956695551,23.114944458007812,"{""wilor_freihand"": 840, ""wilor_rhd"": 434, ""wilor_dex"": 902, ""wilor_interhand26m"": 356, ""wilor_mtc"": 378, ""wilor_ho3d"": 558, ""wilor_reinter"": 550}"
97
+ 1452,15,77,1360,0.010330578512396695,0.05303030303030303,0.9366391184573003,0.0633608815426997,low,低覆盖,"[0.007139996081754413, 0.03956472083516249, 0.9532952830830829]","[0.011920009966884967, 0.0436041760179969, 0.944475814015118]",264,external_right_distinct_B8,right,distinct,B8,9.252071380615234,12.68548059463501,18.450111103057864,26.912817001342773,"{""wilor_freihand"": 656, ""wilor_rhd"": 62, ""wilor_dex"": 7, ""wilor_interhand26m"": 356, ""wilor_mtc"": 24, ""wilor_ho3d"": 51, ""wilor_reinter"": 296}"
98
+ 4536,1584,278,2674,0.3492063492063492,0.06128747795414462,0.5895061728395061,0.4104938271604939,low,低覆盖,"[0.36951867552556344, 0.0620180338996728, 0.5684632905747636]","[0.14412194218229143, 0.043879620611320454, 0.8119984372063881]",904,external_right_distinct_B9,right,distinct,B9,9.252071380615234,9.874313831329346,14.39888072013855,23.693410873413086,"{""wilor_freihand"": 1608, ""wilor_rhd"": 1137, ""wilor_dex"": 1051, ""wilor_interhand26m"": 156, ""wilor_mtc"": 231, ""wilor_ho3d"": 170, ""wilor_reinter"": 183}"
99
+ 4099,1461,338,2300,0.3564283971700415,0.08245913637472554,0.5611124664552329,0.43888753354476706,low,低覆盖,"[0.47574800123429584, 0.08776580520314235, 0.4364861935625618]","[0.27668370666050945, 0.10394497898250263, 0.619371314356988]",801,external_right_distinct_B10,right,distinct,B10,9.252071380615234,9.514245986938477,13.587471961975098,23.28925132751465,"{""wilor_freihand"": 1008, ""wilor_rhd"": 1255, ""wilor_dex"": 574, ""wilor_interhand26m"": 279, ""wilor_mtc"": 46, ""wilor_ho3d"": 555, ""wilor_h2o3d"": 44, ""wilor_reinter"": 338}"
100
+ 9444,6545,587,2312,0.6930326132994494,0.06215586615840746,0.24481152054214317,0.7551884794578568,low,低覆盖,"[0.7589549791840582, 0.050542085843791364, 0.19050293497215054]","[0.5312411722077317, 0.08246534362502882, 0.3862934841672394]",2486,external_right_distinct_B11,right,distinct,B11,9.252071380615234,7.7916905879974365,11.240390872955322,22.897846221923828,"{""wilor_freihand"": 2280, ""wilor_rhd"": 2289, ""wilor_dex"": 3069, ""wilor_interhand26m"": 254, ""wilor_mtc"": 1134, ""wilor_ho3d"": 189, ""wilor_reinter"": 229}"
101
+ 18245,12800,1631,3814,0.7015620718004932,0.08939435461770348,0.20904357358180323,0.7909564264181967,low,低覆盖,"[0.7417361847810997, 0.08102403968009182, 0.17723977553880843]","[0.45208164097643533, 0.12266487176360807, 0.42525348725995665]",3197,external_right_distinct_B12,right,distinct,B12,9.252071380615234,7.803130149841309,11.23873176574707,38.2083625793457,"{""wilor_freihand"": 2480, ""wilor_rhd"": 2932, ""wilor_dex"": 6701, ""wilor_interhand26m"": 1108, ""wilor_mtc"": 1501, ""wilor_ho3d"": 2506, ""wilor_h2o3d"": 435, ""wilor_reinter"": 582}"
102
+ 364,0,0,364,0.0,0.0,1.0,0.0,uncovered,抽样库未覆盖,"[0.0, 0.0, 1.0]","[0.0, 0.0, 1.0]",69,external_right_distinct_B13,right,distinct,B13,9.252071380615234,15.501802444458008,24.739180469512938,27.0179500579834,"{""wilor_freihand"": 8, ""wilor_rhd"": 64, ""wilor_interhand26m"": 1, ""wilor_ho3d"": 291}"
103
+ 4609,44,21,4544,0.00954653937947494,0.004556302885658494,0.9858971577348665,0.014102842265133475,low,低覆盖,"[0.013755699700190275, 0.00601553059768336, 0.9802287697021262]","[0.0031720565579757528, 0.0012994789359284332, 0.9955284645060959]",1707,external_right_distinct_B14,right,distinct,B14,9.252071380615234,14.84779167175293,17.65075225830078,50.51320266723633,"{""wilor_freihand"": 528, ""wilor_rhd"": 3178, ""wilor_dex"": 70, ""wilor_interhand26m"": 231, ""wilor_mtc"": 17, ""wilor_ho3d"": 6, ""wilor_reinter"": 579}"
104
+ 1596,32,11,1553,0.020050125313283207,0.006892230576441102,0.9730576441102757,0.026942355889724268,low,低覆盖,"[0.012654654200441203, 0.0038842896553651363, 0.9834610561441934]","[0.001524390243902439, 0.0016629711751662971, 0.9968126385809313]",902,external_right_distinct_B15,right,distinct,B15,9.252071380615234,13.922243118286133,22.840292930603027,27.99265480041504,"{""wilor_freihand"": 400, ""wilor_rhd"": 823, ""wilor_dex"": 42, ""wilor_interhand26m"": 28, ""wilor_mtc"": 10, ""wilor_ho3d"": 267, ""wilor_reinter"": 26}"
105
+ 2952,1411,470,1071,0.4779810298102981,0.15921409214092141,0.3628048780487805,0.6371951219512195,low,低覆盖,"[0.3529200982320983, 0.20319261333685845, 0.44388728843104336]","[0.4394581193407975, 0.10543505073329744, 0.45510682992590495]",94,external_right_distinct_B16,right,distinct,B16,9.252071380615234,8.725767135620117,12.478687286376953,21.58528709411621,"{""wilor_freihand"": 192, ""wilor_rhd"": 5, ""wilor_dex"": 359, ""wilor_interhand26m"": 15, ""wilor_mtc"": 2, ""wilor_ho3d"": 2362, ""wilor_h2o3d"": 13, ""wilor_reinter"": 4}"
106
+ 14492,11198,837,2457,0.7727021805133867,0.05775600331217223,0.16954181617444108,0.8304581838255589,low,低覆盖,"[0.7219812567531503, 0.08813701647167307, 0.1898817267751767]","[0.5576092566071178, 0.09561373165012256, 0.3467770117427596]",1431,external_right_distinct_B17,right,distinct,B17,9.252071380615234,7.298241376876831,11.966495275497435,23.797868728637695,"{""wilor_freihand"": 2168, ""wilor_rhd"": 897, ""wilor_dex"": 8470, ""wilor_interhand26m"": 521, ""wilor_mtc"": 184, ""wilor_ho3d"": 1174, ""wilor_h2o3d"": 624, ""wilor_reinter"": 454}"
107
+ 5234,1499,330,3405,0.28639663737103555,0.06304929308368361,0.6505540695452808,0.34944593045471917,low,低覆盖,"[0.25784822822447423, 0.05048131056075014, 0.6916704612147757]","[0.1316564123077974, 0.03916119798521021, 0.8291823897069924]",1208,external_right_distinct_B18,right,distinct,B18,9.252071380615234,10.373049259185791,14.586898374557494,29.426952362060547,"{""wilor_freihand"": 2608, ""wilor_rhd"": 981, ""wilor_dex"": 1164, ""wilor_interhand26m"": 157, ""wilor_mtc"": 14, ""wilor_ho3d"": 146, ""wilor_h2o3d"": 31, ""wilor_reinter"": 133}"
108
+ 6535,3676,908,1951,0.5625095638867635,0.1389441469013007,0.2985462892119357,0.7014537107880643,low,低覆盖,"[0.6224216883081707, 0.11365625187137333, 0.26392205982045597]","[0.4788086588440452, 0.16215883678759144, 0.3590325043683633]",3127,external_right_distinct_B19,right,distinct,B19,9.252071380615234,8.537426948547363,11.445512294769285,21.130720138549805,"{""wilor_freihand"": 1304, ""wilor_rhd"": 2620, ""wilor_dex"": 445, ""wilor_interhand26m"": 1067, ""wilor_mtc"": 423, ""wilor_ho3d"": 48, ""wilor_h2o3d"": 39, ""wilor_reinter"": 589}"
109
+ 322,0,0,322,0.0,0.0,1.0,0.0,uncovered,抽样库未覆盖,"[0.0, 0.0, 1.0]","[0.0, 0.0, 1.0]",132,external_right_distinct_B20,right,distinct,B20,9.252071380615234,25.06973934173584,30.032165813446046,35.582008361816406,"{""wilor_freihand"": 24, ""wilor_rhd"": 45, ""wilor_interhand26m"": 250, ""wilor_mtc"": 3}"
110
+ 3099,202,87,2810,0.06518231687641174,0.028073572120038724,0.9067441110035496,0.09325588899645043,low,低覆盖,"[0.06526719533240705, 0.031114641762878013, 0.903618162904715]","[0.016195106529653003, 0.012913078377804022, 0.970891815092543]",1560,external_right_distinct_B21,right,distinct,B21,9.252071380615234,13.296533584594727,18.64644432067871,38.916622161865234,"{""wilor_freihand"": 768, ""wilor_rhd"": 1594, ""wilor_dex"": 316, ""wilor_interhand26m"": 273, ""wilor_mtc"": 9, ""wilor_ho3d"": 20, ""wilor_reinter"": 119}"
111
+ 5327,1432,680,3215,0.2688192228271072,0.1276515862586822,0.6035291909142106,0.39647080908578936,low,低覆盖,"[0.23972914190920744, 0.13770662532344302, 0.6225642327673496]","[0.2984422348756878, 0.13197150650574463, 0.5695862586185675]",679,external_right_distinct_B22,right,distinct,B22,9.252071380615234,9.786434173583984,14.943235588073728,38.65951156616211,"{""wilor_freihand"": 2048, ""wilor_rhd"": 125, ""wilor_dex"": 24, ""wilor_interhand26m"": 826, ""wilor_mtc"": 353, ""wilor_ho3d"": 5, ""wilor_reinter"": 1946}"
112
+ 1595,0,1,1594,0.0,0.0006269592476489029,0.9993730407523511,0.0006269592476488839,low,低覆盖,"[0.0, 0.0006202459641446586, 0.9993797540358553]","[0.0, 0.000591016548463357, 0.9994089834515366]",564,external_right_distinct_B23,right,distinct,B23,9.252071380615234,16.721981048583984,24.15742301940918,28.399572372436523,"{""wilor_freihand"": 984, ""wilor_rhd"": 370, ""wilor_dex"": 3, ""wilor_interhand26m"": 163, ""wilor_mtc"": 17, ""wilor_reinter"": 58}"
113
+ 5279,1968,818,2493,0.372797878386058,0.154953589695018,0.472248531918924,0.527751468081076,low,低覆盖,"[0.30251057108064777, 0.13503090113640664, 0.5624585277829456]","[0.2359834547029039, 0.20798605030287406, 0.556030494994222]",1942,external_right_distinct_B24,right,distinct,B24,9.252071380615234,9.116421699523926,13.266911029815667,23.76369285583496,"{""wilor_freihand"": 1480, ""wilor_rhd"": 1647, ""wilor_dex"": 894, ""wilor_interhand26m"": 171, ""wilor_mtc"": 491, ""wilor_ho3d"": 68, ""wilor_reinter"": 528}"
114
+ 1746,9,33,1704,0.005154639175257732,0.018900343642611683,0.9759450171821306,0.02405498281786944,low,低覆盖,"[0.0069222252749280575, 0.009082921793140483, 0.9839948529319315]","[0.00733695652173913, 0.013519021739130437, 0.9791440217391304]",736,external_right_distinct_B25,right,distinct,B25,9.252071380615234,14.203126907348633,20.6509747505188,24.091218948364258,"{""wilor_freihand"": 480, ""wilor_rhd"": 943, ""wilor_dex"": 7, ""wilor_interhand26m"": 189, ""wilor_mtc"": 3, ""wilor_ho3d"": 46, ""wilor_reinter"": 78}"
115
+ 18351,12012,1896,4443,0.6545692332842897,0.10331862023867909,0.24211214647703122,0.7578878535229687,low,低覆盖,"[0.6930872157641901, 0.0893074749427512, 0.21760530929305885]","[0.5947837696273544, 0.1376949115568354, 0.26752131881581037]",3734,external_right_distinct_B26,right,distinct,B26,9.252071380615234,7.955670356750488,12.168926239013672,47.25800704956055,"{""wilor_freihand"": 8672, ""wilor_rhd"": 2136, ""wilor_dex"": 59, ""wilor_interhand26m"": 3162, ""wilor_mtc"": 939, ""wilor_ho3d"": 50, ""wilor_h2o3d"": 157, ""wilor_reinter"": 3176}"
pose_recluster_distinct_20261014/downloads/coverage/code/aggregate_coverage.py ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from cluster_common import *
2
+ import gzip
3
+ BASE=Path('/SSD3/yangzijing/Hand_pose_recluster_distinct_20261014')
4
+ LABELS={'covered':'已覆盖','low':'低覆盖','uncovered':'抽样库未覆盖'}
5
+
6
+ def stats(status,ix,weights=None,units=None):
7
+ n=len(ix);ss=status[ix];counts={k:int((ss==k).sum()) for k in range(3)}
8
+ result=dict(n=n,covered=counts[0],low=counts[1],uncovered=counts[2],covered_fraction=counts[0]/n,low_fraction=counts[1]/n,uncovered_fraction=counts[2]/n,any_match_fraction=1-counts[2]/n)
9
+ cls='covered' if result['covered_fraction']>=.90 else ('uncovered' if counts[2]==n else 'low')
10
+ result['status']=cls;result['status_label']=LABELS[cls]
11
+ if weights is not None:result['fit_weighted_fractions']=[float(np.average(ss==k,weights=weights[ix])) for k in range(3)]
12
+ if units is not None:
13
+ c=collections.Counter(units[i] for i in ix);w=np.array([1/c[units[i]] for i in ix]);result['equal_unit_fractions']=[float(np.average(ss==k,weights=w)) for k in range(3)];result['independent_units']=len(c)
14
+ return result
15
+
16
+ def main():
17
+ external=read(BASE/'manifests/external_members.json');ours=read(BASE/'manifests/ours_members.json');models=read(BASE/'metrics/models.json');n=len(external)
18
+ distance=np.zeros(n);nearest=np.zeros(n,np.int64);support=np.zeros(n,np.int64);sample_count=np.zeros(n,np.int64);third=np.zeros(n);tau=np.zeros(n);status=np.full(n,-1,np.int8);fit=np.zeros(n);units=[r['independent_unit'] for r in external]
19
+ finekeys=['']*n;distinctkeys=['']*n;result={};sensitivity=[];source_rows=[];summary={}
20
+ for side in ['left','right']:
21
+ a=np.load(ROOT/f'cache/external_{side}_coverage.npz');ix=a['indices'];nn=a['distance_deg'];t=a['thresholds_deg'][1];rec=a['record_counts'][:,1];ss=np.where(nn>t,2,np.where(rec>=3,0,1));status[ix]=ss
22
+ distance[ix]=nn;nearest[ix]=a['nearest_index'];support[ix]=rec;sample_count[ix]=a['sample_count'];third[ix]=a['nearest_record_distances_deg'][:,2];tau[ix]=t
23
+ fw=np.load(BASE/f'cache/external_{side}_fit.npz');assert np.array_equal(fw['indices'],ix);fit[ix]=fw['fit_weights']
24
+ summary[side]=stats(status,ix,fit,units);summary[side]['threshold_deg']=float(t)
25
+ labels=np.load(BASE/f'cache/external_{side}_assignments.npz');dist=np.load(BASE/f'cache/external_{side}_distinct_assignments.npz');assert np.array_equal(labels['indices'],ix) and np.array_equal(dist['indices'],ix)
26
+ for level in ['fine','distinct']:
27
+ lab=labels['fine'] if level=='fine' else dist['distinct']
28
+ for c in models['external_'+side][level]:
29
+ ci=ix[lab==c['label']];assert len(ci)==c['n']
30
+ stat=stats(status,ci,fit,units);stat.update(key=c['key'],hand=side,level=level,id=c['id'],threshold_deg=float(t),distance_p50_deg=float(np.median(distance[ci])),distance_p95_deg=float(np.quantile(distance[ci],.95)),max_distance_deg=float(distance[ci].max()),source_counts=dict(collections.Counter(external[i]['source'] for i in ci)))
31
+ result[c['key']]=stat
32
+ for i in ci:(finekeys if level=='fine' else distinctkeys)[i]=c['key']
33
+ for name,tt,rc in zip(a['threshold_names'],a['thresholds_deg'],a['record_counts'].T):
34
+ local=lab==c['label'];s=np.where(nn[local]>tt,2,np.where(rc[local]>=3,0,1));vals=stats(s,np.arange(len(s)))
35
+ sensitivity.append(dict(key=c['key'],hand=side,threshold=name,threshold_deg=float(tt),**vals))
36
+ for source in sorted(set(external[i]['source'] for i in ix)):
37
+ sx=np.array([i for i in ix if external[i]['source']==source]);source_rows.append(dict(source=source,hand=side,threshold_deg=float(t),**stats(status,sx,fit,units)))
38
+ for name,tt,rc in zip(a['threshold_names'],a['thresholds_deg'],a['record_counts'].T):
39
+ ss2=np.where(nn>tt,2,np.where(rc>=3,0,1));sensitivity.append(dict(key='external_'+side,hand=side,threshold=name,threshold_deg=float(tt),**stats(ss2,np.arange(len(ss2)))))
40
+ assert (status>=0).all() and all(finekeys) and all(distinctkeys)
41
+ summary['all']=stats(status,np.arange(n),fit,units)
42
+ write(ROOT/'metrics/class_coverage.json',result);write(ROOT/'metrics/summary.json',summary);write(ROOT/'metrics/source_coverage.json',source_rows)
43
+ table(ROOT/'metrics/class_coverage.csv',list(result.values()));table(ROOT/'metrics/threshold_sensitivity.csv',sensitivity);table(ROOT/'metrics/source_coverage.csv',source_rows)
44
+ np.savez_compressed(ROOT/'cache/external_coverage.npz',distance_deg=distance,nearest_index=nearest,support_recordings=support,support_samples=sample_count,third_record_distance_deg=third,threshold_deg=tau,status=status)
45
+ fields=['id','source','split','subject','recording','frame','hand','representation','class_distinct','class_fine','nearest_reference_id','nearest_reference_source','nearest_reference_recording','nearest_reference_frame','nearest_distance_deg','threshold_deg','similar_reference_samples','similar_reference_recordings','third_record_distance_deg','coverage_status','gt_status','label_type','image_overlay_link']
46
+ url='https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/index.html'
47
+ with gzip.open(ROOT/'metrics/member_coverage.csv.gz','wt',newline='') as f:
48
+ w=csv.DictWriter(f,fieldnames=fields);w.writeheader()
49
+ for i,r in enumerate(external):
50
+ nr=ours[int(nearest[i])];row={k:r.get(k,'') for k in fields};row.update(representation='palm-local unit 3D bone directions (GT source proxy)',class_distinct=distinctkeys[i],class_fine=finekeys[i],nearest_reference_id=nr['id'],nearest_reference_source=nr['source'],nearest_reference_recording=nr['recording'],nearest_reference_frame=nr['frame'],nearest_distance_deg=f'{distance[i]:.6f}',threshold_deg=f'{tau[i]:.6f}',similar_reference_samples=int(sample_count[i]),similar_reference_recordings=int(support[i]),third_record_distance_deg=f'{third[i]:.6f}',coverage_status=LABELS[['covered','low','uncovered'][status[i]]],gt_status=r.get('gt_status','证据不足'),image_overlay_link='');w.writerow(row)
51
+ print('SUMMARY',summary,flush=True)
52
+ print('MAIN_CLASS_STATUSES',collections.Counter(c['status'] for c in result.values() if c['level']=='distinct'),flush=True)
53
+
54
+ if __name__=='__main__':main()
pose_recluster_distinct_20261014/downloads/coverage/code/build_coverage_site.py ADDED
@@ -0,0 +1,116 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from cluster_common import *
2
+ import shutil,gzip
3
+ BASE=Path('/SSD3/yangzijing/Hand_pose_recluster_distinct_20261014')
4
+ URL='https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/'
5
+
6
+ def main():
7
+ assert read(ROOT/'audit/numerical_validation.json')['status']=='PASS'
8
+ d=json.loads((BASE/'site/data.js').read_text().removeprefix('window.AUDIT_DATA=').rstrip(';\n'))
9
+ classes=read(ROOT/'metrics/class_coverage.json');summary=read(ROOT/'metrics/summary.json');cal=read(ROOT/'metrics/calibration.json');visuals=read(ROOT/'metrics/uncovered_visuals.json');cov=np.load(ROOT/'cache/external_coverage.npz')
10
+ rows=read(BASE/'manifests/external_members.json');ours=read(BASE/'manifests/ours_members.json');idmap={r['id']:i for i,r in enumerate(rows)}
11
+ sens=list(csv.DictReader((ROOT/'metrics/threshold_sensitivity.csv').open()))
12
+ for r in sens:
13
+ for k in ['threshold_deg','covered_fraction','low_fraction','uncovered_fraction']:r[k]=float(r[k])
14
+ def coverage(i):
15
+ return dict(status=['covered','low','uncovered'][int(cov['status'][i])],distance_deg=float(cov['distance_deg'][i]),threshold_deg=float(cov['threshold_deg'][i]),support_recordings=int(cov['support_recordings'][i]),support_samples=int(cov['support_samples'][i]))
16
+ for key,model in d['models'].items():
17
+ if key.startswith('external'):
18
+ for level in ['fine','distinct']:
19
+ for c in model[level]:c['coverage']=classes[c['key']]
20
+ for sid,s in d['samples'].items():
21
+ if sid in idmap:s['coverage']=coverage(idmap[sid])
22
+ slim={};member_links={}
23
+ for key,vs in visuals.items():
24
+ slim[key]=[]
25
+ for v in vs:
26
+ i=v['index'];assert cov['status'][i]==2 and v['id']==rows[i]['id']
27
+ m=rows[i];r=v['media'];s=dict(id=m['id'],group='external',source=m['source'],recording=m['recording'],frame=m['frame'],hand=m['hand'],joints=v['joints'],assets=r['assets'],label=r['label'],camera=r['evidence'].get('camera','来源相机'),gt_status='证据不足:保留来源 GT 身份;图像贴合与独立三维准确性需另行核查',coverage=coverage(i))
28
+ d['samples'][s['id']]=s;d['gallery'].setdefault(s['source'],[])
29
+ if s['id'] not in d['gallery'][s['source']]:d['gallery'][s['source']].append(s['id'])
30
+ vv={k:x for k,x in v.items() if k!='media'};nr=dict(v['nearest']);assert nr['index']==cov['nearest_index'][i]
31
+ if 'media' in nr:
32
+ nr['media']={k:v['nearest']['media'][k] for k in ['assets','evidence','label','gt_status'] if k in v['nearest']['media']}
33
+ vv['nearest']=nr;slim[key].append(vv)
34
+ member_links[s['id']]=URL+s['assets']['full']
35
+ sources={}
36
+ for r in read(ROOT/'metrics/source_coverage.json'):
37
+ x=sources.setdefault(r['source'],dict(n=0,covered=0,low=0,uncovered=0))
38
+ for k in ['n','covered','low','uncovered']:x[k]+=r[k]
39
+ for x in sources.values():
40
+ for k in ['covered','low','uncovered']:x[k+'_fraction']=x[k]/x['n']
41
+ d['coverage']=dict(version='member-coverage-v2-20261014',classes=classes,summary=summary,calibration=cal,sources=sources,examples=slim,sensitivity=sens,reference='271543 frozen source-GT handframes from H2O+ARCTIC+HOT3D+EgoRenderer Ver.005; separate sides; final canonical GT/masks not independently verified')
42
+ (ROOT/'site/data.coverage_v2.js').write_text('window.AUDIT_DATA='+json.dumps(d,ensure_ascii=False,allow_nan=False,separators=(',',':'))+';\n')
43
+ for src,dst in [('index.html','index.html'),('app.js','app.coverage_v2.js'),('style.css','style.coverage_v2.css')]:shutil.copyfile(ROOT/'code/web'/src,ROOT/'site'/dst)
44
+ # Only samples with an actual overlay get a media link; no invented media for other members.
45
+ for sid,s in d['samples'].items():
46
+ if sid in idmap:member_links[sid]=URL+s['assets']['full']
47
+ dest=ROOT/'site/downloads/coverage';dest.mkdir(exist_ok=True)
48
+ with gzip.open(ROOT/'metrics/member_coverage.csv.gz','rt',newline='') as f,gzip.open(dest/'member_coverage.csv.gz','wt',newline='') as out:
49
+ rd=csv.DictReader(f);w=csv.DictWriter(out,fieldnames=rd.fieldnames);w.writeheader()
50
+ for r in rd:r['image_overlay_link']=member_links.get(r['id'],'');w.writerow(r)
51
+ write(ROOT/'metrics/displayed_member_links.json',member_links)
52
+ for name in ['class_coverage.csv','threshold_sensitivity.csv','source_coverage.csv','calibration.json','summary.json','displayed_member_links.json']:shutil.copyfile(ROOT/'metrics'/name,dest/name)
53
+ for name in ['coverage_protocol.json','calibration_members.json','reference_unit_codes.json']:shutil.copyfile(ROOT/'manifests'/name,dest/name)
54
+ for name in ['numerical_validation.json','input_sha256.json','frozen_protocol_sha256.json','exact_engine.json']:shutil.copyfile(ROOT/'audit'/name,dest/name)
55
+ cs=[c for c in classes.values() if c['level']=='distinct'];entire=[c for c in cs if c['status']=='uncovered'];ss=summary['all']
56
+ result=f'''# 逐成员覆盖更新(2026-10-14)
57
+
58
+ 本轮对全部 214,481 个可读外部来源聚类手帧逐一检索,参照为 H2O / ARCTIC / HOT3D / EgoRenderer Ver.005 的 271,543 个冻结抽样手帧,左右手分开;没有重新聚类或改动 GT。
59
+
60
+ - 已覆盖:{ss['covered']:,}({ss['covered_fraction']:.2%}),阈值内至少 3 段独立录制/源动作。
61
+ - 低覆盖:{ss['low']:,}({ss['low_fraction']:.2%}),阈值内只有 1–2 段独立录制/源动作。
62
+ - 抽样库未覆盖:{ss['uncovered']:,}({ss['uncovered_fraction']:.2%}),本次参照库中无阈值内近邻。
63
+
64
+ 外部 50 个主类中,7 类全部成员未覆盖,43 类为部分覆盖。不存在达到“90% 成员已覆盖”的主类;这不表示各类中的已覆盖成员也未覆盖。网页优先展示完整成员比例。
65
+
66
+ 整类未覆盖:{', '.join(c['hand']+' '+c['id'] for c in entire)}。
67
+
68
+ 距离是来源 GT 的 20 根掌部局部 3D 单位骨方向的平均夹角;不是 MANO 参数欧氏距离、不是 2D 图上距离。阈值先使用 8,192 个内部校准手帧、检索排除同录制的全部帧确定:左手 {cal['left']['thresholds_deg']['q95']:.4f}°,右手 {cal['right']['thresholds_deg']['q95']:.4f}°。四源均衡,源内录制均衡。q90/q99 与 10°/20°/30° 的敏感性均在 CSV 保留。至少 3 个独立录制是支持量的显示约定;类 90% 汇总阈值也不是普适标准。
69
+
70
+ 主统计是本轮分析成员的自然计数,不代表官方全量的无偏发生比例。来源/录制均衡聚类权重下未覆盖比例为 {ss['fit_weighted_fractions'][2]:.2%};单位均衡权重还会受静态图像单位与视频录制单位数量差异影响,因此仅用于敏感性,不作为总体发生率。
71
+
72
+ 114 个外部主类/细类均给出实际未覆盖成员:原图、按来源相机投影的 MANO 或 GT 骨架、精确最近邻及距离;没有把同类原型替换成“未覆盖样本”。显示样本优先接近类原型,且要求其精确最近邻也有可读 RGB 叠加,故图例不是概率抽样,不用于估计比例。图像读取失败只影响图例选择,不改统计成员、阈值或最近邻。
73
+
74
+ 覆盖与 GT 可靠性独立。未覆盖可能包含真实姿态缺口、来源定义差异或标签问题;不能把上述数目称为可靠补充样本数量。来源一致性、图片叠加不等于独立三维验收。参照使用已核对训练成员的来源 GT;最终 canonical 标签与 loss mask 尚未验收。外部 8 源是 WiLoR 官方源数据代理,ARCTIC/HOT3D 重叠、2D 来源和跳过的 BEDLAM 不重复记入外部 3D 分母。
75
+
76
+ 数值检查:32 个查询(含阈值边界)用 CPU float64 全库复算;114 个类原型与已有独立最近邻结果对照,分类一致。详细证据见 numerical_validation.json。
77
+ '''
78
+ (ROOT/'RESULTS_ZH.md').write_text(result);shutil.copyfile(ROOT/'RESULTS_ZH.md',dest/'RESULTS_ZH.md')
79
+ repro=f'''# 复现覆盖更新
80
+
81
+ 实验目录:{ROOT}
82
+ 只读聚类与 GT 缓存:{BASE}
83
+
84
+ ```bash
85
+ cd {ROOT}
86
+ PY=/SSD2/jiasen/envs/foundation_hand/bin/python
87
+ # freeze_coverage.py 仅第一次在空实验目录执行;已有冻结清单不可重写。
88
+ CUDA_VISIBLE_DEVICES=1 OMP_NUM_THREADS=2 OPENBLAS_NUM_THREADS=2 MKL_NUM_THREADS=2 "$PY" code/exact_coverage.py
89
+ OMP_NUM_THREADS=2 OPENBLAS_NUM_THREADS=2 "$PY" code/aggregate_coverage.py
90
+ OMP_NUM_THREADS=2 OPENBLAS_NUM_THREADS=2 "$PY" code/validate_coverage.py
91
+ CUDA_VISIBLE_DEVICES='' OMP_NUM_THREADS=2 OPENBLAS_NUM_THREADS=2 "$PY" code/coverage_visuals.py
92
+ "$PY" code/update_web.py
93
+ "$PY" code/build_coverage_site.py
94
+ ```
95
+
96
+ freeze_coverage.py 固定种子 2026101407、8192 个校准成员和阈值规则,然后才进行外部检索。逐成员距离为精确穷举;既有缓存可恢复。记录单位排除整段动作,不把邻帧支持计为独立录制。原始成员 SHA256、类分配、特征和网页旧版 SHA256 见 input_sha256.json。
97
+
98
+ 本目录代码复用前序审计的标定投影和 source GT 读取代码;完整依赖地址保留在 visualize.py / cluster_common.py,旧版代码与原始聚类说明在网页 downloads/code 和 downloads/REPRODUCE.md。原始数据及授权可读环境需要保留;衍生网页不包含原始数据包、模型权重或凭据。
99
+
100
+ 媒体检查不是 GT 独立验收。精确最近邻图像不可读时,另选同类未覆盖成员展示;其最近邻索引绝不替换。CSV 只有实际已渲染成员才填 image_overlay_link,其他留空。
101
+ '''
102
+ (ROOT/'REPRODUCE.md').write_text(repro);shutil.copyfile(ROOT/'REPRODUCE.md',dest/'REPRODUCE.md')
103
+ shutil.copytree(ROOT/'code',dest/'code',dirs_exist_ok=True,ignore=shutil.ignore_patterns('__pycache__'))
104
+ # Audit every newly referenced asset and same-cluster membership, including exact NN media.
105
+ used=set();checks=[]
106
+ for key,vs in visuals.items():
107
+ for v in vs:
108
+ assert 'media' in v['nearest'],(key,'nearest RGB missing')
109
+ for r in [v['media'],v['nearest']['media']]:
110
+ for rel in r['assets'].values():assert (ROOT/'site'/rel).is_file();used.add(rel)
111
+ checks.append(dict(class_key=key,id=v['id'],index=v['index'],uncovered=True,nearest_index=v['nearest']['index'],nearest_rgb=True))
112
+ write(ROOT/'audit/new_media_sha256.json',{rel:sha(ROOT/'site'/rel) for rel in sorted(used)})
113
+ write(ROOT/'audit/coverage_visual_checks.json',dict(status='PASS',class_count=len(visuals),examples=len(checks),unique_external_members=len({x['id'] for x in checks}),unique_reference_members=len({x['nearest_index'] for x in checks}),all_exact_nearest_rgb_present=True,checks=checks))
114
+ print('BUILT',len(classes),'class coverage rows',len(checks),'paired examples',len(used),'media files',flush=True)
115
+
116
+ if __name__=='__main__':main()
pose_recluster_distinct_20261014/downloads/coverage/code/check_coverage_browser.js ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ const fs=require('fs'),path=require('path');
2
+ const {chromium}=require('/tmp/v9-hardcase-browser-test-SICTLC/node_modules/playwright');
3
+ const root=path.resolve(__dirname,'..'),mode=process.argv[2]||'local',url=mode==='local'?'file://'+root+'/site/index.html':process.argv[3];
4
+ const assert=(x,m)=>{if(!x)throw Error(m)};
5
+ (async()=>{
6
+ const browser=await chromium.launch({headless:true,args:['--disable-dev-shm-usage']});const page=await browser.newPage({viewport:{width:1440,height:1100}}),errors=[],checks=[],http=[];
7
+ page.on('pageerror',e=>errors.push(e.message));page.on('response',r=>{if(r.status()>=400)http.push({path:new URL(r.url()).pathname,status:r.status()})});
8
+ async function go(u){for(let i=0;i<3;i++){try{const r=await page.goto(u,{waitUntil:'load',timeout:90000});if(r)assert(r.status()===200,'Page status');return}catch(e){if(i===2)throw e;await new Promise(r=>setTimeout(r,1000))}}}
9
+ async function images(selector){const rs=await page.locator(selector).evaluateAll(async imgs=>{const out=[];for(const im of imgs){im.loading='eager';let ok=false;for(let n=0;n<4;n++){try{await im.decode();ok=im.naturalWidth>0;break}catch(e){await new Promise(r=>setTimeout(r,700))}}out.push({src:im.getAttribute('src'),ok})}return out});assert(rs.every(x=>x.ok),'Image decode '+JSON.stringify(rs.filter(x=>!x.ok)));return rs.length;}
10
+ await go(url);await page.waitForFunction(()=>window.AUDIT_DATA?.coverage?.version==='member-coverage-v2-20261014');
11
+ for(const hand of ['right','left'])for(const level of ['distinct','fine']){
12
+ await page.selectOption('#hand',hand);await page.selectOption('#level',level);await page.selectOption('#coverageFilter','all');
13
+ const cs=await page.evaluate(({hand,level})=>AUDIT_DATA.models['external_'+hand][level].map(c=>({key:c.key,n:c.n,coverage:c.coverage})),{hand,level});
14
+ assert(await page.locator('#externalCards .card').count()===cs.length,'All class cards present');
15
+ for(const filter of ['entire','mostly_gap','mostly_covered']){
16
+ await page.selectOption('#coverageFilter',filter);const expected=cs.filter(c=>filter==='entire'?c.coverage.uncovered===c.n:filter==='mostly_gap'?c.coverage.uncovered_fraction>=.5:c.coverage.covered_fraction>=.7).length;
17
+ assert(await page.locator('#externalCards .card').count()===expected,'Coverage filter '+filter);
18
+ }
19
+ await page.selectOption('#coverageFilter','all');await page.selectOption('#coverageSort','covered');
20
+ const keys=await page.locator('#externalCards .card').evaluateAll(els=>els.map(e=>e.dataset.key));const vs=keys.map(k=>cs.find(c=>c.key===k).coverage.covered_fraction);assert(vs.every((v,i)=>i===0||v<=vs[i-1]),'Coverage descending sort');
21
+ await page.selectOption('#coverageSort','gap');
22
+ for(const c of cs){
23
+ await page.locator('#externalCards [data-open="'+c.key+'"]').click();await page.waitForFunction(()=>document.querySelector('#detail').open);
24
+ const text=await page.locator('#detailBody').innerText();assert(text.includes('本类实际未覆盖成员')&&text.includes('我们库中的精确最近邻'),'Coverage evidence missing '+c.key);
25
+ assert(text.includes((c.coverage.covered_fraction*100).toFixed(1)+'%'),'Class coverage percentage absent');
26
+ assert(await page.locator('#detail .gap-case').count()>0,'Missing actual gap cases');
27
+ const total=await images('#detail img');
28
+ const valid=await page.evaluate(key=>AUDIT_DATA.coverage.examples[key].every(v=>v.distance_deg>v.threshold_deg&&v.support_recordings===0&&v.nearest.media?.assets?.full),c.key);assert(valid,'Uncovered case or exact reference missing');
29
+ checks.push({key:c.key,images:total});await page.click('#closeDetail');
30
+ }
31
+ console.log('COVERAGE_CLASSES',hand,level,cs.length);
32
+ }
33
+ await page.selectOption('#hand','right');await page.selectOption('#level','distinct');await page.selectOption('#coverageFilter','entire');await page.click('[data-tab="compare"]');
34
+ const compare=await page.locator('#comparisonRows .row').count();assert(compare>0&&compare<26,'Comparison filter not working');await images('#comparisonRows img');
35
+ await page.selectOption('#coverageFilter','all');await page.click('[data-tab="overview"]');await page.evaluate(()=>scrollTo(0,0));await images('#externalCards .card img');await page.screenshot({path:root+'/audit/'+mode+'_coverage_desktop.png'});
36
+ await page.locator('#externalCards [data-open]').first().click();await images('#detail img');await page.screenshot({path:root+'/audit/'+mode+'_coverage_detail.png'});await page.click('#closeDetail');
37
+ await page.click('[data-tab="sources"]');const sources=await page.locator('[data-source]').evaluateAll(e=>e.map(x=>x.dataset.source));assert(sources.length===18,'Source rows lost');
38
+ for(const src of ['wilor_interhand26m','wilor_cocow','wilor_halpe','wilor_mpiinzsl']){
39
+ await page.click('[data-source="'+src+'"]');assert(await images('#detail img')>0,'Annotated source empty');const t=await page.locator('#detailBody').innerText();assert(t.includes(src==='wilor_interhand26m'?'GT':'2D'),'Source labels missing');await page.click('#closeDetail');
40
+ }
41
+ await page.click('[data-tab="overview"]');await page.setViewportSize({width:390,height:844});await page.evaluate(()=>scrollTo(0,0));assert(await page.evaluate(()=>document.documentElement.scrollWidth<=innerWidth+1),'Mobile horizontal overflow');await page.screenshot({path:root+'/audit/'+mode+'_coverage_mobile.png'});
42
+ await go(url+'#class=external_left_distinct_B2');await page.waitForFunction(()=>document.querySelector('#detail').open);await images('#detail img');assert((await page.locator('#detailBody').innerText()).includes('本类实际未覆盖成员'),'Direct deep link wrong');await page.click('#closeDetail');
43
+ assert(errors.length===0,'JS errors '+JSON.stringify(errors));
44
+ const result={status:'PASS',mode,url,coverage_classes:checks.length,details:checks,source_rows:sources.length,coverage_filters:true,coverage_sort:true,compare_filter:true,direct_class_hash:true,interhand_and_2d_galleries:true,mobile_no_overflow:true,page_errors:errors,http_events:http,images_decoded:true};fs.writeFileSync(root+'/audit/'+mode+'_coverage_browser.json',JSON.stringify(result,null,2));console.log('PASS',mode,checks.length);await browser.close();
45
+ })().catch(e=>{console.error(e.stack);process.exit(1)});
pose_recluster_distinct_20261014/downloads/coverage/code/cluster_common.py ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from pathlib import Path
2
+ import json,hashlib,collections,datetime,csv,math
3
+ import numpy as np
4
+
5
+ ROOT=Path(__file__).resolve().parents[1]
6
+ REF=Path('/SSD3/yangzijing/Hand_reference_EgoRenderer005_20261013')
7
+ NEW=Path('/SSD3/yangzijing/Hand_resample_HO3D_ReInter_H2O3D_20261013')
8
+ OLD=Path('/SSD3/yangzijing/Hand_pose_sampling_scale_20261013')
9
+ SEED=20261014
10
+ PARENTS=np.array([0,0,1,2,3,0,5,6,7,0,9,10,11,0,13,14,15,0,17,18,19])
11
+ def read(p):return json.loads(Path(p).read_text())
12
+ def write(p,value):
13
+ p=Path(p);p.parent.mkdir(parents=True,exist_ok=True)
14
+ p.write_text(json.dumps(value,ensure_ascii=False,allow_nan=False,indent=2)+'\n')
15
+ def sha(p):
16
+ h=hashlib.sha256()
17
+ with Path(p).open('rb') as f:
18
+ for b in iter(lambda:f.read(1024**2),b''):h.update(b)
19
+ return h.hexdigest()
20
+ def table(p,rows):
21
+ with Path(p).open('w',newline='') as f:
22
+ w=csv.DictWriter(f,fieldnames=list(dict.fromkeys(k for r in rows for k in r)));w.writeheader()
23
+ for r in rows:w.writerow({k:json.dumps(v,ensure_ascii=False) if isinstance(v,(list,dict)) else v for k,v in r.items()})
24
+ def normalized(b):return b/np.maximum(np.linalg.norm(b,axis=-1,keepdims=True),1e-12)
25
+ def angular(a,b):
26
+ dot=np.einsum('ajc,bjc->abj',a,b,optimize=True)
27
+ return np.degrees(np.arccos(np.clip(dot,-1,1))).mean(-1)
28
+ def pair_stats(a,b):
29
+ angle=np.degrees(np.arccos(np.clip((a*b).sum(-1),-1,1)))
30
+ fingers=angle.reshape(*angle.shape[:-1],5,4).mean(-1)
31
+ return angle.mean(-1),fingers,fingers.max(-1)
32
+ def standard(b):
33
+ lengths=np.asarray(read('/SSD3/yangzijing/Hand_two_group_pose_clusters_20261013/manifests/display_bone_lengths.json')['lengths'])
34
+ j=np.zeros((21,3))
35
+ for k in range(1,21):j[k]=j[PARENTS[k]]+b[k-1]*lengths[k-1]
36
+ return j.tolist()
37
+ def load(group):
38
+ return read(ROOT/'manifests'/f'{group}_members.json'),np.load(ROOT/'cache'/f'{group}_features.npz')['bones']
39
+ def hash_sort(s):return hashlib.sha256(str(s).encode()).hexdigest()
pose_recluster_distinct_20261014/downloads/coverage/code/coverage_visuals.py ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Select actual uncovered members, preserve class and calibrated source projection."""
2
+ from cluster_common import *
3
+ import shutil,sys
4
+ BASE=Path('/SSD3/yangzijing/Hand_pose_recluster_distinct_20261014')
5
+
6
+ def setup():
7
+ (ROOT/'audit/media').mkdir(exist_ok=True);(ROOT/'sources/interhand_rgb').mkdir(parents=True,exist_ok=True)
8
+ for name in ['interhand_rgb','reinter_rgb']:
9
+ x=read(BASE/f'manifests/{name}.json')
10
+ if name=='interhand_rgb':
11
+ for sid,v in x.items():
12
+ if not Path(v['path']).exists():v['path']=str(ROOT/'sources/interhand_rgb'/f'{sid}.jpg')
13
+ write(ROOT/f'manifests/{name}.json',x)
14
+ for p in (BASE/'audit/media').glob('*.json'):
15
+ r=read(p)
16
+ if r.get('assets') and all((ROOT/'site'/a).exists() for a in r['assets'].values()):
17
+ target=ROOT/'audit/media'/p.name
18
+ if not target.exists():shutil.copyfile(p,target)
19
+
20
+ def main():
21
+ setup();import visualize as vis
22
+ rows=read(BASE/'manifests/external_members.json');ours=read(BASE/'manifests/ours_members.json');b=np.load(BASE/'cache/external_features.npz')['bones'];ob=np.load(BASE/'cache/ours_features.npz')['bones']
23
+ cov=np.load(ROOT/'cache/external_coverage.npz');models=read(BASE/'metrics/models.json');dest=ROOT/'metrics/uncovered_visuals.json';out=read(dest) if dest.exists() else {};failure_path=ROOT/'audit/coverage_media_failures.json';failures=read(failure_path) if failure_path.exists() else [];failed={x['id'] for x in failures if x['kind']=='external'}
24
+ for side in ['left','right']:
25
+ aa=np.load(BASE/f'cache/external_{side}_assignments.npz');ix=aa['indices'];distinct=np.load(BASE/f'cache/external_{side}_distinct_assignments.npz')['distinct']
26
+ for level in ['distinct','fine']:
27
+ lab=distinct if level=='distinct' else aa['fine']
28
+ for c in models['external_'+side][level]:
29
+ if c['key'] in out and all('media' in x['nearest'] for x in out[c['key']]):continue
30
+ candidates=ix[(lab==c['label'])&(cov['status'][ix]==2)]
31
+ assert len(candidates)>0,(c['key'],'no uncovered members')
32
+ ds=angular(b[[c['prototype_index']]],b[candidates])[0];order=np.argsort(ds,kind='stable');picked=[];seen=set()
33
+ for pos in order:
34
+ i=int(candidates[pos]);m=rows[i]
35
+ if m['id'] in failed or m['independent_unit'] in seen or not vis.paired(m):continue
36
+ try:r=vis.save(m)
37
+ except Exception as e:
38
+ failures.append(dict(kind='external',class_key=c['key'],id=m['id'],source=m['source'],error=type(e).__name__+': '+str(e)[:250]));failed.add(m['id']);continue
39
+ ni=int(cov['nearest_index'][i]);nm=ours[ni];nearest=dict(index=ni,id=nm['id'],source=nm['source'],recording=nm['recording'],frame=nm['frame'],hand=nm['hand'],joints=standard(ob[ni]))
40
+ try:nearest['media']=vis.save(nm)
41
+ except Exception as e:
42
+ nearest['media_missing_reason']=type(e).__name__+': '+str(e)[:200]
43
+ failures.append(dict(kind='reference',class_key=c['key'],id=nm['id'],source=nm['source'],error=nearest['media_missing_reason']))
44
+ continue
45
+ picked.append(dict(index=i,id=m['id'],source=m['source'],recording=m['recording'],frame=m['frame'],hand=m['hand'],label_type=m['label_type'],joints=standard(b[i]),prototype_distance_deg=float(ds[pos]),distance_deg=float(cov['distance_deg'][i]),threshold_deg=float(cov['threshold_deg'][i]),coverage_status='uncovered',support_recordings=int(cov['support_recordings'][i]),media=r,nearest=nearest))
46
+ seen.add(m['independent_unit'])
47
+ if len(picked)>=(2 if level=='distinct' else 1):break
48
+ assert picked,(c['key'],'No paired uncovered member')
49
+ out[c['key']]=picked;write(dest,out);write(ROOT/'audit/coverage_media_failures.json',failures)
50
+ print('UNCOVERED_RGB',c['key'],[(x['source'],round(x['distance_deg'],1),round(x['prototype_distance_deg'],1)) for x in picked],flush=True)
51
+ write(ROOT/'audit/coverage_media_failures.json',failures)
52
+ unique={x['id'] for p in out.values() for x in p};refunique={x['nearest']['id'] for p in out.values() for x in p}
53
+ print('DONE',len(out),'classes',len(unique),'uncovered RGB hands',len(refunique),'nearest hands','nearest RGB missing',sum('media' not in x['nearest'] for p in out.values() for x in p),flush=True)
54
+
55
+ if __name__=='__main__':main()
pose_recluster_distinct_20261014/downloads/coverage/code/exact_coverage.py ADDED
@@ -0,0 +1,75 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Exhaustive same-hand GT bone-angle NN and independent-recording support."""
2
+ from cluster_common import *
3
+ import os,time,torch
4
+ BASE=Path('/SSD3/yangzijing/Hand_pose_recluster_distinct_20261014')
5
+ torch.set_num_threads(2);torch.set_grad_enabled(False)
6
+ torch.backends.cuda.matmul.allow_tf32=False
7
+ torch.backends.cudnn.allow_tf32=False
8
+ QBLOCK=512;BBLOCK=8192
9
+
10
+ def quantile(x,w,q):
11
+ order=np.argsort(x,kind='stable');x=x[order];w=w[order]
12
+ return float(x[min(np.searchsorted(np.cumsum(w)/w.sum(),q),len(x)-1)])
13
+
14
+ def exact(q,bank,bank_indices,bank_units,query_units=None,thresholds=(),main_threshold=None):
15
+ device='cuda';b=torch.tensor(bank,device=device);ru=torch.tensor(bank_units,device=device,dtype=torch.int64)
16
+ nu=int(max(bank_units))+1;outs=collections.defaultdict(list);start=time.monotonic();last=start
17
+ for startq in range(0,len(q),QBLOCK):
18
+ qq=torch.tensor(q[startq:startq+QBLOCK],device=device);qn=len(qq)
19
+ min_d=torch.full((qn,),torch.inf,device=device);min_i=torch.zeros(qn,device=device,dtype=torch.int64)
20
+ unit_d=torch.full((qn,nu),torch.inf,device=device);sample_count=torch.zeros(qn,device=device,dtype=torch.int64)
21
+ qu=None if query_units is None else torch.tensor(query_units[startq:startq+QBLOCK],device=device)
22
+ for startb in range(0,len(b),BBLOCK):
23
+ bb=b[startb:startb+BBLOCK];uu=ru[startb:startb+BBLOCK]
24
+ dots=torch.bmm(qq.permute(1,0,2),bb.permute(1,2,0));dots.clamp_(-1,1).acos_()
25
+ dist=dots.mean(0)*(180/np.pi);del dots
26
+ if qu is not None:dist.masked_fill_(qu[:,None]==uu[None,:],torch.inf)
27
+ d,i=dist.min(dim=1);improve=d<min_d;min_i[improve]=i[improve]+startb;min_d=torch.minimum(min_d,d)
28
+ unit_d.scatter_reduce_(1,uu[None,:].expand(qn,-1),dist,reduce='amin',include_self=True)
29
+ if main_threshold is not None:sample_count+=(dist<=main_threshold).sum(1)
30
+ outs['distance_deg'].append(min_d.cpu().numpy());outs['nearest_index'].append(bank_indices[min_i.cpu().numpy()])
31
+ dd,ii=unit_d.topk(3,dim=1,largest=False,sorted=True)
32
+ outs['nearest_record_distances_deg'].append(dd.cpu().numpy());outs['nearest_record_codes'].append(ii.cpu().numpy())
33
+ outs['sample_count'].append(sample_count.cpu().numpy())
34
+ if thresholds:outs['record_counts'].append(torch.stack([(unit_d<=t).sum(1) for t in thresholds],dim=1).cpu().numpy())
35
+ if time.monotonic()-last>15 or startq+qn==len(q):
36
+ print('EXACT',startq+qn,'/',len(q),'seconds',round(time.monotonic()-start,1),flush=True);last=time.monotonic()
37
+ return {k:np.concatenate(v) for k,v in outs.items()}
38
+
39
+ def main():
40
+ protocol=read(ROOT/'manifests/coverage_protocol.json');hashes=read(ROOT/'audit/frozen_protocol_sha256.json')
41
+ assert all(sha(ROOT/k)==v for k,v in hashes.items())
42
+ ours=read(BASE/'manifests/ours_members.json');external=read(BASE/'manifests/external_members.json')
43
+ ob=np.load(BASE/'cache/ours_features.npz')['bones'];eb=np.load(BASE/'cache/external_features.npz')['bones']
44
+ assert len(ours)==len(ob)==271543 and len(external)==len(eb)==214481
45
+ frozen=read(ROOT/'manifests/calibration_members.json');calibration={};unit_books={}
46
+ for side in ['left','right']:
47
+ bix=np.array([i for i,r in enumerate(ours) if r['hand']==side]);bank=ob[bix]
48
+ units=sorted(set(ours[i]['independent_unit'] for i in bix));uc={u:k for k,u in enumerate(units)}
49
+ ru=np.array([uc[ours[i]['independent_unit']] for i in bix]);unit_books[side]=units
50
+ subset=[r for r in frozen if r['hand']==side];qix=np.array([r['index'] for r in subset]);w=np.array([r['weight'] for r in subset]);qu=np.array([uc[r['unit']] for r in subset])
51
+ p=ROOT/f'cache/calibration_{side}.npz'
52
+ if not p.exists():
53
+ result=exact(ob[qix],bank,bix,ru,qu);np.savez_compressed(p,indices=qix,weights=w,**result)
54
+ a=np.load(p);d=a['distance_deg'];third=a['nearest_record_distances_deg'][:,2]
55
+ assert np.isfinite(d).all() and all(ours[int(n)]['independent_unit']!=ours[int(q)]['independent_unit'] for q,n in zip(qix,a['nearest_index']))
56
+ thresholds={f'q{int(q*100)}':quantile(d,w,q) for q in protocol['calibration']['sensitivity_quantiles']}
57
+ sources={}
58
+ for s in sorted(set(r['source'] for r in subset)):
59
+ mask=np.array([r['source']==s for r in subset]);ss=w[mask]
60
+ sources[s]=dict(n=int(mask.sum()),recordings=len(set(r['unit'] for r in subset if r['source']==s)),q50=quantile(d[mask],ss,.5),q95=quantile(d[mask],ss,.95),within_main_threshold=float(np.average(d[mask]<=thresholds['q95'],weights=ss)),stable_covered_main=float(np.average(third[mask]<=thresholds['q95'],weights=ss)))
61
+ calibration[side]=dict(n=len(qix),reference_n=len(bix),reference_units=len(units),thresholds_deg=thresholds,weighted_within_q95=float(np.average(d<=thresholds['q95'],weights=w)),weighted_stable_covered_q95=float(np.average(third<=thresholds['q95'],weights=w)),source_diagnostics=sources)
62
+ write(ROOT/'metrics/calibration.json',calibration);write(ROOT/'manifests/reference_unit_codes.json',unit_books)
63
+ print('CALIBRATION',calibration,flush=True)
64
+ # Thresholds now fixed, before looking at external query results.
65
+ for side in ['left','right']:
66
+ p=ROOT/f'cache/external_{side}_coverage.npz'
67
+ if p.exists():continue
68
+ bix=np.array([i for i,r in enumerate(ours) if r['hand']==side]);qix=np.array([i for i,r in enumerate(external) if r['hand']==side]);uc={u:k for k,u in enumerate(unit_books[side])};ru=np.array([uc[ours[i]['independent_unit']] for i in bix])
69
+ names=['q90','q95','q99','10deg','20deg','30deg'];tt=[calibration[side]['thresholds_deg'][k] for k in names[:3]]+[10.,20.,30.]
70
+ result=exact(eb[qix],ob[bix],bix,ru,thresholds=tt,main_threshold=tt[1])
71
+ np.savez_compressed(p,indices=qix,threshold_names=names,thresholds_deg=tt,**result)
72
+ print('SAVED',side,len(qix),flush=True)
73
+ write(ROOT/'audit/exact_engine.json',dict(torch=torch.__version__,cuda_device=torch.cuda.get_device_name(),tf32=False,query_tile=QBLOCK,bank_tile=BBLOCK,peak_gpu_MB=torch.cuda.max_memory_allocated()/1e6,method='exhaustive all same-hand reference samples; no ANN approximation',created_at_utc=datetime.datetime.now(datetime.timezone.utc).isoformat()))
74
+
75
+ if __name__=='__main__':main()
pose_recluster_distinct_20261014/downloads/coverage/code/freeze_coverage.py ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from cluster_common import *
2
+ import shutil
3
+ BASE=Path('/SSD3/yangzijing/Hand_pose_recluster_distinct_20261014')
4
+ assert not (ROOT/'manifests/coverage_protocol.json').exists(), 'Protocol already frozen'
5
+ rows=read(BASE/'manifests/ours_members.json')
6
+ seed=2026101407
7
+ rng=np.random.default_rng(seed)
8
+ selected=[]
9
+ for hand in ['left','right']:
10
+ for source in sorted(set(m['source'] for m in rows)):
11
+ groups=collections.defaultdict(list)
12
+ for i,m in enumerate(rows):
13
+ if m['hand']==hand and m['source']==source:groups[m['independent_unit']].append(i)
14
+ units=sorted(groups)
15
+ queues={u:list(rng.permutation(groups[u])) for u in units}
16
+ order=list(rng.permutation(units));chosen=[]
17
+ # Round robin recordings, random frames without replacement; short units exhaust.
18
+ while len(chosen)<min(1024,sum(map(len,groups.values()))):
19
+ for u in order:
20
+ if queues[u]:chosen.append(int(queues[u].pop()))
21
+ if len(chosen)>=1024:break
22
+ counts=collections.Counter(rows[i]['independent_unit'] for i in chosen)
23
+ for i in chosen:
24
+ m=rows[i];selected.append(dict(index=i,id=m['id'],source=source,hand=hand,unit=m['independent_unit'],subject=str(m.get('subject')),weight=1/(4*len(counts)*counts[m['independent_unit']])))
25
+ write(ROOT/'manifests/calibration_members.json',selected)
26
+ protocol=dict(frozen_at_utc=datetime.datetime.now(datetime.timezone.utc).isoformat(),seed=seed,base=str(BASE),reference='All 271543 frozen three-source + EgoRenderer Ver.005 analysis members; separate hands; original source GT proxies, final canonical supervision/masks not verified',external='All 214481 frozen train members of 8 readable external WiLoR official-source 3D proxies; excludes 7600 ReInterHand test members',feature='Existing fixed 20 unit 3D bone directions in palm coordinates, 60 dimensions; wrist translation/rotation and bone length removed; no refit, no mirror pooling',distance='Mean over 20 bones of acos(clamp(dot,-1,1)), degrees; exact exhaustive float32 GPU, TF32 disabled; validate CPU float64',calibration=dict(n=len(selected),per_source_per_hand_max=1024,sampling='Seeded recording round robin, random frames without replacement; equal source and equal recording weights within each hand',exclusion='Exclude all members of the query independent recording/source action from reference, not only query frame',threshold='Separate left/right weighted 95th percentile of leave-recording/action-out nearest-reference distance; computed before external evaluation',sensitivity_quantiles=[.90,.95,.99],additional_fixed_degrees=[10,20,30]),sample_status={'covered':'nearest distance <= threshold and at least 3 distinct reference recording/source-action units within threshold','low':'nearest <= threshold but only 1 or 2 distinct reference units','uncovered':'nearest > threshold'},class_status={'covered':'at least 90% of members have covered sample status','uncovered':'zero members have nearest distance <= threshold','low':'all other classes; stacked counts retain mixed within-class outcomes'},class_badge_warning='90% display convention, not a universal biological boundary. Per-member proportions are authoritative. Uncovered means in this sampled reference only.',weights='Primary coverage is unweighted per analyzed hand-frame. Also report normalized original cluster fit-weight and equal-independent-unit sensitivity; do not claim unknown official population inclusion probabilities.',selection='For classes with uncovered members select a paired-RGB actual uncovered member close to the class prototype, preferring independent examples. Never relabel a covered prototype as uncovered.',gt_quality='Coverage is independent of GT validity. No automatic reliable/OOD/recommendation claim from distance alone.',no_changes='No reclustering, smoothing, GT refitting or source label modifications')
27
+ write(ROOT/'manifests/coverage_protocol.json',protocol)
28
+ paths=['manifests/ours_members.json','manifests/external_members.json','cache/ours_features.npz','cache/external_features.npz','metrics/models.json','site/index.html','site/app.js','site/data.js','site/style.css']
29
+ for group in ['ours','external']:
30
+ for side in ['left','right']:
31
+ paths += [f'cache/{group}_{side}_{name}.npz' for name in ['assignments','distinct_assignments','fit']]
32
+ write(ROOT/'audit/input_sha256.json',{str(BASE/p):sha(BASE/p) for p in paths})
33
+ write(ROOT/'audit/frozen_protocol_sha256.json',{str(p.relative_to(ROOT)):sha(p) for p in [ROOT/'manifests/coverage_protocol.json',ROOT/'manifests/calibration_members.json']})
34
+ print('FROZEN',len(selected),collections.Counter((r['source'],r['hand']) for r in selected),flush=True)
pose_recluster_distinct_20261014/downloads/coverage/code/prepare_publication.py ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from cluster_common import *
2
+ import shutil
3
+ BASE=Path('/SSD3/yangzijing/Hand_pose_recluster_distinct_20261014')
4
+ PREFIX='pose_recluster_distinct_20261014'
5
+ def main():
6
+ d=json.loads((ROOT/'site/data.coverage_v2.js').read_text().removeprefix('window.AUDIT_DATA=').rstrip(';\n'))
7
+ refs=set()
8
+ for s in d['samples'].values():refs.update(s['assets'].values())
9
+ for vs in d['two_d'].values():
10
+ for s in vs:refs.update(s['assets'].values())
11
+ for vs in d['coverage']['examples'].values():
12
+ for s in vs:refs.update(s['nearest']['media']['assets'].values())
13
+ dest=ROOT/'site/downloads/coverage'
14
+ for name in ['coverage_visual_checks.json','display_selection_amendment.json','new_media_sha256.json','local_coverage_browser.json']:
15
+ shutil.copyfile(ROOT/'audit'/name,dest/name)
16
+ shutil.copytree(ROOT/'code',dest/'code',dirs_exist_ok=True,ignore=shutil.ignore_patterns('__pycache__'))
17
+ allowed={'.html','.js','.css','.jpg','.png','.json','.csv','.gz','.md','.py'}
18
+ plan=[];skip=[]
19
+ for p in sorted((ROOT/'site').rglob('*')):
20
+ if not p.is_file():continue
21
+ rel=str(p.relative_to(ROOT/'site'));old=BASE/'site'/rel
22
+ if rel.startswith('media/') and rel not in refs and not old.exists():skip.append(rel);continue
23
+ h=sha(p)
24
+ if old.is_file() and sha(old)==h:continue
25
+ assert p.suffix in allowed,(p,'unexpected extension')
26
+ assert not old.exists() or rel=='index.html',(rel,'unplanned overwrite')
27
+ plan.append(dict(path=PREFIX+'/'+rel,relative=rel,sha256=h,bytes=p.stat().st_size))
28
+ assert (ROOT/'site/index_before_coverage.html').read_bytes()==(BASE/'site/index.html').read_bytes()
29
+ receipt=dict(prefix=PREFIX,prior_index_sha256=sha(BASE/'site/index.html'),updated_index_sha256=sha(ROOT/'site/index.html'),archived_index=PREFIX+'/index_before_coverage.html',files=plan,n_files=len(plan),bytes=sum(p['bytes'] for p in plan),excluded_unreferenced_new_media=len(skip),authorized_update='Only the existing comparison index is changed; previous index archived and original app/data/style kept. New assets and audit downloads have independent coverage version paths.')
30
+ write(ROOT/'audit/publication_plan.json',receipt)
31
+ print('PUBLICATION_PLAN',receipt['n_files'],'files',round(receipt['bytes']/1024**2,2),'MiB','excluded',len(skip),'unreferenced derived images')
32
+ if __name__=='__main__':main()
pose_recluster_distinct_20261014/downloads/coverage/code/publish_coverage.py ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Publish reviewed derived coverage page; preserve old JS/data/CSS and old entry page."""
2
+ from cluster_common import *
3
+ import os,time,requests
4
+ os.environ['HF_HUB_DISABLE_PROGRESS_BARS']='1'
5
+ from huggingface_hub import HfApi,CommitOperationAdd,hf_hub_download
6
+ from huggingface_hub.errors import HfHubHTTPError
7
+ REPOS={'dataset':'yangzijing/nine-source-hand-data-review-results','space':'yangzijing/nine-source-hand-data-browser'}
8
+
9
+ def head(kind,repo):
10
+ url='https://huggingface.co/api/'+('datasets' if kind=='dataset' else 'spaces')+'/'+repo+'/commits/main'
11
+ rr=requests.get(url,params={'audit_refresh':str(time.time_ns())},headers={'Cache-Control':'no-cache'},timeout=(10,40));rr.raise_for_status();return rr.json()
12
+
13
+ def main():
14
+ assert read(ROOT/'audit/numerical_validation.json')['status']=='PASS'
15
+ assert read(ROOT/'audit/coverage_visual_checks.json')['status']=='PASS'
16
+ assert read(ROOT/'audit/local_coverage_browser.json')['status']=='PASS'
17
+ plan=read(ROOT/'audit/publication_plan.json');rp=ROOT/'audit/publication.json';receipt=read(rp) if rp.exists() else dict(url='https://yangzijing-nine-source-hand-data-browser.static.hf.space/'+plan['prefix']+'/index.html',plan_sha256=sha(ROOT/'audit/publication_plan.json'))
18
+ assert receipt['plan_sha256']==sha(ROOT/'audit/publication_plan.json')
19
+ api=HfApi();title='Show per-member coverage of external pose classes against three-source plus EgoRenderer reference'
20
+ for kind,repo in REPOS.items():
21
+ if kind in receipt:continue
22
+ history=head(kind,repo);before=history[0]['id']
23
+ old=hf_hub_download(repo,plan['prefix']+'/index.html',repo_type=kind,revision=before)
24
+ assert sha(old)==plan['prior_index_sha256'],'Existing entry changed since base; inspect before publishing'
25
+ existing=set(api.list_repo_files(repo,repo_type=kind,revision=before))
26
+ preserved=[p for p in ['README.md','index.html',plan['prefix']+'/app.js',plan['prefix']+'/data.js',plan['prefix']+'/style.css'] if p in existing]
27
+ hashes={p:sha(hf_hub_download(repo,p,repo_type=kind,revision=before)) for p in preserved}
28
+ ops=[]
29
+ for x in plan['files']:
30
+ local=ROOT/'site'/x['relative'];assert sha(local)==x['sha256'];ops.append(CommitOperationAdd(path_in_repo=x['path'],path_or_fileobj=str(local)))
31
+ recovered=False
32
+ try:commit=api.create_commit(repo,repo_type=kind,parent_commit=before,operations=ops,commit_message=title,num_threads=2).oid
33
+ except HfHubHTTPError as e:
34
+ if e.response is None or e.response.status_code!=504:raise
35
+ for attempt in range(6):
36
+ h=head(kind,repo)
37
+ if h[0]['title']==title and h[1]['id']==before:commit=h[0]['id'];recovered=True;break
38
+ time.sleep(5)
39
+ else:raise RuntimeError('504 commit outcome unresolved; do not repost without inspection') from None
40
+ for path,h in hashes.items():assert sha(hf_hub_download(repo,path,repo_type=kind,revision=commit))==h
41
+ assert sha(hf_hub_download(repo,plan['archived_index'],repo_type=kind,revision=commit))==plan['prior_index_sha256']
42
+ receipt[kind]=dict(repo=repo,before=before,commit=commit,files=plan['n_files'],bytes=plan['bytes'],preserved_sha256=hashes,archived_original_entry=True,client_504_recovered=recovered);write(rp,receipt);print('PUBLISHED',kind,commit,flush=True)
43
+ print('PUBLIC_URL',receipt['url'],flush=True)
44
+ if __name__=='__main__':main()
pose_recluster_distinct_20261014/downloads/coverage/code/update_web.py ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from cluster_common import *
2
+ root=ROOT/'code/web'
3
+ p=root/'index.html';s=(Path('/SSD3/yangzijing/Hand_pose_recluster_distinct_20261014/code/web')/p.name).read_text()
4
+ s=s.replace('href="style.css"','href="style.coverage_v2.css"').replace('src="data.js"','src="data.coverage_v2.js"').replace('src="app.js"','src="app.coverage_v2.js"')
5
+ s=s.replace('<small>2026.10.14</small>','<small>逐成员覆盖 · 2026.10.14</small>')
6
+ s=s.replace('<main>','''<main>
7
+ <section class="coverage-panel" aria-label="外部姿态覆盖"><div class="coverage-controls"><strong>WiLoR 外部类 → 我们三源+合成</strong><label>外部类筛选 <select id="coverageFilter"><option value="all">全部</option><option value="entire">整类未覆盖</option><option value="mostly_gap">未覆盖成员 ≥50%</option><option value="mostly_covered">已覆盖成员 ≥70%</option></select></label><label>排序 <select id="coverageSort"><option value="gap">未覆盖比例高 → 低</option><option value="covered">已覆盖比例高 → 低</option><option value="id">类别编号</option></select></label></div><div id="coverageSummary"></div><p class="coverage-legend"><span class="dot covered"></span>已覆盖:≥3 段独立录制有相似姿态 <span class="dot low"></span>低覆盖:只有 1–2 段 <span class="dot uncovered"></span>未覆盖:没有相似姿态</p><p class="hint">均指本次抽样库。类别内逐成员统计;未覆盖不等于 GT 可靠,也不等于全量训练集绝对缺失。</p><details id="coverageMethod"><summary>判定依据与阈值敏感性</summary><div id="coverageMethodBody"></div></details></section>''')
8
+ s=s.replace('点击类别查看原图、GT 叠加和最近邻。骨架可拖动旋转;A、B 编号各自独立。','点击外部类的“未覆盖成员 / 原图 / 近邻”查看具体缺口。骨架可拖动旋转;A、B 编号各自独立。')
9
+ s=s.replace('右边是外部类;左边是它最相近的我们类。点击可看真实图例;最小样本距离另列,不能把类中心距离当覆盖结论。','右边是外部类;左边是它最相近的我们类。覆盖条来自该类全部成员;点击外部类查看未覆盖成员与各自的精确最近邻。')
10
+ s=s.replace('<footer>','<footer><a href="downloads/coverage/RESULTS_ZH.md">覆盖结果</a><a href="downloads/coverage/member_coverage.csv.gz">逐成员覆盖 CSV</a><a href="downloads/coverage/class_coverage.csv">逐类覆盖 CSV</a><a href="downloads/coverage/REPRODUCE.md">覆盖复现</a>')
11
+ p.write_text(s)
12
+ p=root/'app.js';s=(Path('/SSD3/yangzijing/Hand_pose_recluster_distinct_20261014/code/web')/p.name).read_text()
13
+ s=s.replace("let hand='right',level='distinct',view='oblique',tab='overview',poseSerial=0,activeDetail='';","let hand='right',level='distinct',view='oblique',tab='overview',poseSerial=0,activeDetail='',coverageFilter='all',coverageSort='gap';")
14
+ pos=s.index('function related(c)')
15
+ s=s[:pos]+'''const pct=x=>(100*x).toFixed(1)+'%';
16
+ function coverageBar(v,compact=false){if(!v)return '';return `<div class="coverage-breakdown ${compact?'compact':''}"><div class="coverage-bar" role="img" aria-label="已覆盖 ${pct(v.covered_fraction)},低覆盖 ${pct(v.low_fraction)},未覆盖 ${pct(v.uncovered_fraction)}"><span class="covered" style="width:${v.covered_fraction*100}%"></span><span class="low" style="width:${v.low_fraction*100}%"></span><span class="uncovered" style="width:${v.uncovered_fraction*100}%"></span></div><div class="coverage-values"><span class="covered-text">已覆盖 ${pct(v.covered_fraction)}</span><span class="low-text">低覆盖 ${pct(v.low_fraction)}</span><span class="uncovered-text">未覆盖 ${pct(v.uncovered_fraction)}</span></div>${compact?'':`<p class="metric">分母 ${nf(v.n)} 个实际分析手帧:${nf(v.covered)} 已覆盖 / ${nf(v.low)} 低覆盖 / ${nf(v.uncovered)} 未覆盖。</p>`}</div>`}
17
+ function classBadge(c){const v=c.coverage;if(!v)return '';const label=v.status==='uncovered'?'整类未覆盖':v.status==='covered'?'≥90% 已覆盖':'部分覆盖';return `<span class="coverage-badge ${v.status}" title="以逐成员比例为准;整类未覆盖要求所有成员都没有相似参照。">${label}</span>`}
18
+ function filteredExternal(){return [...model('external')[level]].filter(c=>coverageFilter==='all'||coverageFilter==='entire'&&c.coverage.uncovered===c.n||coverageFilter==='mostly_gap'&&c.coverage.uncovered_fraction>=.5||coverageFilter==='mostly_covered'&&c.coverage.covered_fraction>=.7).sort((a,b)=>coverageSort==='id'?a.number-b.number:coverageSort==='covered'?b.coverage.covered_fraction-a.coverage.covered_fraction:b.coverage.uncovered_fraction-a.coverage.uncovered_fraction)}
19
+ function renderCoverage(){const v=D.coverage.summary[hand],cal=D.coverage.calibration[hand],cs=model('external')[level],entire=cs.filter(c=>c.coverage.status==='uncovered').length;$('#coverageSummary').innerHTML=`<div class="coverage-summary">${coverageBar(v,true)}<span class="metric">${hand==='left'?'左':'右'}手 ${nf(v.n)} 个外部手帧 · ${cs.length} 类中 ${entire} 类整类未��盖 · 相似阈值 ${cal.thresholds_deg.q95.toFixed(2)}°</span></div>`;
20
+ const sens=D.coverage.sensitivity.filter(x=>x.key==='external_'+hand&&['q90','q95','q99'].includes(x.threshold));$('#coverageMethodBody').innerHTML=`<p class="hint">距离使用来源 GT 的 20 根 3D 骨方向,在掌部坐标系中计算平均夹角,去除手腕整体运动和骨长差异;左右手分开。不是 2D 图上距离,也不是 MANO 参数直接相减。</p><p class="hint">参照:H2O+ARCTIC+HOT3D+EgoRenderer Ver.005,共 271,543 手帧;本侧 ${nf(cal.reference_n)} 手帧、${nf(cal.reference_units)} 段独立录制/源动作。用本侧 4,096 个内部留出样本校准,检索时排除同录制全部帧;四源及各录制均衡加权,取最近距离的 95% 分位。每个外部成员穷举检索全部同侧参照。</p><table><thead><tr><th>校准分位</th><th>阈值</th><th>已覆盖</th><th>低覆盖</th><th>未覆盖</th></tr></thead><tbody>${sens.map(x=>`<tr><td>${x.threshold==='q95'?'95%(本页)':x.threshold.slice(1)+'%'}</td><td>${x.threshold_deg.toFixed(2)}°</td><td>${pct(x.covered_fraction)}</td><td>${pct(x.low_fraction)}</td><td>${pct(x.uncovered_fraction)}</td></tr>`).join('')}</tbody></table><p class="hint">类标签:≥90% 成员已覆盖才标“≥90% 已覆盖”;所有成员无近邻才标“整类未覆盖”;其余标“部分覆盖”。90% 是显示约定,完整比例始终保留。统计分母是本轮分析样本,不是 WiLoR 官方全量;2D 来源不作 3D 覆盖判断。我们参照使用已核对训练成员的来源 GT,最终 canonical 标签和 loss mask 尚未验收。</p>`}
21
+ function memberBadge(s){const v=s.coverage;if(!v)return '';return `<p class="sample-coverage"><span class="coverage-badge ${v.status}">${{covered:'已覆盖',low:'低覆盖',uncovered:'抽样库未覆盖'}[v.status]}</span> 最近距离 ${v.distance_deg.toFixed(2)}° / 阈值 ${v.threshold_deg.toFixed(2)}° · ${nf(v.support_recordings)} 段相似参照录制</p>`}
22
+ function gapBlock(v){const s=D.samples[v.id],n=v.nearest;return `<article class="gap-case"><h3>未覆盖成员 · ${esc(cname(s.source))} · ${s.hand==='left'?'左手':'右手'} · 帧 ${s.frame}</h3><p class="evidence">${esc(s.recording)} · ${esc(s.label)} · 距该类原型 ${v.prototype_distance_deg.toFixed(2)}°</p>${memberBadge(s)}<div class="pair"><div><h4>外部实际成员</h4>${poseCanvas(v.joints,'该未覆盖成员的 GT 姿态')}<a href="${s.assets.full}" target="_blank"><img class="gap-image" src="${s.assets.crop}" loading="lazy" alt="外部未覆盖成员:原图与 GT 叠加"></a><p class="metric">原图 | GT 叠加 · 点击看完整原画面</p></div><div><h4>我们库中的精确最近邻</h4>${poseCanvas(n.joints,'该成员的精确最近 GT 姿态')}${n.media?`<a href="${n.media.assets.full}" target="_blank"><img class="gap-image" src="${n.media.assets.crop}" loading="lazy" alt="精确最近邻:原图与 GT 叠加"></a><p class="metric">原图 | GT 叠加 · 点击看完整原画面</p>`:'<p class="warning">这个精确最近邻未通过原图可读性检查,保留其 GT 骨架;没有用其他样本替代。</p>'}<p class="evidence">${esc(cname(n.source))} · ${esc(n.recording)} · 帧 ${n.frame} · ${n.hand==='left'?'左':'右'}手</p></div></div><details><summary>相机与 GT 证据</summary><p class="evidence">外部:${esc(s.camera)}。${esc(s.gt_status)}</p><p class="evidence">最近邻:${esc(n.media?.evidence?.camera??n.media_missing_reason)}。图像叠加仅供核查,覆盖距离不构成 GT 可靠性结论。</p></details></article>`}
23
+ ''' +s[pos:]
24
+ start=s.index('function card(c)');end=s.index('function countTable()',start)
25
+ s=s[:start]+'''function card(c){const v=c.examples[0],s=D.samples[v.id];return `<article class="card" data-key="${c.key}"><div class="card-head"><h3>${c.id}</h3><span>${classBadge(c)}${related(c)&&level==='distinct'?'<span class="badge">有相近类</span>':''}</span></div><div class="card-meta">${nf(c.n)} 手帧 · ${Object.keys(c.sources).length} 来源</div>${c.coverage?coverageBar(c.coverage,true):''}${poseCanvas(c.joints,'GT 类原型')}<img src="${s.assets.crop}" alt="${esc(cname(s.source))} 原图与 GT 叠加" loading="lazy"><div class="card-foot">${esc(cname(s.source))} · ${v.is_prototype?'原型本人':`同类图例,距原型 ${v.prototype_distance_deg.toFixed(1)}°`}</div><button class="open" data-open="${c.key}">${c.coverage?'未覆盖成员 / 原图 / 近邻':'原图 / GT 叠加 / 近邻'}</button></article>`}
26
+ ''' +s[end:]
27
+ start=s.index('function renderOverview()');end=s.index('function pairTile(',start)
28
+ s=s[:start]+'''function renderOverview(){countTable();for(const g of ['ours','external']){const cs=g==='external'?filteredExternal():model(g)[level];$('#'+g+'Cards').innerHTML=cs.map(card).join('')||'<p class="hint">当前筛选没有类别。</p>';$('#'+g+'Count').textContent=`${cs.length} / ${model(g)[level].length} 类`}scatter()}
29
+ ''' +s[end:]
30
+ start=s.index('function renderCompare()');end=s.index('function renderSimilar()',start)
31
+ s=s[:start]+'''function renderCompare(){const sorted=filteredExternal();$('#comparisonRows').innerHTML=sorted.map(c=>{const n=c.nearest_reference,a=allClasses[n.nearest_our_key];return `<div class="row"><div class="row-title"><strong>我们 ${a.id} ↔ 外部 ${c.id}</strong>${classBadge(c)}</div>${coverageBar(c.coverage)}<div class="pair">${pairTile(a)}${pairTile(c)}</div><p class="metric">类原型差 ${n.class_prototype_mean_deg.toFixed(1)}° · 外部原型最近参照 ${n.mean_deg.toFixed(1)}°(原型示意;覆盖统计来自全类成员)</p><button data-open="${c.key}">看该类未覆盖成员、原图与精确最近邻</button></div>`}).join('')||'<p class="hint">当前筛选没有类别。</p>'}
32
+ ''' +s[end:]
33
+ s=s.replace('<th>本轮用途</th>','<th>本轮用途</th><th>对参照库覆盖</th>')
34
+ s=s.replace('<td>${esc(s.role)}</td></tr>','<td>${esc(s.role)}</td><td>${D.coverage.sources[s.id]?coverageBar(D.coverage.sources[s.id],true):s.group===\'我们\'?\'参照库\':s.gallery_source?\'与参照重叠,不单计\':\'不作 3D 判断\'}</td></tr>')
35
+ s=s.replace('<section class="example"><h3>','<section class="example">${memberBadge(s)}<h3>')
36
+ s=s.replace("let head=`<h2>","let head=`<h2>")
37
+ s=s.replace("let top=`<div class=\"dialog-top\">","head+=c.coverage?classBadge(c)+coverageBar(c.coverage):'';\n let top=`<div class=\"dialog-top\">")
38
+ s=s.replace("$('#detailBody').innerHTML=head+top+note+c.examples.map(v=>sampleBlock(D.samples[v.id],v)).join('');", "const gaps=D.coverage.examples[key]||[],gapIds=new Set(gaps.map(v=>v.id)),other=c.examples.filter(v=>!gapIds.has(v.id));\n $('#detailBody').innerHTML=head+(c.coverage?'<details class=\"prototype-details\"><summary>类原型与其最近邻</summary>'+top+note+'</details>':top+note)+(gaps.length?'<h3 class=\"gap-title\">本类实际未覆盖成员</h3>'+gaps.map(gapBlock).join(''):'')+(other.length?'<h3>其他同类成员</h3>'+other.map(v=>sampleBlock(D.samples[v.id],v)).join(''):'');")
39
+ s=s.replace("if(two.length)body+=", "if(D.coverage.sources[src])body+=coverageBar(D.coverage.sources[src]);\n if(two.length)body+=")
40
+ s=s.replace("function render(){poses.clear();", "function render(){poses.clear();renderCoverage();")
41
+ s=s.replace("$('#hand').onchange", "$('#coverageFilter').onchange=e=>{coverageFilter=e.target.value;render()};$('#coverageSort').onchange=e=>{coverageSort=e.target.value;render()};\n$('#hand').onchange")
42
+ p.write_text(s)
43
+ p=root/'style.css';s=(Path('/SSD3/yangzijing/Hand_pose_recluster_distinct_20261014/code/web')/p.name).read_text()+'''
44
+ .coverage-panel{background:#fff;border:1px solid var(--line);border-radius:8px;padding:14px 16px;margin-bottom:16px}.coverage-controls{display:flex;align-items:center;gap:12px;flex-wrap:wrap;font-size:13px}.coverage-controls strong{margin-right:auto}.coverage-summary{display:flex;align-items:center;gap:20px;flex-wrap:wrap;margin-top:12px}.coverage-summary .coverage-breakdown{flex:1;min-width:260px}.coverage-bar{height:9px;display:flex;border-radius:5px;overflow:hidden;background:#e7edf2;width:100%;min-width:100px}.covered{background:#218762}.low{background:#c88926}.uncovered{background:#ca5054}.dot{width:9px;height:9px;display:inline-block;border-radius:50%;margin-right:3px}.coverage-values{display:flex;gap:9px;justify-content:space-between;font-size:11px;flex-wrap:wrap;margin-top:4px}.covered-text{color:#146847}.low-text{color:#8e5706}.uncovered-text{color:#a73139}.coverage-legend{font-size:12px;margin:10px 0 4px}.coverage-badge{display:inline-block;padding:2px 7px;border-radius:5px;font-size:11px;white-space:nowrap}.coverage-badge.covered{background:#e3f3eb;color:#146847}.coverage-badge.low{background:#fff1d9;color:#8e5706}.coverage-badge.uncovered{background:#fce7e8;color:#a73139}.card .coverage-breakdown{padding:4px 11px 7px}.card-head>span{display:flex;gap:3px;flex-wrap:wrap;justify-content:flex-end}.coverage-panel details{margin-top:8px;padding:7px 10px;font-size:12px;background:#fafcfe}.coverage-panel .hint{margin:7px 0}.gap-case{border:1px solid #ead4d5;background:#fffafa;padding:16px;border-radius:8px;margin:14px 0}.gap-case h3{font-size:16px;margin:0 0 5px}.gap-case h4{font-size:13px;margin:10px 0 5px}.gap-case details{font-size:12px;padding:7px;margin-top:10px}.gap-case .pair .gap-image{width:100%;height:220px;max-height:none;object-fit:contain;background:#f0f3f6}.sample-coverage{font-size:12px;color:var(--muted);line-height:1.9}.gap-title{color:#a73139;border-top:1px solid var(--line);padding-top:16px}.scroll .coverage-breakdown{min-width:230px}.coverage-breakdown .metric{margin:5px 0}.coverage-panel summary{font-size:12px}.row .coverage-breakdown{max-width:720px;margin-bottom:12px}
45
+ @media(max-width:620px){.coverage-panel{padding:11px}.coverage-controls{gap:8px}.coverage-controls strong{width:100%}.coverage-summary{gap:8px}.card .coverage-breakdown{padding:3px 7px 6px}.card .coverage-values{font-size:9px;gap:1px;display:grid;grid-template-columns:1fr}.card-head{gap:4px;align-items:flex-start}.card-head>span{max-width:80%}.gap-case{padding:9px}.gap-case .pair{grid-template-columns:1fr}.gap-case .pair .gap-image{height:auto;max-height:300px}.coverage-legend{line-height:1.9}.coverage-controls select{max-width:200px}}
46
+ ''';p.write_text(s)
47
+ print('UPDATED',root)
pose_recluster_distinct_20261014/downloads/coverage/code/validate_coverage.py ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from cluster_common import *
2
+ BASE=Path('/SSD3/yangzijing/Hand_pose_recluster_distinct_20261014')
3
+ def main():
4
+ data=np.load(ROOT/'cache/external_coverage.npz');classes=read(ROOT/'metrics/class_coverage.json');rows=read(BASE/'manifests/external_members.json');ours=read(BASE/'manifests/ours_members.json')
5
+ ob=np.load(BASE/'cache/ours_features.npz')['bones'];eb=np.load(BASE/'cache/external_features.npz')['bones'];rng=np.random.default_rng(2026101408);checks=[]
6
+ for side in ['left','right']:
7
+ bx=np.array([i for i,m in enumerate(ours) if m['hand']==side]);qx=np.array([i for i,m in enumerate(rows) if m['hand']==side]);bank=ob[bx].astype(np.float64)
8
+ units=[ours[i]['independent_unit'] for i in bx];unames=sorted(set(units));umap={u:i for i,u in enumerate(unames)};uc=np.array([umap[u] for u in units])
9
+ boundary=qx[np.argsort(np.abs(data['distance_deg'][qx]-data['threshold_deg'][qx]))[:4]]
10
+ samples=list(map(int,rng.choice(qx,12,replace=False)))+list(map(int,boundary))
11
+ for i in samples:
12
+ d=np.degrees(np.arccos(np.clip(np.einsum('njk,jk->nj',bank,eb[i].astype(np.float64)),-1,1))).mean(-1)
13
+ j=int(np.argmin(d));err=abs(float(d[j])-data['distance_deg'][i]);assert err<.01,(i,err)
14
+ nn=int(data['nearest_index'][i]);assert abs(float(d[np.where(bx==nn)[0][0]])-float(d[j]))<.01
15
+ tau=float(data['threshold_deg'][i]);records=len(set(uc[d<=tau]));count=int((d<=tau).sum());status=2 if d[j]>tau else (0 if records>=3 else 1)
16
+ margin=float(np.min(abs(d-tau)));ambiguous=margin<.002
17
+ if not ambiguous:assert records==data['support_recordings'][i] and count==data['support_samples'][i]
18
+ assert status==data['status'][i],(i,'classification mismatch')
19
+ checks.append(dict(index=i,id=rows[i]['id'],hand=side,max_nn_error_deg=err,cpu_nearest_index=int(bx[j]),gpu_nearest_index=nn,cpu_support_recordings=records,gpu_support_recordings=int(data['support_recordings'][i]),cpu_support_samples=count,gpu_support_samples=int(data['support_samples'][i]),threshold_boundary_margin_deg=margin,numerically_ambiguous_counts=ambiguous,status_agrees=True))
20
+ # Numerical comparison with existing independently calculated exact class-prototype NN.
21
+ models=read(BASE/'metrics/models.json');proto=[]
22
+ for side in ['left','right']:
23
+ for level in ['fine','distinct']:
24
+ for c in models['external_'+side][level]:
25
+ i=c['prototype_index'];err=abs(data['distance_deg'][i]-c['nearest_reference']['mean_deg']);assert err<.01,(c['key'],err)
26
+ proto.append(float(err))
27
+ assert sum(c['n'] for c in classes.values() if c['level']=='distinct')==len(rows)
28
+ assert sum(c['n'] for c in classes.values() if c['level']=='fine')==len(rows)
29
+ assert all(c['covered']+c['low']+c['uncovered']==c['n'] for c in classes.values())
30
+ assert all(ours[int(nn)]['hand']==r['hand'] for r,nn in zip(rows,data['nearest_index']))
31
+ hashes=read(ROOT/'audit/input_sha256.json');assert all(sha(p)==h for p,h in hashes.items()),'Input changed'
32
+ report=dict(status='PASS',n_queries=len(rows),same_hand_all=True,all_class_counts_valid=True,input_hashes_unchanged=True,cpu_float64_checks=checks,cpu_nn_max_error_deg=max(c['max_nn_error_deg'] for c in checks),previous_exact_prototype_checks=len(proto),previous_exact_prototype_max_error_deg=max(proto),limitations='Float32 acos counts extremely close to the threshold can change under rounding; boundary examples were checked and sample statuses agree. No GT accuracy verdict derived from nearest-neighbor distance.')
33
+ write(ROOT/'audit/numerical_validation.json',report);print({k:v for k,v in report.items() if k!='cpu_float64_checks'})
34
+
35
+ if __name__=='__main__':main()
pose_recluster_distinct_20261014/downloads/coverage/code/verify_public_assets.py ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Check permanent public URLs, bytes and archived previous entry after publication."""
2
+ from cluster_common import *
3
+ import requests,time,concurrent.futures,re
4
+ BASE_URL='https://yangzijing-nine-source-hand-data-browser.static.hf.space/'
5
+
6
+ def get_verified(item):
7
+ url=BASE_URL+item['path'];events=[]
8
+ for attempt in range(4):
9
+ try:
10
+ r=requests.get(url,timeout=(10,50));r.raise_for_status();data=r.content
11
+ if item['path'].endswith('.html'):
12
+ # Static Spaces adds only this known runtime creator-ID script.
13
+ data=re.sub(rb'<script>window\.huggingface=\{variables:\{"SPACE_CREATOR_USER_ID":"[0-9a-f]{24}"\}\};</script>',b'',data)
14
+ actual=hashlib.sha256(data).hexdigest();assert actual==item['sha256'],'SHA256 mismatch'
15
+ return dict(path=item['path'],status=200,sha256=actual,bytes=len(data),retries=attempt,events=events)
16
+ except Exception as e:
17
+ events.append(dict(attempt=attempt,error=type(e).__name__,http_status=getattr(getattr(e,'response',None),'status_code',None)))
18
+ if attempt==3:return dict(path=item['path'],error=type(e).__name__+': '+str(e)[:180],events=events)
19
+ time.sleep(2*(attempt+1))
20
+
21
+ def main():
22
+ plan=read(ROOT/'audit/publication_plan.json');receipt=read(ROOT/'audit/publication.json');assert 'space' in receipt
23
+ entry=next(x for x in plan['files'] if x['relative']=='index.html')
24
+ for attempt in range(36):
25
+ r=requests.get(BASE_URL+entry['path'],params={'coverage_revision':receipt['space']['commit']},timeout=(10,40))
26
+ if r.status_code==200 and 'data.coverage_v2.js' in r.text:break
27
+ time.sleep(5)
28
+ else:raise RuntimeError('New static entry not visible after deployment wait')
29
+ checks=[]
30
+ with concurrent.futures.ThreadPoolExecutor(2) as pool:
31
+ fs={pool.submit(get_verified,item):item for item in plan['files']}
32
+ for f in concurrent.futures.as_completed(fs):
33
+ checks.append(f.result())
34
+ if len(checks)%50==0:print('PUBLIC_CHECKED',len(checks),'/',len(fs),flush=True)
35
+ bad=[r for r in checks if 'error' in r];out=dict(status='PASS' if not bad else 'FAIL',url=receipt['url'],commit=receipt['space']['commit'],files=len(checks),failures=bad,retried=sum(r.get('retries',0)>0 for r in checks),checks=checks)
36
+ write(ROOT/'audit/public_assets.json',out);print('PUBLIC_ASSETS',out['status'],out['files'],'failed',len(bad),flush=True)
37
+ assert not bad,str(bad[:3])
38
+ if __name__=='__main__':main()
pose_recluster_distinct_20261014/downloads/coverage/code/visualize.py ADDED
@@ -0,0 +1,166 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Paired RGB and calibrated GT overlay for members of the newly fitted clusters."""
2
+ from cluster_common import *
3
+ import sys,functools,pickle,zipfile,shutil
4
+ from PIL import Image
5
+ import cv2
6
+ cv2.setNumThreads(1)
7
+
8
+ sys.path.insert(0,str(REF/'code'))
9
+ import visuals as legacy
10
+ import interhand_rgb
11
+ legacy.ROOT=ROOT;interhand_rgb.ROOT=ROOT
12
+ from geometry import project
13
+ import torch,smplx
14
+ torch.set_num_threads(1);torch.set_grad_enabled(False)
15
+
16
+ EXTRA=Path('/SSD3/yangzijing/Hand_missing_source_visuals_20261012')
17
+ COLOR=[(60,180,210),(80,170,40),(230,100,40),(180,80,180),(80,80,230)]
18
+
19
+ @functools.lru_cache(2)
20
+ def mano(side):
21
+ m=smplx.MANO('/SSD3/jiasen/foundation_hand/pretrained/mano',is_rhand=side=='right',use_pca=False,flat_hand_mean=True).eval()
22
+ if side=='left' and torch.abs(m.shapedirs[:,0,:]-mano('right').shapedirs[:,0,:]).sum()<1:m.shapedirs[:,0,:]*=-1
23
+ return m
24
+ @functools.lru_cache(2)
25
+ def arc(path):return zipfile.ZipFile(path)
26
+ def blob(path):
27
+ if '::' in path:
28
+ a,b=path.split('::',1);return arc(a).read(b)
29
+ return Path(path).read_bytes()
30
+
31
+ def ho_image(m):
32
+ source=blob(m['annotation_path']);assert hashlib.sha256(source).hexdigest()==m['annotation_sha256']
33
+ d=pickle.loads(source,encoding='latin1');field='hand' if m['source']=='wilor_ho3d' else m['hand']+'Hand'
34
+ p=np.asarray(d[field+'Pose']);t=np.asarray(d[field+'Trans']);beta=np.asarray(d['handBeta']);model=mano(m['hand'])
35
+ tensor=lambda a:torch.as_tensor(np.asarray(a).copy()[None],dtype=torch.float32)
36
+ out=model(global_orient=tensor(p[:3]),hand_pose=tensor(p[3:]),betas=tensor(beta),transl=tensor(t));v=out.vertices[0].numpy()
37
+ err=float(np.linalg.norm(out.joints[0,:16].numpy()-np.asarray(d[field+'Joints3D'])[:16],axis=-1).max()*1000);assert err<.02
38
+ v=v*np.array([1,-1,-1]);K=np.asarray(d['camMat']);rgb=blob(m['image_path']);im=cv2.imdecode(np.frombuffer(rgb,np.uint8),cv2.IMREAD_COLOR);assert im is not None
39
+ uv=project(v,K);mask=(v[:,2]>0)&(uv[:,0]>=0)&(uv[:,0]<im.shape[1])&(uv[:,1]>=0)&(uv[:,1]<im.shape[0]);assert mask.sum()>=500,'target mostly out of image'
40
+ vertices=np.full((2,778,3),np.nan);side=['left','right'].index(m['hand']);vertices[side]=v;valid=[False,False];valid[side]=True
41
+ overlay,pixels=legacy.renderer.media.render_overlay(im,vertices,valid,lambda pts:project(pts,K));box,inside=legacy.renderer.bbox(uv,im.shape[:2]);assert inside
42
+ raw=Image.fromarray(im[...,::-1]);ov=Image.fromarray(overlay[...,::-1]);full=Image.new('RGB',(raw.width*2,raw.height));full.paste(raw);full.paste(ov,(raw.width,0))
43
+ ev=dict(camera='same-source unmodified camMat; OpenGL->OpenCV diag(1,-1,-1); original full image',K=K.tolist(),source_rgb_sha256=hashlib.sha256(rgb).hexdigest(),annotation_sha256=m['annotation_sha256'],source_reconstruction_max_mm=err,independent_3d_reference=False,crop_native_xyxy=list(box),target_in_frame=True,native_hw=list(im.shape[:2]),mesh_pixels=pixels)
44
+ return full,raw.crop(box),ov.crop(box),ev
45
+
46
+ @functools.lru_cache(10)
47
+ def reinter_joints(path):
48
+ z=np.load(path);return {int(f):j for f,j in zip(z['frames'],z['joints_mm'])}
49
+ def joint_pair(im,uv,mask,evidence):
50
+ ov=im.copy();mask=mask & np.isfinite(uv).all(-1)&(uv[:,0]>=0)&(uv[:,0]<im.shape[1])&(uv[:,1]>=0)&(uv[:,1]<im.shape[0]);assert mask.sum()>=12,'too few target joints in frame'
51
+ for k in range(1,21):
52
+ parent=int(PARENTS[k]);color=COLOR[(k-1)//4]
53
+ if mask[k] and mask[parent]:cv2.line(ov,tuple(np.rint(uv[parent]).astype(int)),tuple(np.rint(uv[k]).astype(int)),color,max(2,round(im.shape[0]/500)),cv2.LINE_AA)
54
+ for k in np.flatnonzero(mask):cv2.circle(ov,tuple(np.rint(uv[k]).astype(int)),max(2,round(im.shape[0]/500)),(255,255,255),-1,cv2.LINE_AA)
55
+ box,ok=legacy.renderer.bbox(uv[mask],im.shape[:2]);assert ok
56
+ raw=Image.fromarray(im[...,::-1]);over=Image.fromarray(ov[...,::-1]);full=Image.new('RGB',(raw.width*2,raw.height));full.paste(raw);full.paste(over,(raw.width,0))
57
+ evidence.update(crop_native_xyxy=list(box),target_in_frame=True,native_hw=list(im.shape[:2]),joints_drawn=int(mask.sum()))
58
+ return full,raw.crop(box),over.crop(box),evidence
59
+
60
+ @functools.lru_cache(1)
61
+ def reinter_index():return read(ROOT/'manifests/reinter_rgb.json')
62
+ def reinter_image(m):
63
+ for item in reinter_index().get(m['id'],[]):
64
+ camera=read(item['camera_file'])[item['camera']];j=reinter_joints(m['annotation_path'])[m['frame']][['left','right'].index(m['hand']),m['source_joint_mapping_24_to_21']]
65
+ xyz=j@np.asarray(camera['R']).T+np.asarray(camera['t']);f=np.asarray(camera['focal']);pp=np.asarray(camera['princpt']);uv=xyz[:,:2]/xyz[:,2:]*f+pp;K=np.array([[f[0],0,pp[0]],[0,f[1],pp[1]],[0,0,1.]])
66
+ check=cv2.projectPoints(xyz,np.zeros(3),np.zeros(3),K,np.zeros(5))[0][:,0];assert abs(check-uv).max()<1e-5
67
+ im=cv2.imread(item['path']);assert im is not None and sha(item['path'])==item['image_sha256']
68
+ e=dict(camera='official Mugsy camera R*X+t, native image pixels, no additional distortion by source renderer',K=K.tolist(),camera_id=item['camera'],camera_sha256=item['camera_sha256'],source_rgb_sha256=item['image_sha256'],source_rgb_member=item['member'],annotation_sha256=m['annotation_sha256'],projection_crosscheck_max_px=float(abs(check-uv).max()),label='official original-fit renderer3D joints; no MANO fit',joint_visibility_independent=False)
69
+ try:return joint_pair(im,uv,xyz[:,2]>0,e)
70
+ except AssertionError:continue
71
+ raise ValueError('No readable selected ReInterHand view')
72
+
73
+ @functools.lru_cache(1)
74
+ def ih_index():return read(ROOT/'manifests/interhand_rgb.json')
75
+ @functools.lru_cache(1)
76
+ def existing():
77
+ result={}
78
+ for p in (REF/'audit/media').glob('*.json'):
79
+ if p.name.endswith('_acquisition.json'):continue
80
+ r=read(p)
81
+ if r.get('assets') and all((REF/'site'/v).exists() for v in r['assets'].values()):result[r['id']]=r
82
+ return result
83
+
84
+ def paired(m):
85
+ if m['id'] in existing():return True
86
+ if m['source'] in ['wilor_rhd','wilor_freihand']:return local_image(m) is not None
87
+ if m['source']=='wilor_interhand26m':return m['id'] in ih_index()
88
+ if m['source']=='wilor_reinter':return m['id'] in reinter_index()
89
+ if m['source']=='wilor_mtc':
90
+ c=legacy.extras().get((m['source'],str(m.get('subject')),int(m['frame']),m['hand']))
91
+ return c is not None and c['recording']==m['sequence']
92
+ return True
93
+
94
+ def local_image(m):
95
+ src=m['source'];rel=f"training/rgb/{m['frame']:08d}.jpg" if src=='wilor_freihand' else f"RHD_published_v2/training/color/{m['frame']:05d}.png"
96
+ paths=[root/'sources'/src/rel for root in [ROOT,Path('/SSD3/yangzijing/Hand_pose_recluster_distinct_20261014'),REF,OLD]]
97
+ paths.append(legacy.OLD/'sources'/('FREIHAND' if src=='wilor_freihand' else 'RHD')/rel)
98
+ return next((p for p in paths if p.exists()),None)
99
+
100
+ def save(m):
101
+ p=ROOT/'audit/media'/f"{m['id']}.json"
102
+ if p.exists():return read(p)
103
+ if m['id'] in existing():
104
+ old=existing()[m['id']];r=dict(old);r['reused_from']=str(REF);r['assets']={}
105
+ for kind,rel in old['assets'].items():
106
+ dst=ROOT/'site/media'/Path(rel).name;shutil.copyfile(REF/'site'/rel,dst);r['assets'][kind]='media/'+dst.name
107
+ write(p,r);return r
108
+ if m['source'] in ['wilor_ho3d','wilor_h2o3d']:full,raw,ov,e=ho_image(m)
109
+ elif m['source']=='wilor_reinter':full,raw,ov,e=reinter_image(m)
110
+ elif m['source'] in ['wilor_rhd','wilor_freihand']:
111
+ mm=dict(m);mm['image_path']=str(local_image(m));assert local_image(m) is not None
112
+ if m['source']=='wilor_freihand':
113
+ K,t,j=legacy.fh_arrays();_,jj,_=legacy.freihand_decode(t[m['frame']],K[m['frame']]);mm['native_joint_mean_error_mm']=float(np.linalg.norm(jj[0]-j[m['frame']],axis=-1).mean()*1000)
114
+ full,raw,ov,e=legacy.renderer.native(mm)
115
+ else:full,raw,ov,e=legacy.image_for(m)
116
+ assert e.get('target_in_frame') and raw.size==ov.size and min(raw.size)>=24,'target not readable'
117
+ change=np.abs(np.asarray(raw,dtype=float)-np.asarray(ov,dtype=float)).max(-1)>14;assert change.sum()>=12,'overlay absent at target'
118
+ nonblack=float((np.asarray(raw).max(-1)[change]>15).mean());assert nonblack>=.55,'projection mainly black padding'
119
+ if 'in_frame_vertices_per_hand' in e:assert e['in_frame_vertices_per_hand'][['left','right'].index(m['hand'])]>=500,'target mostly out of image'
120
+ pair=Image.new('RGB',(raw.width*2,raw.height));pair.paste(raw);pair.paste(ov,(raw.width,0));assets={}
121
+ for kind,im in [('full',full),('crop',pair)]:
122
+ dest=ROOT/'site/media'/f"{m['id']}_{kind}.jpg";im.save(dest,quality=90);assets[kind]='media/'+dest.name
123
+ label='EgoRenderer Ver.005 既有拟合 MANO' if m['source']=='synthetic' else ('来源 GT 关节投影' if m['source'] in ['wilor_reinter','wilor_interhand26m','wilor_mtc','wilor_rhd'] else '来源拟合 MANO')
124
+ r=dict(id=m['id'],assets=assets,evidence=e,label=label,gt_status='证据不足',legibility=dict(changed_pixels=int(change.sum()),non_black_GT_pixel_fraction=nonblack),sha256={v:sha(ROOT/'site'/v) for v in assets.values()})
125
+ write(p,r);return r
126
+
127
+ def setup():
128
+ p=ROOT/'manifests/interhand_rgb.json'
129
+ if not p.exists():
130
+ data=read(REF/'manifests/interhand_rgb.json')
131
+ (ROOT/'sources/interhand_rgb').mkdir(exist_ok=True)
132
+ for sid,x in data.items():
133
+ if not Path(x['path']).exists():x['path']=str(ROOT/'sources/interhand_rgb'/f'{sid}.jpg')
134
+ write(p,data)
135
+
136
+ def main(group,level_arg=None):
137
+ setup();rows,b=load(group);result={};failures=[];failed=set();dest=ROOT/'metrics'/f'{group}_visuals.json'
138
+ exclusions=ROOT/'audit/visual_review_exclusions.json'
139
+ if exclusions.exists():failed.update(read(exclusions))
140
+ preference_path=ROOT/'manifests/visual_review_preferences.json'
141
+ preferences=read(preference_path) if preference_path.exists() else {}
142
+ if dest.exists():result=read(dest)
143
+ for side in ['left','right']:
144
+ model=read(ROOT/'metrics'/f'{group}_{side}.json');a=np.load(ROOT/'cache'/f'{group}_{side}_assignments.npz');ix=a['indices']
145
+ for level in ([level_arg] if level_arg else ['main','fine']):
146
+ label=np.load(ROOT/'cache'/f'{group}_{side}_distinct_assignments.npz')['distinct'] if level=='distinct' else a[level]
147
+ for c in model[level]:
148
+ if c['key'] in result:continue
149
+ ids=ix[label==c['label']];distance=angular(b[[c['prototype_index']]],b[ids])[0];order=np.argsort(distance,kind='stable');picked=[];units=set()
150
+ if c['key'] in preferences:
151
+ preferred=preferences[c['key']]['sample_ids'];positions={rows[int(i)]['id']:pos for pos,i in enumerate(ids)}
152
+ assert all(sid in positions for sid in preferred),'Visual preference must stay in the actual GT class'
153
+ lead=[positions[sid] for sid in preferred];order=np.array(lead+[int(p) for p in order if int(p) not in lead])
154
+ for pos in order:
155
+ i=int(ids[pos]);m=rows[i]
156
+ if m['id'] in failed or m['independent_unit'] in units or not paired(m):continue
157
+ try:r=save(m)
158
+ except Exception as e:
159
+ failures.append(dict(key=c['key'],id=m['id'],source=m['source'],error=type(e).__name__+': '+str(e)[:220]));failed.add(m['id']);write(ROOT/'audit'/f'{group}_media_failures.json',failures);continue
160
+ picked.append(dict(index=i,id=m['id'],source=m['source'],recording=m['recording'],frame=m['frame'],hand=m['hand'],label_type=m['label_type'],prototype_distance_deg=float(distance[pos]),is_prototype=i==c['prototype_index'],joints=standard(b[i]),media=r));units.add(m['independent_unit'])
161
+ if len(picked)>=2:break
162
+ assert picked,(c['key'],'No same-cluster paired image')
163
+ result[c['key']]=picked;write(dest,result);print('VISUAL',c['key'],[(p['source'],round(p['prototype_distance_deg'],2)) for p in picked],flush=True)
164
+ write(ROOT/'audit'/f'{group}_media_failures.json',failures)
165
+
166
+ if __name__=='__main__':main(*sys.argv[1:])
pose_recluster_distinct_20261014/downloads/coverage/code/web/app.js ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ const D=window.AUDIT_DATA;
2
+ // Retry transient failures on the image CDN while keeping permanent source URLs.
3
+ document.addEventListener('error',e=>{const im=e.target;if(im?.tagName!=='IMG')return;const n=Number(im.dataset.networkRetry||0);if(n<2){im.dataset.networkRetry=String(n+1);setTimeout(()=>{if(im.isConnected)im.src=im.getAttribute('src')},600*(n+1))}},true);
4
+ const $=s=>document.querySelector(s), nf=n=>Number(n).toLocaleString('en-US'), esc=s=>String(s??'').replace(/[&<>"']/g,c=>({'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;',"'":'&#39;'}[c]));
5
+ let hand='right',level='distinct',view='oblique',tab='overview',poseSerial=0,activeDetail='',coverageFilter='all',coverageSort='gap';
6
+ const colors=['#b8852f','#39896e','#437eb0','#9061ab','#c66e70'];
7
+ const poses=new Map(), allClasses={};
8
+ Object.values(D.models).forEach(m=>['fine','distinct'].forEach(l=>m[l].forEach(c=>allClasses[c.key]=c)));
9
+ const model=g=>D.models[g+'_'+hand], cname=s=>D.names[s]||s;
10
+ function poseCanvas(joints,label='',overlay=null){const id='pose'+poseSerial++;poses.set(id,{joints,overlay,rot:[0,0],label});return `<canvas class="pose" id="${id}" aria-label="${esc(label)},可拖动旋转"></canvas>`}
11
+ function drawPose(canvas,p){
12
+ const ratio=Math.min(devicePixelRatio||1,2),w=canvas.clientWidth||300,h=canvas.clientHeight||170;canvas.width=w*ratio;canvas.height=h*ratio;const ctx=canvas.getContext('2d');ctx.scale(ratio,ratio);ctx.clearRect(0,0,w,h);
13
+ let base=view==='palm'?[0,0]:view==='side'?[Math.PI/2,0]:[.48,-.16],a=base[0]+p.rot[0],b=base[1]+p.rot[1];
14
+ function project(j){let [x,y,z]=j;const xx=x*Math.cos(a)+z*Math.sin(a),zz=-x*Math.sin(a)+z*Math.cos(a);return [xx,y*Math.cos(b)-zz*Math.sin(b),y*Math.sin(b)+zz*Math.cos(b)]}
15
+ const pts=p.joints.map(project),other=p.overlay?.map(project),all=other?pts.concat(other):pts;let x0=Math.min(...all.map(v=>v[0])),x1=Math.max(...all.map(v=>v[0])),y0=Math.min(...all.map(v=>v[1])),y1=Math.max(...all.map(v=>v[1]));let scale=Math.min((w-45)/Math.max(x1-x0,.7),(h-40)/Math.max(y1-y0,.8));
16
+ const screen=q=>[w/2+(q[0]-(x0+x1)/2)*scale,h/2-(q[1]-(y0+y1)/2)*scale+3];
17
+ function handdraw(j,faded){ctx.globalAlpha=faded?.35:1;for(let f=0;f<5;f++){const ids=[0,f*4+1,f*4+2,f*4+3,f*4+4];ctx.strokeStyle=faded?'#7b8492':colors[f];ctx.fillStyle=ctx.strokeStyle;ctx.lineWidth=faded?2:3.2;ctx.beginPath();ids.forEach((id,k)=>{const q=screen(j[id]);k?ctx.lineTo(...q):ctx.moveTo(...q)});ctx.stroke();ids.slice(1).forEach(id=>{const q=screen(j[id]);ctx.beginPath();ctx.arc(...q,2.6,0,Math.PI*2);ctx.fill()})}ctx.globalAlpha=1}
18
+ if(other)handdraw(other,true);handdraw(pts,false);ctx.fillStyle='#7e8b99';ctx.font='10px system-ui';ctx.fillText(p.label,9,14);
19
+ }
20
+ function wirePoses(){document.querySelectorAll('canvas.pose').forEach(c=>{const p=poses.get(c.id);if(!p)return;drawPose(c,p);let drag=null;c.onpointerdown=e=>{drag=[e.clientX,e.clientY];c.setPointerCapture(e.pointerId)};c.onpointermove=e=>{if(!drag)return;p.rot[0]+=(e.clientX-drag[0])*.012;p.rot[1]+=(e.clientY-drag[1])*.012;drag=[e.clientX,e.clientY];drawPose(c,p)};c.onpointerup=()=>drag=null;})}
21
+ const pct=x=>(100*x).toFixed(1)+'%';
22
+ function coverageBar(v,compact=false){if(!v)return '';return `<div class="coverage-breakdown ${compact?'compact':''}"><div class="coverage-bar" role="img" aria-label="已覆盖 ${pct(v.covered_fraction)},低覆盖 ${pct(v.low_fraction)},未覆盖 ${pct(v.uncovered_fraction)}"><span class="covered" style="width:${v.covered_fraction*100}%"></span><span class="low" style="width:${v.low_fraction*100}%"></span><span class="uncovered" style="width:${v.uncovered_fraction*100}%"></span></div><div class="coverage-values"><span class="covered-text">已覆盖 ${pct(v.covered_fraction)}</span><span class="low-text">低覆盖 ${pct(v.low_fraction)}</span><span class="uncovered-text">未覆盖 ${pct(v.uncovered_fraction)}</span></div>${compact?'':`<p class="metric">分母 ${nf(v.n)} 个实际分析手帧:${nf(v.covered)} 已覆盖 / ${nf(v.low)} 低覆盖 / ${nf(v.uncovered)} 未覆盖。</p>`}</div>`}
23
+ function classBadge(c){const v=c.coverage;if(!v)return '';const label=v.status==='uncovered'?'整类未覆盖':v.status==='covered'?'≥90% 已覆盖':'部分覆盖';return `<span class="coverage-badge ${v.status}" title="以逐成员比例为准;整类未覆盖要求所有成员都没有相似参照。">${label}</span>`}
24
+ function filteredExternal(){return [...model('external')[level]].filter(c=>coverageFilter==='all'||coverageFilter==='entire'&&c.coverage.uncovered===c.n||coverageFilter==='mostly_gap'&&c.coverage.uncovered_fraction>=.5||coverageFilter==='mostly_covered'&&c.coverage.covered_fraction>=.7).sort((a,b)=>coverageSort==='id'?a.number-b.number:coverageSort==='covered'?b.coverage.covered_fraction-a.coverage.covered_fraction:b.coverage.uncovered_fraction-a.coverage.uncovered_fraction)}
25
+ function renderCoverage(){const v=D.coverage.summary[hand],cal=D.coverage.calibration[hand],cs=model('external')[level],entire=cs.filter(c=>c.coverage.status==='uncovered').length;$('#coverageSummary').innerHTML=`<div class="coverage-summary">${coverageBar(v,true)}<span class="metric">${hand==='left'?'左':'右'}手 ${nf(v.n)} 个外部手帧 · ${cs.length} 类中 ${entire} 类整类未覆盖 · 相似阈值 ${cal.thresholds_deg.q95.toFixed(2)}°</span></div>`;
26
+ const sens=D.coverage.sensitivity.filter(x=>x.key==='external_'+hand&&['q90','q95','q99'].includes(x.threshold));$('#coverageMethodBody').innerHTML=`<p class="hint">距离使用来源 GT 的 20 根 3D 骨方向,在掌部坐标系中计算平均夹角,去除手腕整体运动和骨长差异;左右手分开。不是 2D 图上距离,也不是 MANO 参数直接相减。</p><p class="hint">参照:H2O+ARCTIC+HOT3D+EgoRenderer Ver.005,共 271,543 手帧;本侧 ${nf(cal.reference_n)} 手帧、${nf(cal.reference_units)} 段独立录制/源动作。用本侧 4,096 个内部留出样本校准,检索时排除同录制全部帧;四源及各录制均衡加权,取最近距离的 95% 分位。每个外部成员穷举检索全部同侧参照。</p><table><thead><tr><th>校准分位</th><th>阈值</th><th>已覆盖</th><th>低覆盖</th><th>未覆盖</th></tr></thead><tbody>${sens.map(x=>`<tr><td>${x.threshold==='q95'?'95%(本页)':x.threshold.slice(1)+'%'}</td><td>${x.threshold_deg.toFixed(2)}°</td><td>${pct(x.covered_fraction)}</td><td>${pct(x.low_fraction)}</td><td>${pct(x.uncovered_fraction)}</td></tr>`).join('')}</tbody></table><p class="hint">类标签:≥90% 成员已覆盖才标“≥90% 已覆盖”;所有成员无近邻才标“整类未覆盖”;其余标“部分覆盖”。90% 是显示约定,完整比例始终保留。统计分母是本轮分析样本,不是 WiLoR 官方全量;2D 来源不作 3D 覆盖判断。我们参照使用已核对训练成员的来源 GT,最终 canonical 标签和 loss mask 尚未验收。</p>`}
27
+ function memberBadge(s){const v=s.coverage;if(!v)return '';return `<p class="sample-coverage"><span class="coverage-badge ${v.status}">${{covered:'已覆盖',low:'低覆盖',uncovered:'抽样库未覆盖'}[v.status]}</span> 最近距离 ${v.distance_deg.toFixed(2)}° / 阈值 ${v.threshold_deg.toFixed(2)}° · ${nf(v.support_recordings)} 段相似参照录制</p>`}
28
+ function gapBlock(v){const s=D.samples[v.id],n=v.nearest;return `<article class="gap-case"><h3>未覆盖成员 · ${esc(cname(s.source))} · ${s.hand==='left'?'左手':'右手'} · 帧 ${s.frame}</h3><p class="evidence">${esc(s.recording)} · ${esc(s.label)} · 距该类原型 ${v.prototype_distance_deg.toFixed(2)}°</p>${memberBadge(s)}<div class="pair"><div><h4>外部实际成员</h4>${poseCanvas(v.joints,'该未覆盖成员的 GT 姿态')}<a href="${s.assets.full}" target="_blank"><img class="gap-image" src="${s.assets.crop}" loading="lazy" alt="外部未覆盖成员:原图与 GT 叠加"></a><p class="metric">原图 | GT 叠加 · 点击看完整原画面</p></div><div><h4>我们库中的精确最近邻</h4>${poseCanvas(n.joints,'该成员的精确最近 GT 姿态')}${n.media?`<a href="${n.media.assets.full}" target="_blank"><img class="gap-image" src="${n.media.assets.crop}" loading="lazy" alt="精确最近邻:原图与 GT 叠加"></a><p class="metric">原图 | GT 叠加 · 点击看完整原画面</p>`:'<p class="warning">这个精确最近邻未通过原图可读性检查,保留其 GT 骨架;没有用其他样本替代。</p>'}<p class="evidence">${esc(cname(n.source))} · ${esc(n.recording)} · 帧 ${n.frame} · ${n.hand==='left'?'左':'右'}手</p></div></div><details><summary>相机与 GT 证据</summary><p class="evidence">外部:${esc(s.camera)}。${esc(s.gt_status)}</p><p class="evidence">最近邻:${esc(n.media?.evidence?.camera??n.media_missing_reason)}。图像叠加仅供核查,覆盖距离不构成 GT 可靠性结论。</p></details></article>`}
29
+ function related(c){return D.pairs.some(p=>p.related && p.group===c.key.split('_')[0]&&p.hand===hand&&(p.a===c.id||p.b===c.id))}
30
+ function card(c){const v=c.examples[0],s=D.samples[v.id];return `<article class="card" data-key="${c.key}"><div class="card-head"><h3>${c.id}</h3><span>${classBadge(c)}${related(c)&&level==='distinct'?'<span class="badge">有相近类</span>':''}</span></div><div class="card-meta">${nf(c.n)} 手帧 · ${Object.keys(c.sources).length} 来源</div>${c.coverage?coverageBar(c.coverage,true):''}${poseCanvas(c.joints,'GT 类原型')}<img src="${s.assets.crop}" alt="${esc(cname(s.source))} 原图与 GT 叠加" loading="lazy"><div class="card-foot">${esc(cname(s.source))} · ${v.is_prototype?'原型本人':`同类图例,距原型 ${v.prototype_distance_deg.toFixed(1)}°`}</div><button class="open" data-open="${c.key}">${c.coverage?'未覆盖成员 / 原图 / 近邻':'原图 / GT 叠加 / 近邻'}</button></article>`}
31
+ function countTable(){const rows=['ours','external'].map(g=>{const m=model(g);return `<tr><td class="${g}">${g==='ours'?'我们三源+合成':'WiLoR 外部 3D 来源'}</td><td>${nf(m.n)}</td><td>${m[level].length}</td><td>${m.fine.length-m.distinct.length}</td></tr>`}).join('');$('#countTable').innerHTML=`<table><thead><tr><th>组别 · ${hand==='left'?'左手':'右手'}</th><th>参与手帧</th><th>当前类数</th><th>合并减少细类数</th></tr></thead><tbody>${rows}</tbody></table>`}
32
+ function renderOverview(){countTable();for(const g of ['ours','external']){const cs=g==='external'?filteredExternal():model(g)[level];$('#'+g+'Cards').innerHTML=cs.map(card).join('')||'<p class="hint">当前筛选没有类别。</p>';$('#'+g+'Count').textContent=`${cs.length} / ${model(g)[level].length} 类`}scatter()}
33
+ function pairTile(c){const s=D.samples[c.examples[0].id];return `<div><h3><a data-open="${c.key}">${c.id} · ${esc(cname(c.prototype.source))}</a></h3>${poseCanvas(c.joints,'GT 类原型')}<img src="${s.assets.crop}" loading="lazy" alt="同类 RGB 与 GT 图例"><p class="metric">图例 ${esc(cname(s.source))} · 距原型 ${c.examples[0].prototype_distance_deg.toFixed(1)}°</p></div>`}
34
+ function renderCompare(){const sorted=filteredExternal();$('#comparisonRows').innerHTML=sorted.map(c=>{const n=c.nearest_reference,a=allClasses[n.nearest_our_key];return `<div class="row"><div class="row-title"><strong>我们 ${a.id} ↔ 外部 ${c.id}</strong>${classBadge(c)}</div>${coverageBar(c.coverage)}<div class="pair">${pairTile(a)}${pairTile(c)}</div><p class="metric">类原型差 ${n.class_prototype_mean_deg.toFixed(1)}° · 外部原型最近参照 ${n.mean_deg.toFixed(1)}°(原型示意;覆盖统计来自全类成员)</p><button data-open="${c.key}">看该类未覆盖成员、原图与精确最近邻</button></div>`}).join('')||'<p class="hint">当前筛选没有类别。</p>'}
35
+ function renderSimilar(){const summaries=D.summary.filter(s=>s.hand===hand);$('#duplicateSummary').innerHTML=`<table><thead><tr><th>组别</th><th>32 细类中的相近对</th><th>合并后相近对</th><th>主视图类数</th></tr></thead><tbody>${summaries.map(s=>`<tr><td>${s.group==='ours'?'我们':'外部'}</td><td>${s.stages.fine.near_pairs}</td><td>${s.stages.distinct.near_pairs}</td><td>${s.stages.distinct.k}</td></tr>`).join('')}</tbody></table><p class="hint">“相近”按原型或数值中心的 20 骨平均夹角 ≤12°,且每根手指平均夹角 ≤20° 判断;这是本页查看粒度,不是通用手势标准。</p>`;
36
+ const pp=D.pairs.filter(p=>p.hand===hand&&p.related);$('#relatedPairs').innerHTML=pp.map(p=>{const a=allClasses[`${p.group}_${hand}_distinct_${p.a}`],b=allClasses[`${p.group}_${hand}_distinct_${p.b}`];return `<div class="row"><strong>${p.group==='ours'?'我们':'外部'} ${p.a} / ${p.b}</strong><div class="finger-values">${p.finger_deg.map((v,i)=>`${['拇','食','中','环','小'][i]}指 ${v.toFixed(1)}°`).join(' · ')}</div><div class="pair">${pairTile(a)}${pairTile(b)}</div><p class="metric">原型整体 ${p.mean_deg.toFixed(1)}° · 跨录制近邻更靠近另一类的比例 ${(100*p.member_diagnostic.cross_cluster_closer_fraction).toFixed(1)}%</p></div>`}).join('')||'<p class="hint">本侧没有满足判据的剩余相近类对。</p>';
37
+ $('#mergeRows').innerHTML=D.merges.filter(m=>m.hand===hand).map(m=>`<div class="row"><div class="row-title"><strong>${m.group==='ours'?'我们':'外部'}:${m.children.join(' + ')} → 主类 ${m.cluster}</strong><span class="metric">${nf(m.n)} 手帧</span></div><div class="children">${m.child_keys.map(k=>{const c=allClasses[k];return `<div class="child"><a data-open="${k}">${c.id} · 细类</a>${poseCanvas(c.joints,'GT 原型')}</div>`}).join('')}</div></div>`).join('')}
38
+ function renderSources(){$('#sourceTable').innerHTML='<thead><tr><th>来源组</th><th>数据集 / 可视化</th><th>实际参与手帧</th><th>版本与范围</th><th>本轮用途</th><th>对参照库覆盖</th></tr></thead><tbody>'+D.sources.map(s=>`<tr><td>${s.group}</td><td><button class="source-button" data-source="${s.id}">${esc(s.name)}</button></td><td>${nf(s.cluster_n||0)}</td><td>${esc(s.scope)}</td><td>${esc(s.role)}</td><td>${D.coverage.sources[s.id]?coverageBar(D.coverage.sources[s.id],true):s.group==='我们'?'参照库':s.gallery_source?'与参照重叠,不单计':'不作 3D 判断'}</td></tr>`).join('')+'</tbody>'}
39
+ function sampleBlock(s,v){return `<section class="example">${memberBadge(s)}<h3>${esc(cname(s.source))} · ${esc(s.hand)} · 帧 ${esc(s.frame??'—')}</h3><p class="evidence">${esc(s.recording??s.split??'')} · ${esc(s.label)}${v?` · 距类原型 ${v.prototype_distance_deg.toFixed(2)}°`:''}</p><a href="${s.assets.full}" target="_blank"><img class="detail-pair" src="${s.assets.full}" alt="原图与对应 GT 叠加"></a><p class="evidence">${esc(s.camera??s.note??'')} · ${esc(s.gt_status??'仅可核查相应标注,不参与3D聚类')}</p></section>`}
40
+ function openClass(key){const c=allClasses[key],g=key.split('_')[0];let head=`<h2>${g==='ours'?'我们':'外部'} · ${key.includes('_left_')?'左手':'右手'} · ${c.id}${key.includes('_fine_')?'(细类)':''}</h2><p class="evidence">原型:${esc(cname(c.prototype.source))} · ${esc(c.prototype.recording)} · 帧 ${c.prototype.frame}。${nf(c.n)} 个成员。</p>`;
41
+ head+=c.coverage?classBadge(c)+coverageBar(c.coverage):'';
42
+ let top=`<div class="dialog-top"><div>${poseCanvas(c.joints,'精确 GT 类原型')}<p class="hint">统一掌部坐标与骨长,仅用于姿态比较。</p></div>`;
43
+ if(c.nearest_reference){const n=c.nearest_reference;top+=`<div>${poseCanvas(n.nearest_joints,'全部参照库中的最近 GT 样本')}<p class="metric">对全部同侧三源+合成样本检索:${n.mean_deg.toFixed(2)}°。不使用散点图距离。</p></div>`}else top+=`<div><h3>来源组成</h3>${Object.entries(c.sources).sort((a,b)=>b[1]-a[1]).map(([s,n])=>`<p class="metric">${esc(cname(s))}:${nf(n)}</p>`).join('')}</div>`;
44
+ top+='</div>';
45
+ let note=c.examples[0].prototype_distance_deg>8?'<p class="warning">当前可读 RGB 图例与类原型仍有较大差别。上方骨架才是精确原型;下面图片保留实际成员身份与距离。</p>':'';
46
+ const gaps=D.coverage.examples[key]||[],gapIds=new Set(gaps.map(v=>v.id)),other=c.examples.filter(v=>!gapIds.has(v.id));
47
+ $('#detailBody').innerHTML=head+(c.coverage?'<details class="prototype-details"><summary>类原型与其最近邻</summary>'+top+note+'</details>':top+note)+(gaps.length?'<h3 class="gap-title">本类实际未覆盖成员</h3>'+gaps.map(gapBlock).join(''):'')+(other.length?'<h3>其他同类成员</h3>'+other.map(v=>sampleBlock(D.samples[v.id],v)).join(''):'');if(!$('#detail').open)$('#detail').showModal();wirePoses();activeDetail='class='+encodeURIComponent(key);location.hash=activeDetail}
48
+ function openSource(src){const s=D.sources.find(x=>x.id===src),target=s.gallery_source||src,ids=D.gallery[target]||[],two=D.two_d[src]||[];let body=`<h2>${esc(s.name)} · ${esc(s.group)}</h2><p>${esc(s.scope)}</p>`;
49
+ if(D.coverage.sources[src])body+=coverageBar(D.coverage.sources[src]);
50
+ if(two.length)body+=two.map(v=>sampleBlock(v,null)).join('');
51
+ else if(ids.length){body+='<p class="hint">以下图例均属于本轮冻结成员;点击原图可放大。手侧保留逐样本标记。</p>';body+=ids.slice(0,20).map(id=>sampleBlock(D.samples[id],null)).join('')}
52
+ else body+=`<p class="warning">${src==='wilor_bedlam'?'按用户要求跳过,本轮没有读取或聚类。':'当前聚类使用该源 GT;本页未选到该源配对图例。'}</p>`;
53
+ $('#detailBody').innerHTML=body;if(!$('#detail').open)$('#detail').showModal();activeDetail='source='+encodeURIComponent(src);location.hash=activeDetail}
54
+ function scatter(){const c=$('#scatter'),ctx=c.getContext('2d');ctx.clearRect(0,0,c.width,c.height);const all=['ours','external'].flatMap(g=>model(g)[level].map(x=>({...x,g})));let xx=all.map(c=>c.display_xy[0]),yy=all.map(c=>c.display_xy[1]),xmin=Math.min(...xx),xmax=Math.max(...xx),ymin=Math.min(...yy),ymax=Math.max(...yy);const points=[];for(const p of all){let x=45+(p.display_xy[0]-xmin)/(xmax-xmin)*1000,y=400-(p.display_xy[1]-ymin)/(ymax-ymin)*350;ctx.fillStyle=p.g==='ours'?'#276a9c':'#79569d';ctx.beginPath();ctx.arc(x,y,6,0,Math.PI*2);ctx.fill();ctx.fillText(p.id,x+8,y+4);points.push({x,y,key:p.key})}c.onclick=e=>{const r=c.getBoundingClientRect(),x=(e.clientX-r.left)*c.width/r.width,y=(e.clientY-r.top)*c.height/r.height;const hit=points.find(p=>Math.hypot(x-p.x,y-p.y)<15);if(hit)openClass(hit.key)}}
55
+ function render(){poses.clear();renderCoverage();if(tab==='overview')renderOverview();if(tab==='compare')renderCompare();if(tab==='similar')renderSimilar();if(tab==='sources')renderSources();wirePoses()}
56
+ function changeTab(t){tab=t;document.querySelectorAll('.tab').forEach(e=>e.hidden=e.id!==t);document.querySelectorAll('nav button').forEach(e=>e.classList.toggle('active',e.dataset.tab===t));render()}
57
+ document.addEventListener('click',e=>{const open=e.target.closest('[data-open]'),source=e.target.closest('[data-source]'),tb=e.target.closest('[data-tab]');if(open){e.preventDefault();openClass(open.dataset.open)}if(source)openSource(source.dataset.source);if(tb)changeTab(tb.dataset.tab)});
58
+ $('#coverageFilter').onchange=e=>{coverageFilter=e.target.value;render()};$('#coverageSort').onchange=e=>{coverageSort=e.target.value;render()};
59
+ $('#hand').onchange=e=>{hand=e.target.value;render()};$('#level').onchange=e=>{level=e.target.value;render()};$('#view').onchange=e=>{view=e.target.value;wirePoses()};$('#reset').onclick=()=>{poses.forEach(p=>p.rot=[0,0]);wirePoses()};$('#closeDetail').onclick=()=>$('#detail').close();$('#detail').addEventListener('close',()=>{activeDetail='';history.replaceState(null,'',location.pathname+location.search)});window.addEventListener('resize',()=>wirePoses());
60
+ function restoreHash(){const hash=location.hash.slice(1);if(hash===activeDetail)return;const initial=new URLSearchParams(hash);if(initial.has('class')&&allClasses[initial.get('class')])openClass(initial.get('class'));else if(initial.has('source')&&D.sources.some(s=>s.id===initial.get('source')))openSource(initial.get('source'));else if(!hash&&$('#detail').open)$('#detail').close()}
61
+ window.addEventListener('hashchange',restoreHash);render();restoreHash();
pose_recluster_distinct_20261014/downloads/coverage/code/web/index.html ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!doctype html>
2
+ <html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>最新抽样 · 局部姿态聚类对比</title><link rel="stylesheet" href="style.coverage_v2.css"></head>
3
+ <body>
4
+ <header><h1>局部姿态聚类对比 <small>逐成员覆盖 · 2026.10.14</small></h1><div class="toolbar"><label>手侧 <select id="hand"><option value="right">右手</option><option value="left">左手</option></select></label><label>粒度 <select id="level"><option value="distinct">合并相近类后</option><option value="fine">32 个细类</option></select></label><label>骨架视角 <select id="view"><option value="oblique">斜看</option><option value="palm">掌面</option><option value="side">侧面</option></select></label><button id="reset">重置视角</button></div></header>
5
+ <nav><button data-tab="overview" class="active">两组类别</button><button data-tab="compare">逐类比较</button><button data-tab="similar">相似与合并</button><button data-tab="sources">18 行来源表</button></nav>
6
+ <main>
7
+ <section class="coverage-panel" aria-label="外部姿态覆盖"><div class="coverage-controls"><strong>WiLoR 外部类 → 我们三源+合成</strong><label>外部类筛选 <select id="coverageFilter"><option value="all">全部</option><option value="entire">整类未覆盖</option><option value="mostly_gap">未覆盖成员 ≥50%</option><option value="mostly_covered">已覆盖成员 ≥70%</option></select></label><label>排序 <select id="coverageSort"><option value="gap">未覆盖比例高 → 低</option><option value="covered">已覆盖比例高 → 低</option><option value="id">类别编号</option></select></label></div><div id="coverageSummary"></div><p class="coverage-legend"><span class="dot covered"></span>已覆盖:≥3 段独立录制有相似姿态 <span class="dot low"></span>低覆盖:只有 1–2 段 <span class="dot uncovered"></span>未覆盖:没有相似姿态</p><p class="hint">均指本次抽样库。类别内逐成员统计;未覆盖不等于 GT 可靠,也不等于全量训练集绝对缺失。</p><details id="coverageMethod"><summary>判定依据与阈值敏感性</summary><div id="coverageMethodBody"></div></details></section>
8
+ <div id="overview" class="tab"><div id="countTable"></div><p class="hint">点击外部类的“未覆盖成员 / 原图 / 近邻”查看具体缺口。骨架可拖动旋转;A、B 编号各自独立。</p><div class="two-groups"><section><h2 class="ours">我们:三源+EgoRenderer Ver.005 <span id="oursCount"></span></h2><div id="oursCards" class="cards"></div></section><section><h2 class="external">外部:WiLoR 可读 3D 来源 <span id="externalCount"></span></h2><div id="externalCards" class="cards"></div></section></div><details><summary>类别分布图(仅展示)</summary><p class="hint">同一掌部坐标和投影;图上距离不作为覆盖或合并依据。</p><canvas id="scatter" width="1100" height="450"></canvas></details></div>
9
+ <div id="compare" class="tab" hidden><p class="hint">右边是外部类;左边是它最相近的我们类。覆盖条来自该类全部成员;点击外部类查看未覆盖成员与各自的精确最近邻。</p><div id="comparisonRows"></div></div>
10
+ <div id="similar" class="tab" hidden><div id="duplicateSummary"></div><h2>仍然相近的类</h2><p class="hint">下列类的中心相近,但继续整类合并会把部分差异较大的手指形态连在一起,因此保留并显式标记。</p><div id="relatedPairs"></div><h2>已合并的细类</h2><div id="mergeRows"></div></div>
11
+ <div id="sources" class="tab" hidden><p class="hint">8 个外部 3D 来源参与本轮聚类。ARCTIC/HOT3D 与我们组重叠;仅 2D 的来源点击直接看 RGB 关键点。</p><div class="scroll"><table id="sourceTable"></table></div><p class="hint">WiLoR 行为官方源数据代理,未声称精确复现其加工训练包。我们组三源依据已核对训练成员的来源 GT;最终 canonical 标签仍未核验。ReInterHand 的 7,600 个 test 手帧未参与聚类。</p></div>
12
+ </main>
13
+ <footer><a href="downloads/coverage/RESULTS_ZH.md">覆盖结果</a><a href="downloads/coverage/member_coverage.csv.gz">逐成员覆盖 CSV</a><a href="downloads/coverage/class_coverage.csv">逐类覆盖 CSV</a><a href="downloads/coverage/REPRODUCE.md">覆盖复现</a><a href="downloads/RESULTS_ZH.md">结果说明</a><a href="downloads/assignments.csv.gz">逐样本类别 CSV</a><a href="downloads/all_class_pairs.csv">类间距离 CSV</a><a href="downloads/REPRODUCE.md">代码与复现</a><span>数据分组并非人工手势标签;GT 来源身份与可靠性分开。</span></footer>
14
+ <dialog id="detail"><button id="closeDetail" class="close" aria-label="关闭">×</button><div id="detailBody"></div></dialog>
15
+ <script src="data.coverage_v2.js"></script><script src="app.coverage_v2.js"></script>
16
+ </body></html>
pose_recluster_distinct_20261014/downloads/coverage/code/web/style.css ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ :root{--ink:#203046;--muted:#637489;--line:#dbe3ec;--ours:#276a9c;--ext:#79569d}*{box-sizing:border-box}body{margin:0;background:#f2f5f8;color:var(--ink);font:15px/1.55 system-ui,-apple-system,"Microsoft YaHei",sans-serif}header,nav,main,footer{max-width:1500px;margin:auto;padding:18px 25px}header{display:flex;align-items:center;justify-content:space-between;gap:18px}h1{font-size:23px;margin:0}h1 small{font-size:13px;font-weight:400;color:var(--muted);margin-left:8px}h2{font-size:17px;margin:16px 0}h2 span{font-size:13px;font-weight:400}.toolbar,nav{display:flex;gap:12px;flex-wrap:wrap;align-items:center}nav{padding-top:0;padding-bottom:4px}button,select{font:inherit;background:white;border:1px solid #c8d4df;border-radius:6px;padding:7px 11px;color:var(--ink);cursor:pointer}button:hover,a:hover{color:#1064a0}nav button.active{background:#203e5b;color:white;border-color:#203e5b}a{color:#226a9b;cursor:pointer;text-decoration:none}a:hover{text-decoration:underline}.hint{color:var(--muted);font-size:13px;margin:12px 0}table{border-collapse:collapse;width:100%;background:white;border-radius:7px;overflow:hidden}th,td{padding:10px 13px;border-bottom:1px solid var(--line);text-align:left}th{font-size:13px;background:#eaf0f5}td{font-variant-numeric:tabular-nums}.scroll{overflow:auto}.two-groups{display:grid;grid-template-columns:1fr 1fr;gap:24px}.ours{color:var(--ours)}.external{color:var(--ext)}.cards{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.card{border:1px solid var(--line);background:white;border-radius:8px;overflow:hidden}.card h3{margin:0;font-size:15px}.card-head{padding:9px 12px;display:flex;justify-content:space-between;align-items:center}.card-meta{color:var(--muted);font-size:11px;padding:0 12px 5px}.pose{width:100%;height:170px;display:block;touch-action:none;cursor:grab;background:#fbfcfd}.card img{width:100%;height:133px;object-fit:contain;display:block;background:#eef2f5}.card-foot{padding:6px 10px;font-size:11px;color:var(--muted)}.card .open{display:block;width:100%;border:0;border-radius:0;background:#f8fafc;font-size:12px;padding:6px}.badge{color:#8c5a16;background:#fff2dc;padding:1px 5px;border-radius:4px;font-size:11px}.row{background:white;border:1px solid var(--line);border-radius:8px;margin:13px 0;padding:14px}.row-title{display:flex;gap:16px;justify-content:space-between;margin-bottom:6px;flex-wrap:wrap}.pair{display:grid;grid-template-columns:1fr 1fr;gap:18px}.pair .pose{height:210px}.pair img{width:100%;max-height:220px;object-fit:contain}.pair h3{font-size:15px}.metric{font-size:13px;color:var(--muted)}.children{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:8px}.children .pose{height:150px}.child{max-width:260px;border:1px solid var(--line);padding:6px;border-radius:6px}.child img{width:100%;height:90px;object-fit:contain}.finger-values{display:flex;gap:10px;flex-wrap:wrap;font-size:12px;color:var(--muted)}details{background:white;border:1px solid var(--line);padding:12px;border-radius:8px;margin-top:18px}summary{cursor:pointer}#scatter{max-width:100%;height:auto;cursor:pointer}footer{display:flex;gap:18px;flex-wrap:wrap;color:var(--muted);font-size:12px;padding-bottom:30px}dialog{border:1px solid var(--line);border-radius:10px;width:min(1250px,96vw);max-height:93vh;padding:24px;color:var(--ink)}dialog::backdrop{background:#172a40a8}.close{float:right;position:sticky;top:0;font-size:23px;line-height:1;background:white;z-index:2}.dialog-top{display:grid;grid-template-columns:1fr 1fr;gap:20px}.dialog-top .pose{height:270px}.detail-pair{width:100%;height:auto;display:block}.evidence{font-size:12px;color:var(--muted);overflow-wrap:anywhere}.example{padding:12px 0;border-top:1px solid var(--line)}.gallery{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.gallery img{width:100%;height:180px;object-fit:contain}.warning{color:#865614;background:#fff6e7;padding:8px 12px;border-radius:6px;font-size:13px}.source-button{border:0;background:none;padding:0;color:#226a9b;text-align:left}.mono{font-variant-numeric:tabular-nums}.nearest{background:#edf5f9;padding:12px;border-radius:8px}@media(max-width:1050px){header{align-items:flex-start;flex-direction:column}.cards{grid-template-columns:1fr}.card .pose{height:195px}.card img{height:160px}}@media(max-width:620px){header,nav,main,footer{padding-left:12px;padding-right:12px}h1{font-size:20px}.two-groups{gap:10px}.card-head{padding:7px}.card-meta{padding:0 7px 5px}.card .pose{height:155px}.card img{height:100px}.two-groups h2{font-size:13px}.card-foot{font-size:10px}.dialog-top,.gallery{grid-template-columns:1fr}.pair{gap:8px}.pair .pose{height:155px}.children{grid-template-columns:repeat(2,minmax(0,1fr))}.toolbar{font-size:12px;gap:6px}th,td{padding:7px;font-size:12px}dialog{padding:14px}.card .open{font-size:11px}.row{padding:10px}.row-title{font-size:13px}}
2
+
3
+ .coverage-panel{background:#fff;border:1px solid var(--line);border-radius:8px;padding:14px 16px;margin-bottom:16px}.coverage-controls{display:flex;align-items:center;gap:12px;flex-wrap:wrap;font-size:13px}.coverage-controls strong{margin-right:auto}.coverage-summary{display:flex;align-items:center;gap:20px;flex-wrap:wrap;margin-top:12px}.coverage-summary .coverage-breakdown{flex:1;min-width:260px}.coverage-bar{height:9px;display:flex;border-radius:5px;overflow:hidden;background:#e7edf2;width:100%;min-width:100px}.covered{background:#218762}.low{background:#c88926}.uncovered{background:#ca5054}.dot{width:9px;height:9px;display:inline-block;border-radius:50%;margin-right:3px}.coverage-values{display:flex;gap:9px;justify-content:space-between;font-size:11px;flex-wrap:wrap;margin-top:4px}.covered-text{color:#146847}.low-text{color:#8e5706}.uncovered-text{color:#a73139}.coverage-legend{font-size:12px;margin:10px 0 4px}.coverage-badge{display:inline-block;padding:2px 7px;border-radius:5px;font-size:11px;white-space:nowrap}.coverage-badge.covered{background:#e3f3eb;color:#146847}.coverage-badge.low{background:#fff1d9;color:#8e5706}.coverage-badge.uncovered{background:#fce7e8;color:#a73139}.card .coverage-breakdown{padding:4px 11px 7px}.card-head>span{display:flex;gap:3px;flex-wrap:wrap;justify-content:flex-end}.coverage-panel details{margin-top:8px;padding:7px 10px;font-size:12px;background:#fafcfe}.coverage-panel .hint{margin:7px 0}.gap-case{border:1px solid #ead4d5;background:#fffafa;padding:16px;border-radius:8px;margin:14px 0}.gap-case h3{font-size:16px;margin:0 0 5px}.gap-case h4{font-size:13px;margin:10px 0 5px}.gap-case details{font-size:12px;padding:7px;margin-top:10px}.gap-case .pair .gap-image{width:100%;height:220px;max-height:none;object-fit:contain;background:#f0f3f6}.sample-coverage{font-size:12px;color:var(--muted);line-height:1.9}.gap-title{color:#a73139;border-top:1px solid var(--line);padding-top:16px}.scroll .coverage-breakdown{min-width:230px}.coverage-breakdown .metric{margin:5px 0}.coverage-panel summary{font-size:12px}.row .coverage-breakdown{max-width:720px;margin-bottom:12px}
4
+ @media(max-width:620px){.coverage-panel{padding:11px}.coverage-controls{gap:8px}.coverage-controls strong{width:100%}.coverage-summary{gap:8px}.card .coverage-breakdown{padding:3px 7px 6px}.card .coverage-values{font-size:9px;gap:1px;display:grid;grid-template-columns:1fr}.card-head{gap:4px;align-items:flex-start}.card-head>span{max-width:80%}.gap-case{padding:9px}.gap-case .pair{grid-template-columns:1fr}.gap-case .pair .gap-image{height:auto;max-height:300px}.coverage-legend{line-height:1.9}.coverage-controls select{max-width:200px}}
pose_recluster_distinct_20261014/downloads/coverage/coverage_protocol.json ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "frozen_at_utc": "2026-10-14T06:12:10.626664+00:00",
3
+ "seed": 2026101407,
4
+ "base": "/SSD3/yangzijing/Hand_pose_recluster_distinct_20261014",
5
+ "reference": "All 271543 frozen three-source + EgoRenderer Ver.005 analysis members; separate hands; original source GT proxies, final canonical supervision/masks not verified",
6
+ "external": "All 214481 frozen train members of 8 readable external WiLoR official-source 3D proxies; excludes 7600 ReInterHand test members",
7
+ "feature": "Existing fixed 20 unit 3D bone directions in palm coordinates, 60 dimensions; wrist translation/rotation and bone length removed; no refit, no mirror pooling",
8
+ "distance": "Mean over 20 bones of acos(clamp(dot,-1,1)), degrees; exact exhaustive float32 GPU, TF32 disabled; validate CPU float64",
9
+ "calibration": {
10
+ "n": 8192,
11
+ "per_source_per_hand_max": 1024,
12
+ "sampling": "Seeded recording round robin, random frames without replacement; equal source and equal recording weights within each hand",
13
+ "exclusion": "Exclude all members of the query independent recording/source action from reference, not only query frame",
14
+ "threshold": "Separate left/right weighted 95th percentile of leave-recording/action-out nearest-reference distance; computed before external evaluation",
15
+ "sensitivity_quantiles": [
16
+ 0.9,
17
+ 0.95,
18
+ 0.99
19
+ ],
20
+ "additional_fixed_degrees": [
21
+ 10,
22
+ 20,
23
+ 30
24
+ ]
25
+ },
26
+ "sample_status": {
27
+ "covered": "nearest distance <= threshold and at least 3 distinct reference recording/source-action units within threshold",
28
+ "low": "nearest <= threshold but only 1 or 2 distinct reference units",
29
+ "uncovered": "nearest > threshold"
30
+ },
31
+ "class_status": {
32
+ "covered": "at least 90% of members have covered sample status",
33
+ "uncovered": "zero members have nearest distance <= threshold",
34
+ "low": "all other classes; stacked counts retain mixed within-class outcomes"
35
+ },
36
+ "class_badge_warning": "90% display convention, not a universal biological boundary. Per-member proportions are authoritative. Uncovered means in this sampled reference only.",
37
+ "weights": "Primary coverage is unweighted per analyzed hand-frame. Also report normalized original cluster fit-weight and equal-independent-unit sensitivity; do not claim unknown official population inclusion probabilities.",
38
+ "selection": "For classes with uncovered members select a paired-RGB actual uncovered member close to the class prototype, preferring independent examples. Never relabel a covered prototype as uncovered.",
39
+ "gt_quality": "Coverage is independent of GT validity. No automatic reliable/OOD/recommendation claim from distance alone.",
40
+ "no_changes": "No reclustering, smoothing, GT refitting or source label modifications"
41
+ }
pose_recluster_distinct_20261014/downloads/coverage/coverage_visual_checks.json ADDED
@@ -0,0 +1,1322 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "status": "PASS",
3
+ "class_count": 114,
4
+ "examples": 164,
5
+ "unique_external_members": 116,
6
+ "unique_reference_members": 105,
7
+ "all_exact_nearest_rgb_present": true,
8
+ "checks": [
9
+ {
10
+ "class_key": "external_left_distinct_B1",
11
+ "id": "db1b87ed5e918dbee56a",
12
+ "index": 152574,
13
+ "uncovered": true,
14
+ "nearest_index": 33832,
15
+ "nearest_rgb": true
16
+ },
17
+ {
18
+ "class_key": "external_left_distinct_B1",
19
+ "id": "c00e1d95904cb4d3e461",
20
+ "index": 153817,
21
+ "uncovered": true,
22
+ "nearest_index": 170132,
23
+ "nearest_rgb": true
24
+ },
25
+ {
26
+ "class_key": "external_left_distinct_B2",
27
+ "id": "e93a7203af92a0bba127",
28
+ "index": 153341,
29
+ "uncovered": true,
30
+ "nearest_index": 23056,
31
+ "nearest_rgb": true
32
+ },
33
+ {
34
+ "class_key": "external_left_distinct_B2",
35
+ "id": "a41106b1f8faadfbd0c6",
36
+ "index": 151978,
37
+ "uncovered": true,
38
+ "nearest_index": 187334,
39
+ "nearest_rgb": true
40
+ },
41
+ {
42
+ "class_key": "external_left_distinct_B3",
43
+ "id": "7cbee0066bf73c1230ec",
44
+ "index": 41702,
45
+ "uncovered": true,
46
+ "nearest_index": 134834,
47
+ "nearest_rgb": true
48
+ },
49
+ {
50
+ "class_key": "external_left_distinct_B3",
51
+ "id": "52e61ba8574c1c21171f",
52
+ "index": 39102,
53
+ "uncovered": true,
54
+ "nearest_index": 76838,
55
+ "nearest_rgb": true
56
+ },
57
+ {
58
+ "class_key": "external_left_distinct_B4",
59
+ "id": "0831e6638e9af7f854bd",
60
+ "index": 39840,
61
+ "uncovered": true,
62
+ "nearest_index": 189144,
63
+ "nearest_rgb": true
64
+ },
65
+ {
66
+ "class_key": "external_left_distinct_B4",
67
+ "id": "74961c20914e938a0ebc",
68
+ "index": 93086,
69
+ "uncovered": true,
70
+ "nearest_index": 2519,
71
+ "nearest_rgb": true
72
+ },
73
+ {
74
+ "class_key": "external_left_distinct_B5",
75
+ "id": "7a659401c102ee6c4d53",
76
+ "index": 71275,
77
+ "uncovered": true,
78
+ "nearest_index": 173495,
79
+ "nearest_rgb": true
80
+ },
81
+ {
82
+ "class_key": "external_left_distinct_B5",
83
+ "id": "82270a2b1f87dae6ffed",
84
+ "index": 151929,
85
+ "uncovered": true,
86
+ "nearest_index": 89799,
87
+ "nearest_rgb": true
88
+ },
89
+ {
90
+ "class_key": "external_left_distinct_B6",
91
+ "id": "bfb2f241cb856b96b744",
92
+ "index": 37843,
93
+ "uncovered": true,
94
+ "nearest_index": 79018,
95
+ "nearest_rgb": true
96
+ },
97
+ {
98
+ "class_key": "external_left_distinct_B6",
99
+ "id": "3ddf871100b7fa493f4c",
100
+ "index": 154193,
101
+ "uncovered": true,
102
+ "nearest_index": 79019,
103
+ "nearest_rgb": true
104
+ },
105
+ {
106
+ "class_key": "external_left_distinct_B7",
107
+ "id": "c0469034d3cb0c8cfacb",
108
+ "index": 164291,
109
+ "uncovered": true,
110
+ "nearest_index": 65088,
111
+ "nearest_rgb": true
112
+ },
113
+ {
114
+ "class_key": "external_left_distinct_B7",
115
+ "id": "a0e1eafc008fe03615bf",
116
+ "index": 153334,
117
+ "uncovered": true,
118
+ "nearest_index": 96924,
119
+ "nearest_rgb": true
120
+ },
121
+ {
122
+ "class_key": "external_left_distinct_B8",
123
+ "id": "1155d85f7d67fdea5ca4",
124
+ "index": 86462,
125
+ "uncovered": true,
126
+ "nearest_index": 32087,
127
+ "nearest_rgb": true
128
+ },
129
+ {
130
+ "class_key": "external_left_distinct_B8",
131
+ "id": "7e9540aab42ca1f283f1",
132
+ "index": 79416,
133
+ "uncovered": true,
134
+ "nearest_index": 81904,
135
+ "nearest_rgb": true
136
+ },
137
+ {
138
+ "class_key": "external_left_distinct_B9",
139
+ "id": "9186e37ea320e67eea4cc4b3",
140
+ "index": 192258,
141
+ "uncovered": true,
142
+ "nearest_index": 116684,
143
+ "nearest_rgb": true
144
+ },
145
+ {
146
+ "class_key": "external_left_distinct_B9",
147
+ "id": "8fc44d37c06f82c2bccfe0a7",
148
+ "index": 192008,
149
+ "uncovered": true,
150
+ "nearest_index": 196506,
151
+ "nearest_rgb": true
152
+ },
153
+ {
154
+ "class_key": "external_left_distinct_B10",
155
+ "id": "86c1b3d59b6d91f14ef6",
156
+ "index": 39555,
157
+ "uncovered": true,
158
+ "nearest_index": 58551,
159
+ "nearest_rgb": true
160
+ },
161
+ {
162
+ "class_key": "external_left_distinct_B10",
163
+ "id": "805d0cb50c887d06f851",
164
+ "index": 76816,
165
+ "uncovered": true,
166
+ "nearest_index": 58551,
167
+ "nearest_rgb": true
168
+ },
169
+ {
170
+ "class_key": "external_left_distinct_B11",
171
+ "id": "f9e4b832088ad843ce26fc9a",
172
+ "index": 192451,
173
+ "uncovered": true,
174
+ "nearest_index": 34777,
175
+ "nearest_rgb": true
176
+ },
177
+ {
178
+ "class_key": "external_left_distinct_B11",
179
+ "id": "8bc1231ca5c15b6f5c2d",
180
+ "index": 149468,
181
+ "uncovered": true,
182
+ "nearest_index": 140749,
183
+ "nearest_rgb": true
184
+ },
185
+ {
186
+ "class_key": "external_left_distinct_B12",
187
+ "id": "e819135ae0a98c833798",
188
+ "index": 40656,
189
+ "uncovered": true,
190
+ "nearest_index": 58465,
191
+ "nearest_rgb": true
192
+ },
193
+ {
194
+ "class_key": "external_left_distinct_B12",
195
+ "id": "1c3e2d6266babd3546e4",
196
+ "index": 42882,
197
+ "uncovered": true,
198
+ "nearest_index": 120574,
199
+ "nearest_rgb": true
200
+ },
201
+ {
202
+ "class_key": "external_left_distinct_B13",
203
+ "id": "68c621ec6f25af92b6d2",
204
+ "index": 134770,
205
+ "uncovered": true,
206
+ "nearest_index": 165102,
207
+ "nearest_rgb": true
208
+ },
209
+ {
210
+ "class_key": "external_left_distinct_B13",
211
+ "id": "e8ba03215a0dee415f9f",
212
+ "index": 111808,
213
+ "uncovered": true,
214
+ "nearest_index": 87746,
215
+ "nearest_rgb": true
216
+ },
217
+ {
218
+ "class_key": "external_left_distinct_B14",
219
+ "id": "a3c7b0983f4f67c9774a9d1d",
220
+ "index": 191524,
221
+ "uncovered": true,
222
+ "nearest_index": 162699,
223
+ "nearest_rgb": true
224
+ },
225
+ {
226
+ "class_key": "external_left_distinct_B14",
227
+ "id": "9b7689bc046883d6812ad365",
228
+ "index": 190831,
229
+ "uncovered": true,
230
+ "nearest_index": 134109,
231
+ "nearest_rgb": true
232
+ },
233
+ {
234
+ "class_key": "external_left_distinct_B15",
235
+ "id": "da0af48ad0dcc8746952",
236
+ "index": 151832,
237
+ "uncovered": true,
238
+ "nearest_index": 32681,
239
+ "nearest_rgb": true
240
+ },
241
+ {
242
+ "class_key": "external_left_distinct_B15",
243
+ "id": "5d0f3c01b127efb8f0ea",
244
+ "index": 151875,
245
+ "uncovered": true,
246
+ "nearest_index": 109592,
247
+ "nearest_rgb": true
248
+ },
249
+ {
250
+ "class_key": "external_left_distinct_B16",
251
+ "id": "b11f99d2cf1b5841a9a2",
252
+ "index": 84569,
253
+ "uncovered": true,
254
+ "nearest_index": 126169,
255
+ "nearest_rgb": true
256
+ },
257
+ {
258
+ "class_key": "external_left_distinct_B16",
259
+ "id": "02ebf54c6583ab82c85f",
260
+ "index": 81718,
261
+ "uncovered": true,
262
+ "nearest_index": 126169,
263
+ "nearest_rgb": true
264
+ },
265
+ {
266
+ "class_key": "external_left_distinct_B17",
267
+ "id": "e84ccd22e73178c16b417d29",
268
+ "index": 191602,
269
+ "uncovered": true,
270
+ "nearest_index": 62462,
271
+ "nearest_rgb": true
272
+ },
273
+ {
274
+ "class_key": "external_left_distinct_B17",
275
+ "id": "7ad41e661baf307e75a0",
276
+ "index": 109330,
277
+ "uncovered": true,
278
+ "nearest_index": 267390,
279
+ "nearest_rgb": true
280
+ },
281
+ {
282
+ "class_key": "external_left_distinct_B18",
283
+ "id": "8e8a96391338bc10f7d1ad8f",
284
+ "index": 206691,
285
+ "uncovered": true,
286
+ "nearest_index": 47663,
287
+ "nearest_rgb": true
288
+ },
289
+ {
290
+ "class_key": "external_left_distinct_B18",
291
+ "id": "68a541e264704eea1631197a",
292
+ "index": 212031,
293
+ "uncovered": true,
294
+ "nearest_index": 112953,
295
+ "nearest_rgb": true
296
+ },
297
+ {
298
+ "class_key": "external_left_distinct_B19",
299
+ "id": "1f23bff3fd47fb3d88e5",
300
+ "index": 127122,
301
+ "uncovered": true,
302
+ "nearest_index": 194888,
303
+ "nearest_rgb": true
304
+ },
305
+ {
306
+ "class_key": "external_left_distinct_B19",
307
+ "id": "481d81d40a4872823842",
308
+ "index": 133850,
309
+ "uncovered": true,
310
+ "nearest_index": 163083,
311
+ "nearest_rgb": true
312
+ },
313
+ {
314
+ "class_key": "external_left_distinct_B20",
315
+ "id": "e711d428a3ed73d52639",
316
+ "index": 154256,
317
+ "uncovered": true,
318
+ "nearest_index": 142983,
319
+ "nearest_rgb": true
320
+ },
321
+ {
322
+ "class_key": "external_left_distinct_B20",
323
+ "id": "4f4bd53a317fbe19a459",
324
+ "index": 154738,
325
+ "uncovered": true,
326
+ "nearest_index": 78818,
327
+ "nearest_rgb": true
328
+ },
329
+ {
330
+ "class_key": "external_left_distinct_B21",
331
+ "id": "5f6fbeec7ba336848768",
332
+ "index": 153371,
333
+ "uncovered": true,
334
+ "nearest_index": 2272,
335
+ "nearest_rgb": true
336
+ },
337
+ {
338
+ "class_key": "external_left_distinct_B21",
339
+ "id": "9cfdf2985b9a27f5faf2",
340
+ "index": 153383,
341
+ "uncovered": true,
342
+ "nearest_index": 79922,
343
+ "nearest_rgb": true
344
+ },
345
+ {
346
+ "class_key": "external_left_distinct_B22",
347
+ "id": "1fa3b8cd32b3624f059f",
348
+ "index": 69682,
349
+ "uncovered": true,
350
+ "nearest_index": 45682,
351
+ "nearest_rgb": true
352
+ },
353
+ {
354
+ "class_key": "external_left_distinct_B22",
355
+ "id": "e6246244f9762ecf8af0",
356
+ "index": 38343,
357
+ "uncovered": true,
358
+ "nearest_index": 45682,
359
+ "nearest_rgb": true
360
+ },
361
+ {
362
+ "class_key": "external_left_distinct_B23",
363
+ "id": "f8701460479562a2b8576134",
364
+ "index": 211766,
365
+ "uncovered": true,
366
+ "nearest_index": 162254,
367
+ "nearest_rgb": true
368
+ },
369
+ {
370
+ "class_key": "external_left_distinct_B23",
371
+ "id": "d29ab4c17e72adb3d110",
372
+ "index": 60329,
373
+ "uncovered": true,
374
+ "nearest_index": 68029,
375
+ "nearest_rgb": true
376
+ },
377
+ {
378
+ "class_key": "external_left_distinct_B24",
379
+ "id": "f814b3e93a1455c11234",
380
+ "index": 35361,
381
+ "uncovered": true,
382
+ "nearest_index": 4742,
383
+ "nearest_rgb": true
384
+ },
385
+ {
386
+ "class_key": "external_left_distinct_B24",
387
+ "id": "c59b63e4de72a20ab1a1",
388
+ "index": 43254,
389
+ "uncovered": true,
390
+ "nearest_index": 10555,
391
+ "nearest_rgb": true
392
+ },
393
+ {
394
+ "class_key": "external_left_fine_B1",
395
+ "id": "db1b87ed5e918dbee56a",
396
+ "index": 152574,
397
+ "uncovered": true,
398
+ "nearest_index": 33832,
399
+ "nearest_rgb": true
400
+ },
401
+ {
402
+ "class_key": "external_left_fine_B2",
403
+ "id": "e93a7203af92a0bba127",
404
+ "index": 153341,
405
+ "uncovered": true,
406
+ "nearest_index": 23056,
407
+ "nearest_rgb": true
408
+ },
409
+ {
410
+ "class_key": "external_left_fine_B3",
411
+ "id": "7cbee0066bf73c1230ec",
412
+ "index": 41702,
413
+ "uncovered": true,
414
+ "nearest_index": 134834,
415
+ "nearest_rgb": true
416
+ },
417
+ {
418
+ "class_key": "external_left_fine_B4",
419
+ "id": "0831e6638e9af7f854bd",
420
+ "index": 39840,
421
+ "uncovered": true,
422
+ "nearest_index": 189144,
423
+ "nearest_rgb": true
424
+ },
425
+ {
426
+ "class_key": "external_left_fine_B5",
427
+ "id": "7a659401c102ee6c4d53",
428
+ "index": 71275,
429
+ "uncovered": true,
430
+ "nearest_index": 173495,
431
+ "nearest_rgb": true
432
+ },
433
+ {
434
+ "class_key": "external_left_fine_B6",
435
+ "id": "bfb2f241cb856b96b744",
436
+ "index": 37843,
437
+ "uncovered": true,
438
+ "nearest_index": 79018,
439
+ "nearest_rgb": true
440
+ },
441
+ {
442
+ "class_key": "external_left_fine_B7",
443
+ "id": "c0469034d3cb0c8cfacb",
444
+ "index": 164291,
445
+ "uncovered": true,
446
+ "nearest_index": 65088,
447
+ "nearest_rgb": true
448
+ },
449
+ {
450
+ "class_key": "external_left_fine_B8",
451
+ "id": "1155d85f7d67fdea5ca4",
452
+ "index": 86462,
453
+ "uncovered": true,
454
+ "nearest_index": 32087,
455
+ "nearest_rgb": true
456
+ },
457
+ {
458
+ "class_key": "external_left_fine_B9",
459
+ "id": "7004ccacdf08558efd9e",
460
+ "index": 87457,
461
+ "uncovered": true,
462
+ "nearest_index": 186042,
463
+ "nearest_rgb": true
464
+ },
465
+ {
466
+ "class_key": "external_left_fine_B10",
467
+ "id": "9186e37ea320e67eea4cc4b3",
468
+ "index": 192258,
469
+ "uncovered": true,
470
+ "nearest_index": 116684,
471
+ "nearest_rgb": true
472
+ },
473
+ {
474
+ "class_key": "external_left_fine_B11",
475
+ "id": "86c1b3d59b6d91f14ef6",
476
+ "index": 39555,
477
+ "uncovered": true,
478
+ "nearest_index": 58551,
479
+ "nearest_rgb": true
480
+ },
481
+ {
482
+ "class_key": "external_left_fine_B12",
483
+ "id": "f9e4b832088ad843ce26fc9a",
484
+ "index": 192451,
485
+ "uncovered": true,
486
+ "nearest_index": 34777,
487
+ "nearest_rgb": true
488
+ },
489
+ {
490
+ "class_key": "external_left_fine_B13",
491
+ "id": "1c3e2d6266babd3546e4",
492
+ "index": 42882,
493
+ "uncovered": true,
494
+ "nearest_index": 120574,
495
+ "nearest_rgb": true
496
+ },
497
+ {
498
+ "class_key": "external_left_fine_B14",
499
+ "id": "68c621ec6f25af92b6d2",
500
+ "index": 134770,
501
+ "uncovered": true,
502
+ "nearest_index": 165102,
503
+ "nearest_rgb": true
504
+ },
505
+ {
506
+ "class_key": "external_left_fine_B15",
507
+ "id": "a3c7b0983f4f67c9774a9d1d",
508
+ "index": 191524,
509
+ "uncovered": true,
510
+ "nearest_index": 162699,
511
+ "nearest_rgb": true
512
+ },
513
+ {
514
+ "class_key": "external_left_fine_B16",
515
+ "id": "426d44a4aecf394cce74",
516
+ "index": 58644,
517
+ "uncovered": true,
518
+ "nearest_index": 166869,
519
+ "nearest_rgb": true
520
+ },
521
+ {
522
+ "class_key": "external_left_fine_B17",
523
+ "id": "f627d873be8bbdf466ab2122",
524
+ "index": 191495,
525
+ "uncovered": true,
526
+ "nearest_index": 172637,
527
+ "nearest_rgb": true
528
+ },
529
+ {
530
+ "class_key": "external_left_fine_B18",
531
+ "id": "da0af48ad0dcc8746952",
532
+ "index": 151832,
533
+ "uncovered": true,
534
+ "nearest_index": 32681,
535
+ "nearest_rgb": true
536
+ },
537
+ {
538
+ "class_key": "external_left_fine_B19",
539
+ "id": "7ad41e661baf307e75a0",
540
+ "index": 109330,
541
+ "uncovered": true,
542
+ "nearest_index": 267390,
543
+ "nearest_rgb": true
544
+ },
545
+ {
546
+ "class_key": "external_left_fine_B20",
547
+ "id": "b11f99d2cf1b5841a9a2",
548
+ "index": 84569,
549
+ "uncovered": true,
550
+ "nearest_index": 126169,
551
+ "nearest_rgb": true
552
+ },
553
+ {
554
+ "class_key": "external_left_fine_B21",
555
+ "id": "e60f1e573b15059b28a6a89d",
556
+ "index": 190459,
557
+ "uncovered": true,
558
+ "nearest_index": 141756,
559
+ "nearest_rgb": true
560
+ },
561
+ {
562
+ "class_key": "external_left_fine_B22",
563
+ "id": "8e8a96391338bc10f7d1ad8f",
564
+ "index": 206691,
565
+ "uncovered": true,
566
+ "nearest_index": 47663,
567
+ "nearest_rgb": true
568
+ },
569
+ {
570
+ "class_key": "external_left_fine_B23",
571
+ "id": "051488f34a7b81d90530",
572
+ "index": 115178,
573
+ "uncovered": true,
574
+ "nearest_index": 48927,
575
+ "nearest_rgb": true
576
+ },
577
+ {
578
+ "class_key": "external_left_fine_B24",
579
+ "id": "1f23bff3fd47fb3d88e5",
580
+ "index": 127122,
581
+ "uncovered": true,
582
+ "nearest_index": 194888,
583
+ "nearest_rgb": true
584
+ },
585
+ {
586
+ "class_key": "external_left_fine_B25",
587
+ "id": "bd5b4c8d9d1df40c4cb2",
588
+ "index": 45882,
589
+ "uncovered": true,
590
+ "nearest_index": 185866,
591
+ "nearest_rgb": true
592
+ },
593
+ {
594
+ "class_key": "external_left_fine_B26",
595
+ "id": "e1707af66b16c44ca22f217e",
596
+ "index": 194117,
597
+ "uncovered": true,
598
+ "nearest_index": 56748,
599
+ "nearest_rgb": true
600
+ },
601
+ {
602
+ "class_key": "external_left_fine_B27",
603
+ "id": "5f6fbeec7ba336848768",
604
+ "index": 153371,
605
+ "uncovered": true,
606
+ "nearest_index": 2272,
607
+ "nearest_rgb": true
608
+ },
609
+ {
610
+ "class_key": "external_left_fine_B28",
611
+ "id": "1fa3b8cd32b3624f059f",
612
+ "index": 69682,
613
+ "uncovered": true,
614
+ "nearest_index": 45682,
615
+ "nearest_rgb": true
616
+ },
617
+ {
618
+ "class_key": "external_left_fine_B29",
619
+ "id": "f8701460479562a2b8576134",
620
+ "index": 211766,
621
+ "uncovered": true,
622
+ "nearest_index": 162254,
623
+ "nearest_rgb": true
624
+ },
625
+ {
626
+ "class_key": "external_left_fine_B30",
627
+ "id": "e961198817aa9f71a9c0",
628
+ "index": 56355,
629
+ "uncovered": true,
630
+ "nearest_index": 56749,
631
+ "nearest_rgb": true
632
+ },
633
+ {
634
+ "class_key": "external_left_fine_B31",
635
+ "id": "e711d428a3ed73d52639",
636
+ "index": 154256,
637
+ "uncovered": true,
638
+ "nearest_index": 142983,
639
+ "nearest_rgb": true
640
+ },
641
+ {
642
+ "class_key": "external_left_fine_B32",
643
+ "id": "f814b3e93a1455c11234",
644
+ "index": 35361,
645
+ "uncovered": true,
646
+ "nearest_index": 4742,
647
+ "nearest_rgb": true
648
+ },
649
+ {
650
+ "class_key": "external_right_distinct_B1",
651
+ "id": "254c3a1200962ad38d22",
652
+ "index": 153790,
653
+ "uncovered": true,
654
+ "nearest_index": 113631,
655
+ "nearest_rgb": true
656
+ },
657
+ {
658
+ "class_key": "external_right_distinct_B1",
659
+ "id": "709270ca3ee8fa046096",
660
+ "index": 149170,
661
+ "uncovered": true,
662
+ "nearest_index": 80667,
663
+ "nearest_rgb": true
664
+ },
665
+ {
666
+ "class_key": "external_right_distinct_B2",
667
+ "id": "e47ac484c8070191f186",
668
+ "index": 151238,
669
+ "uncovered": true,
670
+ "nearest_index": 26696,
671
+ "nearest_rgb": true
672
+ },
673
+ {
674
+ "class_key": "external_right_distinct_B2",
675
+ "id": "a739714a796d9e4fcabb",
676
+ "index": 153869,
677
+ "uncovered": true,
678
+ "nearest_index": 26696,
679
+ "nearest_rgb": true
680
+ },
681
+ {
682
+ "class_key": "external_right_distinct_B3",
683
+ "id": "98b98e2def7c3f01f00a",
684
+ "index": 49644,
685
+ "uncovered": true,
686
+ "nearest_index": 25167,
687
+ "nearest_rgb": true
688
+ },
689
+ {
690
+ "class_key": "external_right_distinct_B3",
691
+ "id": "2d7e3d2dfebfdcefaa58",
692
+ "index": 66442,
693
+ "uncovered": true,
694
+ "nearest_index": 25167,
695
+ "nearest_rgb": true
696
+ },
697
+ {
698
+ "class_key": "external_right_distinct_B4",
699
+ "id": "dc1f9c23184c42a61af9",
700
+ "index": 94979,
701
+ "uncovered": true,
702
+ "nearest_index": 26698,
703
+ "nearest_rgb": true
704
+ },
705
+ {
706
+ "class_key": "external_right_distinct_B4",
707
+ "id": "1747d7dab8779e9564c8",
708
+ "index": 56673,
709
+ "uncovered": true,
710
+ "nearest_index": 26698,
711
+ "nearest_rgb": true
712
+ },
713
+ {
714
+ "class_key": "external_right_distinct_B5",
715
+ "id": "8d1d62e22f778ca48f49",
716
+ "index": 1354,
717
+ "uncovered": true,
718
+ "nearest_index": 118457,
719
+ "nearest_rgb": true
720
+ },
721
+ {
722
+ "class_key": "external_right_distinct_B5",
723
+ "id": "af36ba9b4582f51913dc",
724
+ "index": 49423,
725
+ "uncovered": true,
726
+ "nearest_index": 66582,
727
+ "nearest_rgb": true
728
+ },
729
+ {
730
+ "class_key": "external_right_distinct_B6",
731
+ "id": "80cd59ca87c7fbd436b6",
732
+ "index": 60934,
733
+ "uncovered": true,
734
+ "nearest_index": 69125,
735
+ "nearest_rgb": true
736
+ },
737
+ {
738
+ "class_key": "external_right_distinct_B6",
739
+ "id": "32f8610b6d892e509529",
740
+ "index": 80778,
741
+ "uncovered": true,
742
+ "nearest_index": 69125,
743
+ "nearest_rgb": true
744
+ },
745
+ {
746
+ "class_key": "external_right_distinct_B7",
747
+ "id": "1e5cc53312d1287a5217",
748
+ "index": 151909,
749
+ "uncovered": true,
750
+ "nearest_index": 110754,
751
+ "nearest_rgb": true
752
+ },
753
+ {
754
+ "class_key": "external_right_distinct_B7",
755
+ "id": "e4ce53c349d02a786e9a8d1b",
756
+ "index": 181648,
757
+ "uncovered": true,
758
+ "nearest_index": 155642,
759
+ "nearest_rgb": true
760
+ },
761
+ {
762
+ "class_key": "external_right_distinct_B8",
763
+ "id": "f3858cbf4c0f01d29841",
764
+ "index": 9051,
765
+ "uncovered": true,
766
+ "nearest_index": 137269,
767
+ "nearest_rgb": true
768
+ },
769
+ {
770
+ "class_key": "external_right_distinct_B8",
771
+ "id": "14d0339931252b4aacfe",
772
+ "index": 27136,
773
+ "uncovered": true,
774
+ "nearest_index": 120904,
775
+ "nearest_rgb": true
776
+ },
777
+ {
778
+ "class_key": "external_right_distinct_B9",
779
+ "id": "8fe43e7b67951bdd7e19",
780
+ "index": 30842,
781
+ "uncovered": true,
782
+ "nearest_index": 165814,
783
+ "nearest_rgb": true
784
+ },
785
+ {
786
+ "class_key": "external_right_distinct_B9",
787
+ "id": "8d1150892e449b19b926",
788
+ "index": 12316,
789
+ "uncovered": true,
790
+ "nearest_index": 131604,
791
+ "nearest_rgb": true
792
+ },
793
+ {
794
+ "class_key": "external_right_distinct_B10",
795
+ "id": "0b30c6ac8b8a0fb34665",
796
+ "index": 159824,
797
+ "uncovered": true,
798
+ "nearest_index": 183822,
799
+ "nearest_rgb": true
800
+ },
801
+ {
802
+ "class_key": "external_right_distinct_B10",
803
+ "id": "51fa51d203ef3894e730",
804
+ "index": 87155,
805
+ "uncovered": true,
806
+ "nearest_index": 13864,
807
+ "nearest_rgb": true
808
+ },
809
+ {
810
+ "class_key": "external_right_distinct_B11",
811
+ "id": "d0a7a93ffcf0c93fb543",
812
+ "index": 84249,
813
+ "uncovered": true,
814
+ "nearest_index": 108571,
815
+ "nearest_rgb": true
816
+ },
817
+ {
818
+ "class_key": "external_right_distinct_B11",
819
+ "id": "4170659ac3b73692c561",
820
+ "index": 91733,
821
+ "uncovered": true,
822
+ "nearest_index": 20789,
823
+ "nearest_rgb": true
824
+ },
825
+ {
826
+ "class_key": "external_right_distinct_B12",
827
+ "id": "2c7c9fcf190aa1ce0417a597",
828
+ "index": 181116,
829
+ "uncovered": true,
830
+ "nearest_index": 149845,
831
+ "nearest_rgb": true
832
+ },
833
+ {
834
+ "class_key": "external_right_distinct_B12",
835
+ "id": "34293d5c9114401b8f2fa095",
836
+ "index": 189237,
837
+ "uncovered": true,
838
+ "nearest_index": 129219,
839
+ "nearest_rgb": true
840
+ },
841
+ {
842
+ "class_key": "external_right_distinct_B13",
843
+ "id": "69f662bcff9f44cb0b0e1834",
844
+ "index": 184074,
845
+ "uncovered": true,
846
+ "nearest_index": 11256,
847
+ "nearest_rgb": true
848
+ },
849
+ {
850
+ "class_key": "external_right_distinct_B13",
851
+ "id": "7b0803f38879e5bde60f6513",
852
+ "index": 182174,
853
+ "uncovered": true,
854
+ "nearest_index": 84445,
855
+ "nearest_rgb": true
856
+ },
857
+ {
858
+ "class_key": "external_right_distinct_B14",
859
+ "id": "d938ae931dbe89e16810f069",
860
+ "index": 184103,
861
+ "uncovered": true,
862
+ "nearest_index": 124769,
863
+ "nearest_rgb": true
864
+ },
865
+ {
866
+ "class_key": "external_right_distinct_B14",
867
+ "id": "5c2691b0661e4d7c91b4",
868
+ "index": 27648,
869
+ "uncovered": true,
870
+ "nearest_index": 184856,
871
+ "nearest_rgb": true
872
+ },
873
+ {
874
+ "class_key": "external_right_distinct_B15",
875
+ "id": "e091bd042f1cd85757bae117",
876
+ "index": 188317,
877
+ "uncovered": true,
878
+ "nearest_index": 115582,
879
+ "nearest_rgb": true
880
+ },
881
+ {
882
+ "class_key": "external_right_distinct_B15",
883
+ "id": "cb450b6c00e74c066384",
884
+ "index": 6144,
885
+ "uncovered": true,
886
+ "nearest_index": 126872,
887
+ "nearest_rgb": true
888
+ },
889
+ {
890
+ "class_key": "external_right_distinct_B16",
891
+ "id": "d14d6bafe0a0440cd6f9e1b5",
892
+ "index": 187502,
893
+ "uncovered": true,
894
+ "nearest_index": 15413,
895
+ "nearest_rgb": true
896
+ },
897
+ {
898
+ "class_key": "external_right_distinct_B16",
899
+ "id": "39df7a0341e41f8c8537",
900
+ "index": 970,
901
+ "uncovered": true,
902
+ "nearest_index": 16269,
903
+ "nearest_rgb": true
904
+ },
905
+ {
906
+ "class_key": "external_right_distinct_B17",
907
+ "id": "26ecc41219db0bb6833e",
908
+ "index": 105510,
909
+ "uncovered": true,
910
+ "nearest_index": 168456,
911
+ "nearest_rgb": true
912
+ },
913
+ {
914
+ "class_key": "external_right_distinct_B17",
915
+ "id": "78c11495a9b7b3cc64b560e0",
916
+ "index": 181002,
917
+ "uncovered": true,
918
+ "nearest_index": 131112,
919
+ "nearest_rgb": true
920
+ },
921
+ {
922
+ "class_key": "external_right_distinct_B18",
923
+ "id": "d02f389c481d4328e42c",
924
+ "index": 10113,
925
+ "uncovered": true,
926
+ "nearest_index": 167169,
927
+ "nearest_rgb": true
928
+ },
929
+ {
930
+ "class_key": "external_right_distinct_B18",
931
+ "id": "44c489639225f513755b",
932
+ "index": 23731,
933
+ "uncovered": true,
934
+ "nearest_index": 15033,
935
+ "nearest_rgb": true
936
+ },
937
+ {
938
+ "class_key": "external_right_distinct_B19",
939
+ "id": "e233df5f771af8c53fc3",
940
+ "index": 61233,
941
+ "uncovered": true,
942
+ "nearest_index": 51047,
943
+ "nearest_rgb": true
944
+ },
945
+ {
946
+ "class_key": "external_right_distinct_B19",
947
+ "id": "53111882d76eaac38c4b",
948
+ "index": 154519,
949
+ "uncovered": true,
950
+ "nearest_index": 156836,
951
+ "nearest_rgb": true
952
+ },
953
+ {
954
+ "class_key": "external_right_distinct_B20",
955
+ "id": "68b46ceb0f9a5e531f67",
956
+ "index": 153976,
957
+ "uncovered": true,
958
+ "nearest_index": 247928,
959
+ "nearest_rgb": true
960
+ },
961
+ {
962
+ "class_key": "external_right_distinct_B20",
963
+ "id": "fd625216506afacda693",
964
+ "index": 166242,
965
+ "uncovered": true,
966
+ "nearest_index": 247927,
967
+ "nearest_rgb": true
968
+ },
969
+ {
970
+ "class_key": "external_right_distinct_B21",
971
+ "id": "2d9bbf4c2273c70deb7a",
972
+ "index": 89262,
973
+ "uncovered": true,
974
+ "nearest_index": 35454,
975
+ "nearest_rgb": true
976
+ },
977
+ {
978
+ "class_key": "external_right_distinct_B21",
979
+ "id": "7dca30f7a824c6e29684",
980
+ "index": 50589,
981
+ "uncovered": true,
982
+ "nearest_index": 35454,
983
+ "nearest_rgb": true
984
+ },
985
+ {
986
+ "class_key": "external_right_distinct_B22",
987
+ "id": "7013cfedf62948731c5ac3c6",
988
+ "index": 199078,
989
+ "uncovered": true,
990
+ "nearest_index": 145623,
991
+ "nearest_rgb": true
992
+ },
993
+ {
994
+ "class_key": "external_right_distinct_B22",
995
+ "id": "c8f2320b86ea13b9bab5",
996
+ "index": 10234,
997
+ "uncovered": true,
998
+ "nearest_index": 145329,
999
+ "nearest_rgb": true
1000
+ },
1001
+ {
1002
+ "class_key": "external_right_distinct_B23",
1003
+ "id": "4d20b3caae3d94f98758",
1004
+ "index": 71890,
1005
+ "uncovered": true,
1006
+ "nearest_index": 3387,
1007
+ "nearest_rgb": true
1008
+ },
1009
+ {
1010
+ "class_key": "external_right_distinct_B23",
1011
+ "id": "a7e95de948f4e3c7a9e1",
1012
+ "index": 35698,
1013
+ "uncovered": true,
1014
+ "nearest_index": 3387,
1015
+ "nearest_rgb": true
1016
+ },
1017
+ {
1018
+ "class_key": "external_right_distinct_B24",
1019
+ "id": "49a2ec37f0d860cf4e5f",
1020
+ "index": 87720,
1021
+ "uncovered": true,
1022
+ "nearest_index": 163220,
1023
+ "nearest_rgb": true
1024
+ },
1025
+ {
1026
+ "class_key": "external_right_distinct_B24",
1027
+ "id": "22caad7a50fba7e5a48c",
1028
+ "index": 136367,
1029
+ "uncovered": true,
1030
+ "nearest_index": 192090,
1031
+ "nearest_rgb": true
1032
+ },
1033
+ {
1034
+ "class_key": "external_right_distinct_B25",
1035
+ "id": "2eedd007649d900cef05",
1036
+ "index": 42545,
1037
+ "uncovered": true,
1038
+ "nearest_index": 109532,
1039
+ "nearest_rgb": true
1040
+ },
1041
+ {
1042
+ "class_key": "external_right_distinct_B25",
1043
+ "id": "ef88da2267ff884145a6",
1044
+ "index": 64862,
1045
+ "uncovered": true,
1046
+ "nearest_index": 109532,
1047
+ "nearest_rgb": true
1048
+ },
1049
+ {
1050
+ "class_key": "external_right_distinct_B26",
1051
+ "id": "424addca86b89fee040efda7",
1052
+ "index": 205242,
1053
+ "uncovered": true,
1054
+ "nearest_index": 47387,
1055
+ "nearest_rgb": true
1056
+ },
1057
+ {
1058
+ "class_key": "external_right_distinct_B26",
1059
+ "id": "20223c4b01e8cbdb9d7e",
1060
+ "index": 164345,
1061
+ "uncovered": true,
1062
+ "nearest_index": 207485,
1063
+ "nearest_rgb": true
1064
+ },
1065
+ {
1066
+ "class_key": "external_right_fine_B1",
1067
+ "id": "254c3a1200962ad38d22",
1068
+ "index": 153790,
1069
+ "uncovered": true,
1070
+ "nearest_index": 113631,
1071
+ "nearest_rgb": true
1072
+ },
1073
+ {
1074
+ "class_key": "external_right_fine_B2",
1075
+ "id": "e47ac484c8070191f186",
1076
+ "index": 151238,
1077
+ "uncovered": true,
1078
+ "nearest_index": 26696,
1079
+ "nearest_rgb": true
1080
+ },
1081
+ {
1082
+ "class_key": "external_right_fine_B3",
1083
+ "id": "98b98e2def7c3f01f00a",
1084
+ "index": 49644,
1085
+ "uncovered": true,
1086
+ "nearest_index": 25167,
1087
+ "nearest_rgb": true
1088
+ },
1089
+ {
1090
+ "class_key": "external_right_fine_B4",
1091
+ "id": "dc1f9c23184c42a61af9",
1092
+ "index": 94979,
1093
+ "uncovered": true,
1094
+ "nearest_index": 26698,
1095
+ "nearest_rgb": true
1096
+ },
1097
+ {
1098
+ "class_key": "external_right_fine_B5",
1099
+ "id": "8d1d62e22f778ca48f49",
1100
+ "index": 1354,
1101
+ "uncovered": true,
1102
+ "nearest_index": 118457,
1103
+ "nearest_rgb": true
1104
+ },
1105
+ {
1106
+ "class_key": "external_right_fine_B6",
1107
+ "id": "80cd59ca87c7fbd436b6",
1108
+ "index": 60934,
1109
+ "uncovered": true,
1110
+ "nearest_index": 69125,
1111
+ "nearest_rgb": true
1112
+ },
1113
+ {
1114
+ "class_key": "external_right_fine_B7",
1115
+ "id": "1e5cc53312d1287a5217",
1116
+ "index": 151909,
1117
+ "uncovered": true,
1118
+ "nearest_index": 110754,
1119
+ "nearest_rgb": true
1120
+ },
1121
+ {
1122
+ "class_key": "external_right_fine_B8",
1123
+ "id": "f3858cbf4c0f01d29841",
1124
+ "index": 9051,
1125
+ "uncovered": true,
1126
+ "nearest_index": 137269,
1127
+ "nearest_rgb": true
1128
+ },
1129
+ {
1130
+ "class_key": "external_right_fine_B9",
1131
+ "id": "8fe43e7b67951bdd7e19",
1132
+ "index": 30842,
1133
+ "uncovered": true,
1134
+ "nearest_index": 165814,
1135
+ "nearest_rgb": true
1136
+ },
1137
+ {
1138
+ "class_key": "external_right_fine_B10",
1139
+ "id": "0b30c6ac8b8a0fb34665",
1140
+ "index": 159824,
1141
+ "uncovered": true,
1142
+ "nearest_index": 183822,
1143
+ "nearest_rgb": true
1144
+ },
1145
+ {
1146
+ "class_key": "external_right_fine_B11",
1147
+ "id": "d0a7a93ffcf0c93fb543",
1148
+ "index": 84249,
1149
+ "uncovered": true,
1150
+ "nearest_index": 108571,
1151
+ "nearest_rgb": true
1152
+ },
1153
+ {
1154
+ "class_key": "external_right_fine_B12",
1155
+ "id": "d3c2bb99633d6b4a8aa2",
1156
+ "index": 151895,
1157
+ "uncovered": true,
1158
+ "nearest_index": 107422,
1159
+ "nearest_rgb": true
1160
+ },
1161
+ {
1162
+ "class_key": "external_right_fine_B13",
1163
+ "id": "8d2ec44ad9de28620df2163a",
1164
+ "index": 189261,
1165
+ "uncovered": true,
1166
+ "nearest_index": 81508,
1167
+ "nearest_rgb": true
1168
+ },
1169
+ {
1170
+ "class_key": "external_right_fine_B14",
1171
+ "id": "69f662bcff9f44cb0b0e1834",
1172
+ "index": 184074,
1173
+ "uncovered": true,
1174
+ "nearest_index": 11256,
1175
+ "nearest_rgb": true
1176
+ },
1177
+ {
1178
+ "class_key": "external_right_fine_B15",
1179
+ "id": "0c9121f9b810877ab40a",
1180
+ "index": 142493,
1181
+ "uncovered": true,
1182
+ "nearest_index": 261257,
1183
+ "nearest_rgb": true
1184
+ },
1185
+ {
1186
+ "class_key": "external_right_fine_B16",
1187
+ "id": "58d7c39fa4067efa0e7f0d2b",
1188
+ "index": 181003,
1189
+ "uncovered": true,
1190
+ "nearest_index": 131112,
1191
+ "nearest_rgb": true
1192
+ },
1193
+ {
1194
+ "class_key": "external_right_fine_B17",
1195
+ "id": "1484a4fa916d38805fbd",
1196
+ "index": 85020,
1197
+ "uncovered": true,
1198
+ "nearest_index": 82502,
1199
+ "nearest_rgb": true
1200
+ },
1201
+ {
1202
+ "class_key": "external_right_fine_B18",
1203
+ "id": "d938ae931dbe89e16810f069",
1204
+ "index": 184103,
1205
+ "uncovered": true,
1206
+ "nearest_index": 124769,
1207
+ "nearest_rgb": true
1208
+ },
1209
+ {
1210
+ "class_key": "external_right_fine_B19",
1211
+ "id": "e091bd042f1cd85757bae117",
1212
+ "index": 188317,
1213
+ "uncovered": true,
1214
+ "nearest_index": 115582,
1215
+ "nearest_rgb": true
1216
+ },
1217
+ {
1218
+ "class_key": "external_right_fine_B20",
1219
+ "id": "d14d6bafe0a0440cd6f9e1b5",
1220
+ "index": 187502,
1221
+ "uncovered": true,
1222
+ "nearest_index": 15413,
1223
+ "nearest_rgb": true
1224
+ },
1225
+ {
1226
+ "class_key": "external_right_fine_B21",
1227
+ "id": "a9e4dfb5604a2cc763fa",
1228
+ "index": 142353,
1229
+ "uncovered": true,
1230
+ "nearest_index": 190428,
1231
+ "nearest_rgb": true
1232
+ },
1233
+ {
1234
+ "class_key": "external_right_fine_B22",
1235
+ "id": "d02f389c481d4328e42c",
1236
+ "index": 10113,
1237
+ "uncovered": true,
1238
+ "nearest_index": 167169,
1239
+ "nearest_rgb": true
1240
+ },
1241
+ {
1242
+ "class_key": "external_right_fine_B23",
1243
+ "id": "e233df5f771af8c53fc3",
1244
+ "index": 61233,
1245
+ "uncovered": true,
1246
+ "nearest_index": 51047,
1247
+ "nearest_rgb": true
1248
+ },
1249
+ {
1250
+ "class_key": "external_right_fine_B24",
1251
+ "id": "68b46ceb0f9a5e531f67",
1252
+ "index": 153976,
1253
+ "uncovered": true,
1254
+ "nearest_index": 247928,
1255
+ "nearest_rgb": true
1256
+ },
1257
+ {
1258
+ "class_key": "external_right_fine_B25",
1259
+ "id": "b079d1f7948614710a25",
1260
+ "index": 108271,
1261
+ "uncovered": true,
1262
+ "nearest_index": 108490,
1263
+ "nearest_rgb": true
1264
+ },
1265
+ {
1266
+ "class_key": "external_right_fine_B26",
1267
+ "id": "2d9bbf4c2273c70deb7a",
1268
+ "index": 89262,
1269
+ "uncovered": true,
1270
+ "nearest_index": 35454,
1271
+ "nearest_rgb": true
1272
+ },
1273
+ {
1274
+ "class_key": "external_right_fine_B27",
1275
+ "id": "20223c4b01e8cbdb9d7e",
1276
+ "index": 164345,
1277
+ "uncovered": true,
1278
+ "nearest_index": 207485,
1279
+ "nearest_rgb": true
1280
+ },
1281
+ {
1282
+ "class_key": "external_right_fine_B28",
1283
+ "id": "7013cfedf62948731c5ac3c6",
1284
+ "index": 199078,
1285
+ "uncovered": true,
1286
+ "nearest_index": 145623,
1287
+ "nearest_rgb": true
1288
+ },
1289
+ {
1290
+ "class_key": "external_right_fine_B29",
1291
+ "id": "4d20b3caae3d94f98758",
1292
+ "index": 71890,
1293
+ "uncovered": true,
1294
+ "nearest_index": 3387,
1295
+ "nearest_rgb": true
1296
+ },
1297
+ {
1298
+ "class_key": "external_right_fine_B30",
1299
+ "id": "49a2ec37f0d860cf4e5f",
1300
+ "index": 87720,
1301
+ "uncovered": true,
1302
+ "nearest_index": 163220,
1303
+ "nearest_rgb": true
1304
+ },
1305
+ {
1306
+ "class_key": "external_right_fine_B31",
1307
+ "id": "2eedd007649d900cef05",
1308
+ "index": 42545,
1309
+ "uncovered": true,
1310
+ "nearest_index": 109532,
1311
+ "nearest_rgb": true
1312
+ },
1313
+ {
1314
+ "class_key": "external_right_fine_B32",
1315
+ "id": "5c19a54208a02bfa1018",
1316
+ "index": 155884,
1317
+ "uncovered": true,
1318
+ "nearest_index": 161386,
1319
+ "nearest_rgb": true
1320
+ }
1321
+ ]
1322
+ }
pose_recluster_distinct_20261014/downloads/coverage/display_selection_amendment.json ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ {
2
+ "at": "2026-10-14T06:23:54.572466+00:00",
3
+ "reason": "Some exact nearest-reference hands failed existing image legibility filters; require both sides readable for displayed comparison pairs.",
4
+ "action": "Select another actual uncovered member of the same unchanged class if its exact nearest neighbor has readable calibrated GT RGB overlay. Never change nearest match, coverage metrics, thresholds, or class assignments.",
5
+ "statistical_effect": "None; visualization selection only."
6
+ }
pose_recluster_distinct_20261014/downloads/coverage/displayed_member_links.json ADDED
@@ -0,0 +1,211 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "db1b87ed5e918dbee56a": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/db1b87ed5e918dbee56a_full.jpg",
3
+ "c00e1d95904cb4d3e461": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/c00e1d95904cb4d3e461_full.jpg",
4
+ "e93a7203af92a0bba127": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/e93a7203af92a0bba127_full.jpg",
5
+ "a41106b1f8faadfbd0c6": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/a41106b1f8faadfbd0c6_full.jpg",
6
+ "7cbee0066bf73c1230ec": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/7cbee0066bf73c1230ec_full.jpg",
7
+ "52e61ba8574c1c21171f": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/52e61ba8574c1c21171f_full.jpg",
8
+ "0831e6638e9af7f854bd": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/0831e6638e9af7f854bd_full.jpg",
9
+ "74961c20914e938a0ebc": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/74961c20914e938a0ebc_full.jpg",
10
+ "7a659401c102ee6c4d53": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/7a659401c102ee6c4d53_full.jpg",
11
+ "82270a2b1f87dae6ffed": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/82270a2b1f87dae6ffed_full.jpg",
12
+ "bfb2f241cb856b96b744": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/bfb2f241cb856b96b744_full.jpg",
13
+ "3ddf871100b7fa493f4c": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/3ddf871100b7fa493f4c_full.jpg",
14
+ "c0469034d3cb0c8cfacb": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/c0469034d3cb0c8cfacb_full.jpg",
15
+ "a0e1eafc008fe03615bf": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/a0e1eafc008fe03615bf_full.jpg",
16
+ "1155d85f7d67fdea5ca4": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/1155d85f7d67fdea5ca4_full.jpg",
17
+ "7e9540aab42ca1f283f1": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/7e9540aab42ca1f283f1_full.jpg",
18
+ "9186e37ea320e67eea4cc4b3": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/9186e37ea320e67eea4cc4b3_full.jpg",
19
+ "8fc44d37c06f82c2bccfe0a7": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/8fc44d37c06f82c2bccfe0a7_full.jpg",
20
+ "86c1b3d59b6d91f14ef6": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/86c1b3d59b6d91f14ef6_full.jpg",
21
+ "805d0cb50c887d06f851": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/805d0cb50c887d06f851_full.jpg",
22
+ "f9e4b832088ad843ce26fc9a": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/f9e4b832088ad843ce26fc9a_full.jpg",
23
+ "8bc1231ca5c15b6f5c2d": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/8bc1231ca5c15b6f5c2d_full.jpg",
24
+ "e819135ae0a98c833798": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/e819135ae0a98c833798_full.jpg",
25
+ "1c3e2d6266babd3546e4": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/1c3e2d6266babd3546e4_full.jpg",
26
+ "68c621ec6f25af92b6d2": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/68c621ec6f25af92b6d2_full.jpg",
27
+ "e8ba03215a0dee415f9f": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/e8ba03215a0dee415f9f_full.jpg",
28
+ "a3c7b0983f4f67c9774a9d1d": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/a3c7b0983f4f67c9774a9d1d_full.jpg",
29
+ "9b7689bc046883d6812ad365": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/9b7689bc046883d6812ad365_full.jpg",
30
+ "da0af48ad0dcc8746952": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/da0af48ad0dcc8746952_full.jpg",
31
+ "5d0f3c01b127efb8f0ea": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/5d0f3c01b127efb8f0ea_full.jpg",
32
+ "b11f99d2cf1b5841a9a2": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/b11f99d2cf1b5841a9a2_full.jpg",
33
+ "02ebf54c6583ab82c85f": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/02ebf54c6583ab82c85f_full.jpg",
34
+ "e84ccd22e73178c16b417d29": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/e84ccd22e73178c16b417d29_full.jpg",
35
+ "7ad41e661baf307e75a0": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/7ad41e661baf307e75a0_full.jpg",
36
+ "8e8a96391338bc10f7d1ad8f": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/8e8a96391338bc10f7d1ad8f_full.jpg",
37
+ "68a541e264704eea1631197a": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/68a541e264704eea1631197a_full.jpg",
38
+ "1f23bff3fd47fb3d88e5": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/1f23bff3fd47fb3d88e5_full.jpg",
39
+ "481d81d40a4872823842": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/481d81d40a4872823842_full.jpg",
40
+ "e711d428a3ed73d52639": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/e711d428a3ed73d52639_full.jpg",
41
+ "4f4bd53a317fbe19a459": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/4f4bd53a317fbe19a459_full.jpg",
42
+ "5f6fbeec7ba336848768": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/5f6fbeec7ba336848768_full.jpg",
43
+ "9cfdf2985b9a27f5faf2": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/9cfdf2985b9a27f5faf2_full.jpg",
44
+ "1fa3b8cd32b3624f059f": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/1fa3b8cd32b3624f059f_full.jpg",
45
+ "e6246244f9762ecf8af0": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/e6246244f9762ecf8af0_full.jpg",
46
+ "f8701460479562a2b8576134": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/f8701460479562a2b8576134_full.jpg",
47
+ "d29ab4c17e72adb3d110": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/d29ab4c17e72adb3d110_full.jpg",
48
+ "f814b3e93a1455c11234": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/f814b3e93a1455c11234_full.jpg",
49
+ "c59b63e4de72a20ab1a1": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/c59b63e4de72a20ab1a1_full.jpg",
50
+ "7004ccacdf08558efd9e": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/7004ccacdf08558efd9e_full.jpg",
51
+ "426d44a4aecf394cce74": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/426d44a4aecf394cce74_full.jpg",
52
+ "f627d873be8bbdf466ab2122": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/f627d873be8bbdf466ab2122_full.jpg",
53
+ "e60f1e573b15059b28a6a89d": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/e60f1e573b15059b28a6a89d_full.jpg",
54
+ "051488f34a7b81d90530": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/051488f34a7b81d90530_full.jpg",
55
+ "bd5b4c8d9d1df40c4cb2": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/bd5b4c8d9d1df40c4cb2_full.jpg",
56
+ "e1707af66b16c44ca22f217e": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/e1707af66b16c44ca22f217e_full.jpg",
57
+ "e961198817aa9f71a9c0": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/e961198817aa9f71a9c0_full.jpg",
58
+ "254c3a1200962ad38d22": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/254c3a1200962ad38d22_full.jpg",
59
+ "709270ca3ee8fa046096": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/709270ca3ee8fa046096_full.jpg",
60
+ "e47ac484c8070191f186": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/e47ac484c8070191f186_full.jpg",
61
+ "a739714a796d9e4fcabb": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/a739714a796d9e4fcabb_full.jpg",
62
+ "98b98e2def7c3f01f00a": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/98b98e2def7c3f01f00a_full.jpg",
63
+ "2d7e3d2dfebfdcefaa58": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/2d7e3d2dfebfdcefaa58_full.jpg",
64
+ "dc1f9c23184c42a61af9": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/dc1f9c23184c42a61af9_full.jpg",
65
+ "1747d7dab8779e9564c8": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/1747d7dab8779e9564c8_full.jpg",
66
+ "8d1d62e22f778ca48f49": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/8d1d62e22f778ca48f49_full.jpg",
67
+ "af36ba9b4582f51913dc": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/af36ba9b4582f51913dc_full.jpg",
68
+ "80cd59ca87c7fbd436b6": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/80cd59ca87c7fbd436b6_full.jpg",
69
+ "32f8610b6d892e509529": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/32f8610b6d892e509529_full.jpg",
70
+ "1e5cc53312d1287a5217": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/1e5cc53312d1287a5217_full.jpg",
71
+ "e4ce53c349d02a786e9a8d1b": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/e4ce53c349d02a786e9a8d1b_full.jpg",
72
+ "f3858cbf4c0f01d29841": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/f3858cbf4c0f01d29841_full.jpg",
73
+ "14d0339931252b4aacfe": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/14d0339931252b4aacfe_full.jpg",
74
+ "8fe43e7b67951bdd7e19": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/8fe43e7b67951bdd7e19_full.jpg",
75
+ "8d1150892e449b19b926": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/8d1150892e449b19b926_full.jpg",
76
+ "0b30c6ac8b8a0fb34665": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/0b30c6ac8b8a0fb34665_full.jpg",
77
+ "51fa51d203ef3894e730": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/51fa51d203ef3894e730_full.jpg",
78
+ "d0a7a93ffcf0c93fb543": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/d0a7a93ffcf0c93fb543_full.jpg",
79
+ "4170659ac3b73692c561": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/4170659ac3b73692c561_full.jpg",
80
+ "2c7c9fcf190aa1ce0417a597": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/2c7c9fcf190aa1ce0417a597_full.jpg",
81
+ "34293d5c9114401b8f2fa095": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/34293d5c9114401b8f2fa095_full.jpg",
82
+ "69f662bcff9f44cb0b0e1834": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/69f662bcff9f44cb0b0e1834_full.jpg",
83
+ "7b0803f38879e5bde60f6513": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/7b0803f38879e5bde60f6513_full.jpg",
84
+ "d938ae931dbe89e16810f069": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/d938ae931dbe89e16810f069_full.jpg",
85
+ "5c2691b0661e4d7c91b4": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/5c2691b0661e4d7c91b4_full.jpg",
86
+ "e091bd042f1cd85757bae117": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/e091bd042f1cd85757bae117_full.jpg",
87
+ "cb450b6c00e74c066384": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/cb450b6c00e74c066384_full.jpg",
88
+ "d14d6bafe0a0440cd6f9e1b5": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/d14d6bafe0a0440cd6f9e1b5_full.jpg",
89
+ "39df7a0341e41f8c8537": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/39df7a0341e41f8c8537_full.jpg",
90
+ "26ecc41219db0bb6833e": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/26ecc41219db0bb6833e_full.jpg",
91
+ "78c11495a9b7b3cc64b560e0": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/78c11495a9b7b3cc64b560e0_full.jpg",
92
+ "d02f389c481d4328e42c": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/d02f389c481d4328e42c_full.jpg",
93
+ "44c489639225f513755b": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/44c489639225f513755b_full.jpg",
94
+ "e233df5f771af8c53fc3": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/e233df5f771af8c53fc3_full.jpg",
95
+ "53111882d76eaac38c4b": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/53111882d76eaac38c4b_full.jpg",
96
+ "68b46ceb0f9a5e531f67": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/68b46ceb0f9a5e531f67_full.jpg",
97
+ "fd625216506afacda693": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/fd625216506afacda693_full.jpg",
98
+ "2d9bbf4c2273c70deb7a": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/2d9bbf4c2273c70deb7a_full.jpg",
99
+ "7dca30f7a824c6e29684": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/7dca30f7a824c6e29684_full.jpg",
100
+ "7013cfedf62948731c5ac3c6": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/7013cfedf62948731c5ac3c6_full.jpg",
101
+ "c8f2320b86ea13b9bab5": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/c8f2320b86ea13b9bab5_full.jpg",
102
+ "4d20b3caae3d94f98758": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/4d20b3caae3d94f98758_full.jpg",
103
+ "a7e95de948f4e3c7a9e1": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/a7e95de948f4e3c7a9e1_full.jpg",
104
+ "49a2ec37f0d860cf4e5f": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/49a2ec37f0d860cf4e5f_full.jpg",
105
+ "22caad7a50fba7e5a48c": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/22caad7a50fba7e5a48c_full.jpg",
106
+ "2eedd007649d900cef05": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/2eedd007649d900cef05_full.jpg",
107
+ "ef88da2267ff884145a6": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/ef88da2267ff884145a6_full.jpg",
108
+ "424addca86b89fee040efda7": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/424addca86b89fee040efda7_full.jpg",
109
+ "20223c4b01e8cbdb9d7e": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/20223c4b01e8cbdb9d7e_full.jpg",
110
+ "d3c2bb99633d6b4a8aa2": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/d3c2bb99633d6b4a8aa2_full.jpg",
111
+ "8d2ec44ad9de28620df2163a": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/8d2ec44ad9de28620df2163a_full.jpg",
112
+ "0c9121f9b810877ab40a": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/0c9121f9b810877ab40a_full.jpg",
113
+ "58d7c39fa4067efa0e7f0d2b": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/58d7c39fa4067efa0e7f0d2b_full.jpg",
114
+ "1484a4fa916d38805fbd": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/1484a4fa916d38805fbd_full.jpg",
115
+ "a9e4dfb5604a2cc763fa": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/a9e4dfb5604a2cc763fa_full.jpg",
116
+ "b079d1f7948614710a25": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/b079d1f7948614710a25_full.jpg",
117
+ "5c19a54208a02bfa1018": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/5c19a54208a02bfa1018_full.jpg",
118
+ "20c60d2776a9dc3b0ec8": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/20c60d2776a9dc3b0ec8_full.jpg",
119
+ "5c080f4de66e006fbc92": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/5c080f4de66e006fbc92_full.jpg",
120
+ "7f26c16b0d8aa175372c": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/7f26c16b0d8aa175372c_full.jpg",
121
+ "6b8129effc9e011cdad0": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/6b8129effc9e011cdad0_full.jpg",
122
+ "9ed30c2edbdd030aef57": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/9ed30c2edbdd030aef57_full.jpg",
123
+ "fd4046a079b1c42aa749": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/fd4046a079b1c42aa749_full.jpg",
124
+ "b3690a8306fe0bd68709": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/b3690a8306fe0bd68709_full.jpg",
125
+ "a8e8bfc0b7537d1d5d23": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/a8e8bfc0b7537d1d5d23_full.jpg",
126
+ "3b701e412eac6e6ec2f8": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/3b701e412eac6e6ec2f8_full.jpg",
127
+ "6a39e7065cc041c028c2": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/6a39e7065cc041c028c2_full.jpg",
128
+ "2a04e8b2071dbcaf0b21": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/2a04e8b2071dbcaf0b21_full.jpg",
129
+ "b43d3dd1c354082814044d0e": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/b43d3dd1c354082814044d0e_full.jpg",
130
+ "9d8c31ece9d4ee6356a7": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/9d8c31ece9d4ee6356a7_full.jpg",
131
+ "ff090b11eb8c1c97d1b1": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/ff090b11eb8c1c97d1b1_full.jpg",
132
+ "3e1ce415d92c633a3f85": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/3e1ce415d92c633a3f85_full.jpg",
133
+ "d08484881f3d38e33766": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/d08484881f3d38e33766_full.jpg",
134
+ "0a91aff1c924caef9c59": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/0a91aff1c924caef9c59_full.jpg",
135
+ "9863462cd7d135a71bb3": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/9863462cd7d135a71bb3_full.jpg",
136
+ "2d3c47f19c14df76da56": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/2d3c47f19c14df76da56_full.jpg",
137
+ "9ddd5e2ff6fc35e23ea0": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/9ddd5e2ff6fc35e23ea0_full.jpg",
138
+ "bd73395b46b77bc7bee3": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/bd73395b46b77bc7bee3_full.jpg",
139
+ "d0f8ba263e9e96190bd9": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/d0f8ba263e9e96190bd9_full.jpg",
140
+ "1b2b1b4c410119d7cfc5": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/1b2b1b4c410119d7cfc5_full.jpg",
141
+ "c40d30ee4539a1aad557": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/c40d30ee4539a1aad557_full.jpg",
142
+ "cf79151b6829db78517a": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/cf79151b6829db78517a_full.jpg",
143
+ "9c2e7ff4654460f4030f": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/9c2e7ff4654460f4030f_full.jpg",
144
+ "b382a471a33c59767d22": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/b382a471a33c59767d22_full.jpg",
145
+ "e8157fff2bbabc5fdc1a": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/e8157fff2bbabc5fdc1a_full.jpg",
146
+ "eadcb7a6c5d5159d0502": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/eadcb7a6c5d5159d0502_full.jpg",
147
+ "1e22570256e44ca5e269": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/1e22570256e44ca5e269_full.jpg",
148
+ "134ebf837687cfa8e952": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/134ebf837687cfa8e952_full.jpg",
149
+ "f848dc2f1ddf1d358ca0e9e1": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/f848dc2f1ddf1d358ca0e9e1_full.jpg",
150
+ "9bc5eaf8d5f66ab4eaf1366e": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/9bc5eaf8d5f66ab4eaf1366e_full.jpg",
151
+ "453d2cc14f8d215c7d40": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/453d2cc14f8d215c7d40_full.jpg",
152
+ "d661d3a9870e56a19c91": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/d661d3a9870e56a19c91_full.jpg",
153
+ "4cfeac816d92842bc755": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/4cfeac816d92842bc755_full.jpg",
154
+ "7934f62c76bfb8dd3bf3": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/7934f62c76bfb8dd3bf3_full.jpg",
155
+ "1cee33c2d65b2b8d31488632": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/1cee33c2d65b2b8d31488632_full.jpg",
156
+ "f19d0662245af4c71763": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/f19d0662245af4c71763_full.jpg",
157
+ "a0ec3823330a24e23ac7": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/a0ec3823330a24e23ac7_full.jpg",
158
+ "8b84d67f9a9591409fa9": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/8b84d67f9a9591409fa9_full.jpg",
159
+ "78e18527e166d55d3525": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/78e18527e166d55d3525_full.jpg",
160
+ "f33f695bd926a02bc84e": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/f33f695bd926a02bc84e_full.jpg",
161
+ "d05eba95c7388af49847": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/d05eba95c7388af49847_full.jpg",
162
+ "c9f997fb81d6a0f0bfa6": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/c9f997fb81d6a0f0bfa6_full.jpg",
163
+ "bc0a88a14f599042e4c8": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/bc0a88a14f599042e4c8_full.jpg",
164
+ "8c226dc277f10bf920f4": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/8c226dc277f10bf920f4_full.jpg",
165
+ "081c01ffbf5f40c9c626": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/081c01ffbf5f40c9c626_full.jpg",
166
+ "3530dae0c9383609709c": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/3530dae0c9383609709c_full.jpg",
167
+ "b189f0ca16525621e22c": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/b189f0ca16525621e22c_full.jpg",
168
+ "9abe8f9319fc1dd8b181": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/9abe8f9319fc1dd8b181_full.jpg",
169
+ "beb98201bb70ed75d01f": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/beb98201bb70ed75d01f_full.jpg",
170
+ "837d5b49ed2870bce02c": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/837d5b49ed2870bce02c_full.jpg",
171
+ "ddb44b54d36aad0fd95e": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/ddb44b54d36aad0fd95e_full.jpg",
172
+ "5ffdcab43fdf8bd8d77a": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/5ffdcab43fdf8bd8d77a_full.jpg",
173
+ "52cb790e37fd70a006be": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/52cb790e37fd70a006be_full.jpg",
174
+ "49b54d7b7fe543388921": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/49b54d7b7fe543388921_full.jpg",
175
+ "9b55a0434e2786cd3044": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/9b55a0434e2786cd3044_full.jpg",
176
+ "60da376241f33a59358d": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/60da376241f33a59358d_full.jpg",
177
+ "929a7e1ae727b60ea7d1ea9b": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/929a7e1ae727b60ea7d1ea9b_full.jpg",
178
+ "4c5eaa8433fcd5454daef5c0": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/4c5eaa8433fcd5454daef5c0_full.jpg",
179
+ "b07aba1dd30ac8e1fdce7331": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/b07aba1dd30ac8e1fdce7331_full.jpg",
180
+ "710d7786f3a38656b18f": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/710d7786f3a38656b18f_full.jpg",
181
+ "b8be60f7028743d85681": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/b8be60f7028743d85681_full.jpg",
182
+ "7ebb21a3b4273f1dd48b09c9": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/7ebb21a3b4273f1dd48b09c9_full.jpg",
183
+ "df67e32bd7c4ddbbb7b7450b": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/df67e32bd7c4ddbbb7b7450b_full.jpg",
184
+ "6fad1f8f4e5c7c22de84": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/6fad1f8f4e5c7c22de84_full.jpg",
185
+ "28bca0426553ce0c86fb": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/28bca0426553ce0c86fb_full.jpg",
186
+ "6798e72241e270b425470b9b": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/6798e72241e270b425470b9b_full.jpg",
187
+ "8dc28a66d55468d5294f": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/8dc28a66d55468d5294f_full.jpg",
188
+ "1bcd5b0b4c9e32c95b8b": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/1bcd5b0b4c9e32c95b8b_full.jpg",
189
+ "ec36a53260255c0acc7e": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/ec36a53260255c0acc7e_full.jpg",
190
+ "58cb34d992a93423f4c3": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/58cb34d992a93423f4c3_full.jpg",
191
+ "234e3d230de35765687b": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/234e3d230de35765687b_full.jpg",
192
+ "cebf1ffe5a37c5211573": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/cebf1ffe5a37c5211573_full.jpg",
193
+ "23e1c6c8f4333e4095fa": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/23e1c6c8f4333e4095fa_full.jpg",
194
+ "6b700b801ca204d95fed": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/6b700b801ca204d95fed_full.jpg",
195
+ "2f482daaa7dac33b90eb": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/2f482daaa7dac33b90eb_full.jpg",
196
+ "20dcaf83333f2e3f4cbe": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/20dcaf83333f2e3f4cbe_full.jpg",
197
+ "c9db300d366972b3a8215d28": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/c9db300d366972b3a8215d28_full.jpg",
198
+ "69916ab42c3597853725": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/69916ab42c3597853725_full.jpg",
199
+ "036160382c666ec628fb": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/036160382c666ec628fb_full.jpg",
200
+ "782651881ff23ad1c09b": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/782651881ff23ad1c09b_full.jpg",
201
+ "d153b1fecc063bd3165b9eba": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/d153b1fecc063bd3165b9eba_full.jpg",
202
+ "c3f306e49a6c3e150364": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/c3f306e49a6c3e150364_full.jpg",
203
+ "d33b066d39239ee3a10f": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/d33b066d39239ee3a10f_full.jpg",
204
+ "004cefaa3b38c62c7afd": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/004cefaa3b38c62c7afd_full.jpg",
205
+ "dec34727f0d05d73f816": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/dec34727f0d05d73f816_full.jpg",
206
+ "83aff30dc4ae2ebfb653": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/83aff30dc4ae2ebfb653_full.jpg",
207
+ "9eb3a33796ebaa27149b": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/9eb3a33796ebaa27149b_full.jpg",
208
+ "8660d148153168dafcbc": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/8660d148153168dafcbc_full.jpg",
209
+ "ef2b387c47d87408f51b": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/ef2b387c47d87408f51b_full.jpg",
210
+ "8478ac1fa48b12c6b26d": "https://yangzijing-nine-source-hand-data-browser.static.hf.space/pose_recluster_distinct_20261014/media/8478ac1fa48b12c6b26d_full.jpg"
211
+ }
pose_recluster_distinct_20261014/downloads/coverage/exact_engine.json ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "torch": "2.6.0+cu124",
3
+ "cuda_device": "NVIDIA GeForce RTX 4090",
4
+ "tf32": false,
5
+ "query_tile": 512,
6
+ "bank_tile": 8192,
7
+ "peak_gpu_MB": 433.141248,
8
+ "method": "exhaustive all same-hand reference samples; no ANN approximation",
9
+ "created_at_utc": "2026-10-14T06:13:54.410385+00:00"
10
+ }
pose_recluster_distinct_20261014/downloads/coverage/frozen_protocol_sha256.json ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ {
2
+ "manifests/coverage_protocol.json": "48cb041662614b8918e531c85dc78349e7cc3bef4d9e492d9845d50030789845",
3
+ "manifests/calibration_members.json": "f74899ccfee97ed3a428fadffc877624ee510ce9d6ee471d5402713e5038a2f2"
4
+ }
pose_recluster_distinct_20261014/downloads/coverage/input_sha256.json ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "/SSD3/yangzijing/Hand_pose_recluster_distinct_20261014/manifests/ours_members.json": "dc17aaae371daa90b355f0c2636181147753efa51f27bc3c06779b60679c2cb2",
3
+ "/SSD3/yangzijing/Hand_pose_recluster_distinct_20261014/manifests/external_members.json": "008106eed817345f4075d846e1349dd3961fd8955af31442e9679bf776fd3942",
4
+ "/SSD3/yangzijing/Hand_pose_recluster_distinct_20261014/cache/ours_features.npz": "96783cff16fc78358144cb0380bf48621c8aa1e81ccaf6a15445ac9cc4fc1746",
5
+ "/SSD3/yangzijing/Hand_pose_recluster_distinct_20261014/cache/external_features.npz": "eadbd46e0fb1dbdba3c1fefe02370108663a4671633a9466ed25c1934cf87d0a",
6
+ "/SSD3/yangzijing/Hand_pose_recluster_distinct_20261014/metrics/models.json": "e2853362de79b4239f77fe4c13f741a1e76300a510f2d5d9e7bc9ca435c96a27",
7
+ "/SSD3/yangzijing/Hand_pose_recluster_distinct_20261014/site/index.html": "4e59d6276d02b464b04e48ed265af754ef67307cbd717dcd204e2c23603454c5",
8
+ "/SSD3/yangzijing/Hand_pose_recluster_distinct_20261014/site/app.js": "b6e787014fd7537a6eae3c646bb201c7e007cd5fe41a7543c4f8f978ee4c523f",
9
+ "/SSD3/yangzijing/Hand_pose_recluster_distinct_20261014/site/data.js": "997e6fef0924c363ee59ace9fd64f799332cd78b3e07322cb12963c027c06d66",
10
+ "/SSD3/yangzijing/Hand_pose_recluster_distinct_20261014/site/style.css": "e0b17e70d4fe187df7508453431f608081c7132bc555cd592e122cb484bc4b6d",
11
+ "/SSD3/yangzijing/Hand_pose_recluster_distinct_20261014/cache/ours_left_assignments.npz": "f9ac67fa35d7c8062d526046e2175022bd13cbe51c853b868a2836f0ccaac469",
12
+ "/SSD3/yangzijing/Hand_pose_recluster_distinct_20261014/cache/ours_left_distinct_assignments.npz": "f7acbd35ab14128b6e08a59e038b3884cd54c4fc261ea1783b9c02477a46d35b",
13
+ "/SSD3/yangzijing/Hand_pose_recluster_distinct_20261014/cache/ours_left_fit.npz": "896bde17f799515f495d21b97e63094e6642e11169153a0d62901941999dc1bd",
14
+ "/SSD3/yangzijing/Hand_pose_recluster_distinct_20261014/cache/ours_right_assignments.npz": "7463f514c72226c42e0a675b5ed9b840822d242dc1d61343ed025265f7bbcfdd",
15
+ "/SSD3/yangzijing/Hand_pose_recluster_distinct_20261014/cache/ours_right_distinct_assignments.npz": "f6fde1dfe129863b04db38f7145fcc8f008fe8de46573f4a78fe842db7f73212",
16
+ "/SSD3/yangzijing/Hand_pose_recluster_distinct_20261014/cache/ours_right_fit.npz": "2af416917c7f199ce85c3575d882251b60bd8170e17d5e3444a2ec3b557218a5",
17
+ "/SSD3/yangzijing/Hand_pose_recluster_distinct_20261014/cache/external_left_assignments.npz": "2c313b234a88da737d2aab954ee8513028d6702e1e8b6cc332c8ca068744164e",
18
+ "/SSD3/yangzijing/Hand_pose_recluster_distinct_20261014/cache/external_left_distinct_assignments.npz": "9ceacf48fe9937e3730f906d06aacc35ca27ea30fe4d1b2fa1df867c5ef4b51f",
19
+ "/SSD3/yangzijing/Hand_pose_recluster_distinct_20261014/cache/external_left_fit.npz": "cdc7eaaba39c75ceab1c62fffe7a0d47b4f87ad8e84211b6887e81ecf374c106",
20
+ "/SSD3/yangzijing/Hand_pose_recluster_distinct_20261014/cache/external_right_assignments.npz": "ae8ca50889f414e2b89887d588af6d1d08757ec9a7ddadd53da0dda13f767032",
21
+ "/SSD3/yangzijing/Hand_pose_recluster_distinct_20261014/cache/external_right_distinct_assignments.npz": "00012ba4c5436f8a039870d8874487024631b448d7a7ffcadab41782d1f65f93",
22
+ "/SSD3/yangzijing/Hand_pose_recluster_distinct_20261014/cache/external_right_fit.npz": "250f3c86d17b916eea7f3a5fbe6a0a247a878cbe853eda2fcfe92dbd516d0553"
23
+ }
pose_recluster_distinct_20261014/downloads/coverage/local_coverage_browser.json ADDED
@@ -0,0 +1,474 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "status": "PASS",
3
+ "mode": "local",
4
+ "url": "file:///SSD3/yangzijing/Hand_class_coverage_20261014/site/index.html",
5
+ "coverage_classes": 114,
6
+ "details": [
7
+ {
8
+ "key": "external_right_distinct_B1",
9
+ "images": 4
10
+ },
11
+ {
12
+ "key": "external_right_distinct_B2",
13
+ "images": 4
14
+ },
15
+ {
16
+ "key": "external_right_distinct_B3",
17
+ "images": 4
18
+ },
19
+ {
20
+ "key": "external_right_distinct_B4",
21
+ "images": 4
22
+ },
23
+ {
24
+ "key": "external_right_distinct_B5",
25
+ "images": 5
26
+ },
27
+ {
28
+ "key": "external_right_distinct_B6",
29
+ "images": 4
30
+ },
31
+ {
32
+ "key": "external_right_distinct_B7",
33
+ "images": 6
34
+ },
35
+ {
36
+ "key": "external_right_distinct_B8",
37
+ "images": 4
38
+ },
39
+ {
40
+ "key": "external_right_distinct_B9",
41
+ "images": 6
42
+ },
43
+ {
44
+ "key": "external_right_distinct_B10",
45
+ "images": 6
46
+ },
47
+ {
48
+ "key": "external_right_distinct_B11",
49
+ "images": 6
50
+ },
51
+ {
52
+ "key": "external_right_distinct_B12",
53
+ "images": 6
54
+ },
55
+ {
56
+ "key": "external_right_distinct_B13",
57
+ "images": 5
58
+ },
59
+ {
60
+ "key": "external_right_distinct_B14",
61
+ "images": 4
62
+ },
63
+ {
64
+ "key": "external_right_distinct_B15",
65
+ "images": 4
66
+ },
67
+ {
68
+ "key": "external_right_distinct_B16",
69
+ "images": 6
70
+ },
71
+ {
72
+ "key": "external_right_distinct_B17",
73
+ "images": 6
74
+ },
75
+ {
76
+ "key": "external_right_distinct_B18",
77
+ "images": 5
78
+ },
79
+ {
80
+ "key": "external_right_distinct_B19",
81
+ "images": 6
82
+ },
83
+ {
84
+ "key": "external_right_distinct_B20",
85
+ "images": 4
86
+ },
87
+ {
88
+ "key": "external_right_distinct_B21",
89
+ "images": 4
90
+ },
91
+ {
92
+ "key": "external_right_distinct_B22",
93
+ "images": 6
94
+ },
95
+ {
96
+ "key": "external_right_distinct_B23",
97
+ "images": 4
98
+ },
99
+ {
100
+ "key": "external_right_distinct_B24",
101
+ "images": 6
102
+ },
103
+ {
104
+ "key": "external_right_distinct_B25",
105
+ "images": 4
106
+ },
107
+ {
108
+ "key": "external_right_distinct_B26",
109
+ "images": 6
110
+ },
111
+ {
112
+ "key": "external_right_fine_B1",
113
+ "images": 3
114
+ },
115
+ {
116
+ "key": "external_right_fine_B2",
117
+ "images": 3
118
+ },
119
+ {
120
+ "key": "external_right_fine_B3",
121
+ "images": 3
122
+ },
123
+ {
124
+ "key": "external_right_fine_B4",
125
+ "images": 3
126
+ },
127
+ {
128
+ "key": "external_right_fine_B5",
129
+ "images": 3
130
+ },
131
+ {
132
+ "key": "external_right_fine_B6",
133
+ "images": 3
134
+ },
135
+ {
136
+ "key": "external_right_fine_B7",
137
+ "images": 4
138
+ },
139
+ {
140
+ "key": "external_right_fine_B8",
141
+ "images": 3
142
+ },
143
+ {
144
+ "key": "external_right_fine_B9",
145
+ "images": 4
146
+ },
147
+ {
148
+ "key": "external_right_fine_B10",
149
+ "images": 4
150
+ },
151
+ {
152
+ "key": "external_right_fine_B11",
153
+ "images": 4
154
+ },
155
+ {
156
+ "key": "external_right_fine_B12",
157
+ "images": 4
158
+ },
159
+ {
160
+ "key": "external_right_fine_B13",
161
+ "images": 4
162
+ },
163
+ {
164
+ "key": "external_right_fine_B14",
165
+ "images": 3
166
+ },
167
+ {
168
+ "key": "external_right_fine_B15",
169
+ "images": 4
170
+ },
171
+ {
172
+ "key": "external_right_fine_B16",
173
+ "images": 4
174
+ },
175
+ {
176
+ "key": "external_right_fine_B17",
177
+ "images": 4
178
+ },
179
+ {
180
+ "key": "external_right_fine_B18",
181
+ "images": 3
182
+ },
183
+ {
184
+ "key": "external_right_fine_B19",
185
+ "images": 3
186
+ },
187
+ {
188
+ "key": "external_right_fine_B20",
189
+ "images": 4
190
+ },
191
+ {
192
+ "key": "external_right_fine_B21",
193
+ "images": 4
194
+ },
195
+ {
196
+ "key": "external_right_fine_B22",
197
+ "images": 3
198
+ },
199
+ {
200
+ "key": "external_right_fine_B23",
201
+ "images": 4
202
+ },
203
+ {
204
+ "key": "external_right_fine_B24",
205
+ "images": 3
206
+ },
207
+ {
208
+ "key": "external_right_fine_B25",
209
+ "images": 4
210
+ },
211
+ {
212
+ "key": "external_right_fine_B26",
213
+ "images": 3
214
+ },
215
+ {
216
+ "key": "external_right_fine_B27",
217
+ "images": 4
218
+ },
219
+ {
220
+ "key": "external_right_fine_B28",
221
+ "images": 4
222
+ },
223
+ {
224
+ "key": "external_right_fine_B29",
225
+ "images": 3
226
+ },
227
+ {
228
+ "key": "external_right_fine_B30",
229
+ "images": 4
230
+ },
231
+ {
232
+ "key": "external_right_fine_B31",
233
+ "images": 3
234
+ },
235
+ {
236
+ "key": "external_right_fine_B32",
237
+ "images": 4
238
+ },
239
+ {
240
+ "key": "external_left_distinct_B1",
241
+ "images": 4
242
+ },
243
+ {
244
+ "key": "external_left_distinct_B2",
245
+ "images": 5
246
+ },
247
+ {
248
+ "key": "external_left_distinct_B3",
249
+ "images": 6
250
+ },
251
+ {
252
+ "key": "external_left_distinct_B4",
253
+ "images": 4
254
+ },
255
+ {
256
+ "key": "external_left_distinct_B5",
257
+ "images": 6
258
+ },
259
+ {
260
+ "key": "external_left_distinct_B6",
261
+ "images": 4
262
+ },
263
+ {
264
+ "key": "external_left_distinct_B7",
265
+ "images": 4
266
+ },
267
+ {
268
+ "key": "external_left_distinct_B8",
269
+ "images": 6
270
+ },
271
+ {
272
+ "key": "external_left_distinct_B9",
273
+ "images": 6
274
+ },
275
+ {
276
+ "key": "external_left_distinct_B10",
277
+ "images": 4
278
+ },
279
+ {
280
+ "key": "external_left_distinct_B11",
281
+ "images": 6
282
+ },
283
+ {
284
+ "key": "external_left_distinct_B12",
285
+ "images": 6
286
+ },
287
+ {
288
+ "key": "external_left_distinct_B13",
289
+ "images": 6
290
+ },
291
+ {
292
+ "key": "external_left_distinct_B14",
293
+ "images": 6
294
+ },
295
+ {
296
+ "key": "external_left_distinct_B15",
297
+ "images": 6
298
+ },
299
+ {
300
+ "key": "external_left_distinct_B16",
301
+ "images": 4
302
+ },
303
+ {
304
+ "key": "external_left_distinct_B17",
305
+ "images": 6
306
+ },
307
+ {
308
+ "key": "external_left_distinct_B18",
309
+ "images": 4
310
+ },
311
+ {
312
+ "key": "external_left_distinct_B19",
313
+ "images": 6
314
+ },
315
+ {
316
+ "key": "external_left_distinct_B20",
317
+ "images": 6
318
+ },
319
+ {
320
+ "key": "external_left_distinct_B21",
321
+ "images": 4
322
+ },
323
+ {
324
+ "key": "external_left_distinct_B22",
325
+ "images": 4
326
+ },
327
+ {
328
+ "key": "external_left_distinct_B23",
329
+ "images": 5
330
+ },
331
+ {
332
+ "key": "external_left_distinct_B24",
333
+ "images": 4
334
+ },
335
+ {
336
+ "key": "external_left_fine_B1",
337
+ "images": 3
338
+ },
339
+ {
340
+ "key": "external_left_fine_B2",
341
+ "images": 4
342
+ },
343
+ {
344
+ "key": "external_left_fine_B3",
345
+ "images": 4
346
+ },
347
+ {
348
+ "key": "external_left_fine_B4",
349
+ "images": 3
350
+ },
351
+ {
352
+ "key": "external_left_fine_B5",
353
+ "images": 4
354
+ },
355
+ {
356
+ "key": "external_left_fine_B6",
357
+ "images": 3
358
+ },
359
+ {
360
+ "key": "external_left_fine_B7",
361
+ "images": 3
362
+ },
363
+ {
364
+ "key": "external_left_fine_B8",
365
+ "images": 4
366
+ },
367
+ {
368
+ "key": "external_left_fine_B9",
369
+ "images": 4
370
+ },
371
+ {
372
+ "key": "external_left_fine_B10",
373
+ "images": 4
374
+ },
375
+ {
376
+ "key": "external_left_fine_B11",
377
+ "images": 3
378
+ },
379
+ {
380
+ "key": "external_left_fine_B12",
381
+ "images": 4
382
+ },
383
+ {
384
+ "key": "external_left_fine_B13",
385
+ "images": 4
386
+ },
387
+ {
388
+ "key": "external_left_fine_B14",
389
+ "images": 4
390
+ },
391
+ {
392
+ "key": "external_left_fine_B15",
393
+ "images": 4
394
+ },
395
+ {
396
+ "key": "external_left_fine_B16",
397
+ "images": 4
398
+ },
399
+ {
400
+ "key": "external_left_fine_B17",
401
+ "images": 4
402
+ },
403
+ {
404
+ "key": "external_left_fine_B18",
405
+ "images": 4
406
+ },
407
+ {
408
+ "key": "external_left_fine_B19",
409
+ "images": 4
410
+ },
411
+ {
412
+ "key": "external_left_fine_B20",
413
+ "images": 3
414
+ },
415
+ {
416
+ "key": "external_left_fine_B21",
417
+ "images": 4
418
+ },
419
+ {
420
+ "key": "external_left_fine_B22",
421
+ "images": 3
422
+ },
423
+ {
424
+ "key": "external_left_fine_B23",
425
+ "images": 4
426
+ },
427
+ {
428
+ "key": "external_left_fine_B24",
429
+ "images": 4
430
+ },
431
+ {
432
+ "key": "external_left_fine_B25",
433
+ "images": 4
434
+ },
435
+ {
436
+ "key": "external_left_fine_B26",
437
+ "images": 4
438
+ },
439
+ {
440
+ "key": "external_left_fine_B27",
441
+ "images": 3
442
+ },
443
+ {
444
+ "key": "external_left_fine_B28",
445
+ "images": 3
446
+ },
447
+ {
448
+ "key": "external_left_fine_B29",
449
+ "images": 4
450
+ },
451
+ {
452
+ "key": "external_left_fine_B30",
453
+ "images": 4
454
+ },
455
+ {
456
+ "key": "external_left_fine_B31",
457
+ "images": 4
458
+ },
459
+ {
460
+ "key": "external_left_fine_B32",
461
+ "images": 3
462
+ }
463
+ ],
464
+ "source_rows": 18,
465
+ "coverage_filters": true,
466
+ "coverage_sort": true,
467
+ "compare_filter": true,
468
+ "direct_class_hash": true,
469
+ "interhand_and_2d_galleries": true,
470
+ "mobile_no_overflow": true,
471
+ "page_errors": [],
472
+ "http_events": [],
473
+ "images_decoded": true
474
+ }
pose_recluster_distinct_20261014/downloads/coverage/member_coverage.csv.gz ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:082a8531f273cafc8062daade1123570aed3b8d0e232e1841bae17dfd2b5c533
3
+ size 10757577
pose_recluster_distinct_20261014/downloads/coverage/new_media_sha256.json ADDED
@@ -0,0 +1,444 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "media/02ebf54c6583ab82c85f_crop.jpg": "e88c5de083e62d7929bb113f3ffe111ddcd8b89c8f941b520c5278ca51b5e7b3",
3
+ "media/02ebf54c6583ab82c85f_full.jpg": "0dad8886cb5608fd5c0799fd6b915b3f842324e3843a7713379c06bda10b442e",
4
+ "media/051488f34a7b81d90530_crop.jpg": "894a9c1433746f77b2be59188eebd01dbce61dc74756fea6a7c4434dd99f7a33",
5
+ "media/051488f34a7b81d90530_full.jpg": "d7be802efdf7cb9e4fb2fafd0880beab9d7a614f8fcd9bf091062bdcb2fc8f4f",
6
+ "media/0706b91076bbbfac27c5_crop.jpg": "27c8318bebee8f48aeac8cd948ec2db6df8fe23741814c90f9dd604b10d844d3",
7
+ "media/0706b91076bbbfac27c5_full.jpg": "0123a2debc7c13a02e9da2db1a0e95f92d6a8600d91f18e9990ebfb1183b5fed",
8
+ "media/0831e6638e9af7f854bd_crop.jpg": "adf001a2d9e588a391fd154822b6ee60da42dc3b9970c5bef127cfe1a5207176",
9
+ "media/0831e6638e9af7f854bd_full.jpg": "a8cb62fd5637d7b65810c038cd00adeb13ae235a2f54dbe36133c620298c38fd",
10
+ "media/0b30c6ac8b8a0fb34665_crop.jpg": "6802711a0bfa2a5a38e014c39e6b3bcf4750c2cdbd6f061599aca945e7829813",
11
+ "media/0b30c6ac8b8a0fb34665_full.jpg": "366cb2413797c73aad38cc2fc0fdd77ab6f5d634200e1050f3e3f38447832ff6",
12
+ "media/0c9121f9b810877ab40a_crop.jpg": "28380741f98b8ca4ef03e6d1d1086447f4bc5a3912a29816d0f1de3fc4d3bb4d",
13
+ "media/0c9121f9b810877ab40a_full.jpg": "0dd7f079486e5bade23115ddb305ce903d1330ccf44a133166d70ec628cbd218",
14
+ "media/1155d85f7d67fdea5ca4_crop.jpg": "8d324de9e47b494ea1ded562a8bcf9ef71a19eb8f1d0c0888a4f840d06a583d3",
15
+ "media/1155d85f7d67fdea5ca4_full.jpg": "aa550a631a638bb57bb5b0fa248787f7cfcfea2f12cd764de0d07e60fefc09f4",
16
+ "media/1484a4fa916d38805fbd_crop.jpg": "49d7637de45e79ae38336bd68dc221973e2a847941f1cbdbd8adff02a98a14bd",
17
+ "media/1484a4fa916d38805fbd_full.jpg": "4b29bff2e0027d8c95c21c4b148ebe3c8b34becd412dd0ae5b3d0b83e4b2d3a7",
18
+ "media/14d0339931252b4aacfe_crop.jpg": "344b1b64c277bc244908ddaa85e05d8724d9a9124d3ed681e1e11317b03d27c2",
19
+ "media/14d0339931252b4aacfe_full.jpg": "6d0333f66703748cd7cd947c80a9bb1aab7fa3dd02d68f0050d629ef9b10ebea",
20
+ "media/1747d7dab8779e9564c8_crop.jpg": "698a6e6cd9fe3d23a3fdfbf9aa92e54a61678d9580269d40da56dc8c5cc02d4f",
21
+ "media/1747d7dab8779e9564c8_full.jpg": "5bc1bc0fbea9f534b660abb4a17b10ad2ebda0998d7f651383760977d0948c35",
22
+ "media/1c3e2d6266babd3546e4_crop.jpg": "62b414d36f5a73f57514edbb0dac11b2cb1c77feeaf6d300cd05d8800d6e8e5c",
23
+ "media/1c3e2d6266babd3546e4_full.jpg": "9ff4f39c12c647f12b4a6b5466a6c385bf5208075e6af861b548adce25505728",
24
+ "media/1e5cc53312d1287a5217_crop.jpg": "7f939d3566417e393285cd2a38a777fcf005317b7c52bf7fc82de947701ec4e1",
25
+ "media/1e5cc53312d1287a5217_full.jpg": "9130efda6ce5084f2e3bc1c66b7a52a41e58adb69b3e31b0b0585eeb1efbba4d",
26
+ "media/1f23bff3fd47fb3d88e5_crop.jpg": "3ab9228f00261fc19a9c4f7962833955f9429a8504afcf7ad3a43138def806bc",
27
+ "media/1f23bff3fd47fb3d88e5_full.jpg": "66e6656da175446596a98187b528e94b20750d20f6e0a033ec4d2b7e802d8ff2",
28
+ "media/1fa3b8cd32b3624f059f_crop.jpg": "38ee59714ba5bac7428c96ef8bc648be96797d4191cd842f6daee032f75937c3",
29
+ "media/1fa3b8cd32b3624f059f_full.jpg": "69172904d7097e55222d279b119de7778c66bfa6e4fe414df64d9cf7b9f8e04f",
30
+ "media/20223c4b01e8cbdb9d7e_crop.jpg": "b8cefc35ac033358c54053e22389707f55175d9944094f780d0c8d85c9d7c6c9",
31
+ "media/20223c4b01e8cbdb9d7e_full.jpg": "a81eae3136f9d8cf97103813f75453a0dc4e54fc4dfa068dfeba0d5da87ad61d",
32
+ "media/22caad7a50fba7e5a48c_crop.jpg": "d875029517f4fe647b01fbb51d4d40a0854d762d4d166a3d15d990ab6d477ce9",
33
+ "media/22caad7a50fba7e5a48c_full.jpg": "14bb111822b201319ab5a3766ef7c172891088f1dcaccfbad181e3d5bfade3b2",
34
+ "media/254c3a1200962ad38d22_crop.jpg": "5148fff2409c4431b186bbb7a982ef0f63311ee60380c913218c9069d2b113f8",
35
+ "media/254c3a1200962ad38d22_full.jpg": "d5cb3e50d0179ba3aa20f8a0b8bfc4d337bbac392350d35a4f275d2803d04f6f",
36
+ "media/26ecc41219db0bb6833e_crop.jpg": "80933c4b50a685e11d424b5d9859d83a22b266ab77ff64291b9a55d316704fef",
37
+ "media/26ecc41219db0bb6833e_full.jpg": "493129d67d262ee9e3360a2b0857d57ac64d69eaab595266901f502fb5e9eb0c",
38
+ "media/2c7c9fcf190aa1ce0417a597_crop.jpg": "b0338385a82e5cbc904b91971d336706072a7ac6bcb8b6a1325553bdc845c7da",
39
+ "media/2c7c9fcf190aa1ce0417a597_full.jpg": "822820d93936854a1b73141eda2059e6f7fc72d28507a6c30281af6f5df961ce",
40
+ "media/2d7e3d2dfebfdcefaa58_crop.jpg": "4c8be5be9581a05ba4ab28185261c21c8dba8c68cacfef82f282f40b2835aca4",
41
+ "media/2d7e3d2dfebfdcefaa58_full.jpg": "076b180289e76059951197a07bbd7749417c913e01690a0b4212776cb4ad0221",
42
+ "media/2d9bbf4c2273c70deb7a_crop.jpg": "7d1ec3d551e9af36527a20e1273225a7e55b6af219451244054074210e8c9976",
43
+ "media/2d9bbf4c2273c70deb7a_full.jpg": "1358af55619ac2417c04556aa3719e2ccebd2eda98010a61b928991e8ba55080",
44
+ "media/2eedd007649d900cef05_crop.jpg": "763faa66c576fef95efc73780058094b080f2b1e7a3dc1fa4d39f218a674f270",
45
+ "media/2eedd007649d900cef05_full.jpg": "376220d8aade4d81f03d577e6af0335db6f61463dbd7e288dba2b18970df2506",
46
+ "media/314f2995e77109844488_crop.jpg": "0d0a9156df3dd3bfbadc2f6d63392d6dc743e4d1447c98f0805e516845ca2d5d",
47
+ "media/314f2995e77109844488_full.jpg": "0966b113b7c4d287a28f6405b7e252016e27928ec1c620468b44dd5fb0b3c579",
48
+ "media/32f8610b6d892e509529_crop.jpg": "ee6cf859753433528246d1319ba36b5ef2375733a6d99ee3410436641ea6a9aa",
49
+ "media/32f8610b6d892e509529_full.jpg": "e4512c3b5dac19ed26cd6720d9b0d84b66af9301be35c8a1a5ae720398363a11",
50
+ "media/34293d5c9114401b8f2fa095_crop.jpg": "16c96fe0dbbab9505236820908469a3ce242c858ad6ddaf33574b88af98ff641",
51
+ "media/34293d5c9114401b8f2fa095_full.jpg": "475e6cc96f63f7e462ebfa9fd96fb84b0a23b0fcad719a8756c09302ae726692",
52
+ "media/39df7a0341e41f8c8537_crop.jpg": "59598cc2a6b0cdeda765fc01d06b9ec82b8904bcfa105319a188bc1d82f6884d",
53
+ "media/39df7a0341e41f8c8537_full.jpg": "2c67133913b83b7fd5c5b552174db7dc55b79b66714f269143c305e74112ce22",
54
+ "media/3ddf871100b7fa493f4c_crop.jpg": "445f3ed9e9e7da78851e125e0c9fcecea7b5578707758609840fd8705d37203b",
55
+ "media/3ddf871100b7fa493f4c_full.jpg": "e466d55ce9743aca55f9f8b9040ff7f53f08f3539d5ec32f9fc232e7ae6d6cfc",
56
+ "media/3fb96c47d1e53b61c15a_crop.jpg": "945dfbeade0f2ba516fc55f2cefef01199221c1076fb4013f5cc2867919f716c",
57
+ "media/3fb96c47d1e53b61c15a_full.jpg": "b4c5e77e34a03a795b11ea1d475950a6f9f3389e05b3902cfe40aa525a31387a",
58
+ "media/4170659ac3b73692c561_crop.jpg": "f5b7375c1732753d7394125511adcfd4b77ef70eb2a22c342a920baa4d58af49",
59
+ "media/4170659ac3b73692c561_full.jpg": "a02e9fec18044536fac4ef977da0f249eae43d8fab018ca203d00778de985786",
60
+ "media/424addca86b89fee040efda7_crop.jpg": "4febc91b6915fa930c6ca3b440d861cd28100ca114e559bdbd009c413dcb766f",
61
+ "media/424addca86b89fee040efda7_full.jpg": "664c8d1cc6fbd301ccfb1f413acb1e11ed9ede4948f4da6691c95f4309befcd3",
62
+ "media/426d44a4aecf394cce74_crop.jpg": "f8189340409b46da33cd386edddb88b8878250598878c763170918256059ecb6",
63
+ "media/426d44a4aecf394cce74_full.jpg": "18850a63b36b2582db005bdd3df4c51dd6e07fe62f369fdb8ff57a7386bf4f0b",
64
+ "media/44c489639225f513755b_crop.jpg": "8d95e0a4fe1621a2e6cd4eda997a53afd02f67a66c6b8f44231b0a8618b82158",
65
+ "media/44c489639225f513755b_full.jpg": "38ce0b88333caad632cd894df209591101c34f326598fbf7a34677597aa4532c",
66
+ "media/481d81d40a4872823842_crop.jpg": "1f15e12c86e217a3475c6f8a1f2645a0aaada1235ee2138892e7c01606f70b1c",
67
+ "media/481d81d40a4872823842_full.jpg": "b005b6c381f6c03a1ae5f2123176d6b2a11ab400bfa5422912e9d82b740aa6a4",
68
+ "media/49a2ec37f0d860cf4e5f_crop.jpg": "e0f92b906c958bb03d5538f977883dc75e053602d1eef3d4f71e5a33cdf46a98",
69
+ "media/49a2ec37f0d860cf4e5f_full.jpg": "7beeee36f84bf8a10fb3d7004bce0d1d29b121da91a20eea61f12d8308abce78",
70
+ "media/4d20b3caae3d94f98758_crop.jpg": "4e8026090c0e61ca6b7e73df2b77aef63b1243af125581b4f798a424b2f8e139",
71
+ "media/4d20b3caae3d94f98758_full.jpg": "adcc5e07f07190b9b39eba59073beccfcce0ccaa1400b323cfc6d7af44953a7e",
72
+ "media/4f4bd53a317fbe19a459_crop.jpg": "85510f027cb578d9979278b6f6a815f7ceefe9a853b3b3cbbd0f914a673e6035",
73
+ "media/4f4bd53a317fbe19a459_full.jpg": "0ebb303e9a310097a529d4f437fc14e7de8cb7ac34abe32e7ebaa7b1e138ae0a",
74
+ "media/51fa51d203ef3894e730_crop.jpg": "12b2551e7b440c4fa5fad1af4131c8b1eaa2b64a52101f5d0d8b1f7a7f8741ff",
75
+ "media/51fa51d203ef3894e730_full.jpg": "9e5bcc77d0f982f78aab290b2f932576d0f1af744de1c4a47537fb7e33819aeb",
76
+ "media/52e61ba8574c1c21171f_crop.jpg": "ca3ee37423c0ca65ec6ee7d3dcba7a6a7bd72266fff42b83328e9130813a2dd5",
77
+ "media/52e61ba8574c1c21171f_full.jpg": "9449efee83031ba41e0398c670777797c7cec05f81e2c9e9963c1e51cb83bbdf",
78
+ "media/53111882d76eaac38c4b_crop.jpg": "4428702fd940ea940251f8e1e99d1a4aa98c6c64dd6e9f91b889c281bdf42f80",
79
+ "media/53111882d76eaac38c4b_full.jpg": "a67c272894417f3e5821b0ef72a758e11923f4e39f67fa722d7a5105cafcd2ec",
80
+ "media/58d7c39fa4067efa0e7f0d2b_crop.jpg": "3042fe3fc9583f9dace620e6c87f82cf8593f669931c59caf86a93d363da43a1",
81
+ "media/58d7c39fa4067efa0e7f0d2b_full.jpg": "96c615dbaab1ec225a1de11bfba01519976e6a4e55e9b662083afb5e7ee614fd",
82
+ "media/5c19a54208a02bfa1018_crop.jpg": "3d9537979e9c751a4c5542bbf484014c40efcd691adfa04a51339445261b4143",
83
+ "media/5c19a54208a02bfa1018_full.jpg": "b74a42d169e5bcfd9271beb8a02d173bd32cf31cb9c334fa44c563dd13e3e21f",
84
+ "media/5c2691b0661e4d7c91b4_crop.jpg": "08ccf98919b6140a744b37ba8e8949fcf317605a4c427bc622a5e8a7dc379cd9",
85
+ "media/5c2691b0661e4d7c91b4_full.jpg": "12ed7f9c55060ed5e611bab3453417a1bff0133d70f053af5e7a29862b045c35",
86
+ "media/5d0f3c01b127efb8f0ea_crop.jpg": "d9aa35816a850715909dd0b437180f15ffe8c4ceffdb41aa1c328ed63a6b75e4",
87
+ "media/5d0f3c01b127efb8f0ea_full.jpg": "3d9658fe033840c69ebe35156acd02278a93894a28322e48f4d4d1f6009201e1",
88
+ "media/5f6fbeec7ba336848768_crop.jpg": "0c3c9432b387687390b92ee430cec301177dc15b1692a1e2bf24d23365c1aaf3",
89
+ "media/5f6fbeec7ba336848768_full.jpg": "c4a175d1b1cb9e304e6c1d864e5e2f1e79e3e51a6aae67a4989af4df837b441e",
90
+ "media/68a541e264704eea1631197a_crop.jpg": "8260153929d3470df6d58fcb907cfc0bbfbe37feca1aa322f73bff544bcd7ab8",
91
+ "media/68a541e264704eea1631197a_full.jpg": "30fc2a798c569348f3c4c738717a50e8e04f40c6a1ddc99c51e7b7e95f18b56f",
92
+ "media/68b46ceb0f9a5e531f67_crop.jpg": "32e7abe4cba2b097d5f714c8e57130f286d4aacd2da75d6781500f1822442045",
93
+ "media/68b46ceb0f9a5e531f67_full.jpg": "922b34939d0d2dcd50cb9226dce5be9a0f3498d3939dcbdee6acee1f750e166b",
94
+ "media/68c621ec6f25af92b6d2_crop.jpg": "de30c35943b88bb2e8fd6d8114fd7e8758e34e8322e321a8cda88dbd24b9c005",
95
+ "media/68c621ec6f25af92b6d2_full.jpg": "e504eb965ba52c36408c3a4e355b5c358bcf5f40a20330884cdcc309c84f0b08",
96
+ "media/69f662bcff9f44cb0b0e1834_crop.jpg": "d7105938fb398d0cfc9b7be83a02c95dc75d1494a3dc27173ff43d11a814cd1c",
97
+ "media/69f662bcff9f44cb0b0e1834_full.jpg": "1d21de570db3eef11a04f6d0e92daf4bf43c961af1a7da242c903ace7174cdfb",
98
+ "media/7004ccacdf08558efd9e_crop.jpg": "433a48204fc1fce90cb0428d105f52b8291dec7001d91ddabe7ca5fca7b26ced",
99
+ "media/7004ccacdf08558efd9e_full.jpg": "96d02831e02d6a88c4ce3b3e8bbdc830bb25312307729a7988cbca9f35259c24",
100
+ "media/7013cfedf62948731c5ac3c6_crop.jpg": "be2cd256c5cac95c3ef9e23197d7434c44360e1fceda9192cf70ee7fdf45c98c",
101
+ "media/7013cfedf62948731c5ac3c6_full.jpg": "864af0cf798cc894684097ad187694f703d2cedfe4bf5d7a50a1a0426261beff",
102
+ "media/709270ca3ee8fa046096_crop.jpg": "fcb03eee7a18d761e1bcddf87dcb2bba431ef2efd547bfefb6d815cd90611403",
103
+ "media/709270ca3ee8fa046096_full.jpg": "a0c783a9e909f3f42767486ce0261d942045c5c6442dc145d3b9121a45fb1da1",
104
+ "media/74961c20914e938a0ebc_crop.jpg": "40a3b7124767e105507066e82635dfa854233771d1f6874b8abd3527b16c522c",
105
+ "media/74961c20914e938a0ebc_full.jpg": "41502366e8e95957f7b1ea318da92839d76265555a32a51ac051b62f7ad6cdac",
106
+ "media/78c11495a9b7b3cc64b560e0_crop.jpg": "502ba4382004118b176e085ad9b73beb12f46394f2d1eb0333d45f407ca3344c",
107
+ "media/78c11495a9b7b3cc64b560e0_full.jpg": "af08ff9dfd1255e239e50d0af3b0b2f409c506241eccc60d71dd2c14d1a99190",
108
+ "media/7a659401c102ee6c4d53_crop.jpg": "fe7801f422af5dc09a07b603d167c73b07c01e5e500ffb50059e3d740fd8654c",
109
+ "media/7a659401c102ee6c4d53_full.jpg": "d443a6db012b656362c56fd13f27ac917ff3ba476e2fb4b6a1ce563df92f2934",
110
+ "media/7ad41e661baf307e75a0_crop.jpg": "ad22e91204d518ca801a7befc8a9008e2280dd99789e16d2e84fbcbd5be966f9",
111
+ "media/7ad41e661baf307e75a0_full.jpg": "56d654937c96fd762368020ddfd9466e985038395998a87be595d8472fe77e75",
112
+ "media/7b0803f38879e5bde60f6513_crop.jpg": "cb952c04a2a57dc64ec28a4c08449dccf16e20087526167ef14908885df3e23d",
113
+ "media/7b0803f38879e5bde60f6513_full.jpg": "2aae6ccbef0bdd7ec02926cc68e8060ca0a9a9136a9c81deec2f36719ee68658",
114
+ "media/7cbee0066bf73c1230ec_crop.jpg": "18972eedfd9b16e017cacc5329be4499df5519222b73e9f1e338406a1e276f44",
115
+ "media/7cbee0066bf73c1230ec_full.jpg": "827baba452a3359edce10ea272c784d16aed37e662db13112c31e770edbd3797",
116
+ "media/7dca30f7a824c6e29684_crop.jpg": "42f1ef5c78b541dc3f0a8d7b2d6f5bb570d27629cf6f0ae2410e693d89005f23",
117
+ "media/7dca30f7a824c6e29684_full.jpg": "bf86eb42ba391065d83cfd0c6f89063d390f16cc2e0626824140fbded73c7986",
118
+ "media/7e9540aab42ca1f283f1_crop.jpg": "d5f04b46107e419d5e8c0663d3ef3b7f3ca953a765ff08f448d852a4639feb8e",
119
+ "media/7e9540aab42ca1f283f1_full.jpg": "8cbf0e507bbefe0bef887835948a6c76db8f781ef5c6d8302582e0e30a09e092",
120
+ "media/805d0cb50c887d06f851_crop.jpg": "778dbf7e64b878db749dd74758b025c96261dfc0bc29f2065fc7c84a080f8dc3",
121
+ "media/805d0cb50c887d06f851_full.jpg": "a0105b3edfa7da2940f6d4c491ca8a9b8835adf00ceace9de7994e9f80f7fb67",
122
+ "media/80cd59ca87c7fbd436b6_crop.jpg": "675dcaf4b381bff246c71720ef17b364b019de7d2f0e8d01038293dd0d289311",
123
+ "media/80cd59ca87c7fbd436b6_full.jpg": "b4367c1a9ec2bc75f19127fbe60c85d7d33c87248089fa66c0923f8b348bb92d",
124
+ "media/82270a2b1f87dae6ffed_crop.jpg": "e29ebb403323037466d0c89f32a86ee32ab7015b7ee94125cb58e39e887eaf4d",
125
+ "media/82270a2b1f87dae6ffed_full.jpg": "809fd575b0c5dee42c50300272266b6575598a2d132050965907ad273392d8dc",
126
+ "media/86c1b3d59b6d91f14ef6_crop.jpg": "d3557f5459b111245658c905fbbbbf58f1fb14620e5dc214e20b2fdeaa63c2f4",
127
+ "media/86c1b3d59b6d91f14ef6_full.jpg": "8bc7b6e678a58c33d503c1da34e57d7d89cae209453f767f86ea4d3840c8222b",
128
+ "media/8bc1231ca5c15b6f5c2d_crop.jpg": "62d7c4b5c295e7315e73d3da48035dfc298619ef7df25ab0198d19c466ee9371",
129
+ "media/8bc1231ca5c15b6f5c2d_full.jpg": "d7ed6bcc93070b35944ad1559fa8c1fc84f473628de463072b4d7ceeef7cfd64",
130
+ "media/8d1150892e449b19b926_crop.jpg": "b1728f861df1b658db0ef04f667afead0787ef9fe460671dbaee532d2a89bcc5",
131
+ "media/8d1150892e449b19b926_full.jpg": "d7413746453cacfb806282b47ded78a635516c9f2974444a08de791e32d9a45b",
132
+ "media/8d1d62e22f778ca48f49_crop.jpg": "f78565fa02e36409e916f20db1701e36e302685121beeeda2d6a01dee4bbf675",
133
+ "media/8d1d62e22f778ca48f49_full.jpg": "69de01ad4013ff357db9bbf06af370540b98756adba29629020387336a9f493d",
134
+ "media/8d2ec44ad9de28620df2163a_crop.jpg": "18c561d0b4628606295807139f2801521bdfe533d64037ad7141e820fb295a18",
135
+ "media/8d2ec44ad9de28620df2163a_full.jpg": "ff798078096066ae1ff84ebedf460d521d82c29cc6b6165353a6b10e45996f8d",
136
+ "media/8e8a96391338bc10f7d1ad8f_crop.jpg": "1625b6e888fca8fd2c905131640efbf5c6454694bb351bbceb0661733d4822f9",
137
+ "media/8e8a96391338bc10f7d1ad8f_full.jpg": "73534b214ed4b689d6ee9df3f42fb83ff1b0f2fff66e229803206dbb5d7ebae5",
138
+ "media/8fc44d37c06f82c2bccfe0a7_crop.jpg": "6be8eb9cb423cd4d32f6338c9591168186532f64795411ec2e8aa49f05292a54",
139
+ "media/8fc44d37c06f82c2bccfe0a7_full.jpg": "fd82f3c62c24682233c3ef67f709217fcf8d714a9d6a14b19f951f2a2449da75",
140
+ "media/8fe43e7b67951bdd7e19_crop.jpg": "f3de6477fd6cc228184e08cdf20b5a1df1aa560f5d83699304ceec3fb153c032",
141
+ "media/8fe43e7b67951bdd7e19_full.jpg": "cf74cf6769ae1704ec1cd4c6d979026abb45a95336ba60755649b12da7a1f25a",
142
+ "media/9186e37ea320e67eea4cc4b3_crop.jpg": "fa5770b0c4b188f90d714d3ccc6671a17afd217377efa4e692eeeb3a533b2f81",
143
+ "media/9186e37ea320e67eea4cc4b3_full.jpg": "46a719708495c02c40f6dbeb181ef439e75405c6979931c38eadd35e0cc239cd",
144
+ "media/98b98e2def7c3f01f00a_crop.jpg": "550f89dbb561bacfde9a94ae4bf634b2dfbcfe8327dd2fc711e08958e9783fd1",
145
+ "media/98b98e2def7c3f01f00a_full.jpg": "f7b9e261882660e999702f8ce845a75efedecada01d17fbb8af342024e0fd222",
146
+ "media/9b7689bc046883d6812ad365_crop.jpg": "dbf00aa142767020098af1c6d7267d2edd452364a9281f2b69168d188a40bcec",
147
+ "media/9b7689bc046883d6812ad365_full.jpg": "ec683ff82c6c2955634839e414975d6b0ac2d57f4eb0c00cff88842357442f06",
148
+ "media/9cfdf2985b9a27f5faf2_crop.jpg": "35ba986cb18d1659bae4df15adffaa23626728fc96e8d769b651ab2be76687f2",
149
+ "media/9cfdf2985b9a27f5faf2_full.jpg": "5de4e8d0e1629784eb85171dc85c6144dd48647be837641fad41db097e94a5b7",
150
+ "media/a0e1eafc008fe03615bf_crop.jpg": "fbcc466dfb5362c5c085b80f0f9a985e4c0ae2f6d12f446871693fdcd9576686",
151
+ "media/a0e1eafc008fe03615bf_full.jpg": "a78489d73100fb07aa0a2dc4157915dffdc076174f98cf25850a82f08dbb830c",
152
+ "media/a3c7b0983f4f67c9774a9d1d_crop.jpg": "436e4e8983b7ed265d115ef9479f44ffac377a8d72f3f861f808e5ab749da927",
153
+ "media/a3c7b0983f4f67c9774a9d1d_full.jpg": "deb05f801b965e0dc0ba768966e4fd87530db9a46705742c2474df41d2cc8b0e",
154
+ "media/a41106b1f8faadfbd0c6_crop.jpg": "e2925f21700052433ff71427b7be79448c1dde2c7801da74d6be07f9c39a1de4",
155
+ "media/a41106b1f8faadfbd0c6_full.jpg": "40c4c52224194e8602d3382f0fa8dd62158dd252d09bcf1231ff6e26ffdaf6fa",
156
+ "media/a739714a796d9e4fcabb_crop.jpg": "80d8f42caf5e53808bc325716014eeb2c10fc28f1e41daa0862409acf86936fe",
157
+ "media/a739714a796d9e4fcabb_full.jpg": "3d0a4320113bd31772ab3b68e96ea6621cfc5531863a0412865ead442dd30231",
158
+ "media/a7e95de948f4e3c7a9e1_crop.jpg": "4cf879c885a5d396e1c9ad8e191730ba2af8a407f945248536e689893b2b58bb",
159
+ "media/a7e95de948f4e3c7a9e1_full.jpg": "905979c78bf8820716c93256c7ab2add3fa6d02770d730f4f2289178ee0a21cf",
160
+ "media/a9e4dfb5604a2cc763fa_crop.jpg": "f2824de11bfbb3b5d2be1eae34145b7cae7bfea205a35b94a4f3e5c7d36ab594",
161
+ "media/a9e4dfb5604a2cc763fa_full.jpg": "18cf6da0b77a455874d3c6ddf1a1103a91ff1a2a939c9cea76b23291aee46699",
162
+ "media/af36ba9b4582f51913dc_crop.jpg": "f1b5dc662e0aa2dd4c4cc8cf3c9c58e9aca3cc9454087786a86be8e35f726b9b",
163
+ "media/af36ba9b4582f51913dc_full.jpg": "6f8a9237ad15039fb855de2917fe6f6094446b5d83df199ffa2b3c3a65e2b2fd",
164
+ "media/b079d1f7948614710a25_crop.jpg": "98d3e1cb161c0c63e5361caa826b9e16acee338b1056cca65348ee0575798cfb",
165
+ "media/b079d1f7948614710a25_full.jpg": "ea722574d67deb10301803f722108c5fd81597c7dcb2df1f8424756f6ead21b1",
166
+ "media/b11f99d2cf1b5841a9a2_crop.jpg": "b92d4077c03c76384d05693cb79bf202707aa3b7b28b31896a6cfa7c3fc6d984",
167
+ "media/b11f99d2cf1b5841a9a2_full.jpg": "0fb146861554c4df4b123f0d92636b8d7cfdd59e1bad93271c794a15fa7b1b41",
168
+ "media/bd5b4c8d9d1df40c4cb2_crop.jpg": "61f71e4ab910bac048e0fe5732e6623573f8c6716f141922098a50e16b4441f3",
169
+ "media/bd5b4c8d9d1df40c4cb2_full.jpg": "a2518d9907ece9edd72027f6d7853b60b799f18c2eeb395ce5cb0271d292b3d0",
170
+ "media/bfb2f241cb856b96b744_crop.jpg": "2070d2609d35b81e83273e82f5ae769e748b32591088a5602f812fb831165c75",
171
+ "media/bfb2f241cb856b96b744_full.jpg": "317554592d15dcbb6a0d6fd395e401ae324606c81c28268cbe024fc13903c4a8",
172
+ "media/c00e1d95904cb4d3e461_crop.jpg": "408187b3d9c41e9017f9680ee3f69001a561af267d6cca50bb95da68d3a509a5",
173
+ "media/c00e1d95904cb4d3e461_full.jpg": "0562685328b0b7b09dbfa5c8bd071ddd5385797eb44b56e7a59136650e641330",
174
+ "media/c0469034d3cb0c8cfacb_crop.jpg": "63dd86ba9a93fccd449adc33fbd577e462c2cde168f6021b51a54fc38ce5e6bd",
175
+ "media/c0469034d3cb0c8cfacb_full.jpg": "47b7c6ad1c794fc7e61279354cd57594821eab54357617a6fe4e39e33a91316b",
176
+ "media/c3dea54e8a31e289b3c8_crop.jpg": "a5aa0497cc9b431f7c17dce01d18df7968cb9fedb98044d8ebf7416affd28edb",
177
+ "media/c3dea54e8a31e289b3c8_full.jpg": "69278cbbc602aa8f42ff8b5339eba80b372565b38806088b8a8037b0ed366d70",
178
+ "media/c59b63e4de72a20ab1a1_crop.jpg": "421cb498d9400f333264478a492f63a1f839ee56413d907b4ea78ad2e483e98a",
179
+ "media/c59b63e4de72a20ab1a1_full.jpg": "e3001c29357ddbf03caf2ed96eb0efa9c472cb64a425565e5e600b7989183d2e",
180
+ "media/c8f2320b86ea13b9bab5_crop.jpg": "97901e77dd3d399df0aa1349a0fd568aed7930ec2fdb13dab17761a268b80350",
181
+ "media/c8f2320b86ea13b9bab5_full.jpg": "d38136bfc41749d81079d5d11a2ba369208ef85c273ba4b8bd1965a48042700d",
182
+ "media/cb450b6c00e74c066384_crop.jpg": "fced0c3b5c5826f07349d00e046720c8cf62eb99e111825b0643030c5a2511d2",
183
+ "media/cb450b6c00e74c066384_full.jpg": "22a9a43318dd926ca81a0173928fd74a3c88c0e2de9de171206d35fd45d07eb0",
184
+ "media/cf6ac3e1e3049c217238_crop.jpg": "b531c453a97dc3929502d19145564da8655f395a10a8ee14890e14da5e617490",
185
+ "media/cf6ac3e1e3049c217238_full.jpg": "8e2fab91c2897b0ac38348581bb66793e332b4efff3c45e4ccf5edc63c4ab58a",
186
+ "media/d02f389c481d4328e42c_crop.jpg": "6212eff6620d58662bd28e105f9ca8f29a7097edc9547fd0ab46003f5bc6b5c1",
187
+ "media/d02f389c481d4328e42c_full.jpg": "6f583f88d134fc8ceb04342a821eee9d1ddf872dbe0b7dc895973c533975dc04",
188
+ "media/d0a7a93ffcf0c93fb543_crop.jpg": "08298cab14f64c8fb273ff1b9ccf32973396dcad472e9e1c8ca5d894ab17f109",
189
+ "media/d0a7a93ffcf0c93fb543_full.jpg": "e636bbe37e3890af0adce8c8c59c891961c46b3f5855a36cc09b62dc2559524e",
190
+ "media/d14d6bafe0a0440cd6f9e1b5_crop.jpg": "215d44c301540fe2d2204fb5aaa0ce6f687ba91072b8f8f3fb816ec98ed2d724",
191
+ "media/d14d6bafe0a0440cd6f9e1b5_full.jpg": "166fb93108d371f71ec426a1770770d49c92efe0b4f114b86e3c8229d3e20651",
192
+ "media/d29ab4c17e72adb3d110_crop.jpg": "84c31de494e3c742b827b3fc23ab7b67e56f1a1448e7820c307419336d59f261",
193
+ "media/d29ab4c17e72adb3d110_full.jpg": "d9287bb16782c7bf7db05b030492ea07e4ac8a49af85c9bd8691ebee1eed1d01",
194
+ "media/d3c2bb99633d6b4a8aa2_crop.jpg": "8793d4f61d2e466118cfd5f9fc951bd7ff4d9cb9980029272d96f6e25c1f6d7e",
195
+ "media/d3c2bb99633d6b4a8aa2_full.jpg": "927a1ab4b663c6939a91b705680340bf751f18ade0c7adff651fb6c58a369529",
196
+ "media/d938ae931dbe89e16810f069_crop.jpg": "18c4d0fa7b9ebd18828757bec7cf88d8dd0662c730b7da3dfe9375df56368b97",
197
+ "media/d938ae931dbe89e16810f069_full.jpg": "c65a7d6a1930314d8f3a22d92decce1e247aed1fadc36d26868689a5fbee9d75",
198
+ "media/da0af48ad0dcc8746952_crop.jpg": "18d7c562951be5e20190e16f099a90b7869960cd090c1ab9e75a693d6d2711c2",
199
+ "media/da0af48ad0dcc8746952_full.jpg": "b4fe8ef96df77b2dc85f03290013f78784a74f2896d841c7a263c08eace47620",
200
+ "media/db1b87ed5e918dbee56a_crop.jpg": "27fb3d60080e649f12997c0eb0b2e91e6ae41b315f893d8d8a69bfcfe2ef7986",
201
+ "media/db1b87ed5e918dbee56a_full.jpg": "813448b340828a23e2d6801ffe1d2dab1b0d4a84d7d7eee8322e85163c672cb5",
202
+ "media/dc1f9c23184c42a61af9_crop.jpg": "b84e34f0b4c5ad75c56e0d3c8fad28c1200823cb64f1f1ed46ce533a544118c5",
203
+ "media/dc1f9c23184c42a61af9_full.jpg": "eb53e27bb6df61f31295ee5f37a4a6faade8097319983a9aa9ab4704f0c45f9d",
204
+ "media/e091bd042f1cd85757bae117_crop.jpg": "dd22675ad2332eacb6783a36f6cc6601fb8732edd2f66393ad4d33d6715d89d7",
205
+ "media/e091bd042f1cd85757bae117_full.jpg": "0317a973f3ace69623b3ebd6ac07c2dddf929854a541d1fdf1bc1ccf0d2f1720",
206
+ "media/e1707af66b16c44ca22f217e_crop.jpg": "85197396af7244762317ebe20e9cf022f962ac32df0072cf99fb7d6867005cb4",
207
+ "media/e1707af66b16c44ca22f217e_full.jpg": "6538815c0d049fe10e42c267fdb6e23286ad803fddf043f799255677170f12a0",
208
+ "media/e233df5f771af8c53fc3_crop.jpg": "fc6c2fe117a1e5ffd25154be1c0f4c953c371e6ff61dfcc0b1122c2989a7437b",
209
+ "media/e233df5f771af8c53fc3_full.jpg": "10b5623bb4dec1e37f942b7a5b74371a835b78e98b83c7427329cbd04de9a2a4",
210
+ "media/e47ac484c8070191f186_crop.jpg": "76adbebd070063ade99a256f31b793ba9a32beaae051a78dafab9bee9406428f",
211
+ "media/e47ac484c8070191f186_full.jpg": "d4e1547b1e7742f399ee0d1d5c67ed3ee2600c52cf19acdc0c9466cfb6365810",
212
+ "media/e4ce53c349d02a786e9a8d1b_crop.jpg": "fbef723e2a50a9631d7026429a00551e7ee625e0e37b02c6370c4887058979b5",
213
+ "media/e4ce53c349d02a786e9a8d1b_full.jpg": "fa8039420e4402f48e01be9ab9ffd19bce4641df5a8eb266b9631ea34a9faaf2",
214
+ "media/e526bda05cfc730b524c_crop.jpg": "fb250de8bd948f69688ea04f6f9954d37cb1e9f4497de0f7cfe8aebf550e2225",
215
+ "media/e526bda05cfc730b524c_full.jpg": "5608d96f80a00c6cdb49803009c1521aba13e2a40f1f73ec8a73e38c58741e24",
216
+ "media/e60f1e573b15059b28a6a89d_crop.jpg": "29abe03ebb94e728e94c14c8dfa35aeade291f429071ef2626f5b6c8afb3b958",
217
+ "media/e60f1e573b15059b28a6a89d_full.jpg": "7539d0ace608b42978f011153cbf71cd3602e9f8979282ce50b49a5c55380832",
218
+ "media/e6246244f9762ecf8af0_crop.jpg": "18928e9fb0dd2975838890de16ee5939d1a4443ec7b67f6fc0127d2eb4e31f97",
219
+ "media/e6246244f9762ecf8af0_full.jpg": "3e490de369e18a941cbdf47ad482c4dff9dd0ffc8585c0dc96d62b39dc4aeb66",
220
+ "media/e711d428a3ed73d52639_crop.jpg": "ea1fd67015cc8f533e68c643f66ba4279f3269f039224ac30649fb990b9c9065",
221
+ "media/e711d428a3ed73d52639_full.jpg": "9f9591da9867887d049d2d7809ce21c898e3cab7c4d76f39f591039dfc148ebe",
222
+ "media/e819135ae0a98c833798_crop.jpg": "cfdbe910b82ad95e6c4440ca9f57687feed46370c4399954be2eccabca3d52fb",
223
+ "media/e819135ae0a98c833798_full.jpg": "e3821b123c65d7b7f52f8e204e0ddd4e4aac8d329347294ec2362052f3e88872",
224
+ "media/e84ccd22e73178c16b417d29_crop.jpg": "9e2573c2eb4e65bdb009d40a0fcfffaf06a153b4554917a06fcc144966807ed7",
225
+ "media/e84ccd22e73178c16b417d29_full.jpg": "71e268447375093659e24c6776180c2d560c306de1e8c370518a2e67d423b61b",
226
+ "media/e8ba03215a0dee415f9f_crop.jpg": "baa69f57c5d915487ea8b1ce3d5ed1a54e8f6d00fd090edff8e0f69aada3e499",
227
+ "media/e8ba03215a0dee415f9f_full.jpg": "7f39713237aa626cd47ede9fc442e3f99124d39b9616b543abc944d96301b463",
228
+ "media/e93a7203af92a0bba127_crop.jpg": "ca92981586178ba9d8a606bde07c5ae36eed3956bad93d1cf00b93c6b0845b3c",
229
+ "media/e93a7203af92a0bba127_full.jpg": "5e719f0afc2ae9b5e76dd076aecbc8e7c11371476a997a2c21c1fcfe541004e9",
230
+ "media/e961198817aa9f71a9c0_crop.jpg": "c73b19fc91a5ca8931285d454c5aa8b5a1a819f2c114d5e79a61cb10e7eb5914",
231
+ "media/e961198817aa9f71a9c0_full.jpg": "cd27054aef3f2b9abce6056641c0664cb309db61782e90988e33d8999b12ef40",
232
+ "media/ef88da2267ff884145a6_crop.jpg": "e8a498e7a64dde7c8be4bee14e26a8a9a8104120df0c76c331fffc128c91fc6c",
233
+ "media/ef88da2267ff884145a6_full.jpg": "0d020cd09c3f2ce7dd2f88f2e5bda1dc0a64f54926ff9340c8cd0f9dfc9f5955",
234
+ "media/ego005_06ad570e18440e2f612c_crop.jpg": "880ef35b88c4118b5eb65c543e09929a5b32fda39d6ee91a286d88b16a791ab5",
235
+ "media/ego005_06ad570e18440e2f612c_full.jpg": "25b322ac861d8d3490ee432e86fe134e7efbaafffb3c697d3aff558681c42ba1",
236
+ "media/ego005_37f310961c5fbd09a2f3_crop.jpg": "80d1b4891a16d899c1e1a678be3c8928be772fa03950315dce47ab0d83a55727",
237
+ "media/ego005_37f310961c5fbd09a2f3_full.jpg": "957abc2d432214c255852b17b685294a6aa03d7bbef05b0d819b888314c14418",
238
+ "media/ego005_5e5edc77f0229c182a82_crop.jpg": "d7094b3546bc6a0b384833e4317c2ee760ede71603a695051af8b657f0841850",
239
+ "media/ego005_5e5edc77f0229c182a82_full.jpg": "77981d0f16a4e1f768eba562c0606f205944b8da30963acff3a140fa6aea43a6",
240
+ "media/ego005_6c39df0ee7ed048412a3_crop.jpg": "dbb1b5739632656c19a2a375830c77fe60fedb03343052c23698a58d9ad2f953",
241
+ "media/ego005_6c39df0ee7ed048412a3_full.jpg": "84f1d26fed07e082bc7c02cd86eb5622e63068a94a1087f37a0278702d739efb",
242
+ "media/ego005_77557dd1cc89456bbda8_crop.jpg": "20014509ecc8e44624cd31c335cd993f2d0b52ed8c537f4b477e919bab999e2d",
243
+ "media/ego005_77557dd1cc89456bbda8_full.jpg": "c74d421b9bbe0798ab71e8cc3514d8c2ea3bf723038830305da65a9ac4075302",
244
+ "media/ego005_79607267c569bc9a5a34_crop.jpg": "15093f05c1d54cd9bae5488933e95cbd03024eb0ef3509b771c1c1c268a50285",
245
+ "media/ego005_79607267c569bc9a5a34_full.jpg": "c9d6d7069fd0d2d7f601ad095e9c2bf1e39fdceaf1c48a1222434bb5128ae1a9",
246
+ "media/ego005_af4e1989a0b734de5391_crop.jpg": "0ba7a91419a1d6444e294c4d12b933a00615342d601cfa23dbd5e248d74f4b23",
247
+ "media/ego005_af4e1989a0b734de5391_full.jpg": "917639d8671a035133bbff25c00343a966798c268a0e9658cdf055348be2ebc6",
248
+ "media/ego005_d3a520f3ef45ba8fb1ec_crop.jpg": "056114af106a8649a9d8a18c69563abfa630ff4b844635711ab6398164430de3",
249
+ "media/ego005_d3a520f3ef45ba8fb1ec_full.jpg": "3e1c329fe011135851d04549d47639fca8697ebaeb80b517d73e3e0af8dd6aa6",
250
+ "media/f3858cbf4c0f01d29841_crop.jpg": "f3fe2266b9976e23ec8282992071b43c4e557b6892d0c2f1e785967f3f813f48",
251
+ "media/f3858cbf4c0f01d29841_full.jpg": "c66c044044b147a5b8aa8d9e2952cb0ea942fc999afddf30a9c28973ab1e086c",
252
+ "media/f627d873be8bbdf466ab2122_crop.jpg": "21b72cf98ece8215ee6b13f0f232cb30f2ee4d1cbdef938851ddf8a56f82adef",
253
+ "media/f627d873be8bbdf466ab2122_full.jpg": "8e69770405cdacde205ae047b7edac7ba1962d30fb1eb94d5d07c27aee075181",
254
+ "media/f814b3e93a1455c11234_crop.jpg": "ab23a38c87c551c4a2820a28b5c868bbee5ef8c5a050c19a0063e06655317539",
255
+ "media/f814b3e93a1455c11234_full.jpg": "518bf0e1e298269abc1153dd2eb0b7cfe8c6a5247295f147fa58cafa00bd8b44",
256
+ "media/f8701460479562a2b8576134_crop.jpg": "756fbccd6273a3d09c1c7a5583f9e7a3ba7120bf08e63ccd2e50120221852fa2",
257
+ "media/f8701460479562a2b8576134_full.jpg": "642645fdafc93539ef32978cd42e46c568a20579eab2b71c1ab1fb566657cc59",
258
+ "media/f9e4b832088ad843ce26fc9a_crop.jpg": "4e5987f37975c4d5b65d3741475a81dd1d7fb94e8314cdfdedd2ded3d6aba72e",
259
+ "media/f9e4b832088ad843ce26fc9a_full.jpg": "58f51e895117c45a0dfff42a556ff2de22a53e3fd9ac076cece96899f1f50ff5",
260
+ "media/fd625216506afacda693_crop.jpg": "543feef8cc3d4c579e1ea8a2a1685e4a776e14993aceb0fb89f11bef6c0328d7",
261
+ "media/fd625216506afacda693_full.jpg": "44ea9430ff3f0a368b5d7938472c9c17553e458b2be469474f5046480bd57971",
262
+ "media/ref10_0001a1db0911402d9ff7_crop.jpg": "3567c6a88682cc0a5afa24fbc13f3c48dace4cf822e305859fedbeb966ee5856",
263
+ "media/ref10_0001a1db0911402d9ff7_full.jpg": "58cd767e3007650259cd077f2387506a40415e7501078e58c3ecea99d5835776",
264
+ "media/ref10_02f8aaec7aff1e473573_crop.jpg": "e9255149d8411ef16fb28e385c30aa39f6f5b16ca83e9da2f68fead04df96b43",
265
+ "media/ref10_02f8aaec7aff1e473573_full.jpg": "3b3011e86964d37087d79be30c09f00145ec45b816f81e6da70c76695458d4fb",
266
+ "media/ref10_05b875fc9a446e018429_crop.jpg": "3f2054dd475f465fe5b60541331502ebda4fc8fbea13d3ff6143883c47353c17",
267
+ "media/ref10_05b875fc9a446e018429_full.jpg": "bf0a208f69a4757340e09b00d396dbee885dc7fd4800c2b1703243b8fafdb619",
268
+ "media/ref10_08f3951ff7357505f937_crop.jpg": "5f3a20ff36ed5be65368a6e77cd0941b7fd43287e79d0bb2b9694a2b9a806273",
269
+ "media/ref10_08f3951ff7357505f937_full.jpg": "6cb72693090bae29325bf3a2be659fc66589a41f48de27064560f2a88d984be2",
270
+ "media/ref10_094ff03480e89a370c5f_crop.jpg": "c60635c35b8bf8dc6ffa41c9c2f18e3fbbacf446341e5444dfa2ccebea093d7c",
271
+ "media/ref10_094ff03480e89a370c5f_full.jpg": "9529a68917f1ebbcdc9ef6c444aa703581904ceb1f94e362165798af4b696281",
272
+ "media/ref10_0d4aa62ee94d3db2e998_crop.jpg": "48de1e78192f35a9ec0798108009d600e16d2859538253bd70a3f79ec892b726",
273
+ "media/ref10_0d4aa62ee94d3db2e998_full.jpg": "b227ab58d780a3c7063927b5e799e7fa8fe795e1d90ab75055fb94f6c59048fb",
274
+ "media/ref10_15ed71e38b6ecbfadad4_crop.jpg": "7471c9f93f77fbca5a69558117f125b99dd54a187eb684993b68f8c08f603212",
275
+ "media/ref10_15ed71e38b6ecbfadad4_full.jpg": "9f216b3356cf2b36abcfbf82b75f691b0538ecb018ba47829a770c06f9a72275",
276
+ "media/ref10_1835ccaf3facbadfab41_crop.jpg": "d6e1d7be597a4f42e4524196952d15163ddf9bde8f821eb1adfa7afeee06e4a5",
277
+ "media/ref10_1835ccaf3facbadfab41_full.jpg": "4f68107536080a2047af300f065e8b89bef6c87a702ecf7b4062e56f0ba6e200",
278
+ "media/ref10_1c56e06b352d8543c362_crop.jpg": "67516b885c352c6a206bc7ece451d80be5b6ce6d9ab455837d73c8d9b8fd7c78",
279
+ "media/ref10_1c56e06b352d8543c362_full.jpg": "2b20365de3d194b25d5c101a8114567c89fed3267a05c1943a458bdce926ac64",
280
+ "media/ref10_2072780ada026a0d7ebc_crop.jpg": "db71fdc1af5248611c05ddc7a26120df1dcc5e41c8948a6d6eb064ab04d3a70b",
281
+ "media/ref10_2072780ada026a0d7ebc_full.jpg": "04571b9673e84c227a28cd4be0d8620dfedffaf2d6e232f8eadfbecf33305ee4",
282
+ "media/ref10_22907852d24f216f0501_crop.jpg": "b3fb4dfde0977ae56b4d4c4414046d37ec259cf9fc25a75f7f64f1afe6ed9f5f",
283
+ "media/ref10_22907852d24f216f0501_full.jpg": "d00ff77b1b4770ba456cc9c8409b72843c3d69f6d40c3c83e23560f36e78f5d3",
284
+ "media/ref10_23728cf3de5e9f52bd29_crop.jpg": "5e6170043711522a42e4ef50012fa13be83d023ee655d3941970dbbe385050c6",
285
+ "media/ref10_23728cf3de5e9f52bd29_full.jpg": "3136af9021ec52be4eb1e7fdcf20d18296da1abb0b395027529fcc7f127b4de2",
286
+ "media/ref10_25cf29a950e98346a3f2_crop.jpg": "a136e4c51738abed368e7922f9fcf89cd14d7b49e0c0ed4e8bad21466b56e92a",
287
+ "media/ref10_25cf29a950e98346a3f2_full.jpg": "785c263af7c1e0c80593f91cced91f228fa97d1cf218522e2f49dfc4087366d1",
288
+ "media/ref10_2784e08a1eac608ccd67_crop.jpg": "523d8c7ec70688430435806be72320a2824a625d0d6cd9d8e13f021e72a854b9",
289
+ "media/ref10_2784e08a1eac608ccd67_full.jpg": "36068b0dbccb3c3d46856a18680523da743b1cd7b8857ac60bca9d095c209324",
290
+ "media/ref10_283a2252c93fbe346f8a_crop.jpg": "de34cf9cd82cfc183e0c54f7a715480f38e8803504519cf304115ed780f51eeb",
291
+ "media/ref10_283a2252c93fbe346f8a_full.jpg": "8b527131640369b4cadb54baebf9adf93295a31c35d1bad43cd09223ef9a400d",
292
+ "media/ref10_323ca73ddb0e1cda0475_crop.jpg": "26e5443c2d00206fa58b5a833d992394411774ca9a86058cb15bed5b2af6e9fc",
293
+ "media/ref10_323ca73ddb0e1cda0475_full.jpg": "6798e1f2382c893ac7d5b20918d9c91560c75e670dea2138636d48c212f6ba4a",
294
+ "media/ref10_3244e021f8036886f6e1_crop.jpg": "48b3e09756d2a0f8f5b0d91f97d2318c445ab0f7cabdc62b4a4dd317a9c17eb2",
295
+ "media/ref10_3244e021f8036886f6e1_full.jpg": "49a5f11070920a055e273ad4d8628b13ba03c9a927140558cf46f1b5bfe11966",
296
+ "media/ref10_330a0f3ff938db824f91_crop.jpg": "e7452b69e9d28b9c1ac91247d17e39da1fd4d6e25be85f848bf25b2fe9e9a898",
297
+ "media/ref10_330a0f3ff938db824f91_full.jpg": "ecc41e2de7615d47765a7e020b00c7823ab57af298235a8cf7407a2690af8e18",
298
+ "media/ref10_334bec23e4b8fdf5f897_crop.jpg": "6b8cc11518969e2b0379204713d0f7eefbbce6ad169e79dc557f456873fd9469",
299
+ "media/ref10_334bec23e4b8fdf5f897_full.jpg": "b1c120b6cee80682f0a08ba0d0de15d25a53cb82953579a19e29fee10a7781ac",
300
+ "media/ref10_33dcace2cb5c25ef8d59_crop.jpg": "1116b53194971e2db867facb7f36771c8a3dfc2df65223bae37efbf1ccda70b7",
301
+ "media/ref10_33dcace2cb5c25ef8d59_full.jpg": "8ef803670da38f78efcf4ab1de2282695eed7685953f51b55b30cedda99c98ed",
302
+ "media/ref10_3b3b2ae829c7ed4dbb20_crop.jpg": "b02dbb914a88208b4cc05acbed7ffad4f1c5c0d20607bc6fa71de676367a45ef",
303
+ "media/ref10_3b3b2ae829c7ed4dbb20_full.jpg": "4d024698e692af8b9cddb84b94c3c44a65824d122c700f1a1599c7b7b49fbf31",
304
+ "media/ref10_3c1068063775a7207d09_crop.jpg": "5471980c7b5280dbcf44004bb0c673ac7407d219b43a73a89c40b50df4b45767",
305
+ "media/ref10_3c1068063775a7207d09_full.jpg": "4002a7948f99d67220d2802d1c8d419a5fd6915da61b99a52db800738013287d",
306
+ "media/ref10_3d2cdb827cb35f1167e7_crop.jpg": "8298cc8ccd9ee8582f632be86b72e69a137e9fbb7f558b03966b6f4318689db4",
307
+ "media/ref10_3d2cdb827cb35f1167e7_full.jpg": "cc00a06638144a88d511407c4406cbd23c323517e75f80e2f38046b233857fe2",
308
+ "media/ref10_3da66484077075d113a4_crop.jpg": "a30916a7d96a9a72ba4d82e2793cba6a3ea70a7c0136f9bbe5e5b8661df8804f",
309
+ "media/ref10_3da66484077075d113a4_full.jpg": "7591a08e54f845852f9b4a38396eadb6f1636cc026ea8ceb6a6946d7d5a54746",
310
+ "media/ref10_3faeb3df79dd10a13f8f_crop.jpg": "dfce284817f28d1b8603ec077e7b468f001387c5f1229452c21362de2d87fb57",
311
+ "media/ref10_3faeb3df79dd10a13f8f_full.jpg": "7fd12ed2f26fecf27d591f35c1d49cdcc3ac9511e9bb7b4c4f6c1834e3472c09",
312
+ "media/ref10_428da3fc456c0f7f5bd9_crop.jpg": "cf2ab902d1ccf8114ca5dfc7fc08ff1d229aa3cf15ffc113fa13c3574091c332",
313
+ "media/ref10_428da3fc456c0f7f5bd9_full.jpg": "c7ace33ccfdc01263a384059d12016011c454d3da63bfbf76d94da7595f210e8",
314
+ "media/ref10_42d6e45604cc7f94eba6_crop.jpg": "1c618cbee595f2506209cacfce724bbac3cc0163c10f89484e536011656b6352",
315
+ "media/ref10_42d6e45604cc7f94eba6_full.jpg": "a727d3fd6cf50274197dbd22c7152b7e67dcc3773f61657b5eb19fe6e70fded7",
316
+ "media/ref10_459cacf80c9097ad62e3_crop.jpg": "a76ab0bfe6d020a92d148d5db330f09d735c78e71e2933c910e3a50a661de590",
317
+ "media/ref10_459cacf80c9097ad62e3_full.jpg": "1011761566cad32161ada7f5c1ebe56bab71166c88843b3f8b96d6027042419b",
318
+ "media/ref10_4cd4de6310dae3044e3e_crop.jpg": "3f7157a6bbabb0c4639c786a6dcec8bb983c5bd260f39ac7013718622db74c22",
319
+ "media/ref10_4cd4de6310dae3044e3e_full.jpg": "2798aca4309041da1969da23985116ef0ff8e83a181a6c4f8d3cc83a04cfd83b",
320
+ "media/ref10_4e4b78d0e18ae1999a6b_crop.jpg": "065adc5cbfe7746343e85203e55be670d24dd5460b4876c25ac70109875dad75",
321
+ "media/ref10_4e4b78d0e18ae1999a6b_full.jpg": "a9be09859826be66fdd04f017dcb8efb113d2fbe8ee30f8d1e8535211eccca38",
322
+ "media/ref10_4ef0983dbb591a65151b_crop.jpg": "8894b5eb19d44f4be0ac7a1010d95aad5c4964396d53fc5adf04322d6cd3aded",
323
+ "media/ref10_4ef0983dbb591a65151b_full.jpg": "0340cd2e6f9f6778e9054ab4b275644f6038bca40b5b722786683fc8fbe73586",
324
+ "media/ref10_4fe12917b31a4b99543e_crop.jpg": "ae7c79450766be5a2518e1cf0a0d58539339392128bb245df9e96f242916f2ef",
325
+ "media/ref10_4fe12917b31a4b99543e_full.jpg": "89104c209c6daa490bc289dc0cef76d752f797a2e8ecc665513cfa030cb06a49",
326
+ "media/ref10_502d38c8ebed6b4c7568_crop.jpg": "ea20bf09944c4c923b24ce30a80f146b8cf44d8235af29883a7fd9027571c71c",
327
+ "media/ref10_502d38c8ebed6b4c7568_full.jpg": "4b0f7be741b6a2c02d5e1f5cc8f670e0acecddb424959288db81a27651562854",
328
+ "media/ref10_53b476e2a5bc06a72dc6_crop.jpg": "fb8b32f41b2645ba3064ab6affcc141e0a61f8feec7d1f549378925362d96c3c",
329
+ "media/ref10_53b476e2a5bc06a72dc6_full.jpg": "a08d8cb2e3d43dbb5b75b0daa5166bae3e38ad3405fd6894a803a2364b19423f",
330
+ "media/ref10_5871642b42470dd41dd2_crop.jpg": "90f5e4d4f5c7f924efe4c647bcc59824f6bbe495b1d7e6668585533a9c31bf23",
331
+ "media/ref10_5871642b42470dd41dd2_full.jpg": "6353217ebca374daebf2ae659a6e6541f3f06b03aaee271b83ba2d0d3c824982",
332
+ "media/ref10_5aa342b065e3fcde6ce5_crop.jpg": "a5fab1875ecdd5a22aaa252bf59b2951eea788beb17133d8ec1bd7fdff025491",
333
+ "media/ref10_5aa342b065e3fcde6ce5_full.jpg": "48f508f509b19e4ae38f5aa8e1af6b9380d74572faaba70decb1e16d55a5aebd",
334
+ "media/ref10_61758efe55ebddfdc9e8_crop.jpg": "e555d6b2ae707dd2a942363ac02b6d9b4b8126200ca9ef07fef33904db06b06c",
335
+ "media/ref10_61758efe55ebddfdc9e8_full.jpg": "350f36e9940eca1ebb5ece769bd8d233674d12bc6ce0cc77b035cd64d22aff41",
336
+ "media/ref10_64dc4bd695eb9f7216a2_crop.jpg": "8c2415c8fbd24c65bdd365023891ab145f38fc0046041d01a0cbd9b52b67124a",
337
+ "media/ref10_64dc4bd695eb9f7216a2_full.jpg": "d6acc3c8f6eabe91ee2c1f51598a39a57162b475ebcfb7e4c9ea3ccfc48c633c",
338
+ "media/ref10_6527f63a2a0d595aaad3_crop.jpg": "780791edb0b1c26affc54e4e2c9623b5ce8b3988e9e31ba4907b6e1ab5f57417",
339
+ "media/ref10_6527f63a2a0d595aaad3_full.jpg": "6888b44ebc7c93c70b53f430c9d37a19c740a3a5e50d6fc00f78f465edebb047",
340
+ "media/ref10_68a5018288bf3bca4b84_crop.jpg": "083b2ea6aedb6a104434815ff366c64a3d3395bb6db03475cf0214eda301ed70",
341
+ "media/ref10_68a5018288bf3bca4b84_full.jpg": "82aadf6c7f2ea5f660a197994fcd3b77afd3ef0271b6d0c0f16f5520c9baad1f",
342
+ "media/ref10_694efa944cbb978ef90c_crop.jpg": "523bb3702c93cbe0b5ed2fafbadda668287c55a0ef7201425d952ba3179c0d57",
343
+ "media/ref10_694efa944cbb978ef90c_full.jpg": "9754b7d5902a2c3ac8fa5e5023c80dea831c3ea0b59bd9311b5b622e5b1c7834",
344
+ "media/ref10_6c6a8b52de0c39e024ea_crop.jpg": "d769107b0b1baad0aae95ed19eca6091cc2e6a184d35d313f7e077b136ceb181",
345
+ "media/ref10_6c6a8b52de0c39e024ea_full.jpg": "11661b2ff24b2aa0549f07309808ad3b473ef94570f627207e8a3dd4f0c4a50f",
346
+ "media/ref10_6d2c636693b221c74f9f_crop.jpg": "85749cf6c402745f11bb79ac7adeaf5a4ba14bb6d6741aa136feb15dfd18d213",
347
+ "media/ref10_6d2c636693b221c74f9f_full.jpg": "a9db00fff724eefe1bac1779477e7f5f454d3ca108e4d0cf2f3be5c4ade1aeaa",
348
+ "media/ref10_70026ced4236fd8eaf58_crop.jpg": "0cefaa37e1ae01f512f215f5c7ef88a13c96e648b1f264c01ecda2731acd02f1",
349
+ "media/ref10_70026ced4236fd8eaf58_full.jpg": "27d1478fae7b7f182884ab8fa8dd4f9cdf602c4b7a6bfc9c0c57c6475f8e5448",
350
+ "media/ref10_70906980aef1331db72d_crop.jpg": "fbbe69c8b243e9426ef7c6d1c44e792c120a97ea58cf643c22591e0671dd845c",
351
+ "media/ref10_70906980aef1331db72d_full.jpg": "11602ebb415b003661454b4f0dc0cbc4b83c236c76d74390411bed4dbd1a216a",
352
+ "media/ref10_736e54c60c2853720322_crop.jpg": "376c0eae9c789da4d2a24bca8ae3ee4fe836f605df3e62db8cc1483aee1a3408",
353
+ "media/ref10_736e54c60c2853720322_full.jpg": "b4dd3397d6aec0184210bbc336327d68267251a91edfa85eab176034b5bd1c12",
354
+ "media/ref10_73b967af7527f5a986e7_crop.jpg": "0108dfb8dd4c2a29b4640b95a3985819d578f74f7db4e2364e305c18af1e9937",
355
+ "media/ref10_73b967af7527f5a986e7_full.jpg": "35622c25e08889c5dcf9ff7ac34c0af02f88101d7506fad0f86772dc4e761dfc",
356
+ "media/ref10_74d5665e918e57d9c0f1_crop.jpg": "2a7de4b05247d757b09f475929d11160e9e6f9e2bcc58bcf2bf8c0e1e313b7c8",
357
+ "media/ref10_74d5665e918e57d9c0f1_full.jpg": "c8263726937e534b6daa160cf96fcb864bf44a098e6af886bbc0022fe80733b2",
358
+ "media/ref10_75b44c46fe87e61319bc_crop.jpg": "689f42b4af83dc01a61816a128b852efee31d22272e3d261126d4b6230f12a61",
359
+ "media/ref10_75b44c46fe87e61319bc_full.jpg": "11fab15400555c5a1b885d1d0c94ec0d49e1761bd77ac76c7c7ac8e4c15cbbae",
360
+ "media/ref10_828ddb1896c200cb9fdf_crop.jpg": "c112964c4f3c5ca1afaafdf238157cda112e15ed7d89800b60ef4568a473c080",
361
+ "media/ref10_828ddb1896c200cb9fdf_full.jpg": "5567028cabb1f1a1708ac70dc39bebb7912aeb2e479542c0b16a9435a4d33806",
362
+ "media/ref10_8a4d2ab24eadf2b2a1dc_crop.jpg": "577a937f56c2602462cc6f3bef060abbf0ca47e3fb65bdba389542f19eabee3e",
363
+ "media/ref10_8a4d2ab24eadf2b2a1dc_full.jpg": "e8b6c612aeba7b974a2810a7a883aff010c7dcc8098f098ef156063f989dba97",
364
+ "media/ref10_8b89f03f368b27a4b106_crop.jpg": "85b0cddc4aeb086c74c5dec0ce80d5ab69a66f547849badd77f86fee59b58e05",
365
+ "media/ref10_8b89f03f368b27a4b106_full.jpg": "f03154385c9f2778e5e87b79c9fce78afcb21fa7c2768f935b238a061a737baf",
366
+ "media/ref10_9195ae0eeebe9a10405d_crop.jpg": "23f6c5f4b85df86be68efc604821ea8c8bd37e9a4e31cb638d8ceb51776dc011",
367
+ "media/ref10_9195ae0eeebe9a10405d_full.jpg": "12132b35c0a6f7927b8113369cabbcf173fd88b3af3691291d54dbdb303fb712",
368
+ "media/ref10_95d494476fea561be7de_crop.jpg": "cbf2b6a721238446fa7ae89eb0b10592aaa6ce1b7d5cdb02695c762365907ce0",
369
+ "media/ref10_95d494476fea561be7de_full.jpg": "fa7e9cbb37ed63abcde967f7e1f29431f4c6b30f04aaa6bd03ad1b8422ab9f12",
370
+ "media/ref10_97d56477f8576667070b_crop.jpg": "22332d9a7d06be0661d080120f3c217663bddeaf3a935a09cdb967c521ca88ee",
371
+ "media/ref10_97d56477f8576667070b_full.jpg": "9ef68a6f392d214ed6a4054be1afe867b7fc084ea3d76fbca9021b5dd434e400",
372
+ "media/ref10_9bf52bd2736baf6e2600_crop.jpg": "6cf4186e440257d8a2ad028b47a0f90a8de26b4b5bd8960fe6d6822d6a5432f5",
373
+ "media/ref10_9bf52bd2736baf6e2600_full.jpg": "10e6ceb7d2ca289f2af9df42d149c3ba04eb3edd7cbe033834e15c0a0c2ae686",
374
+ "media/ref10_9d30a1b36c5f11364705_crop.jpg": "a3c2e1f8e34d260c1647cc3e7f4ed0dad4cb4e211cb4bd7fb57dd945043a76cc",
375
+ "media/ref10_9d30a1b36c5f11364705_full.jpg": "57aa9c6df8636b57815f13cbc875bed4afcfa4653671f6767c2ccb39239f5053",
376
+ "media/ref10_9d331a5404e6a497cc67_crop.jpg": "151420bf59911da42fc0c3120c4460e44798700dce1f48884b91b0c1aac719da",
377
+ "media/ref10_9d331a5404e6a497cc67_full.jpg": "4d675afb39780c52a06365036ad0848363f28e62e339b1aa1cfec3daf7c0273f",
378
+ "media/ref10_9da92f6cca53109c71de_crop.jpg": "83d0834da9996cc8eb9acfd7b17d43236666cf6a8f4da8cb5b08e8f1a8610a3d",
379
+ "media/ref10_9da92f6cca53109c71de_full.jpg": "9e3e022f126ae75f626f57af1dc754a02b2bf70193e825f72d76629d91b584b4",
380
+ "media/ref10_a04c634be123809562e3_crop.jpg": "52f73d0899f4355ef1f4f5c6c531c42a8b898595a2e75b6d821f62b320cae30e",
381
+ "media/ref10_a04c634be123809562e3_full.jpg": "51ed9edbe61f0e9b4eb6e0e7f711e42309018c100b73efa1a26c96b0c1db224e",
382
+ "media/ref10_a578bbf73cf69ec40d01_crop.jpg": "fb2cd26ddaba9a5d0160cadb4563aa634b916533f401cd9524037e5426aa82a7",
383
+ "media/ref10_a578bbf73cf69ec40d01_full.jpg": "a7301b663f231c9224485c8e22b5fef7815537ccd214262d427b6130faaa9a1f",
384
+ "media/ref10_ac6638a497ab3b4629eb_crop.jpg": "9db2604e1942d8f082f1e50f3eb68651026985333fd4b01e15f3e3122fc2821e",
385
+ "media/ref10_ac6638a497ab3b4629eb_full.jpg": "b87e4fd2788d0ba1d547a808734e9d91bf6c7800849b0bfaeb9666b37e4b0646",
386
+ "media/ref10_ad1af63ef186a3da9178_crop.jpg": "23335e496664c38c4d4634d4ea288daf1d9d0f6f16a6c3cc545c713c976e4e39",
387
+ "media/ref10_ad1af63ef186a3da9178_full.jpg": "9d55bc61e177525e8af862944ebe3f5b3e88a129e3ca21ea480bace947f7858c",
388
+ "media/ref10_ad8a85fa6b7b36725c38_crop.jpg": "7dcc84c3c9f8947811c1da9d1817df57a7c800e71a40048da70bccf0c32d48ab",
389
+ "media/ref10_ad8a85fa6b7b36725c38_full.jpg": "4e5f2a8b358a46f8bfa28f7160279479f7fa990a577335f8ca6df9980c9a5c98",
390
+ "media/ref10_adff3a16786b520e4324_crop.jpg": "4305a95905934781f004a3c94da20eae408c0ad351d3599ff6e6eae8d88c6184",
391
+ "media/ref10_adff3a16786b520e4324_full.jpg": "a009f1cb64dd7584ed60a4044759e50eb3233210e69716db5ad15314a52ed744",
392
+ "media/ref10_b015cdb29bbfb752ac6a_crop.jpg": "52e5b079a31ed73621ab337eac2447a5f4988343f039f2cf2cc59bda90882389",
393
+ "media/ref10_b015cdb29bbfb752ac6a_full.jpg": "b750a3bd2c0992055cf34794687fe70f5f0a7b1b1bc07f09f2c77737814a134f",
394
+ "media/ref10_b041c3d2a3903239264a_crop.jpg": "fe0eb9af6870bd964b233debe56db4216fef625da46456af8ee3fc8b1bf10173",
395
+ "media/ref10_b041c3d2a3903239264a_full.jpg": "a271c5f1dd8d9025a128f4e3044852eeffa3dd3bab1447434d573c67892e0d34",
396
+ "media/ref10_b54fd37648672f6685cb_crop.jpg": "6c8722585801a02b47a6ec1efb5be088a5aae52d5a5e49ea3ed655bf3a235198",
397
+ "media/ref10_b54fd37648672f6685cb_full.jpg": "1713ed8d55fd1a46d361eb8e56f90b924538cc4db34c1529da1930fc2781baca",
398
+ "media/ref10_b6e179eb646f3c8e6bc3_crop.jpg": "ef5f74d8e4c9f3255a7eddd4fbb839b296f3f5d8d24d2c7cf6eacbd3f0e9dfee",
399
+ "media/ref10_b6e179eb646f3c8e6bc3_full.jpg": "9a9eb03484cb3d5f55f1bf6c3b58a1eb466706ab725da45d4559fd341a69886c",
400
+ "media/ref10_bc1fd1bc3616192ffe52_crop.jpg": "7ec453c9b2ef25fa3221e50a0fc52bc90f6acaeae7ac97f53cb6954d583e094d",
401
+ "media/ref10_bc1fd1bc3616192ffe52_full.jpg": "7ca381da0b980bf5164b3ce403b44caf4634472f5fc85d46d5b5dfca0fdc04e4",
402
+ "media/ref10_c3678d32ce9cd0c2dd32_crop.jpg": "60e5d9e27ae246a8993a61d785779dee8b4927453d6c06d638c7f9e4b0b335da",
403
+ "media/ref10_c3678d32ce9cd0c2dd32_full.jpg": "37bdc8ccf0119494f2f7cd02b9dcc9482511853885925cd449a1a50635424a81",
404
+ "media/ref10_c4a2ed10bca93d16a96e_crop.jpg": "5f5c5f1de883538ac4fe3d263c2164817c61bdeb69964c36e9953abce960cc38",
405
+ "media/ref10_c4a2ed10bca93d16a96e_full.jpg": "27108f01cbbc486bafd0c0ef819adc078ce4175e90587663f9c7b52d5ed936e6",
406
+ "media/ref10_c4b65d739edea3b49f29_crop.jpg": "e25027cd70fd31e8d13a2063d97620e9848789a50e6306b5c80e26b30946cbd4",
407
+ "media/ref10_c4b65d739edea3b49f29_full.jpg": "fd945d421a07193d529130f189ab4b78de91a544968b1cf6f105d8258418229d",
408
+ "media/ref10_c6f953cc767494e3edbd_crop.jpg": "24aa881eccb02f793491875cdc6e35702236c728f3b5d386e4addd5a1d5be148",
409
+ "media/ref10_c6f953cc767494e3edbd_full.jpg": "ad27df302ff874dc98816e27d908b5b48fee3d7540d92fc1db1f0c8ae67ad38b",
410
+ "media/ref10_c7bc79eb04c42383781d_crop.jpg": "29328f057f38514a71dc5c784a1f1fdc0a24bb706053e3c5b3da1c5cb3ac26b2",
411
+ "media/ref10_c7bc79eb04c42383781d_full.jpg": "b65504b6eeb9440c192e51a8d78114d5d1146c3f4ecb194f98f600fdabba6265",
412
+ "media/ref10_c87ce4642faaf033c8fc_crop.jpg": "57020a76fcd4ba5332e0aaae568fd648b5db40142a1624855920ffed2d5fb74b",
413
+ "media/ref10_c87ce4642faaf033c8fc_full.jpg": "eac4db2a5bab04ba769f8addd1b7d4c972e899c0aeb1b7e873cab11a317ed0e7",
414
+ "media/ref10_cbc1a5ac144473694b9f_crop.jpg": "6c7a7f7a9bcdbd3f8d727f3da2e7ed5789fe3ec8d753bd3d56672ba6c0c6b430",
415
+ "media/ref10_cbc1a5ac144473694b9f_full.jpg": "35e5b87b59d75f1f3078bbc1aef18118beb2e1daf5779d288bad770f42508ac5",
416
+ "media/ref10_d7d78ea52e337bcadf1f_crop.jpg": "31bd4971dde0caecf1908b662517453f8869d5582291cdba5ceb34e0f5809202",
417
+ "media/ref10_d7d78ea52e337bcadf1f_full.jpg": "b75d8b59fd6e969e948b2249125d29b71043e6b11b79c405275e35d1eed98124",
418
+ "media/ref10_d989a7827ba8e0ed1aa5_crop.jpg": "0386ebaf9e609f06adc73ba58e5e045106ecab13d534a7f80d6283a7ab71df8a",
419
+ "media/ref10_d989a7827ba8e0ed1aa5_full.jpg": "52dcfacc346489d76ae3e0e5d716881c60e2b9892c1682b71f8a8843150f242e",
420
+ "media/ref10_ddfdaa2c9eeb6917bb36_crop.jpg": "4971611656ff8f9dbc5d440ed42dab8f8499329fb5817b9e4834ca98a8ac13e2",
421
+ "media/ref10_ddfdaa2c9eeb6917bb36_full.jpg": "0e46d2d572477b9a561ac21936a486a55a3539b2b45dd9952b1299cade0d935c",
422
+ "media/ref10_e33cbd101bae629f3064_crop.jpg": "0d7595a39137a0760e73ca79c207701e454cbbe96551c5d1372132d12703c31f",
423
+ "media/ref10_e33cbd101bae629f3064_full.jpg": "a8792974bca9df0eecd2ac908da39cd06280829f8e99fd2adb33d734efdd7d29",
424
+ "media/ref10_eb4c5acb8afed80484e0_crop.jpg": "96040530c9669e3158fae6297d816cb26b5c7c8f9bbce58d4be0e54d84d8e268",
425
+ "media/ref10_eb4c5acb8afed80484e0_full.jpg": "9242f709c824fc5e08d74d36b607c84c8fec53dd1feca31b3e177331422d683e",
426
+ "media/ref10_ebdf8a893988b82489b7_crop.jpg": "98482ff6d5e0bca59f1f4a0ffcae6ce7fb9101b46633736e008a31b1f80a4dbc",
427
+ "media/ref10_ebdf8a893988b82489b7_full.jpg": "d9963fd0f19331d00c7b1170edf5fda97b9c6fb0ab9738b3a160dad85acffe2e",
428
+ "media/ref10_edf692a38bea15a04563_crop.jpg": "846300fcfc944d55aef537ca8251e2042f0fe915b22d0ecb8f27ed0d99b6bd7a",
429
+ "media/ref10_edf692a38bea15a04563_full.jpg": "cb6e1109187d66ff7c0919a3c43bf5bf81b2e466a9a0b5815cbe5df001b9feda",
430
+ "media/ref10_ee37ce0ff6137544b9a0_crop.jpg": "da1d5fa7205eaad21f0ed979a61ef325faff0ae444943115e4431bc4a2358251",
431
+ "media/ref10_ee37ce0ff6137544b9a0_full.jpg": "968bbe949ed5b4e1bc9710ce9b6a8c44c699265f01c6af238f1af90e211d8ebf",
432
+ "media/ref10_f0cb7d99020eb6258d62_crop.jpg": "b35b95d5cd2a9becc8a9005ece6b683ae78a9b874ec82fd71ebf6e875358debe",
433
+ "media/ref10_f0cb7d99020eb6258d62_full.jpg": "f27abbdeec35042536aab04c6ff6786dc1ea58ed4017586ca8cce2a848bf2ab2",
434
+ "media/ref10_f309ba9e509f314d39f7_crop.jpg": "d4c8df57a45dccf4185880ba715376d46782e16fcab1c60d1220e3bf07b15a33",
435
+ "media/ref10_f309ba9e509f314d39f7_full.jpg": "1580d67fef1d625ddeed214c3e08277e45422339f95f23012916d4222f1603e3",
436
+ "media/ref10_f64b454e1a1c66e5c39f_crop.jpg": "4c0db7077f5732be2379fc5fd4520b58a19b02e2ddea13ede382290e3d9466e1",
437
+ "media/ref10_f64b454e1a1c66e5c39f_full.jpg": "fb559d3bc701573e5196c18f7c4a123586935e3a4d512a2f0ab6b37f8156ae1a",
438
+ "media/ref10_f7ba7e80e93ac7d9624c_crop.jpg": "56d4e1a72af4a3fd99e2d41cc4df41715efb539745f8a5b898819185f12f2b54",
439
+ "media/ref10_f7ba7e80e93ac7d9624c_full.jpg": "b2382ae0e0539fcd2a1402a4e9a3795b8e6d21ec1270a5caa78786e5488afbc8",
440
+ "media/ref10_f98dbaef3bbbbb8705ea_crop.jpg": "67ab65526bd95b98f44d247645d566bdcf5a01ff4afab4537bc8ec7f3570c101",
441
+ "media/ref10_f98dbaef3bbbbb8705ea_full.jpg": "b5cad6c2da13101b3ec57f04af0c70c1000af15208af42ed1f4dcd6bf25e8cd4",
442
+ "media/ref10_fb6c35ccec55bf44f406_crop.jpg": "f84617fc132a83d3596a6906f98508954f6e4e2f53b14d74e0ba3142178e1e41",
443
+ "media/ref10_fb6c35ccec55bf44f406_full.jpg": "9c4f803b1bbe4ff110b1befae49b0f9567435fcc543373a35753b1ab973cd02e"
444
+ }
pose_recluster_distinct_20261014/downloads/coverage/numerical_validation.json ADDED
@@ -0,0 +1,493 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "status": "PASS",
3
+ "n_queries": 214481,
4
+ "same_hand_all": true,
5
+ "all_class_counts_valid": true,
6
+ "input_hashes_unchanged": true,
7
+ "cpu_float64_checks": [
8
+ {
9
+ "index": 104224,
10
+ "id": "ce677dbed112e19929df",
11
+ "hand": "left",
12
+ "max_nn_error_deg": 6.99112847613037e-07,
13
+ "cpu_nearest_index": 72595,
14
+ "gpu_nearest_index": 72595,
15
+ "cpu_support_recordings": 433,
16
+ "gpu_support_recordings": 433,
17
+ "cpu_support_samples": 4758,
18
+ "gpu_support_samples": 4758,
19
+ "threshold_boundary_margin_deg": 0.000518130555350993,
20
+ "numerically_ambiguous_counts": true,
21
+ "status_agrees": true
22
+ },
23
+ {
24
+ "index": 132496,
25
+ "id": "a372d7f3f9ca31e4f339",
26
+ "hand": "left",
27
+ "max_nn_error_deg": 7.616026653778363e-07,
28
+ "cpu_nearest_index": 20624,
29
+ "gpu_nearest_index": 20624,
30
+ "cpu_support_recordings": 486,
31
+ "gpu_support_recordings": 486,
32
+ "cpu_support_samples": 6388,
33
+ "gpu_support_samples": 6388,
34
+ "threshold_boundary_margin_deg": 0.00012130882421423905,
35
+ "numerically_ambiguous_counts": true,
36
+ "status_agrees": true
37
+ },
38
+ {
39
+ "index": 199298,
40
+ "id": "415a98e8f2c0d08b7026c325",
41
+ "hand": "left",
42
+ "max_nn_error_deg": 3.101106830882827e-06,
43
+ "cpu_nearest_index": 68029,
44
+ "gpu_nearest_index": 68029,
45
+ "cpu_support_recordings": 0,
46
+ "gpu_support_recordings": 0,
47
+ "cpu_support_samples": 0,
48
+ "gpu_support_samples": 0,
49
+ "threshold_boundary_margin_deg": 9.337130306485943,
50
+ "numerically_ambiguous_counts": false,
51
+ "status_agrees": true
52
+ },
53
+ {
54
+ "index": 114144,
55
+ "id": "c340b3012311f32d0782",
56
+ "hand": "left",
57
+ "max_nn_error_deg": 4.367412552941374e-06,
58
+ "cpu_nearest_index": 153988,
59
+ "gpu_nearest_index": 153988,
60
+ "cpu_support_recordings": 459,
61
+ "gpu_support_recordings": 459,
62
+ "cpu_support_samples": 3007,
63
+ "gpu_support_samples": 3007,
64
+ "threshold_boundary_margin_deg": 5.187538525852631e-05,
65
+ "numerically_ambiguous_counts": true,
66
+ "status_agrees": true
67
+ },
68
+ {
69
+ "index": 170418,
70
+ "id": "0061ffab25e7a8114710",
71
+ "hand": "left",
72
+ "max_nn_error_deg": 1.982518597287708e-06,
73
+ "cpu_nearest_index": 155850,
74
+ "gpu_nearest_index": 155850,
75
+ "cpu_support_recordings": 1,
76
+ "gpu_support_recordings": 1,
77
+ "cpu_support_samples": 2,
78
+ "gpu_support_samples": 2,
79
+ "threshold_boundary_margin_deg": 0.013601774319448978,
80
+ "numerically_ambiguous_counts": false,
81
+ "status_agrees": true
82
+ },
83
+ {
84
+ "index": 48354,
85
+ "id": "4a230d663fa817ca6e8c",
86
+ "hand": "left",
87
+ "max_nn_error_deg": 1.3680634721069396e-05,
88
+ "cpu_nearest_index": 216915,
89
+ "gpu_nearest_index": 216915,
90
+ "cpu_support_recordings": 3,
91
+ "gpu_support_recordings": 3,
92
+ "cpu_support_samples": 3,
93
+ "gpu_support_samples": 3,
94
+ "threshold_boundary_margin_deg": 0.025239116280101115,
95
+ "numerically_ambiguous_counts": false,
96
+ "status_agrees": true
97
+ },
98
+ {
99
+ "index": 72769,
100
+ "id": "b242c55c73d51beaab44",
101
+ "hand": "left",
102
+ "max_nn_error_deg": 4.1788954892041374e-06,
103
+ "cpu_nearest_index": 190545,
104
+ "gpu_nearest_index": 190545,
105
+ "cpu_support_recordings": 0,
106
+ "gpu_support_recordings": 0,
107
+ "cpu_support_samples": 0,
108
+ "gpu_support_samples": 0,
109
+ "threshold_boundary_margin_deg": 3.5411332911391415,
110
+ "numerically_ambiguous_counts": false,
111
+ "status_agrees": true
112
+ },
113
+ {
114
+ "index": 35121,
115
+ "id": "90bced6e3cc66a1976e7",
116
+ "hand": "left",
117
+ "max_nn_error_deg": 1.0816202706820377e-06,
118
+ "cpu_nearest_index": 126420,
119
+ "gpu_nearest_index": 126420,
120
+ "cpu_support_recordings": 2,
121
+ "gpu_support_recordings": 2,
122
+ "cpu_support_samples": 2,
123
+ "gpu_support_samples": 2,
124
+ "threshold_boundary_margin_deg": 0.24574571949894342,
125
+ "numerically_ambiguous_counts": false,
126
+ "status_agrees": true
127
+ },
128
+ {
129
+ "index": 143542,
130
+ "id": "812fa4aee6e0e6ba5093",
131
+ "hand": "left",
132
+ "max_nn_error_deg": 5.346861244426293e-06,
133
+ "cpu_nearest_index": 49702,
134
+ "gpu_nearest_index": 49702,
135
+ "cpu_support_recordings": 318,
136
+ "gpu_support_recordings": 318,
137
+ "cpu_support_samples": 1409,
138
+ "gpu_support_samples": 1409,
139
+ "threshold_boundary_margin_deg": 0.0003205580489851201,
140
+ "numerically_ambiguous_counts": true,
141
+ "status_agrees": true
142
+ },
143
+ {
144
+ "index": 128344,
145
+ "id": "562a8e43ecbb28be41ab",
146
+ "hand": "left",
147
+ "max_nn_error_deg": 3.4549104273473574e-05,
148
+ "cpu_nearest_index": 54294,
149
+ "gpu_nearest_index": 54294,
150
+ "cpu_support_recordings": 738,
151
+ "gpu_support_recordings": 738,
152
+ "cpu_support_samples": 5161,
153
+ "gpu_support_samples": 5161,
154
+ "threshold_boundary_margin_deg": 0.00015118673663394588,
155
+ "numerically_ambiguous_counts": true,
156
+ "status_agrees": true
157
+ },
158
+ {
159
+ "index": 190784,
160
+ "id": "47ee6f303067ed4b00cd03ff",
161
+ "hand": "left",
162
+ "max_nn_error_deg": 8.845484504860224e-06,
163
+ "cpu_nearest_index": 55282,
164
+ "gpu_nearest_index": 55282,
165
+ "cpu_support_recordings": 19,
166
+ "gpu_support_recordings": 19,
167
+ "cpu_support_samples": 35,
168
+ "gpu_support_samples": 35,
169
+ "threshold_boundary_margin_deg": 0.005902942524516064,
170
+ "numerically_ambiguous_counts": false,
171
+ "status_agrees": true
172
+ },
173
+ {
174
+ "index": 160403,
175
+ "id": "9eed9d2d43aec0bbf445",
176
+ "hand": "left",
177
+ "max_nn_error_deg": 1.3292233624895289e-06,
178
+ "cpu_nearest_index": 270766,
179
+ "gpu_nearest_index": 270766,
180
+ "cpu_support_recordings": 0,
181
+ "gpu_support_recordings": 0,
182
+ "cpu_support_samples": 0,
183
+ "gpu_support_samples": 0,
184
+ "threshold_boundary_margin_deg": 7.7205919206540266,
185
+ "numerically_ambiguous_counts": false,
186
+ "status_agrees": true
187
+ },
188
+ {
189
+ "index": 190534,
190
+ "id": "48efa6743fb86d2523435fec",
191
+ "hand": "left",
192
+ "max_nn_error_deg": 4.447297581933185e-05,
193
+ "cpu_nearest_index": 245191,
194
+ "gpu_nearest_index": 245191,
195
+ "cpu_support_recordings": 0,
196
+ "gpu_support_recordings": 0,
197
+ "cpu_support_samples": 0,
198
+ "gpu_support_samples": 0,
199
+ "threshold_boundary_margin_deg": 0.0001350720358779256,
200
+ "numerically_ambiguous_counts": true,
201
+ "status_agrees": true
202
+ },
203
+ {
204
+ "index": 76364,
205
+ "id": "13ec1867b62209ef06ce",
206
+ "hand": "left",
207
+ "max_nn_error_deg": 4.282802610333647e-06,
208
+ "cpu_nearest_index": 104121,
209
+ "gpu_nearest_index": 104121,
210
+ "cpu_support_recordings": 0,
211
+ "gpu_support_recordings": 0,
212
+ "cpu_support_samples": 0,
213
+ "gpu_support_samples": 0,
214
+ "threshold_boundary_margin_deg": 0.00023697933581345865,
215
+ "numerically_ambiguous_counts": true,
216
+ "status_agrees": true
217
+ },
218
+ {
219
+ "index": 86833,
220
+ "id": "e7a41c6490f79c072e5a",
221
+ "hand": "left",
222
+ "max_nn_error_deg": 9.297119483164806e-06,
223
+ "cpu_nearest_index": 176556,
224
+ "gpu_nearest_index": 176556,
225
+ "cpu_support_recordings": 1,
226
+ "gpu_support_recordings": 1,
227
+ "cpu_support_samples": 1,
228
+ "gpu_support_samples": 1,
229
+ "threshold_boundary_margin_deg": 0.00025487066616136644,
230
+ "numerically_ambiguous_counts": true,
231
+ "status_agrees": true
232
+ },
233
+ {
234
+ "index": 162070,
235
+ "id": "d1eeba3d381d6296b0f9",
236
+ "hand": "left",
237
+ "max_nn_error_deg": 6.95536685757503e-05,
238
+ "cpu_nearest_index": 178323,
239
+ "gpu_nearest_index": 178323,
240
+ "cpu_support_recordings": 1,
241
+ "gpu_support_recordings": 1,
242
+ "cpu_support_samples": 1,
243
+ "gpu_support_samples": 1,
244
+ "threshold_boundary_margin_deg": 0.00034325819738434404,
245
+ "numerically_ambiguous_counts": true,
246
+ "status_agrees": true
247
+ },
248
+ {
249
+ "index": 88456,
250
+ "id": "54299e8f4a11a9f3fa21",
251
+ "hand": "right",
252
+ "max_nn_error_deg": 6.491278501385978e-07,
253
+ "cpu_nearest_index": 117358,
254
+ "gpu_nearest_index": 117358,
255
+ "cpu_support_recordings": 0,
256
+ "gpu_support_recordings": 0,
257
+ "cpu_support_samples": 0,
258
+ "gpu_support_samples": 0,
259
+ "threshold_boundary_margin_deg": 1.0074418252373842,
260
+ "numerically_ambiguous_counts": false,
261
+ "status_agrees": true
262
+ },
263
+ {
264
+ "index": 58374,
265
+ "id": "e4faadb04fed4fb3e0ef",
266
+ "hand": "right",
267
+ "max_nn_error_deg": 4.770485634963961e-06,
268
+ "cpu_nearest_index": 68385,
269
+ "gpu_nearest_index": 68385,
270
+ "cpu_support_recordings": 0,
271
+ "gpu_support_recordings": 0,
272
+ "cpu_support_samples": 0,
273
+ "gpu_support_samples": 0,
274
+ "threshold_boundary_margin_deg": 2.6286601999123143,
275
+ "numerically_ambiguous_counts": false,
276
+ "status_agrees": true
277
+ },
278
+ {
279
+ "index": 143165,
280
+ "id": "732b459d6f7038d92581",
281
+ "hand": "right",
282
+ "max_nn_error_deg": 1.2991328146583214e-05,
283
+ "cpu_nearest_index": 52245,
284
+ "gpu_nearest_index": 52245,
285
+ "cpu_support_recordings": 336,
286
+ "gpu_support_recordings": 336,
287
+ "cpu_support_samples": 3730,
288
+ "gpu_support_samples": 3730,
289
+ "threshold_boundary_margin_deg": 3.546608200011292e-06,
290
+ "numerically_ambiguous_counts": true,
291
+ "status_agrees": true
292
+ },
293
+ {
294
+ "index": 21598,
295
+ "id": "a684b59c5c8a2000da00",
296
+ "hand": "right",
297
+ "max_nn_error_deg": 2.9661092931121402e-05,
298
+ "cpu_nearest_index": 66473,
299
+ "gpu_nearest_index": 66473,
300
+ "cpu_support_recordings": 37,
301
+ "gpu_support_recordings": 37,
302
+ "cpu_support_samples": 97,
303
+ "gpu_support_samples": 97,
304
+ "threshold_boundary_margin_deg": 0.002138717558594294,
305
+ "numerically_ambiguous_counts": false,
306
+ "status_agrees": true
307
+ },
308
+ {
309
+ "index": 64830,
310
+ "id": "0d03228bbaae6cf827a1",
311
+ "hand": "right",
312
+ "max_nn_error_deg": 1.2883399865160072e-05,
313
+ "cpu_nearest_index": 87526,
314
+ "gpu_nearest_index": 87526,
315
+ "cpu_support_recordings": 1,
316
+ "gpu_support_recordings": 1,
317
+ "cpu_support_samples": 1,
318
+ "gpu_support_samples": 1,
319
+ "threshold_boundary_margin_deg": 0.0863308818589239,
320
+ "numerically_ambiguous_counts": false,
321
+ "status_agrees": true
322
+ },
323
+ {
324
+ "index": 133563,
325
+ "id": "bf368fcb80b35f292647",
326
+ "hand": "right",
327
+ "max_nn_error_deg": 3.3180044524350194e-05,
328
+ "cpu_nearest_index": 54989,
329
+ "gpu_nearest_index": 54989,
330
+ "cpu_support_recordings": 214,
331
+ "gpu_support_recordings": 214,
332
+ "cpu_support_samples": 1948,
333
+ "gpu_support_samples": 1948,
334
+ "threshold_boundary_margin_deg": 0.0009506813307851303,
335
+ "numerically_ambiguous_counts": true,
336
+ "status_agrees": true
337
+ },
338
+ {
339
+ "index": 136380,
340
+ "id": "e7dc86ad70822382df41",
341
+ "hand": "right",
342
+ "max_nn_error_deg": 2.9483962187271118e-06,
343
+ "cpu_nearest_index": 174262,
344
+ "gpu_nearest_index": 174262,
345
+ "cpu_support_recordings": 3,
346
+ "gpu_support_recordings": 3,
347
+ "cpu_support_samples": 3,
348
+ "gpu_support_samples": 3,
349
+ "threshold_boundary_margin_deg": 0.09372570151546533,
350
+ "numerically_ambiguous_counts": false,
351
+ "status_agrees": true
352
+ },
353
+ {
354
+ "index": 15980,
355
+ "id": "05a1cdacf0df121aa54b",
356
+ "hand": "right",
357
+ "max_nn_error_deg": 6.378644595628202e-06,
358
+ "cpu_nearest_index": 137023,
359
+ "gpu_nearest_index": 137023,
360
+ "cpu_support_recordings": 0,
361
+ "gpu_support_recordings": 0,
362
+ "cpu_support_samples": 0,
363
+ "gpu_support_samples": 0,
364
+ "threshold_boundary_margin_deg": 2.5974648585380216,
365
+ "numerically_ambiguous_counts": false,
366
+ "status_agrees": true
367
+ },
368
+ {
369
+ "index": 163693,
370
+ "id": "95b22b5f23e3dd1c8d0e",
371
+ "hand": "right",
372
+ "max_nn_error_deg": 2.0178348178134797e-05,
373
+ "cpu_nearest_index": 136565,
374
+ "gpu_nearest_index": 136565,
375
+ "cpu_support_recordings": 0,
376
+ "gpu_support_recordings": 0,
377
+ "cpu_support_samples": 0,
378
+ "gpu_support_samples": 0,
379
+ "threshold_boundary_margin_deg": 1.7789619841274078,
380
+ "numerically_ambiguous_counts": false,
381
+ "status_agrees": true
382
+ },
383
+ {
384
+ "index": 143195,
385
+ "id": "b49ccaf7e85627f276b1",
386
+ "hand": "right",
387
+ "max_nn_error_deg": 6.505127305267422e-06,
388
+ "cpu_nearest_index": 162809,
389
+ "gpu_nearest_index": 162809,
390
+ "cpu_support_recordings": 325,
391
+ "gpu_support_recordings": 325,
392
+ "cpu_support_samples": 1864,
393
+ "gpu_support_samples": 1864,
394
+ "threshold_boundary_margin_deg": 0.00018799342378628126,
395
+ "numerically_ambiguous_counts": true,
396
+ "status_agrees": true
397
+ },
398
+ {
399
+ "index": 176818,
400
+ "id": "fb929982a9bfdf4c1da9",
401
+ "hand": "right",
402
+ "max_nn_error_deg": 3.1252297105766047e-07,
403
+ "cpu_nearest_index": 254534,
404
+ "gpu_nearest_index": 254534,
405
+ "cpu_support_recordings": 318,
406
+ "gpu_support_recordings": 318,
407
+ "cpu_support_samples": 840,
408
+ "gpu_support_samples": 840,
409
+ "threshold_boundary_margin_deg": 6.590315410015535e-05,
410
+ "numerically_ambiguous_counts": true,
411
+ "status_agrees": true
412
+ },
413
+ {
414
+ "index": 2516,
415
+ "id": "4f2e0ebf48abfbc1e13e",
416
+ "hand": "right",
417
+ "max_nn_error_deg": 6.689719138641692e-06,
418
+ "cpu_nearest_index": 173434,
419
+ "gpu_nearest_index": 173434,
420
+ "cpu_support_recordings": 89,
421
+ "gpu_support_recordings": 89,
422
+ "cpu_support_samples": 186,
423
+ "gpu_support_samples": 186,
424
+ "threshold_boundary_margin_deg": 0.00023811003439888623,
425
+ "numerically_ambiguous_counts": true,
426
+ "status_agrees": true
427
+ },
428
+ {
429
+ "index": 117712,
430
+ "id": "f66ff05fc0bd29c38567",
431
+ "hand": "right",
432
+ "max_nn_error_deg": 6.224205010951778e-06,
433
+ "cpu_nearest_index": 166309,
434
+ "gpu_nearest_index": 166309,
435
+ "cpu_support_recordings": 0,
436
+ "gpu_support_recordings": 0,
437
+ "cpu_support_samples": 0,
438
+ "gpu_support_samples": 0,
439
+ "threshold_boundary_margin_deg": 7.127235418735722e-06,
440
+ "numerically_ambiguous_counts": true,
441
+ "status_agrees": true
442
+ },
443
+ {
444
+ "index": 22347,
445
+ "id": "3e1ddb39fcd537399bab",
446
+ "hand": "right",
447
+ "max_nn_error_deg": 9.415527326694928e-07,
448
+ "cpu_nearest_index": 29477,
449
+ "gpu_nearest_index": 29477,
450
+ "cpu_support_recordings": 0,
451
+ "gpu_support_recordings": 0,
452
+ "cpu_support_samples": 0,
453
+ "gpu_support_samples": 0,
454
+ "threshold_boundary_margin_deg": 6.674508056470074e-05,
455
+ "numerically_ambiguous_counts": true,
456
+ "status_agrees": true
457
+ },
458
+ {
459
+ "index": 55064,
460
+ "id": "7570d75af73f865f44a5",
461
+ "hand": "right",
462
+ "max_nn_error_deg": 1.738083218683073e-06,
463
+ "cpu_nearest_index": 157180,
464
+ "gpu_nearest_index": 157180,
465
+ "cpu_support_recordings": 0,
466
+ "gpu_support_recordings": 0,
467
+ "cpu_support_samples": 0,
468
+ "gpu_support_samples": 0,
469
+ "threshold_boundary_margin_deg": 0.00018579722628508932,
470
+ "numerically_ambiguous_counts": true,
471
+ "status_agrees": true
472
+ },
473
+ {
474
+ "index": 202753,
475
+ "id": "a2786a37b76720e7121b0e48",
476
+ "hand": "right",
477
+ "max_nn_error_deg": 1.0289521039652527e-06,
478
+ "cpu_nearest_index": 271486,
479
+ "gpu_nearest_index": 271486,
480
+ "cpu_support_recordings": 1,
481
+ "gpu_support_recordings": 1,
482
+ "cpu_support_samples": 1,
483
+ "gpu_support_samples": 1,
484
+ "threshold_boundary_margin_deg": 0.000202254232865684,
485
+ "numerically_ambiguous_counts": true,
486
+ "status_agrees": true
487
+ }
488
+ ],
489
+ "cpu_nn_max_error_deg": 6.95536685757503e-05,
490
+ "previous_exact_prototype_checks": 114,
491
+ "previous_exact_prototype_max_error_deg": 5.7220458984375e-06,
492
+ "limitations": "Float32 acos counts extremely close to the threshold can change under rounding; boundary examples were checked and sample statuses agree. No GT accuracy verdict derived from nearest-neighbor distance."
493
+ }
pose_recluster_distinct_20261014/downloads/coverage/reference_unit_codes.json ADDED
The diff for this file is too large to render. See raw diff
 
pose_recluster_distinct_20261014/downloads/coverage/source_coverage.csv ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ source,hand,threshold_deg,n,covered,low,uncovered,covered_fraction,low_fraction,uncovered_fraction,any_match_fraction,status,status_label,fit_weighted_fractions,equal_unit_fractions,independent_units
2
+ wilor_dex,left,9.49763298034668,25152,23601,816,735,0.9383349236641222,0.03244274809160305,0.029222328244274808,0.9707776717557252,covered,已覆盖,"[0.9374486070424131, 0.03292423647707949, 0.029627156480507476]","[0.9362868299495475, 0.03362718992705063, 0.03008598012340202]",400
3
+ wilor_h2o3d,left,9.49763298034668,1291,812,186,293,0.6289697908597986,0.14407436096049575,0.22695584817970565,0.7730441518202944,low,低覆盖,"[0.6616456454449668, 0.1251878606104697, 0.21316649394456366]","[0.6620034602321778, 0.12476157424870783, 0.21323496551911433]",15
4
+ wilor_interhand26m,left,9.49763298034668,11032,3861,811,6360,0.3499818709209572,0.07351341551849166,0.5765047135605511,0.4234952864394489,low,低覆盖,"[0.34860382240689025, 0.06880665978942004, 0.5825895178036897]","[0.2453189914424418, 0.05482777811855487, 0.6998532304390033]",1603
5
+ wilor_mtc,left,9.49763298034668,5458,3123,371,1964,0.5721876145108098,0.06797361670941737,0.35983876877977283,0.6401612312202272,low,低覆盖,"[0.5148380089407388, 0.07512886333927707, 0.4100331277199841]","[0.5148380089407388, 0.07512886333927707, 0.4100331277199842]",29
6
+ wilor_reinter,left,9.49763298034668,10980,3307,1093,6580,0.301183970856102,0.09954462659380692,0.599271402550091,0.40072859744990896,low,低覆盖,"[0.26590158871151415, 0.09992736996907335, 0.6341710413194124]","[0.2659041186531571, 0.09991779552680215, 0.6341780858200406]",7
7
+ wilor_rhd,left,9.49763298034668,32119,5821,2334,23964,0.18123229241259067,0.07266726859491267,0.7461004389924967,0.2538995610075033,low,低覆盖,"[0.21237286575799336, 0.08390867381999029, 0.7037184604220162]","[0.21237286575799338, 0.0839086738199903, 0.7037184604220164]",23426
8
+ wilor_dex,right,9.252071380615234,24765,23594,613,558,0.9527155259438724,0.024752675146375934,0.022531798909751665,0.9774682010902483,covered,已覆盖,"[0.9528017417829242, 0.024663092049545043, 0.022535166167530794]","[0.9530755695414824, 0.024153236340122387, 0.022771194118395243]",400
9
+ wilor_freihand,right,9.252071380615234,32560,15016,3120,14424,0.4611793611793612,0.09582309582309582,0.442997542997543,0.557002457002457,low,低覆盖,"[0.46106607713092596, 0.09579955784819452, 0.4431343650208792]","[0.46106607713092607, 0.09579955784819455, 0.4431343650208794]",4071
10
+ wilor_h2o3d,right,9.252071380615234,1356,942,153,261,0.6946902654867256,0.11283185840707964,0.19247787610619468,0.8075221238938053,low,低覆盖,"[0.6980372264813266, 0.10938226873347846, 0.19258050478519503]","[0.6983044713757621, 0.10929764102746048, 0.19239788759677737]",15
11
+ wilor_ho3d,right,9.252071380615234,9010,4205,892,3913,0.4667036625971143,0.09900110987791343,0.43429522752497224,0.5657047724750277,low,低覆盖,"[0.504863490828288, 0.09286802954642583, 0.4022684796252862]","[0.5047888758000435, 0.09283800452816984, 0.4023731196717867]",24
12
+ wilor_interhand26m,right,9.252071380615234,11115,3348,951,6816,0.30121457489878545,0.08556005398110661,0.613225371120108,0.386774628879892,low,低覆盖,"[0.301618644476163, 0.08102785587706593, 0.6173534996467712]","[0.21530795959559013, 0.06292933211471498, 0.7217627082896949]",1646
13
+ wilor_mtc,right,9.252071380615234,7041,4187,418,2436,0.5946598494532027,0.05936656724897032,0.345973583297827,0.654026416702173,low,低覆盖,"[0.5487214239520184, 0.06228577150087952, 0.38899280454710206]","[0.5487214239520184, 0.06228577150087951, 0.3889928045471021]",29
14
+ wilor_reinter,right,9.252071380615234,10980,2961,1284,6735,0.26967213114754096,0.11693989071038251,0.6133879781420765,0.38661202185792354,low,低覆盖,"[0.25803549392737946, 0.11351201169705163, 0.6284524943755689]","[0.25799964999517766, 0.11351521982231658, 0.6284851301825056]",7
15
+ wilor_rhd,right,9.252071380615234,31622,4630,2388,24604,0.14641705141989753,0.07551704509518689,0.7780659034849156,0.22193409651508444,low,低覆盖,"[0.17558189935416757, 0.0779873741391302, 0.7464307265067023]","[0.17558189935416757, 0.0779873741391302, 0.7464307265067023]",23071
pose_recluster_distinct_20261014/downloads/coverage/summary.json ADDED
@@ -0,0 +1,73 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "left": {
3
+ "n": 86032,
4
+ "covered": 40525,
5
+ "low": 5611,
6
+ "uncovered": 39896,
7
+ "covered_fraction": 0.47104565742979354,
8
+ "low_fraction": 0.06521991816998327,
9
+ "uncovered_fraction": 0.46373442440022317,
10
+ "any_match_fraction": 0.5362655755997768,
11
+ "status": "low",
12
+ "status_label": "低覆盖",
13
+ "fit_weighted_fractions": [
14
+ 0.5116070775467868,
15
+ 0.07848377248549801,
16
+ 0.40990914996771516
17
+ ],
18
+ "equal_unit_fractions": [
19
+ 0.22643365429757228,
20
+ 0.0813082410683365,
21
+ 0.6922581046340911
22
+ ],
23
+ "independent_units": 25480,
24
+ "threshold_deg": 9.49763298034668
25
+ },
26
+ "right": {
27
+ "n": 128449,
28
+ "covered": 58883,
29
+ "low": 9819,
30
+ "uncovered": 59747,
31
+ "covered_fraction": 0.45841540222189353,
32
+ "low_fraction": 0.0764427905238655,
33
+ "uncovered_fraction": 0.465141807254241,
34
+ "any_match_fraction": 0.534858192745759,
35
+ "status": "low",
36
+ "status_label": "低覆盖",
37
+ "fit_weighted_fractions": [
38
+ 0.503315756738164,
39
+ 0.07957139837509657,
40
+ 0.41711284488673944
41
+ ],
42
+ "equal_unit_fractions": [
43
+ 0.22908743287582772,
44
+ 0.07890367202942666,
45
+ 0.6920088950947455
46
+ ],
47
+ "independent_units": 29263,
48
+ "threshold_deg": 9.252071380615234
49
+ },
50
+ "all": {
51
+ "n": 214481,
52
+ "covered": 99408,
53
+ "low": 15430,
54
+ "uncovered": 99643,
55
+ "covered_fraction": 0.46348161375599706,
56
+ "low_fraction": 0.07194110434024459,
57
+ "uncovered_fraction": 0.46457728190375835,
58
+ "any_match_fraction": 0.5354227180962416,
59
+ "status": "low",
60
+ "status_label": "低覆盖",
61
+ "fit_weighted_fractions": [
62
+ 0.5068111174712108,
63
+ 0.07911288942163833,
64
+ 0.41407599310715076
65
+ ],
66
+ "equal_unit_fractions": [
67
+ 0.22673415728721588,
68
+ 0.07994906065326271,
69
+ 0.6933167820595212
70
+ ],
71
+ "independent_units": 54087
72
+ }
73
+ }
pose_recluster_distinct_20261014/downloads/coverage/threshold_sensitivity.csv ADDED
The diff for this file is too large to render. See raw diff
 
pose_recluster_distinct_20261014/index.html CHANGED
@@ -1,15 +1,16 @@
1
  <!doctype html>
2
- <html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>最新抽样 · 局部姿态聚类对比</title><link rel="stylesheet" href="style.css"></head>
3
  <body>
4
- <header><h1>局部姿态聚类对比 <small>2026.10.14</small></h1><div class="toolbar"><label>手侧 <select id="hand"><option value="right">右手</option><option value="left">左手</option></select></label><label>粒度 <select id="level"><option value="distinct">合并相近类后</option><option value="fine">32 个细类</option></select></label><label>骨架视角 <select id="view"><option value="oblique">斜看</option><option value="palm">掌面</option><option value="side">侧面</option></select></label><button id="reset">重置视角</button></div></header>
5
  <nav><button data-tab="overview" class="active">两组类别</button><button data-tab="compare">逐类比较</button><button data-tab="similar">相似与合并</button><button data-tab="sources">18 行来源表</button></nav>
6
  <main>
7
- <div id="overview" class="tab"><div id="countTable"></div><p class="hint">点击类别查看原图、GT 叠加和最近邻。骨架可拖动旋转;A、B 编号各自独立。</p><div class="two-groups"><section><h2 class="ours">我们:三源+EgoRenderer Ver.005 <span id="oursCount"></span></h2><div id="oursCards" class="cards"></div></section><section><h2 class="external">外部:WiLoR 可读 3D 来源 <span id="externalCount"></span></h2><div id="externalCards" class="cards"></div></section></div><details><summary>类别分布图(仅展示)</summary><p class="hint">同一掌部坐标和投影;图上距离不作为覆盖或合并依据。</p><canvas id="scatter" width="1100" height="450"></canvas></details></div>
8
- <div id="compare" class="tab" hidden><p class="hint">右边是外部类;左边是它最相近的我们类。点击可看真实图例;最小样本距离另列,不能把类中心距离当覆盖结论。</p><div id="comparisonRows"></div></div>
 
9
  <div id="similar" class="tab" hidden><div id="duplicateSummary"></div><h2>仍然相近的类</h2><p class="hint">下列类的中心相近,但继续整类合并会把部分差异较大的手指形态连在一起,因此保留并显式标记。</p><div id="relatedPairs"></div><h2>已合并的细类</h2><div id="mergeRows"></div></div>
10
  <div id="sources" class="tab" hidden><p class="hint">8 个外部 3D 来源参与本轮聚类。ARCTIC/HOT3D 与我们组重叠;仅 2D 的来源点击直接看 RGB 关键点。</p><div class="scroll"><table id="sourceTable"></table></div><p class="hint">WiLoR 行为官方源数据代理,未声称精确复现其加工训练包。我们组三源依据已核对训练成员的来源 GT;最终 canonical 标签仍未核验。ReInterHand 的 7,600 个 test 手帧未参与聚类。</p></div>
11
  </main>
12
- <footer><a href="downloads/RESULTS_ZH.md">结果说明</a><a href="downloads/assignments.csv.gz">逐样本类别 CSV</a><a href="downloads/all_class_pairs.csv">类间距离 CSV</a><a href="downloads/REPRODUCE.md">代码与复现</a><span>数据分组并非人工手势标签;GT 来源身份与可靠性分开。</span></footer>
13
  <dialog id="detail"><button id="closeDetail" class="close" aria-label="关闭">×</button><div id="detailBody"></div></dialog>
14
- <script src="data.js"></script><script src="app.js"></script>
15
  </body></html>
 
1
  <!doctype html>
2
+ <html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>最新抽样 · 局部姿态聚类对比</title><link rel="stylesheet" href="style.coverage_v2.css"></head>
3
  <body>
4
+ <header><h1>局部姿态聚类对比 <small>逐成员覆盖 · 2026.10.14</small></h1><div class="toolbar"><label>手侧 <select id="hand"><option value="right">右手</option><option value="left">左手</option></select></label><label>粒度 <select id="level"><option value="distinct">合并相近类后</option><option value="fine">32 个细类</option></select></label><label>骨架视角 <select id="view"><option value="oblique">斜看</option><option value="palm">掌面</option><option value="side">侧面</option></select></label><button id="reset">重置视角</button></div></header>
5
  <nav><button data-tab="overview" class="active">两组类别</button><button data-tab="compare">逐类比较</button><button data-tab="similar">相似与合并</button><button data-tab="sources">18 行来源表</button></nav>
6
  <main>
7
+ <section class="coverage-panel" aria-label="外部姿态覆盖"><div class="coverage-controls"><strong>WiLoR 外部类 → 我们三源+合成</strong><label>外部类筛选 <select id="coverageFilter"><option value="all">全部</option><option value="entire">整类未覆盖</option><option value="mostly_gap">未覆盖成员 ≥50%</option><option value="mostly_covered">已覆盖成员 ≥70%</option></select></label><label>排序 <select id="coverageSort"><option value="gap">未覆盖比例高 → 低</option><option value="covered">已覆盖比例高 → 低</option><option value="id">类别编号</option></select></label></div><div id="coverageSummary"></div><p class="coverage-legend"><span class="dot covered"></span>已覆盖:≥3 段独立录制有相似姿态 <span class="dot low"></span>低覆盖:只有 1–2 段 <span class="dot uncovered"></span>未覆盖:没有相似姿态</p><p class="hint">均指本次抽样库。类别内逐成员统计;未覆盖不等于 GT 可靠,也不等于全量训练集绝对缺失。</p><details id="coverageMethod"><summary>判定依据与阈值敏感性</summary><div id="coverageMethodBody"></div></details></section>
8
+ <div id="overview" class="tab"><div id="countTable"></div><p class="hint">点击外部类的“未覆盖成员 / 原图 / 近邻”查看具体缺口。骨架可拖动旋转;A、B 编号各自独立。</p><div class="two-groups"><section><h2 class="ours">我们:三源+EgoRenderer Ver.005 <span id="oursCount"></span></h2><div id="oursCards" class="cards"></div></section><section><h2 class="external">外部:WiLoR 可读 3D 来源 <span id="externalCount"></span></h2><div id="externalCards" class="cards"></div></section></div><details><summary>类别分布图(仅展示)</summary><p class="hint">同一掌部坐标和投影;图上距离不作为覆盖或合并依据。</p><canvas id="scatter" width="1100" height="450"></canvas></details></div>
9
+ <div id="compare" class="tab" hidden><p class="hint">右边是外部类;左边是它最相近的我们类。覆盖条来自该类全部成员;点击外部类查看未覆盖成员与各自的精确最近邻。</p><div id="comparisonRows"></div></div>
10
  <div id="similar" class="tab" hidden><div id="duplicateSummary"></div><h2>仍然相近的类</h2><p class="hint">下列类的中心相近,但继续整类合并会把部分差异较大的手指形态连在一起,因此保留并显式标记。</p><div id="relatedPairs"></div><h2>已合并的细类</h2><div id="mergeRows"></div></div>
11
  <div id="sources" class="tab" hidden><p class="hint">8 个外部 3D 来源参与本轮聚类。ARCTIC/HOT3D 与我们组重叠;仅 2D 的来源点击直接看 RGB 关键点。</p><div class="scroll"><table id="sourceTable"></table></div><p class="hint">WiLoR 行为官方源数据代理,未声称精确复现其加工训练包。我们组三源依据已核对训练成员的来源 GT;最终 canonical 标签仍未核验。ReInterHand 的 7,600 个 test 手帧未参与聚类。</p></div>
12
  </main>
13
+ <footer><a href="downloads/coverage/RESULTS_ZH.md">覆盖结果</a><a href="downloads/coverage/member_coverage.csv.gz">逐成员覆盖 CSV</a><a href="downloads/coverage/class_coverage.csv">逐类覆盖 CSV</a><a href="downloads/coverage/REPRODUCE.md">覆盖复现</a><a href="downloads/RESULTS_ZH.md">结果说明</a><a href="downloads/assignments.csv.gz">逐样本类别 CSV</a><a href="downloads/all_class_pairs.csv">类间距离 CSV</a><a href="downloads/REPRODUCE.md">代码与复现</a><span>数据分组并非人工手势标签;GT 来源身份与可靠性分开。</span></footer>
14
  <dialog id="detail"><button id="closeDetail" class="close" aria-label="关闭">×</button><div id="detailBody"></div></dialog>
15
+ <script src="data.coverage_v2.js"></script><script src="app.coverage_v2.js"></script>
16
  </body></html>
pose_recluster_distinct_20261014/index_before_coverage.html ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!doctype html>
2
+ <html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>最新抽样 · 局部姿态聚类对比</title><link rel="stylesheet" href="style.css"></head>
3
+ <body>
4
+ <header><h1>局部姿态聚类对比 <small>2026.10.14</small></h1><div class="toolbar"><label>手侧 <select id="hand"><option value="right">右手</option><option value="left">左手</option></select></label><label>粒度 <select id="level"><option value="distinct">合并相近类后</option><option value="fine">32 个细类</option></select></label><label>骨架视角 <select id="view"><option value="oblique">斜看</option><option value="palm">掌面</option><option value="side">侧面</option></select></label><button id="reset">重置视角</button></div></header>
5
+ <nav><button data-tab="overview" class="active">两组类别</button><button data-tab="compare">逐类比较</button><button data-tab="similar">相似与合并</button><button data-tab="sources">18 行来源表</button></nav>
6
+ <main>
7
+ <div id="overview" class="tab"><div id="countTable"></div><p class="hint">点击类别查看原图、GT 叠加和最近邻。骨架可拖动旋转;A、B 编号各自独立。</p><div class="two-groups"><section><h2 class="ours">我们:三源+EgoRenderer Ver.005 <span id="oursCount"></span></h2><div id="oursCards" class="cards"></div></section><section><h2 class="external">外部:WiLoR 可读 3D 来源 <span id="externalCount"></span></h2><div id="externalCards" class="cards"></div></section></div><details><summary>类别分布图(仅展示)</summary><p class="hint">同一掌部坐标和投影;图上距离不作为覆盖或合并依据。</p><canvas id="scatter" width="1100" height="450"></canvas></details></div>
8
+ <div id="compare" class="tab" hidden><p class="hint">右边是外部类;左边是它最相近的我们类。点击可看真实图例;最小样本距离另列,不能把类中心距离当覆盖结论。</p><div id="comparisonRows"></div></div>
9
+ <div id="similar" class="tab" hidden><div id="duplicateSummary"></div><h2>仍然相近的类</h2><p class="hint">下列类的中心相近,但继续整类合并会把部分差异较大的手指形态连在一起,因此保留并显式标记。</p><div id="relatedPairs"></div><h2>已合并的细类</h2><div id="mergeRows"></div></div>
10
+ <div id="sources" class="tab" hidden><p class="hint">8 个外部 3D 来源参与本轮聚类。ARCTIC/HOT3D 与我们组重叠;仅 2D 的来源点击直接看 RGB 关键点。</p><div class="scroll"><table id="sourceTable"></table></div><p class="hint">WiLoR 行为官方源数据代理,未声称精确复现其加工训练包。我们组三源依据已核对训练成员的来源 GT;最终 canonical 标签仍未核验。ReInterHand 的 7,600 个 test 手帧未参与聚类。</p></div>
11
+ </main>
12
+ <footer><a href="downloads/RESULTS_ZH.md">结果说明</a><a href="downloads/assignments.csv.gz">逐样本类别 CSV</a><a href="downloads/all_class_pairs.csv">类间距离 CSV</a><a href="downloads/REPRODUCE.md">代码与复现</a><span>数据分组并非人工手势标签;GT 来源身份与可靠性分开。</span></footer>
13
+ <dialog id="detail"><button id="closeDetail" class="close" aria-label="关闭">×</button><div id="detailBody"></div></dialog>
14
+ <script src="data.js"></script><script src="app.js"></script>
15
+ </body></html>
pose_recluster_distinct_20261014/media/051488f34a7b81d90530_crop.jpg ADDED
pose_recluster_distinct_20261014/media/051488f34a7b81d90530_full.jpg ADDED

Git LFS Details

  • SHA256: d7be802efdf7cb9e4fb2fafd0880beab9d7a614f8fcd9bf091062bdcb2fc8f4f
  • Pointer size: 131 Bytes
  • Size of remote file: 198 kB
pose_recluster_distinct_20261014/media/0706b91076bbbfac27c5_crop.jpg ADDED
pose_recluster_distinct_20261014/media/0706b91076bbbfac27c5_full.jpg ADDED

Git LFS Details

  • SHA256: 0123a2debc7c13a02e9da2db1a0e95f92d6a8600d91f18e9990ebfb1183b5fed
  • Pointer size: 131 Bytes
  • Size of remote file: 116 kB
pose_recluster_distinct_20261014/media/0b30c6ac8b8a0fb34665_crop.jpg ADDED
pose_recluster_distinct_20261014/media/0b30c6ac8b8a0fb34665_full.jpg ADDED
pose_recluster_distinct_20261014/media/0c9121f9b810877ab40a_crop.jpg ADDED
pose_recluster_distinct_20261014/media/0c9121f9b810877ab40a_full.jpg ADDED

Git LFS Details

  • SHA256: 0dd7f079486e5bade23115ddb305ce903d1330ccf44a133166d70ec628cbd218
  • Pointer size: 131 Bytes
  • Size of remote file: 128 kB
pose_recluster_distinct_20261014/media/1155d85f7d67fdea5ca4_crop.jpg ADDED