BladeSzaSza commited on
Commit
a1597fc
·
verified ·
1 Parent(s): fa501ab

Upload folder using huggingface_hub

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 +7 -0
  2. .gitignore +12 -0
  3. .gradio/cached_examples/9/Output/b558f74ed1913fbba573/balette.mp4 +3 -0
  4. .gradio/cached_examples/9/log.csv +2 -0
  5. README.md +232 -5
  6. __init__.py +0 -0
  7. app.py +81 -0
  8. css.css +157 -0
  9. requirements.txt +1 -0
  10. space.py +206 -0
  11. src/.DS_Store +0 -0
  12. src/.claude/settings.local.json +12 -0
  13. src/.gitignore +12 -0
  14. src/.gradio/cached_examples/9/Output/3e1643b3cd3925885fe5/balette.mp4 +3 -0
  15. src/.gradio/cached_examples/9/Output/6444ff5b7cd73ce6e3ac/mediapipe_full_balette.json +3478 -0
  16. src/.gradio/cached_examples/9/Output/67da006c6e22d7f3b1b0/mediapipe_full_balette.json +3478 -0
  17. src/.gradio/cached_examples/9/log.csv +3 -0
  18. src/.gradio/flagged/dataset1.csv +3 -0
  19. src/.gradio/flagged/output/f270170a4a91ac730c49/balette.mp4 +3 -0
  20. src/.gradio/flagged/x/949d27b917ca4cf29777/balette.mp4 +3 -0
  21. src/.gradio/flagged/x/97ecfa403560d9ee017f/world.mp4 +3 -0
  22. src/CLAUDE.md +147 -0
  23. src/README.md +239 -0
  24. src/backend/gradio_overlay_video/__init__.py +4 -0
  25. src/backend/gradio_overlay_video/keypoint_formats.py +356 -0
  26. src/backend/gradio_overlay_video/overlay_video.py +97 -0
  27. src/backend/gradio_overlay_video/templates/component/assets/worker-BAOIWoxA.js +1 -0
  28. src/backend/gradio_overlay_video/templates/component/index.js +0 -0
  29. src/backend/gradio_overlay_video/templates/component/style.css +0 -0
  30. src/backend/gradio_overlay_video/templates/example/assets/worker-BAOIWoxA.js +1 -0
  31. src/backend/gradio_overlay_video/templates/example/index.js +0 -0
  32. src/backend/gradio_overlay_video/templates/example/style.css +1 -0
  33. src/backend/gradio_overlay_video/visualization_processors.py +502 -0
  34. src/demo/.gradio/cached_examples/9/Output/b558f74ed1913fbba573/balette.mp4 +3 -0
  35. src/demo/.gradio/cached_examples/9/log.csv +2 -0
  36. src/demo/__init__.py +0 -0
  37. src/demo/app.py +81 -0
  38. src/demo/css.css +157 -0
  39. src/demo/requirements.txt +1 -0
  40. src/demo/space.py +206 -0
  41. src/files/balette.mp4 +3 -0
  42. src/files/mediapipe_full_kp_balette.json +0 -0
  43. src/files/mediapipe_heavy_kp_parkour.json +0 -0
  44. src/files/movenet_thunder_kp_skate.json +0 -0
  45. src/files/yolov11.json +0 -0
  46. src/files/yolov8_kp_dance.json +0 -0
  47. src/frontend/Example.svelte +79 -0
  48. src/frontend/Index.svelte +41 -0
  49. src/frontend/gradio.config.js +9 -0
  50. src/frontend/index.ts +3 -0
.gitattributes CHANGED
@@ -33,3 +33,10 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
 
 
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ .gradio/cached_examples/9/Output/b558f74ed1913fbba573/balette.mp4 filter=lfs diff=lfs merge=lfs -text
37
+ src/.gradio/cached_examples/9/Output/3e1643b3cd3925885fe5/balette.mp4 filter=lfs diff=lfs merge=lfs -text
38
+ src/.gradio/flagged/output/f270170a4a91ac730c49/balette.mp4 filter=lfs diff=lfs merge=lfs -text
39
+ src/.gradio/flagged/x/949d27b917ca4cf29777/balette.mp4 filter=lfs diff=lfs merge=lfs -text
40
+ src/.gradio/flagged/x/97ecfa403560d9ee017f/world.mp4 filter=lfs diff=lfs merge=lfs -text
41
+ src/demo/.gradio/cached_examples/9/Output/b558f74ed1913fbba573/balette.mp4 filter=lfs diff=lfs merge=lfs -text
42
+ src/files/balette.mp4 filter=lfs diff=lfs merge=lfs -text
.gitignore ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .eggs/
2
+ dist/
3
+ *.pyc
4
+ __pycache__/
5
+ *.py[cod]
6
+ *$py.class
7
+ __tmp/*
8
+ *.pyi
9
+ .mypycache
10
+ .ruff_cache
11
+ node_modules
12
+ backend/**/templates/
.gradio/cached_examples/9/Output/b558f74ed1913fbba573/balette.mp4 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:75e5ff7c8e5eb31b54686b0250a1ebc739ea1128bb18f116f8f0215159e0979b
3
+ size 621415
.gradio/cached_examples/9/log.csv ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ Output,timestamp
2
+ "{""video"": {""path"": "".gradio/cached_examples/9/Output/b558f74ed1913fbba573/balette.mp4"", ""url"": ""/gradio_api/file=/private/var/folders/wz/v3427jc170563frpfjc2z0240000gn/T/gradio/d1815483c8302d65adbf0fcd64bf7a30390181dc1a4a8175ce9b53bd3aa91971/balette.mp4"", ""size"": null, ""orig_name"": ""balette.mp4"", ""mime_type"": null, ""is_stream"": false, ""meta"": {""_type"": ""gradio.FileData""}}, ""json_data"": ""{\""video_info\"": {\""fps\"": 60, \""duration_seconds\"": 3.1166666666666667, \""width\"": 1280, \""height\"": 688, \""frame_count\"": 187}, \""fps\"": 60, \""frames\"": [{\""timestamp\"": 0, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""low\"", \""speed\"": \""slow\"", \""velocity\"": 0, \""acceleration\"": 0, \""fluidity\"": 0, \""expansion\"": 0.142, \""total_displacement\"": 0}}, {\""timestamp\"": 0.016666666666666666, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""left\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 1.051, \""acceleration\"": 63.0628, \""fluidity\"": 0, \""expansion\"": 0.15, \""total_displacement\"": 0.0175, \""center_displacement\"": {\""x\"": -0.0175, \""y\"": 0.0004}}}, {\""timestamp\"": 0.03333333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0654, \""acceleration\"": 59.1406, \""fluidity\"": 0, \""expansion\"": 0.149, \""total_displacement\"": 0.0011, \""center_displacement\"": {\""x\"": -0.0011, \""y\"": -0.0002}}}, {\""timestamp\"": 0.05, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.2949, \""acceleration\"": 30.5825, \""fluidity\"": 0.092, \""expansion\"": 0.15, \""total_displacement\"": 0.0011, \""center_displacement\"": {\""x\"": -0.001, \""y\"": -0.0002}}}, {\""timestamp\"": 0.06666666666666667, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.36, \""acceleration\"": 38.7168, \""fluidity\"": 0.023, \""expansion\"": 0.149, \""total_displacement\"": 0.0005, \""center_displacement\"": {\""x\"": 0.0004, \""y\"": -0.0002}}}, {\""timestamp\"": 0.08333333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.2096, \""acceleration\"": 33.4529, \""fluidity\"": 0.029, \""expansion\"": 0.151, \""total_displacement\"": 0.002, \""center_displacement\"": {\""x\"": 0.0017, \""y\"": -0.0011}}}, {\""timestamp\"": 0.1, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.2213, \""acceleration\"": 27.1474, \""fluidity\"": 0.036, \""expansion\"": 0.152, \""total_displacement\"": 0.0003, \""center_displacement\"": {\""x\"": -0.0002, \""y\"": -0.0003}}}, {\""timestamp\"": 0.11666666666666667, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""medium\"", \""speed\"": \""fast\"", \""velocity\"": 0.2033, \""acceleration\"": 24.8517, \""fluidity\"": 0.16, \""expansion\"": 0.155, \""total_displacement\"": 0.0004, \""center_displacement\"": {\""x\"": 0.0001, \""y\"": 0.0004}}}, {\""timestamp\"": 0.13333333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.1729, \""acceleration\"": 21.8885, \""fluidity\"": 0.056, \""expansion\"": 0.156, \""total_displacement\"": 0.001, \""center_displacement\"": {\""x\"": -0.0009, \""y\"": 0.0001}}}, {\""timestamp\"": 0.15, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.1527, \""acceleration\"": 19.1312, \""fluidity\"": 0.063, \""expansion\"": 0.156, \""total_displacement\"": 0.0002, \""center_displacement\"": {\""x\"": -0.0001, \""y\"": 0.0002}}}, {\""timestamp\"": 0.16666666666666666, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.1571, \""acceleration\"": 17.7603, \""fluidity\"": 0.07, \""expansion\"": 0.159, \""total_displacement\"": 0.0017, \""center_displacement\"": {\""x\"": -0.0001, \""y\"": -0.0017}}}, {\""timestamp\"": 0.18333333333333332, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.1276, \""acceleration\"": 15.7758, \""fluidity\"": 0.047, \""expansion\"": 0.16, \""total_displacement\"": 0.0005, \""center_displacement\"": {\""x\"": 0.0003, \""y\"": -0.0003}}}, {\""timestamp\"": 0.2, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.1568, \""acceleration\"": 15.6038, \""fluidity\"": 0.045, \""expansion\"": 0.171, \""total_displacement\"": 0.0032, \""center_displacement\"": {\""x\"": -0.0032, \""y\"": -0.0001}}}, {\""timestamp\"": 0.21666666666666667, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.1198, \""acceleration\"": 14.5715, \""fluidity\"": 0.041, \""expansion\"": 0.173, \""total_displacement\"": 0.0006, \""center_displacement\"": {\""x\"": -0.0004, \""y\"": 0.0005}}}, {\""timestamp\"": 0.23333333333333334, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.1172, \""acceleration\"": 11.8933, \""fluidity\"": 0.033, \""expansion\"": 0.173, \""total_displacement\"": 0.0011, \""center_displacement\"": {\""x\"": -0.0007, \""y\"": 0.0008}}}, {\""timestamp\"": 0.25, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.1102, \""acceleration\"": 10.778, \""fluidity\"": 0.03, \""expansion\"": 0.172, \""total_displacement\"": 0.0008, \""center_displacement\"": {\""x\"": -0.0008, \""y\"": 0.0002}}}, {\""timestamp\"": 0.26666666666666666, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0949, \""acceleration\"": 9.5334, \""fluidity\"": 0.026, \""expansion\"": 0.172, \""total_displacement\"": 0.0005, \""center_displacement\"": {\""x\"": 0, \""y\"": 0.0005}}}, {\""timestamp\"": 0.2833333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0866, \""acceleration\"": 8.1758, \""fluidity\"": 0.022, \""expansion\"": 0.174, \""total_displacement\"": 0.0004, \""center_displacement\"": {\""x\"": -0.0004, \""y\"": 0}}}, {\""timestamp\"": 0.3, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0767, \""acceleration\"": 7.2556, \""fluidity\"": 0.019, \""expansion\"": 0.175, \""total_displacement\"": 0.0003, \""center_displacement\"": {\""x\"": 0, \""y\"": 0.0003}}}, {\""timestamp\"": 0.31666666666666665, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0817, \""acceleration\"": 7.042, \""fluidity\"": 0.017, \""expansion\"": 0.177, \""total_displacement\"": 0.0011, \""center_displacement\"": {\""x\"": -0.0011, \""y\"": 0}}}, {\""timestamp\"": 0.3333333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0676, \""acceleration\"": 6.2615, \""fluidity\"": 0.015, \""expansion\"": 0.179, \""total_displacement\"": 0.0004, \""center_displacement\"": {\""x\"": -0.0003, \""y\"": 0.0003}}}, {\""timestamp\"": 0.35, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0607, \""acceleration\"": 5.2741, \""fluidity\"": 0.013, \""expansion\"": 0.179, \""total_displacement\"": 0.0003, \""center_displacement\"": {\""x\"": -0.0003, \""y\"": 0}}}, {\""timestamp\"": 0.36666666666666664, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0578, \""acceleration\"": 4.7129, \""fluidity\"": 0.011, \""expansion\"": 0.183, \""total_displacement\"": 0.0004, \""center_displacement\"": {\""x\"": -0.0002, \""y\"": 0.0003}}}, {\""timestamp\"": 0.3833333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0493, \""acceleration\"": 4.2135, \""fluidity\"": 0.01, \""expansion\"": 0.183, \""total_displacement\"": 0.0002, \""center_displacement\"": {\""x\"": -0.0002, \""y\"": 0.0001}}}, {\""timestamp\"": 0.4, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0724, \""acceleration\"": 5.2104, \""fluidity\"": 0.008, \""expansion\"": 0.191, \""total_displacement\"": 0.002, \""center_displacement\"": {\""x\"": -0.0018, \""y\"": 0.0009}}}, {\""timestamp\"": 0.4166666666666667, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""slow\"", \""velocity\"": 0.0467, \""acceleration\"": 5.2539, \""fluidity\"": 0.007, \""expansion\"": 0.191, \""total_displacement\"": 0.0001, \""center_displacement\"": {\""x\"": -0.0001, \""y\"": 0}}}, {\""timestamp\"": 0.43333333333333335, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0614, \""acceleration\"": 4.7211, \""fluidity\"": 0.006, \""expansion\"": 0.192, \""total_displacement\"": 0.0013, \""center_displacement\"": {\""x\"": -0.0013, \""y\"": -0.0001}}}, {\""timestamp\"": 0.45, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0493, \""acceleration\"": 4.7025, \""fluidity\"": 0.005, \""expansion\"": 0.191, \""total_displacement\"": 0.0003, \""center_displacement\"": {\""x\"": -0.0003, \""y\"": -0.0001}}}, {\""timestamp\"": 0.4666666666666667, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0441, \""acceleration\"": 3.7031, \""fluidity\"": 0.086, \""expansion\"": 0.191, \""total_displacement\"": 0.0003, \""center_displacement\"": {\""x\"": -0.0003, \""y\"": 0.0001}}}, {\""timestamp\"": 0.48333333333333334, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0545, \""acceleration\"": 3.9435, \""fluidity\"": 0.024, \""expansion\"": 0.192, \""total_displacement\"": 0.0011, \""center_displacement\"": {\""x\"": -0.0008, \""y\"": 0.0007}}}, {\""timestamp\"": 0.5, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0412, \""acceleration\"": 3.7837, \""fluidity\"": 0.029, \""expansion\"": 0.192, \""total_displacement\"": 0.0003, \""center_displacement\"": {\""x\"": -0.0003, \""y\"": 0.0001}}}, {\""timestamp\"": 0.5166666666666666, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0436, \""acceleration\"": 3.1217, \""fluidity\"": 0.035, \""expansion\"": 0.192, \""total_displacement\"": 0.0006, \""center_displacement\"": {\""x\"": 0, \""y\"": -0.0006}}}, {\""timestamp\"": 0.5333333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0395, \""acceleration\"": 2.9474, \""fluidity\"": 0.022, \""expansion\"": 0.192, \""total_displacement\"": 0.0003, \""center_displacement\"": {\""x\"": 0.0001, \""y\"": -0.0003}}}, {\""timestamp\"": 0.55, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0341, \""acceleration\"": 2.5603, \""fluidity\"": 0.022, \""expansion\"": 0.192, \""total_displacement\"": 0.0002, \""center_displacement\"": {\""x\"": 0.0001, \""y\"": -0.0001}}}, {\""timestamp\"": 0.5666666666666667, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0341, \""acceleration\"": 2.2634, \""fluidity\"": 0.02, \""expansion\"": 0.193, \""total_displacement\"": 0.0003, \""center_displacement\"": {\""x\"": -0.0001, \""y\"": -0.0003}}}, {\""timestamp\"": 0.5833333333333334, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""medium\"", \""speed\"": \""fast\"", \""velocity\"": 0.0316, \""acceleration\"": 1.9529, \""fluidity\"": 0.215, \""expansion\"": 0.194, \""total_displacement\"": 0.0003, \""center_displacement\"": {\""x\"": -0.0001, \""y\"": -0.0003}}}, {\""timestamp\"": 0.6, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0364, \""acceleration\"": 2.1029, \""fluidity\"": 0.064, \""expansion\"": 0.196, \""total_displacement\"": 0.0008, \""center_displacement\"": {\""x\"": -0.0006, \""y\"": -0.0004}}}, {\""timestamp\"": 0.6166666666666667, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""slow\"", \""velocity\"": 0.028, \""acceleration\"": 2.1194, \""fluidity\"": 0.075, \""expansion\"": 0.197, \""total_displacement\"": 0.0002, \""center_displacement\"": {\""x\"": -0.0002, \""y\"": 0}}}, {\""timestamp\"": 0.6333333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0276, \""acceleration\"": 1.6102, \""fluidity\"": 0.088, \""expansion\"": 0.2, \""total_displacement\"": 0.0002, \""center_displacement\"": {\""x\"": 0.0001, \""y\"": 0.0002}}}, {\""timestamp\"": 0.65, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""slow\"", \""velocity\"": 0.0241, \""acceleration\"": 1.6084, \""fluidity\"": 0.057, \""expansion\"": 0.201, \""total_displacement\"": 0.0001, \""center_displacement\"": {\""x\"": 0.0001, \""y\"": 0}}}, {\""timestamp\"": 0.6666666666666666, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""low\"", \""speed\"": \""slow\"", \""velocity\"": 0.0211, \""acceleration\"": 1.3391, \""fluidity\"": 0.282, \""expansion\"": 0.201, \""total_displacement\"": 0.0001, \""center_displacement\"": {\""x\"": 0, \""y\"": 0.0001}}}, {\""timestamp\"": 0.6833333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0365, \""acceleration\"": 2.1662, \""fluidity\"": 0.107, \""expansion\"": 0.205, \""total_displacement\"": 0.0012, \""center_displacement\"": {\""x\"": -0.0004, \""y\"": 0.0011}}}, {\""timestamp\"": 0.7, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0301, \""acceleration\"": 1.7959, \""fluidity\"": 0.111, \""expansion\"": 0.206, \""total_displacement\"": 0.0006, \""center_displacement\"": {\""x\"": -0.0003, \""y\"": 0.0005}}}, {\""timestamp\"": 0.7166666666666667, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0458, \""acceleration\"": 2.1795, \""fluidity\"": 0.125, \""expansion\"": 0.21, \""total_displacement\"": 0.0016, \""center_displacement\"": {\""x\"": -0.0004, \""y\"": 0.0015}}}, {\""timestamp\"": 0.7333333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0477, \""acceleration\"": 1.79, \""fluidity\"": 0.086, \""expansion\"": 0.211, \""total_displacement\"": 0.0013, \""center_displacement\"": {\""x\"": -0.0004, \""y\"": 0.0012}}}, {\""timestamp\"": 0.75, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.034, \""acceleration\"": 2.4349, \""fluidity\"": 0.081, \""expansion\"": 0.211, \""total_displacement\"": 0.0002, \""center_displacement\"": {\""x\"": -0.0001, \""y\"": 0.0002}}}, {\""timestamp\"": 0.7666666666666666, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""medium\"", \""speed\"": \""fast\"", \""velocity\"": 0.0353, \""acceleration\"": 1.6237, \""fluidity\"": 0.21, \""expansion\"": 0.213, \""total_displacement\"": 0.0002, \""center_displacement\"": {\""x\"": 0.0002, \""y\"": 0.0001}}}, {\""timestamp\"": 0.7833333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""medium\"", \""speed\"": \""fast\"", \""velocity\"": 0.0329, \""acceleration\"": 1.47, \""fluidity\"": 0.305, \""expansion\"": 0.214, \""total_displacement\"": 0.0002, \""center_displacement\"": {\""x\"": 0.0002, \""y\"": 0.0002}}}, {\""timestamp\"": 0.8, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0299, \""acceleration\"": 1.4263, \""fluidity\"": 0.178, \""expansion\"": 0.215, \""total_displacement\"": 0.0003, \""center_displacement\"": {\""x\"": 0.0003, \""y\"": 0}}}, {\""timestamp\"": 0.8166666666666667, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0277, \""acceleration\"": 1.1971, \""fluidity\"": 0.173, \""expansion\"": 0.215, \""total_displacement\"": 0.0002, \""center_displacement\"": {\""x\"": 0.0002, \""y\"": -0.0001}}}, {\""timestamp\"": 0.8333333333333334, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0376, \""acceleration\"": 1.7321, \""fluidity\"": 0.164, \""expansion\"": 0.215, \""total_displacement\"": 0.001, \""center_displacement\"": {\""x\"": 0.0005, \""y\"": -0.0008}}}, {\""timestamp\"": 0.85, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0346, \""acceleration\"": 1.3423, \""fluidity\"": 0.129, \""expansion\"": 0.215, \""total_displacement\"": 0.0007, \""center_displacement\"": {\""x\"": 0.0003, \""y\"": -0.0006}}}, {\""timestamp\"": 0.8666666666666667, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0332, \""acceleration\"": 1.2208, \""fluidity\"": 0.117, \""expansion\"": 0.215, \""total_displacement\"": 0.0006, \""center_displacement\"": {\""x\"": 0.0002, \""y\"": -0.0005}}}, {\""timestamp\"": 0.8833333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""slow\"", \""velocity\"": 0.0281, \""acceleration\"": 1.4679, \""fluidity\"": 0.102, \""expansion\"": 0.215, \""total_displacement\"": 0.0001, \""center_displacement\"": {\""x\"": 0.0001, \""y\"": 0.0001}}}, {\""timestamp\"": 0.9, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""low\"", \""speed\"": \""slow\"", \""velocity\"": 0.0256, \""acceleration\"": 1.01, \""fluidity\"": 0.326, \""expansion\"": 0.215, \""total_displacement\"": 0.0001, \""center_displacement\"": {\""x\"": 0, \""y\"": 0.0001}}}, {\""timestamp\"": 0.9166666666666666, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0329, \""acceleration\"": 1.495, \""fluidity\"": 0.136, \""expansion\"": 0.216, \""total_displacement\"": 0.0007, \""center_displacement\"": {\""x\"": 0.0007, \""y\"": 0}}}, {\""timestamp\"": 0.9333333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0308, \""acceleration\"": 1.1118, \""fluidity\"": 0.141, \""expansion\"": 0.217, \""total_displacement\"": 0.0006, \""center_displacement\"": {\""x\"": 0.0006, \""y\"": 0.0001}}}, {\""timestamp\"": 0.95, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0273, \""acceleration\"": 1.1554, \""fluidity\"": 0.151, \""expansion\"": 0.218, \""total_displacement\"": 0.0003, \""center_displacement\"": {\""x\"": 0.0003, \""y\"": 0.0001}}}, {\""timestamp\"": 0.9666666666666667, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0794, \""acceleration\"": 4.0386, \""fluidity\"": 0.107, \""expansion\"": 0.22, \""total_displacement\"": 0.0038, \""center_displacement\"": {\""x\"": -0.0001, \""y\"": 0.0038}}}, {\""timestamp\"": 0.9833333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0663, \""acceleration\"": 3.06, \""fluidity\"": 0.1, \""expansion\"": 0.221, \""total_displacement\"": 0.0021, \""center_displacement\"": {\""x\"": 0.0001, \""y\"": 0.0021}}}, {\""timestamp\"": 1, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""down\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.274, \""acceleration\"": 13.9959, \""fluidity\"": 0.089, \""expansion\"": 0.223, \""total_displacement\"": 0.0154, \""center_displacement\"": {\""x\"": 0.0002, \""y\"": 0.0154}}}, {\""timestamp\"": 1.0166666666666666, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.141, \""acceleration\"": 16.9543, \""fluidity\"": 0.074, \""expansion\"": 0.224, \""total_displacement\"": 0.0024, \""center_displacement\"": {\""x\"": 0.0002, \""y\"": 0.0024}}}, {\""timestamp\"": 1.0333333333333332, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""down\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.3349, \""acceleration\"": 19.2106, \""fluidity\"": 0.066, \""expansion\"": 0.227, \""total_displacement\"": 0.0143, \""center_displacement\"": {\""x\"": 0.0009, \""y\"": 0.0143}}}, {\""timestamp\"": 1.05, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.2284, \""acceleration\"": 22.9589, \""fluidity\"": 0.057, \""expansion\"": 0.227, \""total_displacement\"": 0.0027, \""center_displacement\"": {\""x\"": 0.0003, \""y\"": 0.0027}}}, {\""timestamp\"": 1.0666666666666667, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.1805, \""acceleration\"": 16.9712, \""fluidity\"": 0.049, \""expansion\"": 0.227, \""total_displacement\"": 0.0003, \""center_displacement\"": {\""x\"": 0.0001, \""y\"": 0.0003}}}, {\""timestamp\"": 1.0833333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""down\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.3465, \""acceleration\"": 24.1562, \""fluidity\"": 0.043, \""expansion\"": 0.231, \""total_displacement\"": 0.0107, \""center_displacement\"": {\""x\"": 0.0016, \""y\"": 0.0106}}}, {\""timestamp\"": 1.1, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.206, \""acceleration\"": 24.6307, \""fluidity\"": 0.037, \""expansion\"": 0.231, \""total_displacement\"": 0.0011, \""center_displacement\"": {\""x\"": 0.001, \""y\"": 0.0005}}}, {\""timestamp\"": 1.1166666666666667, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.2545, \""acceleration\"": 19.6865, \""fluidity\"": 0.032, \""expansion\"": 0.235, \""total_displacement\"": 0.0047, \""center_displacement\"": {\""x\"": 0.0022, \""y\"": 0.0042}}}, {\""timestamp\"": 1.1333333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.2361, \""acceleration\"": 19.3326, \""fluidity\"": 0.028, \""expansion\"": 0.237, \""total_displacement\"": 0.0023, \""center_displacement\"": {\""x\"": 0.0014, \""y\"": 0.0018}}}, {\""timestamp\"": 1.15, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.1866, \""acceleration\"": 17.2203, \""fluidity\"": 0.025, \""expansion\"": 0.237, \""total_displacement\"": 0.0008, \""center_displacement\"": {\""x\"": 0.0005, \""y\"": 0.0007}}}, {\""timestamp\"": 1.1666666666666667, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.2468, \""acceleration\"": 17.9569, \""fluidity\"": 0.021, \""expansion\"": 0.242, \""total_displacement\"": 0.0052, \""center_displacement\"": {\""x\"": 0.0044, \""y\"": -0.0028}}}, {\""timestamp\"": 1.1833333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.1892, \""acceleration\"": 16.9628, \""fluidity\"": 0.019, \""expansion\"": 0.242, \""total_displacement\"": 0.0015, \""center_displacement\"": {\""x\"": 0.0011, \""y\"": -0.0009}}}, {\""timestamp\"": 1.2, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""up\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.3082, \""acceleration\"": 20.8769, \""fluidity\"": 0.016, \""expansion\"": 0.248, \""total_displacement\"": 0.0102, \""center_displacement\"": {\""x\"": 0.0062, \""y\"": -0.0081}}}, {\""timestamp\"": 1.2166666666666666, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.258, \""acceleration\"": 18.7894, \""fluidity\"": 0.014, \""expansion\"": 0.249, \""total_displacement\"": 0.0048, \""center_displacement\"": {\""x\"": 0.0009, \""y\"": -0.0047}}}, {\""timestamp\"": 1.2333333333333334, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""up\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.4267, \""acceleration\"": 24.1119, \""fluidity\"": 0.012, \""expansion\"": 0.252, \""total_displacement\"": 0.0159, \""center_displacement\"": {\""x\"": 0.0049, \""y\"": -0.0151}}}, {\""timestamp\"": 1.25, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""up\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.3443, \""acceleration\"": 24.447, \""fluidity\"": 0.011, \""expansion\"": 0.252, \""total_displacement\"": 0.0064, \""center_displacement\"": {\""x\"": 0.0025, \""y\"": -0.0059}}}, {\""timestamp\"": 1.2666666666666666, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.2922, \""acceleration\"": 20.5096, \""fluidity\"": 0.009, \""expansion\"": 0.252, \""total_displacement\"": 0.0023, \""center_displacement\"": {\""x\"": 0.0005, \""y\"": -0.0023}}}, {\""timestamp\"": 1.2833333333333332, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""up\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.4392, \""acceleration\"": 25.5796, \""fluidity\"": 0.008, \""expansion\"": 0.251, \""total_displacement\"": 0.0116, \""center_displacement\"": {\""x\"": 0.0045, \""y\"": -0.0107}}}, {\""timestamp\"": 1.3, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.312, \""acceleration\"": 25.454, \""fluidity\"": 0.007, \""expansion\"": 0.252, \""total_displacement\"": 0.0029, \""center_displacement\"": {\""x\"": 0.001, \""y\"": -0.0027}}}, {\""timestamp\"": 1.3166666666666667, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""right\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.374, \""acceleration\"": 22.0903, \""fluidity\"": 0.006, \""expansion\"": 0.25, \""total_displacement\"": 0.0075, \""center_displacement\"": {\""x\"": 0.0059, \""y\"": -0.0048}}}, {\""timestamp\"": 1.3333333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.3019, \""acceleration\"": 23.8408, \""fluidity\"": 0.005, \""expansion\"": 0.25, \""total_displacement\"": 0.0014, \""center_displacement\"": {\""x\"": 0.0013, \""y\"": -0.0004}}}, {\""timestamp\"": 1.35, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.2638, \""acceleration\"": 18.0714, \""fluidity\"": 0.005, \""expansion\"": 0.248, \""total_displacement\"": 0.0011, \""center_displacement\"": {\""x\"": 0, \""y\"": -0.0011}}}, {\""timestamp\"": 1.3666666666666667, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.3077, \""acceleration\"": 19.3583, \""fluidity\"": 0.004, \""expansion\"": 0.246, \""total_displacement\"": 0.0048, \""center_displacement\"": {\""x\"": 0.0047, \""y\"": -0.0013}}}, {\""timestamp\"": 1.3833333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.2445, \""acceleration\"": 18.1099, \""fluidity\"": 0.003, \""expansion\"": 0.246, \""total_displacement\"": 0.0017, \""center_displacement\"": {\""x\"": 0.0014, \""y\"": -0.0011}}}, {\""timestamp\"": 1.4, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""right\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.2896, \""acceleration\"": 17.4501, \""fluidity\"": 0.003, \""expansion\"": 0.245, \""total_displacement\"": 0.0057, \""center_displacement\"": {\""x\"": 0.0057, \""y\"": -0.0007}}}, {\""timestamp\"": 1.4166666666666667, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.2406, \""acceleration\"": 17.0553, \""fluidity\"": 0.003, \""expansion\"": 0.245, \""total_displacement\"": 0.002, \""center_displacement\"": {\""x\"": 0.002, \""y\"": 0.0004}}}, {\""timestamp\"": 1.4333333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.2684, \""acceleration\"": 15.824, \""fluidity\"": 0.002, \""expansion\"": 0.244, \""total_displacement\"": 0.005, \""center_displacement\"": {\""x\"": 0.005, \""y\"": 0.0005}}}, {\""timestamp\"": 1.45, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.22, \""acceleration\"": 15.8399, \""fluidity\"": 0.002, \""expansion\"": 0.245, \""total_displacement\"": 0.0014, \""center_displacement\"": {\""x\"": 0.0013, \""y\"": 0.0004}}}, {\""timestamp\"": 1.4666666666666666, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.1953, \""acceleration\"": 12.62, \""fluidity\"": 0.002, \""expansion\"": 0.245, \""total_displacement\"": 0.0009, \""center_displacement\"": {\""x\"": 0.0009, \""y\"": 0.0001}}}, {\""timestamp\"": 1.4833333333333334, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.23, \""acceleration\"": 13.8316, \""fluidity\"": 0.001, \""expansion\"": 0.243, \""total_displacement\"": 0.0039, \""center_displacement\"": {\""x\"": 0.0038, \""y\"": -0.0009}}}, {\""timestamp\"": 1.5, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.1693, \""acceleration\"": 13.6376, \""fluidity\"": 0.001, \""expansion\"": 0.242, \""total_displacement\"": 0.0005, \""center_displacement\"": {\""x\"": 0.0005, \""y\"": -0.0001}}}, {\""timestamp\"": 1.5166666666666666, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.1981, \""acceleration\"": 12.5103, \""fluidity\"": 0.001, \""expansion\"": 0.24, \""total_displacement\"": 0.0033, \""center_displacement\"": {\""x\"": 0.0031, \""y\"": -0.0012}}}, {\""timestamp\"": 1.5333333333333332, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.1657, \""acceleration\"": 11.9829, \""fluidity\"": 0.001, \""expansion\"": 0.237, \""total_displacement\"": 0.0011, \""center_displacement\"": {\""x\"": 0.0005, \""y\"": -0.001}}}, {\""timestamp\"": 1.55, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.1546, \""acceleration\"": 9.8336, \""fluidity\"": 0.001, \""expansion\"": 0.236, \""total_displacement\"": 0.0014, \""center_displacement\"": {\""x\"": 0.0001, \""y\"": -0.0014}}}, {\""timestamp\"": 1.5666666666666667, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.1733, \""acceleration\"": 9.925, \""fluidity\"": 0.001, \""expansion\"": 0.236, \""total_displacement\"": 0.0029, \""center_displacement\"": {\""x\"": 0.0027, \""y\"": -0.001}}}, {\""timestamp\"": 1.5833333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.138, \""acceleration\"": 9.6841, \""fluidity\"": 0.001, \""expansion\"": 0.236, \""total_displacement\"": 0.001, \""center_displacement\"": {\""x\"": 0.001, \""y\"": 0}}}, {\""timestamp\"": 1.6, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.1584, \""acceleration\"": 8.9992, \""fluidity\"": 0.001, \""expansion\"": 0.238, \""total_displacement\"": 0.0028, \""center_displacement\"": {\""x\"": 0.0028, \""y\"": -0.0004}}}, {\""timestamp\"": 1.6166666666666667, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.125, \""acceleration\"": 9.2114, \""fluidity\"": 0, \""expansion\"": 0.239, \""total_displacement\"": 0.0005, \""center_displacement\"": {\""x\"": 0.0005, \""y\"": 0}}}, {\""timestamp\"": 1.6333333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.1201, \""acceleration\"": 7.4065, \""fluidity\"": 0, \""expansion\"": 0.243, \""total_displacement\"": 0.001, \""center_displacement\"": {\""x\"": 0.0009, \""y\"": -0.0003}}}, {\""timestamp\"": 1.65, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.1079, \""acceleration\"": 6.8687, \""fluidity\"": 0, \""expansion\"": 0.244, \""total_displacement\"": 0.0005, \""center_displacement\"": {\""x\"": 0.0003, \""y\"": -0.0004}}}, {\""timestamp\"": 1.6666666666666667, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0935, \""acceleration\"": 5.9798, \""fluidity\"": 0, \""expansion\"": 0.244, \""total_displacement\"": 0.0003, \""center_displacement\"": {\""x\"": 0.0002, \""y\"": -0.0003}}}, {\""timestamp\"": 1.6833333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0962, \""acceleration\"": 5.6971, \""fluidity\"": 0, \""expansion\"": 0.245, \""total_displacement\"": 0.0011, \""center_displacement\"": {\""x\"": 0.001, \""y\"": -0.0003}}}, {\""timestamp\"": 1.7, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0824, \""acceleration\"": 5.1041, \""fluidity\"": 0, \""expansion\"": 0.245, \""total_displacement\"": 0.0005, \""center_displacement\"": {\""x\"": 0.0004, \""y\"": -0.0003}}}, {\""timestamp\"": 1.7166666666666666, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0836, \""acceleration\"": 4.649, \""fluidity\"": 0, \""expansion\"": 0.244, \""total_displacement\"": 0.001, \""center_displacement\"": {\""x\"": 0.001, \""y\"": 0.0002}}}, {\""timestamp\"": 1.7333333333333334, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0755, \""acceleration\"": 4.1983, \""fluidity\"": 0, \""expansion\"": 0.243, \""total_displacement\"": 0.0007, \""center_displacement\"": {\""x\"": 0.0007, \""y\"": 0}}}, {\""timestamp\"": 1.75, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0641, \""acceleration\"": 3.8633, \""fluidity\"": 0, \""expansion\"": 0.243, \""total_displacement\"": 0.0002, \""center_displacement\"": {\""x\"": 0.0002, \""y\"": 0}}}, {\""timestamp\"": 1.7666666666666666, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0622, \""acceleration\"": 3.3395, \""fluidity\"": 0, \""expansion\"": 0.242, \""total_displacement\"": 0.0004, \""center_displacement\"": {\""x\"": 0.0004, \""y\"": 0}}}, {\""timestamp\"": 1.7833333333333332, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""slow\"", \""velocity\"": 0.0511, \""acceleration\"": 3.1939, \""fluidity\"": 0, \""expansion\"": 0.242, \""total_displacement\"": 0, \""center_displacement\"": {\""x\"": 0, \""y\"": 0}}}, {\""timestamp\"": 1.8, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0471, \""acceleration\"": 2.7221, \""fluidity\"": 0, \""expansion\"": 0.241, \""total_displacement\"": 0.0002, \""center_displacement\"": {\""x\"": 0.0002, \""y\"": -0.0001}}}, {\""timestamp\"": 1.8166666666666667, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""slow\"", \""velocity\"": 0.0422, \""acceleration\"": 2.3512, \""fluidity\"": 0.063, \""expansion\"": 0.241, \""total_displacement\"": 0.0001, \""center_displacement\"": {\""x\"": 0.0001, \""y\"": 0}}}, {\""timestamp\"": 1.8333333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0424, \""acceleration\"": 2.3805, \""fluidity\"": 0.016, \""expansion\"": 0.24, \""total_displacement\"": 0.0005, \""center_displacement\"": {\""x\"": 0.0005, \""y\"": 0.0001}}}, {\""timestamp\"": 1.8499999999999999, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.037, \""acceleration\"": 2.0613, \""fluidity\"": 0.02, \""expansion\"": 0.24, \""total_displacement\"": 0.0003, \""center_displacement\"": {\""x\"": 0.0003, \""y\"": 0.0001}}}, {\""timestamp\"": 1.8666666666666667, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""slow\"", \""velocity\"": 0.0325, \""acceleration\"": 1.8143, \""fluidity\"": 0.025, \""expansion\"": 0.239, \""total_displacement\"": 0.0001, \""center_displacement\"": {\""x\"": 0.0001, \""y\"": 0}}}, {\""timestamp\"": 1.8833333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0341, \""acceleration\"": 1.8024, \""fluidity\"": 0.015, \""expansion\"": 0.239, \""total_displacement\"": 0.0004, \""center_displacement\"": {\""x\"": 0.0003, \""y\"": 0.0002}}}, {\""timestamp\"": 1.9, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0295, \""acceleration\"": 1.5649, \""fluidity\"": 0.015, \""expansion\"": 0.239, \""total_displacement\"": 0.0002, \""center_displacement\"": {\""x\"": 0.0002, \""y\"": 0.0002}}}, {\""timestamp\"": 1.9166666666666667, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""slow\"", \""velocity\"": 0.0265, \""acceleration\"": 1.3648, \""fluidity\"": 0.014, \""expansion\"": 0.239, \""total_displacement\"": 0.0002, \""center_displacement\"": {\""x\"": 0.0001, \""y\"": 0.0001}}}, {\""timestamp\"": 1.9333333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""slow\"", \""velocity\"": 0.0239, \""acceleration\"": 1.2534, \""fluidity\"": 0.011, \""expansion\"": 0.239, \""total_displacement\"": 0.0001, \""center_displacement\"": {\""x\"": 0, \""y\"": 0.0001}}}, {\""timestamp\"": 1.95, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""low\"", \""speed\"": \""slow\"", \""velocity\"": 0.0214, \""acceleration\"": 1.0506, \""fluidity\"": 0.236, \""expansion\"": 0.239, \""total_displacement\"": 0.0001, \""center_displacement\"": {\""x\"": 0, \""y\"": 0.0001}}}, {\""timestamp\"": 1.9666666666666666, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0214, \""acceleration\"": 1.0392, \""fluidity\"": 0.065, \""expansion\"": 0.239, \""total_displacement\"": 0.0002, \""center_displacement\"": {\""x\"": 0.0002, \""y\"": 0.0001}}}, {\""timestamp\"": 1.9833333333333334, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""slow\"", \""velocity\"": 0.0182, \""acceleration\"": 0.9469, \""fluidity\"": 0.078, \""expansion\"": 0.239, \""total_displacement\"": 0.0001, \""center_displacement\"": {\""x\"": 0.0001, \""y\"": 0}}}, {\""timestamp\"": 2, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0189, \""acceleration\"": 0.8829, \""fluidity\"": 0.095, \""expansion\"": 0.239, \""total_displacement\"": 0.0002, \""center_displacement\"": {\""x\"": 0, \""y\"": -0.0002}}}, {\""timestamp\"": 2.0166666666666666, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0177, \""acceleration\"": 0.7531, \""fluidity\"": 0.13, \""expansion\"": 0.239, \""total_displacement\"": 0.0002, \""center_displacement\"": {\""x\"": 0.0001, \""y\"": -0.0002}}}, {\""timestamp\"": 2.033333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0176, \""acceleration\"": 0.6967, \""fluidity\"": 0.076, \""expansion\"": 0.238, \""total_displacement\"": 0.0003, \""center_displacement\"": {\""x\"": 0, \""y\"": 0.0003}}}, {\""timestamp\"": 2.05, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""slow\"", \""velocity\"": 0.0157, \""acceleration\"": 0.6898, \""fluidity\"": 0.075, \""expansion\"": 0.238, \""total_displacement\"": 0.0001, \""center_displacement\"": {\""x\"": 0, \""y\"": 0.0001}}}, {\""timestamp\"": 2.0666666666666664, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""slow\"", \""velocity\"": 0.0142, \""acceleration\"": 0.5736, \""fluidity\"": 0.127, \""expansion\"": 0.238, \""total_displacement\"": 0.0001, \""center_displacement\"": {\""x\"": 0, \""y\"": 0.0001}}}, {\""timestamp\"": 2.0833333333333335, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0189, \""acceleration\"": 0.8216, \""fluidity\"": 0.07, \""expansion\"": 0.238, \""total_displacement\"": 0.0005, \""center_displacement\"": {\""x\"": -0.0003, \""y\"": 0.0004}}}, {\""timestamp\"": 2.1, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.017, \""acceleration\"": 0.6557, \""fluidity\"": 0.068, \""expansion\"": 0.238, \""total_displacement\"": 0.0003, \""center_displacement\"": {\""x\"": -0.0001, \""y\"": 0.0003}}}, {\""timestamp\"": 2.1166666666666667, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0224, \""acceleration\"": 0.8202, \""fluidity\"": 0.066, \""expansion\"": 0.238, \""total_displacement\"": 0.0007, \""center_displacement\"": {\""x\"": -0.0003, \""y\"": 0.0006}}}, {\""timestamp\"": 2.1333333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0225, \""acceleration\"": 0.6904, \""fluidity\"": 0.051, \""expansion\"": 0.238, \""total_displacement\"": 0.0005, \""center_displacement\"": {\""x\"": -0.0001, \""y\"": 0.0005}}}, {\""timestamp\"": 2.15, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0205, \""acceleration\"": 0.7196, \""fluidity\"": 0.046, \""expansion\"": 0.238, \""total_displacement\"": 0.0003, \""center_displacement\"": {\""x\"": -0.0001, \""y\"": 0.0003}}}, {\""timestamp\"": 2.1666666666666665, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""slow\"", \""velocity\"": 0.0175, \""acceleration\"": 0.7882, \""fluidity\"": 0.041, \""expansion\"": 0.237, \""total_displacement\"": 0.0001, \""center_displacement\"": {\""x\"": -0.0001, \""y\"": 0}}}, {\""timestamp\"": 2.183333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""medium\"", \""speed\"": \""slow\"", \""velocity\"": 0.016, \""acceleration\"": 0.5634, \""fluidity\"": 0.215, \""expansion\"": 0.236, \""total_displacement\"": 0.0001, \""center_displacement\"": {\""x\"": 0, \""y\"": 0}}}, {\""timestamp\"": 2.2, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0173, \""acceleration\"": 0.689, \""fluidity\"": 0.076, \""expansion\"": 0.234, \""total_displacement\"": 0.0003, \""center_displacement\"": {\""x\"": 0, \""y\"": -0.0002}}}, {\""timestamp\"": 2.216666666666667, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""slow\"", \""velocity\"": 0.0143, \""acceleration\"": 0.6405, \""fluidity\"": 0.083, \""expansion\"": 0.234, \""total_displacement\"": 0.0001, \""center_displacement\"": {\""x\"": 0, \""y\"": -0.0001}}}, {\""timestamp\"": 2.2333333333333334, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0686, \""acceleration\"": 3.7773, \""fluidity\"": 0.093, \""expansion\"": 0.23, \""total_displacement\"": 0.0038, \""center_displacement\"": {\""x\"": 0, \""y\"": 0.0038}}}, {\""timestamp\"": 2.25, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0536, \""acceleration\"": 2.9603, \""fluidity\"": 0.063, \""expansion\"": 0.229, \""total_displacement\"": 0.0019, \""center_displacement\"": {\""x\"": -0.0001, \""y\"": 0.0019}}}, {\""timestamp\"": 2.2666666666666666, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0569, \""acceleration\"": 2.1957, \""fluidity\"": 0.06, \""expansion\"": 0.229, \""total_displacement\"": 0.0015, \""center_displacement\"": {\""x\"": 0, \""y\"": 0.0015}}}, {\""timestamp\"": 2.283333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""down\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.2019, \""acceleration\"": 10.2968, \""fluidity\"": 0.054, \""expansion\"": 0.227, \""total_displacement\"": 0.0105, \""center_displacement\"": {\""x\"": -0.0003, \""y\"": 0.0105}}}, {\""timestamp\"": 2.3, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.1156, \""acceleration\"": 11.0428, \""fluidity\"": 0.044, \""expansion\"": 0.226, \""total_displacement\"": 0.0025, \""center_displacement\"": {\""x\"": -0.0002, \""y\"": 0.0025}}}, {\""timestamp\"": 2.3166666666666664, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""down\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.2797, \""acceleration\"": 14.8018, \""fluidity\"": 0.04, \""expansion\"": 0.221, \""total_displacement\"": 0.0124, \""center_displacement\"": {\""x\"": -0.0003, \""y\"": 0.0124}}}, {\""timestamp\"": 2.3333333333333335, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.2214, \""acceleration\"": 15.8765, \""fluidity\"": 0.034, \""expansion\"": 0.221, \""total_displacement\"": 0.0048, \""center_displacement\"": {\""x\"": 0, \""y\"": 0.0048}}}, {\""timestamp\"": 2.35, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""slow\"", \""velocity\"": 0.1555, \""acceleration\"": 14.678, \""fluidity\"": 0.03, \""expansion\"": 0.22, \""total_displacement\"": 0.0001, \""center_displacement\"": {\""x\"": 0, \""y\"": -0.0001}}}, {\""timestamp\"": 2.3666666666666667, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""down\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.3565, \""acceleration\"": 22.8035, \""fluidity\"": 0.026, \""expansion\"": 0.218, \""total_displacement\"": 0.0128, \""center_displacement\"": {\""x\"": 0, \""y\"": 0.0128}}}, {\""timestamp\"": 2.3833333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.2303, \""acceleration\"": 22.0639, \""fluidity\"": 0.022, \""expansion\"": 0.218, \""total_displacement\"": 0.0031, \""center_displacement\"": {\""x\"": 0.0001, \""y\"": 0.0031}}}, {\""timestamp\"": 2.4, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""down\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.3683, \""acceleration\"": 23.0341, \""fluidity\"": 0.019, \""expansion\"": 0.214, \""total_displacement\"": 0.0122, \""center_displacement\"": {\""x\"": 0.0008, \""y\"": 0.0122}}}, {\""timestamp\"": 2.4166666666666665, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.2725, \""acceleration\"": 25.916, \""fluidity\"": 0.017, \""expansion\"": 0.214, \""total_displacement\"": 0.0023, \""center_displacement\"": {\""x\"": 0.0001, \""y\"": 0.0022}}}, {\""timestamp\"": 2.433333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.2323, \""acceleration\"": 18.9078, \""fluidity\"": 0.015, \""expansion\"": 0.213, \""total_displacement\"": 0.001, \""center_displacement\"": {\""x\"": 0.0009, \""y\"": -0.0003}}}, {\""timestamp\"": 2.45, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.2271, \""acceleration\"": 17.3051, \""fluidity\"": 0.013, \""expansion\"": 0.213, \""total_displacement\"": 0.0006, \""center_displacement\"": {\""x\"": 0.0005, \""y\"": 0.0004}}}, {\""timestamp\"": 2.466666666666667, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.1935, \""acceleration\"": 15.6304, \""fluidity\"": 0.011, \""expansion\"": 0.213, \""total_displacement\"": 0.0007, \""center_displacement\"": {\""x\"": 0.0006, \""y\"": -0.0003}}}, {\""timestamp\"": 2.4833333333333334, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.2306, \""acceleration\"": 16.3765, \""fluidity\"": 0.01, \""expansion\"": 0.212, \""total_displacement\"": 0.0045, \""center_displacement\"": {\""x\"": 0.0031, \""y\"": -0.0033}}}, {\""timestamp\"": 2.5, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.2042, \""acceleration\"": 13.8859, \""fluidity\"": 0.008, \""expansion\"": 0.211, \""total_displacement\"": 0.0028, \""center_displacement\"": {\""x\"": 0.0009, \""y\"": -0.0026}}}, {\""timestamp\"": 2.5166666666666666, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""up\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.3447, \""acceleration\"": 20.2457, \""fluidity\"": 0.007, \""expansion\"": 0.21, \""total_displacement\"": 0.0125, \""center_displacement\"": {\""x\"": 0.003, \""y\"": -0.0121}}}, {\""timestamp\"": 2.533333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.2624, \""acceleration\"": 19.8363, \""fluidity\"": 0.006, \""expansion\"": 0.21, \""total_displacement\"": 0.0045, \""center_displacement\"": {\""x\"": 0.0011, \""y\"": -0.0044}}}, {\""timestamp\"": 2.55, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.2262, \""acceleration\"": 16.141, \""fluidity\"": 0.006, \""expansion\"": 0.211, \""total_displacement\"": 0.0016, \""center_displacement\"": {\""x\"": 0.0007, \""y\"": -0.0014}}}, {\""timestamp\"": 2.5666666666666664, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""up\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.4216, \""acceleration\"": 25.4549, \""fluidity\"": 0.005, \""expansion\"": 0.206, \""total_displacement\"": 0.0142, \""center_displacement\"": {\""x\"": 0.0032, \""y\"": -0.0139}}}, {\""timestamp\"": 2.5833333333333335, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.2673, \""acceleration\"": 25.7738, \""fluidity\"": 0.004, \""expansion\"": 0.206, \""total_displacement\"": 0.0026, \""center_displacement\"": {\""x\"": 0.0011, \""y\"": -0.0024}}}, {\""timestamp\"": 2.6, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""up\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.3323, \""acceleration\"": 20.6687, \""fluidity\"": 0.004, \""expansion\"": 0.201, \""total_displacement\"": 0.0069, \""center_displacement\"": {\""x\"": 0.0023, \""y\"": -0.0065}}}, {\""timestamp\"": 2.6166666666666667, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.3073, \""acceleration\"": 21.0621, \""fluidity\"": 0.003, \""expansion\"": 0.2, \""total_displacement\"": 0.0035, \""center_displacement\"": {\""x\"": 0.001, \""y\"": -0.0033}}}, {\""timestamp\"": 2.6333333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.2991, \""acceleration\"": 18.0948, \""fluidity\"": 0.003, \""expansion\"": 0.195, \""total_displacement\"": 0.0048, \""center_displacement\"": {\""x\"": 0.0034, \""y\"": -0.0034}}}, {\""timestamp\"": 2.65, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.2577, \""acceleration\"": 17.9181, \""fluidity\"": 0.002, \""expansion\"": 0.194, \""total_displacement\"": 0.0015, \""center_displacement\"": {\""x\"": 0.0007, \""y\"": -0.0014}}}, {\""timestamp\"": 2.6666666666666665, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.2337, \""acceleration\"": 14.5879, \""fluidity\"": 0.002, \""expansion\"": 0.194, \""total_displacement\"": 0.0012, \""center_displacement\"": {\""x\"": 0.0005, \""y\"": -0.0011}}}, {\""timestamp\"": 2.683333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.2467, \""acceleration\"": 14.5353, \""fluidity\"": 0.002, \""expansion\"": 0.191, \""total_displacement\"": 0.0033, \""center_displacement\"": {\""x\"": 0.0031, \""y\"": -0.0009}}}, {\""timestamp\"": 2.7, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.2213, \""acceleration\"": 12.4955, \""fluidity\"": 0.002, \""expansion\"": 0.191, \""total_displacement\"": 0.0025, \""center_displacement\"": {\""x\"": 0.0011, \""y\"": -0.0022}}}, {\""timestamp\"": 2.716666666666667, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.2164, \""acceleration\"": 10.6537, \""fluidity\"": 0.001, \""expansion\"": 0.187, \""total_displacement\"": 0.0027, \""center_displacement\"": {\""x\"": 0.0027, \""y\"": -0.0006}}}, {\""timestamp\"": 2.7333333333333334, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.1839, \""acceleration\"": 11.1152, \""fluidity\"": 0.001, \""expansion\"": 0.186, \""total_displacement\"": 0.0008, \""center_displacement\"": {\""x\"": 0.0007, \""y\"": -0.0005}}}, {\""timestamp\"": 2.75, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.1742, \""acceleration\"": 8.9315, \""fluidity\"": 0.001, \""expansion\"": 0.185, \""total_displacement\"": 0.0013, \""center_displacement\"": {\""x\"": 0.0008, \""y\"": -0.001}}}, {\""timestamp\"": 2.7666666666666666, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.2067, \""acceleration\"": 10.3295, \""fluidity\"": 0.001, \""expansion\"": 0.18, \""total_displacement\"": 0.0042, \""center_displacement\"": {\""x\"": 0.0028, \""y\"": -0.0032}}}, {\""timestamp\"": 2.783333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.1622, \""acceleration\"": 10.1212, \""fluidity\"": 0.001, \""expansion\"": 0.178, \""total_displacement\"": 0.0014, \""center_displacement\"": {\""x\"": 0.0012, \""y\"": -0.0007}}}, {\""timestamp\"": 2.8, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.1856, \""acceleration\"": 9.0748, \""fluidity\"": 0.001, \""expansion\"": 0.177, \""total_displacement\"": 0.0033, \""center_displacement\"": {\""x\"": 0.0007, \""y\"": -0.0032}}}, {\""timestamp\"": 2.8166666666666664, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.156, \""acceleration\"": 9.3265, \""fluidity\"": 0.001, \""expansion\"": 0.176, \""total_displacement\"": 0.0012, \""center_displacement\"": {\""x\"": 0.0006, \""y\"": -0.001}}}, {\""timestamp\"": 2.8333333333333335, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.1451, \""acceleration\"": 7.2397, \""fluidity\"": 0.001, \""expansion\"": 0.172, \""total_displacement\"": 0.0013, \""center_displacement\"": {\""x\"": 0.0013, \""y\"": -0.0002}}}, {\""timestamp\"": 2.85, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.1303, \""acceleration\"": 7.0422, \""fluidity\"": 0, \""expansion\"": 0.171, \""total_displacement\"": 0.0006, \""center_displacement\"": {\""x\"": 0.0004, \""y\"": -0.0004}}}, {\""timestamp\"": 2.8666666666666667, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.1148, \""acceleration\"": 6.0024, \""fluidity\"": 0, \""expansion\"": 0.17, \""total_displacement\"": 0.0005, \""center_displacement\"": {\""x\"": -0.0001, \""y\"": -0.0005}}}, {\""timestamp\"": 2.8833333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.131, \""acceleration\"": 6.6612, \""fluidity\"": 0, \""expansion\"": 0.171, \""total_displacement\"": 0.0022, \""center_displacement\"": {\""x\"": 0.0022, \""y\"": 0.0003}}}, {\""timestamp\"": 2.9, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.1066, \""acceleration\"": 6.179, \""fluidity\"": 0, \""expansion\"": 0.17, \""total_displacement\"": 0.0008, \""center_displacement\"": {\""x\"": 0.0008, \""y\"": 0.0002}}}, {\""timestamp\"": 2.9166666666666665, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.1063, \""acceleration\"": 5.0441, \""fluidity\"": 0, \""expansion\"": 0.168, \""total_displacement\"": 0.0012, \""center_displacement\"": {\""x\"": 0.0012, \""y\"": 0.0001}}}, {\""timestamp\"": 2.933333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0941, \""acceleration\"": 5.0755, \""fluidity\"": 0, \""expansion\"": 0.168, \""total_displacement\"": 0.0005, \""center_displacement\"": {\""x\"": 0.0001, \""y\"": -0.0005}}}, {\""timestamp\"": 2.95, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.082, \""acceleration\"": 4.2463, \""fluidity\"": 0, \""expansion\"": 0.168, \""total_displacement\"": 0.0003, \""center_displacement\"": {\""x\"": 0.0003, \""y\"": -0.0001}}}, {\""timestamp\"": 2.966666666666667, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0747, \""acceleration\"": 3.6591, \""fluidity\"": 0, \""expansion\"": 0.167, \""total_displacement\"": 0.0003, \""center_displacement\"": {\""x\"": 0, \""y\"": 0.0003}}}, {\""timestamp\"": 2.9833333333333334, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""medium\"", \""speed\"": \""fast\"", \""velocity\"": 0.0671, \""acceleration\"": 3.2635, \""fluidity\"": 0.159, \""expansion\"": 0.166, \""total_displacement\"": 0.0003, \""center_displacement\"": {\""x\"": 0.0002, \""y\"": 0.0002}}}, {\""timestamp\"": 3, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0591, \""acceleration\"": 2.8652, \""fluidity\"": 0.04, \""expansion\"": 0.165, \""total_displacement\"": 0.0002, \""center_displacement\"": {\""x\"": 0, \""y\"": 0.0002}}}, {\""timestamp\"": 3.0166666666666666, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""slow\"", \""velocity\"": 0.0517, \""acceleration\"": 2.5477, \""fluidity\"": 0.05, \""expansion\"": 0.164, \""total_displacement\"": 0.0001, \""center_displacement\"": {\""x\"": -0.0001, \""y\"": 0}}}, {\""timestamp\"": 3.033333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0687, \""acceleration\"": 3.5291, \""fluidity\"": 0.062, \""expansion\"": 0.164, \""total_displacement\"": 0.0016, \""center_displacement\"": {\""x\"": 0.0004, \""y\"": 0.0016}}}, {\""timestamp\"": 3.05, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0566, \""acceleration\"": 2.9811, \""fluidity\"": 0.038, \""expansion\"": 0.164, \""total_displacement\"": 0.0008, \""center_displacement\"": {\""x\"": 0.0001, \""y\"": 0.0008}}}, {\""timestamp\"": 3.0666666666666664, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0508, \""acceleration\"": 2.5782, \""fluidity\"": 0.037, \""expansion\"": 0.164, \""total_displacement\"": 0.0004, \""center_displacement\"": {\""x\"": 0, \""y\"": 0.0004}}}, {\""timestamp\"": 3.0833333333333335, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0475, \""acceleration\"": 2.4533, \""fluidity\"": 0.034, \""expansion\"": 0.16, \""total_displacement\"": 0.0002, \""center_displacement\"": {\""x\"": 0.0001, \""y\"": 0.0002}}}, {\""timestamp\"": 3.1, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.044, \""acceleration\"": 2.1114, \""fluidity\"": 0.027, \""expansion\"": 0.159, \""total_displacement\"": 0.0004, \""center_displacement\"": {\""x\"": 0.0003, \""y\"": 0.0002}}}], \""capabilities\"": {\""has_joints\"": true, \""has_bones\"": true, \""has_direction_arrows\"": true, \""has_motion_trails\"": true, \""has_laban\"": true}}""}",2025-06-09 16:49:29.087331
README.md CHANGED
@@ -1,12 +1,239 @@
1
  ---
2
- title: Gradio Overlay Video
3
- emoji: 📚
4
- colorFrom: gray
 
 
5
  colorTo: green
6
  sdk: gradio
7
  sdk_version: 5.33.0
8
- app_file: app.py
9
  pinned: false
 
10
  ---
11
 
12
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  ---
2
+ tags: [gradio-custom-component, gradio-5, laban-movement-analysis, pose-visualisation, pose-estimation, movement-visualisation, visualisation, video]
3
+ title: gradio_overlay_video
4
+ emoji: 🏃
5
+ short_description: pose data overlayed video controller
6
+ colorFrom: purple
7
  colorTo: green
8
  sdk: gradio
9
  sdk_version: 5.33.0
 
10
  pinned: false
11
+ app_file: space.py
12
  ---
13
 
14
+ # `gradio_overlay_video`
15
+ <img alt="Static Badge" src="https://img.shields.io/badge/version%20-%200.0.8%20-%20orange">
16
+
17
+ overlayed video controller
18
+
19
+ ## Installation
20
+
21
+ ```bash
22
+ pip install gradio_overlay_video
23
+ ```
24
+
25
+ ## Usage
26
+
27
+ ```python
28
+
29
+ import gradio as gr
30
+ from gradio_overlay_video import OverlayVideo
31
+ from pathlib import Path
32
+
33
+ DEMO_DIR = Path(__file__).parent.parent
34
+ sample_video_path = DEMO_DIR / "files/balette.mp4"
35
+ sample_json_path = DEMO_DIR / "files/mediapipe_full_kp_balette.json"
36
+ mediapipe_json_path = DEMO_DIR / "files/mediapipe_heavy_kp_parkour.json"
37
+ movenet_json_path = DEMO_DIR / "files/movenet_thunder_kp_skate.json"
38
+ yolo8_json_path = DEMO_DIR / "files/yolov8_kp_dance.json"
39
+ yolo11_json_path = DEMO_DIR / "files/yolov11.json"
40
+
41
+ def prepare_visualization_data(json_path, video_path):
42
+ """
43
+ This function simply validates the inputs and passes them to the
44
+ custom OverlayVideo component for frontend processing.
45
+ """
46
+ if not json_path:
47
+ raise gr.Error("A JSON file is required to generate a visualization.")
48
+
49
+ print(f"✅ Preparing visualization with JSON: {json_path}")
50
+ if video_path:
51
+ print(f"✅ Video background provided: {video_path}")
52
+ else:
53
+ print("ℹ️ No video background provided. Visualization will be on a black background.")
54
+
55
+ # The backend's job is just to pass the filepaths to the frontend.
56
+ # The return format (video_path, json_path) must match what postprocess expects.
57
+ return (video_path, json_path)
58
+
59
+
60
+ with gr.Blocks(theme=gr.themes.Default(primary_hue="rose", secondary_hue="pink")) as demo:
61
+ gr.Markdown(
62
+ "# 🩰 Interactive Pose Visualization\n"
63
+ "1. **Upload a JSON file** with pose data.\n"
64
+ "2. **(Optional) Upload a video** to use as the background.\n"
65
+ "3. Click 'Display Visualization' to see the interactive result."
66
+ )
67
+
68
+ with gr.Row():
69
+ with gr.Column(scale=1):
70
+ # Use standard gr.File for robust input handling
71
+ json_upload = gr.File(
72
+ label="Upload Required JSON File",
73
+ file_types=[".json"],
74
+ type="filepath"
75
+ )
76
+ video_upload = gr.File(
77
+ label="Upload Optional Video File",
78
+ file_types=["video"],
79
+ type="filepath",
80
+ value=None
81
+ )
82
+ btn = gr.Button("Display Visualization", variant="primary")
83
+
84
+ with gr.Column(scale=1):
85
+ output_ov = OverlayVideo(label="Output", interactive=False, autoplay=True)
86
+
87
+ btn.click(
88
+ fn=prepare_visualization_data,
89
+ inputs=[json_upload, video_upload],
90
+ outputs=[output_ov]
91
+ )
92
+
93
+ gr.Examples(
94
+ examples=[
95
+ [str(mediapipe_json_path), None],
96
+ [str(movenet_json_path), None],
97
+ [str(yolo8_json_path), None],
98
+ [str(sample_json_path), str(sample_video_path)],
99
+ [str(yolo11_json_path), None]
100
+ ],
101
+ inputs=[json_upload, video_upload],
102
+ outputs=output_ov,
103
+ fn=prepare_visualization_data,
104
+ cache_examples=True
105
+ )
106
+
107
+ if __name__ == "__main__":
108
+ demo.launch(allowed_paths=["/Users/csabi/Develop/overlay_video/files"])
109
+ ```
110
+
111
+ ## `OverlayVideo`
112
+
113
+ ### Initialization
114
+
115
+ <table>
116
+ <thead>
117
+ <tr>
118
+ <th align="left">name</th>
119
+ <th align="left" style="width: 25%;">type</th>
120
+ <th align="left">default</th>
121
+ <th align="left">description</th>
122
+ </tr>
123
+ </thead>
124
+ <tbody>
125
+ <tr>
126
+ <td align="left"><code>value</code></td>
127
+ <td align="left" style="width: 25%;">
128
+
129
+ ```python
130
+ typing.Any
131
+ ```
132
+
133
+ </td>
134
+ <td align="left"><code>None</code></td>
135
+ <td align="left">None</td>
136
+ </tr>
137
+
138
+ <tr>
139
+ <td align="left"><code>label</code></td>
140
+ <td align="left" style="width: 25%;">
141
+
142
+ ```python
143
+ str | None
144
+ ```
145
+
146
+ </td>
147
+ <td align="left"><code>None</code></td>
148
+ <td align="left">None</td>
149
+ </tr>
150
+
151
+ <tr>
152
+ <td align="left"><code>interactive</code></td>
153
+ <td align="left" style="width: 25%;">
154
+
155
+ ```python
156
+ bool | None
157
+ ```
158
+
159
+ </td>
160
+ <td align="left"><code>None</code></td>
161
+ <td align="left">None</td>
162
+ </tr>
163
+
164
+ <tr>
165
+ <td align="left"><code>autoplay</code></td>
166
+ <td align="left" style="width: 25%;">
167
+
168
+ ```python
169
+ bool
170
+ ```
171
+
172
+ </td>
173
+ <td align="left"><code>False</code></td>
174
+ <td align="left">None</td>
175
+ </tr>
176
+
177
+ <tr>
178
+ <td align="left"><code>loop</code></td>
179
+ <td align="left" style="width: 25%;">
180
+
181
+ ```python
182
+ bool
183
+ ```
184
+
185
+ </td>
186
+ <td align="left"><code>False</code></td>
187
+ <td align="left">None</td>
188
+ </tr>
189
+
190
+ <tr>
191
+ <td align="left"><code>mode</code></td>
192
+ <td align="left" style="width: 25%;">
193
+
194
+ ```python
195
+ str
196
+ ```
197
+
198
+ </td>
199
+ <td align="left"><code>"overlay"</code></td>
200
+ <td align="left">None</td>
201
+ </tr>
202
+ </tbody></table>
203
+
204
+
205
+ ### Events
206
+
207
+ | name | description |
208
+ |:-----|:------------|
209
+ | `change` | Triggered when the value of the OverlayVideo changes either because of user input (e.g. a user types in a textbox) OR because of a function update (e.g. an image receives a value from the output of an event trigger). See `.input()` for a listener that is only triggered by user input. |
210
+ | `clear` | This listener is triggered when the user clears the OverlayVideo using the clear button for the component. |
211
+ | `play` | This listener is triggered when the user plays the media in the OverlayVideo. |
212
+ | `pause` | This listener is triggered when the media in the OverlayVideo stops for any reason. |
213
+ | `end` | This listener is triggered when the user reaches the end of the media playing in the OverlayVideo. |
214
+
215
+
216
+
217
+ ### User function
218
+
219
+ The impact on the users predict function varies depending on whether the component is used as an input or output for an event (or both).
220
+
221
+ - When used as an Input, the component only impacts the input signature of the user function.
222
+ - When used as an output, the component only impacts the return signature of the user function.
223
+
224
+ The code snippet below is accurate in cases where the component is used as both an input and an output.
225
+
226
+
227
+
228
+ ```python
229
+ def predict(
230
+ value: str | None
231
+ ) -> typing.Optional[typing.Tuple[str | None, str | None]][
232
+ typing.Tuple[str | None, str | None][
233
+ str | None, str | None
234
+ ],
235
+ None,
236
+ ]:
237
+ return value
238
+ ```
239
+
__init__.py ADDED
File without changes
app.py ADDED
@@ -0,0 +1,81 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ import gradio as gr
3
+ from gradio_overlay_video import OverlayVideo
4
+ from pathlib import Path
5
+
6
+ DEMO_DIR = Path(__file__).parent.parent
7
+ sample_video_path = DEMO_DIR / "files/balette.mp4"
8
+ sample_json_path = DEMO_DIR / "files/mediapipe_full_kp_balette.json"
9
+ mediapipe_json_path = DEMO_DIR / "files/mediapipe_heavy_kp_parkour.json"
10
+ movenet_json_path = DEMO_DIR / "files/movenet_thunder_kp_skate.json"
11
+ yolo8_json_path = DEMO_DIR / "files/yolov8_kp_dance.json"
12
+ yolo11_json_path = DEMO_DIR / "files/yolov11.json"
13
+
14
+ def prepare_visualization_data(json_path, video_path):
15
+ """
16
+ This function simply validates the inputs and passes them to the
17
+ custom OverlayVideo component for frontend processing.
18
+ """
19
+ if not json_path:
20
+ raise gr.Error("A JSON file is required to generate a visualization.")
21
+
22
+ print(f"✅ Preparing visualization with JSON: {json_path}")
23
+ if video_path:
24
+ print(f"✅ Video background provided: {video_path}")
25
+ else:
26
+ print("ℹ️ No video background provided. Visualization will be on a black background.")
27
+
28
+ # The backend's job is just to pass the filepaths to the frontend.
29
+ # The return format (video_path, json_path) must match what postprocess expects.
30
+ return (video_path, json_path)
31
+
32
+
33
+ with gr.Blocks(theme=gr.themes.Default(primary_hue="rose", secondary_hue="pink")) as demo:
34
+ gr.Markdown(
35
+ "# 🩰 Interactive Pose Visualization\n"
36
+ "1. **Upload a JSON file** with pose data.\n"
37
+ "2. **(Optional) Upload a video** to use as the background.\n"
38
+ "3. Click 'Display Visualization' to see the interactive result."
39
+ )
40
+
41
+ with gr.Row():
42
+ with gr.Column(scale=1):
43
+ # Use standard gr.File for robust input handling
44
+ json_upload = gr.File(
45
+ label="Upload Required JSON File",
46
+ file_types=[".json"],
47
+ type="filepath"
48
+ )
49
+ video_upload = gr.File(
50
+ label="Upload Optional Video File",
51
+ file_types=["video"],
52
+ type="filepath",
53
+ value=None
54
+ )
55
+ btn = gr.Button("Display Visualization", variant="primary")
56
+
57
+ with gr.Column(scale=1):
58
+ output_ov = OverlayVideo(label="Output", interactive=False, autoplay=True)
59
+
60
+ btn.click(
61
+ fn=prepare_visualization_data,
62
+ inputs=[json_upload, video_upload],
63
+ outputs=[output_ov]
64
+ )
65
+
66
+ gr.Examples(
67
+ examples=[
68
+ [str(mediapipe_json_path), None],
69
+ [str(movenet_json_path), None],
70
+ [str(yolo8_json_path), None],
71
+ [str(sample_json_path), str(sample_video_path)],
72
+ [str(yolo11_json_path), None]
73
+ ],
74
+ inputs=[json_upload, video_upload],
75
+ outputs=output_ov,
76
+ fn=prepare_visualization_data,
77
+ cache_examples=True
78
+ )
79
+
80
+ if __name__ == "__main__":
81
+ demo.launch(allowed_paths=["/Users/csabi/Develop/overlay_video/files"])
css.css ADDED
@@ -0,0 +1,157 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ html {
2
+ font-family: Inter;
3
+ font-size: 16px;
4
+ font-weight: 400;
5
+ line-height: 1.5;
6
+ -webkit-text-size-adjust: 100%;
7
+ background: #fff;
8
+ color: #323232;
9
+ -webkit-font-smoothing: antialiased;
10
+ -moz-osx-font-smoothing: grayscale;
11
+ text-rendering: optimizeLegibility;
12
+ }
13
+
14
+ :root {
15
+ --space: 1;
16
+ --vspace: calc(var(--space) * 1rem);
17
+ --vspace-0: calc(3 * var(--space) * 1rem);
18
+ --vspace-1: calc(2 * var(--space) * 1rem);
19
+ --vspace-2: calc(1.5 * var(--space) * 1rem);
20
+ --vspace-3: calc(0.5 * var(--space) * 1rem);
21
+ }
22
+
23
+ .app {
24
+ max-width: 748px !important;
25
+ }
26
+
27
+ .prose p {
28
+ margin: var(--vspace) 0;
29
+ line-height: var(--vspace * 2);
30
+ font-size: 1rem;
31
+ }
32
+
33
+ code {
34
+ font-family: "Inconsolata", sans-serif;
35
+ font-size: 16px;
36
+ }
37
+
38
+ h1,
39
+ h1 code {
40
+ font-weight: 400;
41
+ line-height: calc(2.5 / var(--space) * var(--vspace));
42
+ }
43
+
44
+ h1 code {
45
+ background: none;
46
+ border: none;
47
+ letter-spacing: 0.05em;
48
+ padding-bottom: 5px;
49
+ position: relative;
50
+ padding: 0;
51
+ }
52
+
53
+ h2 {
54
+ margin: var(--vspace-1) 0 var(--vspace-2) 0;
55
+ line-height: 1em;
56
+ }
57
+
58
+ h3,
59
+ h3 code {
60
+ margin: var(--vspace-1) 0 var(--vspace-2) 0;
61
+ line-height: 1em;
62
+ }
63
+
64
+ h4,
65
+ h5,
66
+ h6 {
67
+ margin: var(--vspace-3) 0 var(--vspace-3) 0;
68
+ line-height: var(--vspace);
69
+ }
70
+
71
+ .bigtitle,
72
+ h1,
73
+ h1 code {
74
+ font-size: calc(8px * 4.5);
75
+ word-break: break-word;
76
+ }
77
+
78
+ .title,
79
+ h2,
80
+ h2 code {
81
+ font-size: calc(8px * 3.375);
82
+ font-weight: lighter;
83
+ word-break: break-word;
84
+ border: none;
85
+ background: none;
86
+ }
87
+
88
+ .subheading1,
89
+ h3,
90
+ h3 code {
91
+ font-size: calc(8px * 1.8);
92
+ font-weight: 600;
93
+ border: none;
94
+ background: none;
95
+ letter-spacing: 0.1em;
96
+ text-transform: uppercase;
97
+ }
98
+
99
+ h2 code {
100
+ padding: 0;
101
+ position: relative;
102
+ letter-spacing: 0.05em;
103
+ }
104
+
105
+ blockquote {
106
+ font-size: calc(8px * 1.1667);
107
+ font-style: italic;
108
+ line-height: calc(1.1667 * var(--vspace));
109
+ margin: var(--vspace-2) var(--vspace-2);
110
+ }
111
+
112
+ .subheading2,
113
+ h4 {
114
+ font-size: calc(8px * 1.4292);
115
+ text-transform: uppercase;
116
+ font-weight: 600;
117
+ }
118
+
119
+ .subheading3,
120
+ h5 {
121
+ font-size: calc(8px * 1.2917);
122
+ line-height: calc(1.2917 * var(--vspace));
123
+
124
+ font-weight: lighter;
125
+ text-transform: uppercase;
126
+ letter-spacing: 0.15em;
127
+ }
128
+
129
+ h6 {
130
+ font-size: calc(8px * 1.1667);
131
+ font-size: 1.1667em;
132
+ font-weight: normal;
133
+ font-style: italic;
134
+ font-family: "le-monde-livre-classic-byol", serif !important;
135
+ letter-spacing: 0px !important;
136
+ }
137
+
138
+ #start .md > *:first-child {
139
+ margin-top: 0;
140
+ }
141
+
142
+ h2 + h3 {
143
+ margin-top: 0;
144
+ }
145
+
146
+ .md hr {
147
+ border: none;
148
+ border-top: 1px solid var(--block-border-color);
149
+ margin: var(--vspace-2) 0 var(--vspace-2) 0;
150
+ }
151
+ .prose ul {
152
+ margin: var(--vspace-2) 0 var(--vspace-1) 0;
153
+ }
154
+
155
+ .gap {
156
+ gap: 0;
157
+ }
requirements.txt ADDED
@@ -0,0 +1 @@
 
 
1
+ gradio_overlay_video
space.py ADDED
@@ -0,0 +1,206 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ import gradio as gr
3
+ from app import demo as app
4
+ import os
5
+
6
+ _docs = {'OverlayVideo': {'description': 'An output component that plays a video with an interactive, toggleable overlay of pose data.', 'members': {'__init__': {'value': {'type': 'typing.Any', 'default': 'None', 'description': None}, 'label': {'type': 'str | None', 'default': 'None', 'description': None}, 'interactive': {'type': 'bool | None', 'default': 'None', 'description': None}, 'autoplay': {'type': 'bool', 'default': 'False', 'description': None}, 'loop': {'type': 'bool', 'default': 'False', 'description': None}, 'mode': {'type': 'str', 'default': '"overlay"', 'description': None}}, 'postprocess': {'value': {'type': 'typing.Optional[typing.Tuple[str | None, str | None]][\n typing.Tuple[str | None, str | None][\n str | None, str | None\n ],\n None,\n]', 'description': None}}, 'preprocess': {'return': {'type': 'str | None', 'description': None}, 'value': None}}, 'events': {'change': {'type': None, 'default': None, 'description': 'Triggered when the value of the OverlayVideo changes either because of user input (e.g. a user types in a textbox) OR because of a function update (e.g. an image receives a value from the output of an event trigger). See `.input()` for a listener that is only triggered by user input.'}, 'clear': {'type': None, 'default': None, 'description': 'This listener is triggered when the user clears the OverlayVideo using the clear button for the component.'}, 'play': {'type': None, 'default': None, 'description': 'This listener is triggered when the user plays the media in the OverlayVideo.'}, 'pause': {'type': None, 'default': None, 'description': 'This listener is triggered when the media in the OverlayVideo stops for any reason.'}, 'end': {'type': None, 'default': None, 'description': 'This listener is triggered when the user reaches the end of the media playing in the OverlayVideo.'}}}, '__meta__': {'additional_interfaces': {}, 'user_fn_refs': {'OverlayVideo': []}}}
7
+
8
+ abs_path = os.path.join(os.path.dirname(__file__), "css.css")
9
+
10
+ with gr.Blocks(
11
+ css=abs_path,
12
+ theme=gr.themes.Default(
13
+ font_mono=[
14
+ gr.themes.GoogleFont("Inconsolata"),
15
+ "monospace",
16
+ ],
17
+ ),
18
+ ) as demo:
19
+ gr.Markdown(
20
+ """
21
+ # `gradio_overlay_video`
22
+
23
+ <div style="display: flex; gap: 7px;">
24
+ <img alt="Static Badge" src="https://img.shields.io/badge/version%20-%200.0.8%20-%20orange">
25
+ </div>
26
+
27
+ overlayed video controller
28
+ """, elem_classes=["md-custom"], header_links=True)
29
+ app.render()
30
+ gr.Markdown(
31
+ """
32
+ ## Installation
33
+
34
+ ```bash
35
+ pip install gradio_overlay_video
36
+ ```
37
+
38
+ ## Usage
39
+
40
+ ```python
41
+
42
+ import gradio as gr
43
+ from gradio_overlay_video import OverlayVideo
44
+ from pathlib import Path
45
+
46
+ DEMO_DIR = Path(__file__).parent.parent
47
+ sample_video_path = DEMO_DIR / "files/balette.mp4"
48
+ sample_json_path = DEMO_DIR / "files/mediapipe_full_kp_balette.json"
49
+ mediapipe_json_path = DEMO_DIR / "files/mediapipe_heavy_kp_parkour.json"
50
+ movenet_json_path = DEMO_DIR / "files/movenet_thunder_kp_skate.json"
51
+ yolo8_json_path = DEMO_DIR / "files/yolov8_kp_dance.json"
52
+ yolo11_json_path = DEMO_DIR / "files/yolov11.json"
53
+
54
+ def prepare_visualization_data(json_path, video_path):
55
+ \"\"\"
56
+ This function simply validates the inputs and passes them to the
57
+ custom OverlayVideo component for frontend processing.
58
+ \"\"\"
59
+ if not json_path:
60
+ raise gr.Error("A JSON file is required to generate a visualization.")
61
+
62
+ print(f"✅ Preparing visualization with JSON: {json_path}")
63
+ if video_path:
64
+ print(f"✅ Video background provided: {video_path}")
65
+ else:
66
+ print("ℹ️ No video background provided. Visualization will be on a black background.")
67
+
68
+ # The backend's job is just to pass the filepaths to the frontend.
69
+ # The return format (video_path, json_path) must match what postprocess expects.
70
+ return (video_path, json_path)
71
+
72
+
73
+ with gr.Blocks(theme=gr.themes.Default(primary_hue="rose", secondary_hue="pink")) as demo:
74
+ gr.Markdown(
75
+ "# 🩰 Interactive Pose Visualization\n"
76
+ "1. **Upload a JSON file** with pose data.\n"
77
+ "2. **(Optional) Upload a video** to use as the background.\n"
78
+ "3. Click 'Display Visualization' to see the interactive result."
79
+ )
80
+
81
+ with gr.Row():
82
+ with gr.Column(scale=1):
83
+ # Use standard gr.File for robust input handling
84
+ json_upload = gr.File(
85
+ label="Upload Required JSON File",
86
+ file_types=[".json"],
87
+ type="filepath"
88
+ )
89
+ video_upload = gr.File(
90
+ label="Upload Optional Video File",
91
+ file_types=["video"],
92
+ type="filepath",
93
+ value=None
94
+ )
95
+ btn = gr.Button("Display Visualization", variant="primary")
96
+
97
+ with gr.Column(scale=1):
98
+ output_ov = OverlayVideo(label="Output", interactive=False, autoplay=True)
99
+
100
+ btn.click(
101
+ fn=prepare_visualization_data,
102
+ inputs=[json_upload, video_upload],
103
+ outputs=[output_ov]
104
+ )
105
+
106
+ gr.Examples(
107
+ examples=[
108
+ [str(mediapipe_json_path), None],
109
+ [str(movenet_json_path), None],
110
+ [str(yolo8_json_path), None],
111
+ [str(sample_json_path), str(sample_video_path)],
112
+ [str(yolo11_json_path), None]
113
+ ],
114
+ inputs=[json_upload, video_upload],
115
+ outputs=output_ov,
116
+ fn=prepare_visualization_data,
117
+ cache_examples=True
118
+ )
119
+
120
+ if __name__ == "__main__":
121
+ demo.launch(allowed_paths=["/Users/csabi/Develop/overlay_video/files"])
122
+ ```
123
+ """, elem_classes=["md-custom"], header_links=True)
124
+
125
+
126
+ gr.Markdown("""
127
+ ## `OverlayVideo`
128
+
129
+ ### Initialization
130
+ """, elem_classes=["md-custom"], header_links=True)
131
+
132
+ gr.ParamViewer(value=_docs["OverlayVideo"]["members"]["__init__"], linkify=[])
133
+
134
+
135
+ gr.Markdown("### Events")
136
+ gr.ParamViewer(value=_docs["OverlayVideo"]["events"], linkify=['Event'])
137
+
138
+
139
+
140
+
141
+ gr.Markdown("""
142
+
143
+ ### User function
144
+
145
+ The impact on the users predict function varies depending on whether the component is used as an input or output for an event (or both).
146
+
147
+ - When used as an Input, the component only impacts the input signature of the user function.
148
+ - When used as an output, the component only impacts the return signature of the user function.
149
+
150
+ The code snippet below is accurate in cases where the component is used as both an input and an output.
151
+
152
+
153
+
154
+ ```python
155
+ def predict(
156
+ value: str | None
157
+ ) -> typing.Optional[typing.Tuple[str | None, str | None]][
158
+ typing.Tuple[str | None, str | None][
159
+ str | None, str | None
160
+ ],
161
+ None,
162
+ ]:
163
+ return value
164
+ ```
165
+ """, elem_classes=["md-custom", "OverlayVideo-user-fn"], header_links=True)
166
+
167
+
168
+
169
+
170
+ demo.load(None, js=r"""function() {
171
+ const refs = {};
172
+ const user_fn_refs = {
173
+ OverlayVideo: [], };
174
+ requestAnimationFrame(() => {
175
+
176
+ Object.entries(user_fn_refs).forEach(([key, refs]) => {
177
+ if (refs.length > 0) {
178
+ const el = document.querySelector(`.${key}-user-fn`);
179
+ if (!el) return;
180
+ refs.forEach(ref => {
181
+ el.innerHTML = el.innerHTML.replace(
182
+ new RegExp("\\b"+ref+"\\b", "g"),
183
+ `<a href="#h-${ref.toLowerCase()}">${ref}</a>`
184
+ );
185
+ })
186
+ }
187
+ })
188
+
189
+ Object.entries(refs).forEach(([key, refs]) => {
190
+ if (refs.length > 0) {
191
+ const el = document.querySelector(`.${key}`);
192
+ if (!el) return;
193
+ refs.forEach(ref => {
194
+ el.innerHTML = el.innerHTML.replace(
195
+ new RegExp("\\b"+ref+"\\b", "g"),
196
+ `<a href="#h-${ref.toLowerCase()}">${ref}</a>`
197
+ );
198
+ })
199
+ }
200
+ })
201
+ })
202
+ }
203
+
204
+ """)
205
+
206
+ demo.launch()
src/.DS_Store ADDED
Binary file (6.15 kB). View file
 
src/.claude/settings.local.json ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "permissions": {
3
+ "allow": [
4
+ "Bash(python:*)",
5
+ "Bash(pip install:*)",
6
+ "Bash(grep:*)",
7
+ "Bash(sed:*)",
8
+ "Bash(rm:*)"
9
+ ],
10
+ "deny": []
11
+ }
12
+ }
src/.gitignore ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .eggs/
2
+ dist/
3
+ *.pyc
4
+ __pycache__/
5
+ *.py[cod]
6
+ *$py.class
7
+ __tmp/*
8
+ *.pyi
9
+ .mypycache
10
+ .ruff_cache
11
+ node_modules
12
+ backend/**/templates/
src/.gradio/cached_examples/9/Output/3e1643b3cd3925885fe5/balette.mp4 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:75e5ff7c8e5eb31b54686b0250a1ebc739ea1128bb18f116f8f0215159e0979b
3
+ size 621415
src/.gradio/cached_examples/9/Output/6444ff5b7cd73ce6e3ac/mediapipe_full_balette.json ADDED
@@ -0,0 +1,3478 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "analysis_metadata": {
3
+ "timestamp": "2025-06-08T15:21:19.211586",
4
+ "version": "1.0.0",
5
+ "model_info": {
6
+ "name": "mediapipe-full",
7
+ "type": "pose_estimation"
8
+ }
9
+ },
10
+ "video_info": {
11
+ "fps": 60,
12
+ "duration_seconds": 3.1166666666666667,
13
+ "width": 1280,
14
+ "height": 688,
15
+ "frame_count": 187
16
+ },
17
+ "movement_analysis": {
18
+ "frame_count": 187,
19
+ "frames": [
20
+ {
21
+ "frame_index": 0,
22
+ "timestamp": 0,
23
+ "metrics": {
24
+ "direction": "stationary",
25
+ "intensity": "low",
26
+ "speed": "slow",
27
+ "velocity": 0,
28
+ "acceleration": 0,
29
+ "fluidity": 0,
30
+ "expansion": 0.142,
31
+ "total_displacement": 0
32
+ }
33
+ },
34
+ {
35
+ "frame_index": 1,
36
+ "timestamp": 0.016666666666666666,
37
+ "metrics": {
38
+ "direction": "left",
39
+ "intensity": "high",
40
+ "speed": "fast",
41
+ "velocity": 1.051,
42
+ "acceleration": 63.0628,
43
+ "fluidity": 0,
44
+ "expansion": 0.15,
45
+ "total_displacement": 0.0175,
46
+ "center_displacement": {
47
+ "x": -0.0175,
48
+ "y": 0.0004
49
+ }
50
+ }
51
+ },
52
+ {
53
+ "frame_index": 2,
54
+ "timestamp": 0.03333333333333333,
55
+ "metrics": {
56
+ "direction": "stationary",
57
+ "intensity": "high",
58
+ "speed": "fast",
59
+ "velocity": 0.0654,
60
+ "acceleration": 59.1406,
61
+ "fluidity": 0,
62
+ "expansion": 0.149,
63
+ "total_displacement": 0.0011,
64
+ "center_displacement": {
65
+ "x": -0.0011,
66
+ "y": -0.0002
67
+ }
68
+ }
69
+ },
70
+ {
71
+ "frame_index": 3,
72
+ "timestamp": 0.05,
73
+ "metrics": {
74
+ "direction": "stationary",
75
+ "intensity": "high",
76
+ "speed": "fast",
77
+ "velocity": 0.2949,
78
+ "acceleration": 30.5825,
79
+ "fluidity": 0.092,
80
+ "expansion": 0.15,
81
+ "total_displacement": 0.0011,
82
+ "center_displacement": {
83
+ "x": -0.001,
84
+ "y": -0.0002
85
+ }
86
+ }
87
+ },
88
+ {
89
+ "frame_index": 4,
90
+ "timestamp": 0.06666666666666667,
91
+ "metrics": {
92
+ "direction": "stationary",
93
+ "intensity": "high",
94
+ "speed": "fast",
95
+ "velocity": 0.36,
96
+ "acceleration": 38.7168,
97
+ "fluidity": 0.023,
98
+ "expansion": 0.149,
99
+ "total_displacement": 0.0005,
100
+ "center_displacement": {
101
+ "x": 0.0004,
102
+ "y": -0.0002
103
+ }
104
+ }
105
+ },
106
+ {
107
+ "frame_index": 5,
108
+ "timestamp": 0.08333333333333333,
109
+ "metrics": {
110
+ "direction": "stationary",
111
+ "intensity": "high",
112
+ "speed": "fast",
113
+ "velocity": 0.2096,
114
+ "acceleration": 33.4529,
115
+ "fluidity": 0.029,
116
+ "expansion": 0.151,
117
+ "total_displacement": 0.002,
118
+ "center_displacement": {
119
+ "x": 0.0017,
120
+ "y": -0.0011
121
+ }
122
+ }
123
+ },
124
+ {
125
+ "frame_index": 6,
126
+ "timestamp": 0.1,
127
+ "metrics": {
128
+ "direction": "stationary",
129
+ "intensity": "high",
130
+ "speed": "fast",
131
+ "velocity": 0.2213,
132
+ "acceleration": 27.1474,
133
+ "fluidity": 0.036,
134
+ "expansion": 0.152,
135
+ "total_displacement": 0.0003,
136
+ "center_displacement": {
137
+ "x": -0.0002,
138
+ "y": -0.0003
139
+ }
140
+ }
141
+ },
142
+ {
143
+ "frame_index": 7,
144
+ "timestamp": 0.11666666666666667,
145
+ "metrics": {
146
+ "direction": "stationary",
147
+ "intensity": "medium",
148
+ "speed": "fast",
149
+ "velocity": 0.2033,
150
+ "acceleration": 24.8517,
151
+ "fluidity": 0.16,
152
+ "expansion": 0.155,
153
+ "total_displacement": 0.0004,
154
+ "center_displacement": {
155
+ "x": 0.0001,
156
+ "y": 0.0004
157
+ }
158
+ }
159
+ },
160
+ {
161
+ "frame_index": 8,
162
+ "timestamp": 0.13333333333333333,
163
+ "metrics": {
164
+ "direction": "stationary",
165
+ "intensity": "high",
166
+ "speed": "fast",
167
+ "velocity": 0.1729,
168
+ "acceleration": 21.8885,
169
+ "fluidity": 0.056,
170
+ "expansion": 0.156,
171
+ "total_displacement": 0.001,
172
+ "center_displacement": {
173
+ "x": -0.0009,
174
+ "y": 0.0001
175
+ }
176
+ }
177
+ },
178
+ {
179
+ "frame_index": 9,
180
+ "timestamp": 0.15,
181
+ "metrics": {
182
+ "direction": "stationary",
183
+ "intensity": "high",
184
+ "speed": "fast",
185
+ "velocity": 0.1527,
186
+ "acceleration": 19.1312,
187
+ "fluidity": 0.063,
188
+ "expansion": 0.156,
189
+ "total_displacement": 0.0002,
190
+ "center_displacement": {
191
+ "x": -0.0001,
192
+ "y": 0.0002
193
+ }
194
+ }
195
+ },
196
+ {
197
+ "frame_index": 10,
198
+ "timestamp": 0.16666666666666666,
199
+ "metrics": {
200
+ "direction": "stationary",
201
+ "intensity": "high",
202
+ "speed": "fast",
203
+ "velocity": 0.1571,
204
+ "acceleration": 17.7603,
205
+ "fluidity": 0.07,
206
+ "expansion": 0.159,
207
+ "total_displacement": 0.0017,
208
+ "center_displacement": {
209
+ "x": -0.0001,
210
+ "y": -0.0017
211
+ }
212
+ }
213
+ },
214
+ {
215
+ "frame_index": 11,
216
+ "timestamp": 0.18333333333333332,
217
+ "metrics": {
218
+ "direction": "stationary",
219
+ "intensity": "high",
220
+ "speed": "fast",
221
+ "velocity": 0.1276,
222
+ "acceleration": 15.7758,
223
+ "fluidity": 0.047,
224
+ "expansion": 0.16,
225
+ "total_displacement": 0.0005,
226
+ "center_displacement": {
227
+ "x": 0.0003,
228
+ "y": -0.0003
229
+ }
230
+ }
231
+ },
232
+ {
233
+ "frame_index": 12,
234
+ "timestamp": 0.2,
235
+ "metrics": {
236
+ "direction": "stationary",
237
+ "intensity": "high",
238
+ "speed": "fast",
239
+ "velocity": 0.1568,
240
+ "acceleration": 15.6038,
241
+ "fluidity": 0.045,
242
+ "expansion": 0.171,
243
+ "total_displacement": 0.0032,
244
+ "center_displacement": {
245
+ "x": -0.0032,
246
+ "y": -0.0001
247
+ }
248
+ }
249
+ },
250
+ {
251
+ "frame_index": 13,
252
+ "timestamp": 0.21666666666666667,
253
+ "metrics": {
254
+ "direction": "stationary",
255
+ "intensity": "high",
256
+ "speed": "fast",
257
+ "velocity": 0.1198,
258
+ "acceleration": 14.5715,
259
+ "fluidity": 0.041,
260
+ "expansion": 0.173,
261
+ "total_displacement": 0.0006,
262
+ "center_displacement": {
263
+ "x": -0.0004,
264
+ "y": 0.0005
265
+ }
266
+ }
267
+ },
268
+ {
269
+ "frame_index": 14,
270
+ "timestamp": 0.23333333333333334,
271
+ "metrics": {
272
+ "direction": "stationary",
273
+ "intensity": "high",
274
+ "speed": "fast",
275
+ "velocity": 0.1172,
276
+ "acceleration": 11.8933,
277
+ "fluidity": 0.033,
278
+ "expansion": 0.173,
279
+ "total_displacement": 0.0011,
280
+ "center_displacement": {
281
+ "x": -0.0007,
282
+ "y": 0.0008
283
+ }
284
+ }
285
+ },
286
+ {
287
+ "frame_index": 15,
288
+ "timestamp": 0.25,
289
+ "metrics": {
290
+ "direction": "stationary",
291
+ "intensity": "high",
292
+ "speed": "fast",
293
+ "velocity": 0.1102,
294
+ "acceleration": 10.778,
295
+ "fluidity": 0.03,
296
+ "expansion": 0.172,
297
+ "total_displacement": 0.0008,
298
+ "center_displacement": {
299
+ "x": -0.0008,
300
+ "y": 0.0002
301
+ }
302
+ }
303
+ },
304
+ {
305
+ "frame_index": 16,
306
+ "timestamp": 0.26666666666666666,
307
+ "metrics": {
308
+ "direction": "stationary",
309
+ "intensity": "high",
310
+ "speed": "fast",
311
+ "velocity": 0.0949,
312
+ "acceleration": 9.5334,
313
+ "fluidity": 0.026,
314
+ "expansion": 0.172,
315
+ "total_displacement": 0.0005,
316
+ "center_displacement": {
317
+ "x": 0,
318
+ "y": 0.0005
319
+ }
320
+ }
321
+ },
322
+ {
323
+ "frame_index": 17,
324
+ "timestamp": 0.2833333333333333,
325
+ "metrics": {
326
+ "direction": "stationary",
327
+ "intensity": "high",
328
+ "speed": "fast",
329
+ "velocity": 0.0866,
330
+ "acceleration": 8.1758,
331
+ "fluidity": 0.022,
332
+ "expansion": 0.174,
333
+ "total_displacement": 0.0004,
334
+ "center_displacement": {
335
+ "x": -0.0004,
336
+ "y": 0
337
+ }
338
+ }
339
+ },
340
+ {
341
+ "frame_index": 18,
342
+ "timestamp": 0.3,
343
+ "metrics": {
344
+ "direction": "stationary",
345
+ "intensity": "high",
346
+ "speed": "fast",
347
+ "velocity": 0.0767,
348
+ "acceleration": 7.2556,
349
+ "fluidity": 0.019,
350
+ "expansion": 0.175,
351
+ "total_displacement": 0.0003,
352
+ "center_displacement": {
353
+ "x": 0,
354
+ "y": 0.0003
355
+ }
356
+ }
357
+ },
358
+ {
359
+ "frame_index": 19,
360
+ "timestamp": 0.31666666666666665,
361
+ "metrics": {
362
+ "direction": "stationary",
363
+ "intensity": "high",
364
+ "speed": "fast",
365
+ "velocity": 0.0817,
366
+ "acceleration": 7.042,
367
+ "fluidity": 0.017,
368
+ "expansion": 0.177,
369
+ "total_displacement": 0.0011,
370
+ "center_displacement": {
371
+ "x": -0.0011,
372
+ "y": 0
373
+ }
374
+ }
375
+ },
376
+ {
377
+ "frame_index": 20,
378
+ "timestamp": 0.3333333333333333,
379
+ "metrics": {
380
+ "direction": "stationary",
381
+ "intensity": "high",
382
+ "speed": "fast",
383
+ "velocity": 0.0676,
384
+ "acceleration": 6.2615,
385
+ "fluidity": 0.015,
386
+ "expansion": 0.179,
387
+ "total_displacement": 0.0004,
388
+ "center_displacement": {
389
+ "x": -0.0003,
390
+ "y": 0.0003
391
+ }
392
+ }
393
+ },
394
+ {
395
+ "frame_index": 21,
396
+ "timestamp": 0.35,
397
+ "metrics": {
398
+ "direction": "stationary",
399
+ "intensity": "high",
400
+ "speed": "fast",
401
+ "velocity": 0.0607,
402
+ "acceleration": 5.2741,
403
+ "fluidity": 0.013,
404
+ "expansion": 0.179,
405
+ "total_displacement": 0.0003,
406
+ "center_displacement": {
407
+ "x": -0.0003,
408
+ "y": 0
409
+ }
410
+ }
411
+ },
412
+ {
413
+ "frame_index": 22,
414
+ "timestamp": 0.36666666666666664,
415
+ "metrics": {
416
+ "direction": "stationary",
417
+ "intensity": "high",
418
+ "speed": "fast",
419
+ "velocity": 0.0578,
420
+ "acceleration": 4.7129,
421
+ "fluidity": 0.011,
422
+ "expansion": 0.183,
423
+ "total_displacement": 0.0004,
424
+ "center_displacement": {
425
+ "x": -0.0002,
426
+ "y": 0.0003
427
+ }
428
+ }
429
+ },
430
+ {
431
+ "frame_index": 23,
432
+ "timestamp": 0.3833333333333333,
433
+ "metrics": {
434
+ "direction": "stationary",
435
+ "intensity": "high",
436
+ "speed": "fast",
437
+ "velocity": 0.0493,
438
+ "acceleration": 4.2135,
439
+ "fluidity": 0.01,
440
+ "expansion": 0.183,
441
+ "total_displacement": 0.0002,
442
+ "center_displacement": {
443
+ "x": -0.0002,
444
+ "y": 0.0001
445
+ }
446
+ }
447
+ },
448
+ {
449
+ "frame_index": 24,
450
+ "timestamp": 0.4,
451
+ "metrics": {
452
+ "direction": "stationary",
453
+ "intensity": "high",
454
+ "speed": "fast",
455
+ "velocity": 0.0724,
456
+ "acceleration": 5.2104,
457
+ "fluidity": 0.008,
458
+ "expansion": 0.191,
459
+ "total_displacement": 0.002,
460
+ "center_displacement": {
461
+ "x": -0.0018,
462
+ "y": 0.0009
463
+ }
464
+ }
465
+ },
466
+ {
467
+ "frame_index": 25,
468
+ "timestamp": 0.4166666666666667,
469
+ "metrics": {
470
+ "direction": "stationary",
471
+ "intensity": "high",
472
+ "speed": "slow",
473
+ "velocity": 0.0467,
474
+ "acceleration": 5.2539,
475
+ "fluidity": 0.007,
476
+ "expansion": 0.191,
477
+ "total_displacement": 0.0001,
478
+ "center_displacement": {
479
+ "x": -0.0001,
480
+ "y": 0
481
+ }
482
+ }
483
+ },
484
+ {
485
+ "frame_index": 26,
486
+ "timestamp": 0.43333333333333335,
487
+ "metrics": {
488
+ "direction": "stationary",
489
+ "intensity": "high",
490
+ "speed": "fast",
491
+ "velocity": 0.0614,
492
+ "acceleration": 4.7211,
493
+ "fluidity": 0.006,
494
+ "expansion": 0.192,
495
+ "total_displacement": 0.0013,
496
+ "center_displacement": {
497
+ "x": -0.0013,
498
+ "y": -0.0001
499
+ }
500
+ }
501
+ },
502
+ {
503
+ "frame_index": 27,
504
+ "timestamp": 0.45,
505
+ "metrics": {
506
+ "direction": "stationary",
507
+ "intensity": "high",
508
+ "speed": "fast",
509
+ "velocity": 0.0493,
510
+ "acceleration": 4.7025,
511
+ "fluidity": 0.005,
512
+ "expansion": 0.191,
513
+ "total_displacement": 0.0003,
514
+ "center_displacement": {
515
+ "x": -0.0003,
516
+ "y": -0.0001
517
+ }
518
+ }
519
+ },
520
+ {
521
+ "frame_index": 28,
522
+ "timestamp": 0.4666666666666667,
523
+ "metrics": {
524
+ "direction": "stationary",
525
+ "intensity": "high",
526
+ "speed": "fast",
527
+ "velocity": 0.0441,
528
+ "acceleration": 3.7031,
529
+ "fluidity": 0.086,
530
+ "expansion": 0.191,
531
+ "total_displacement": 0.0003,
532
+ "center_displacement": {
533
+ "x": -0.0003,
534
+ "y": 0.0001
535
+ }
536
+ }
537
+ },
538
+ {
539
+ "frame_index": 29,
540
+ "timestamp": 0.48333333333333334,
541
+ "metrics": {
542
+ "direction": "stationary",
543
+ "intensity": "high",
544
+ "speed": "fast",
545
+ "velocity": 0.0545,
546
+ "acceleration": 3.9435,
547
+ "fluidity": 0.024,
548
+ "expansion": 0.192,
549
+ "total_displacement": 0.0011,
550
+ "center_displacement": {
551
+ "x": -0.0008,
552
+ "y": 0.0007
553
+ }
554
+ }
555
+ },
556
+ {
557
+ "frame_index": 30,
558
+ "timestamp": 0.5,
559
+ "metrics": {
560
+ "direction": "stationary",
561
+ "intensity": "high",
562
+ "speed": "fast",
563
+ "velocity": 0.0412,
564
+ "acceleration": 3.7837,
565
+ "fluidity": 0.029,
566
+ "expansion": 0.192,
567
+ "total_displacement": 0.0003,
568
+ "center_displacement": {
569
+ "x": -0.0003,
570
+ "y": 0.0001
571
+ }
572
+ }
573
+ },
574
+ {
575
+ "frame_index": 31,
576
+ "timestamp": 0.5166666666666666,
577
+ "metrics": {
578
+ "direction": "stationary",
579
+ "intensity": "high",
580
+ "speed": "fast",
581
+ "velocity": 0.0436,
582
+ "acceleration": 3.1217,
583
+ "fluidity": 0.035,
584
+ "expansion": 0.192,
585
+ "total_displacement": 0.0006,
586
+ "center_displacement": {
587
+ "x": 0,
588
+ "y": -0.0006
589
+ }
590
+ }
591
+ },
592
+ {
593
+ "frame_index": 32,
594
+ "timestamp": 0.5333333333333333,
595
+ "metrics": {
596
+ "direction": "stationary",
597
+ "intensity": "high",
598
+ "speed": "fast",
599
+ "velocity": 0.0395,
600
+ "acceleration": 2.9474,
601
+ "fluidity": 0.022,
602
+ "expansion": 0.192,
603
+ "total_displacement": 0.0003,
604
+ "center_displacement": {
605
+ "x": 0.0001,
606
+ "y": -0.0003
607
+ }
608
+ }
609
+ },
610
+ {
611
+ "frame_index": 33,
612
+ "timestamp": 0.55,
613
+ "metrics": {
614
+ "direction": "stationary",
615
+ "intensity": "high",
616
+ "speed": "fast",
617
+ "velocity": 0.0341,
618
+ "acceleration": 2.5603,
619
+ "fluidity": 0.022,
620
+ "expansion": 0.192,
621
+ "total_displacement": 0.0002,
622
+ "center_displacement": {
623
+ "x": 0.0001,
624
+ "y": -0.0001
625
+ }
626
+ }
627
+ },
628
+ {
629
+ "frame_index": 34,
630
+ "timestamp": 0.5666666666666667,
631
+ "metrics": {
632
+ "direction": "stationary",
633
+ "intensity": "high",
634
+ "speed": "fast",
635
+ "velocity": 0.0341,
636
+ "acceleration": 2.2634,
637
+ "fluidity": 0.02,
638
+ "expansion": 0.193,
639
+ "total_displacement": 0.0003,
640
+ "center_displacement": {
641
+ "x": -0.0001,
642
+ "y": -0.0003
643
+ }
644
+ }
645
+ },
646
+ {
647
+ "frame_index": 35,
648
+ "timestamp": 0.5833333333333334,
649
+ "metrics": {
650
+ "direction": "stationary",
651
+ "intensity": "medium",
652
+ "speed": "fast",
653
+ "velocity": 0.0316,
654
+ "acceleration": 1.9529,
655
+ "fluidity": 0.215,
656
+ "expansion": 0.194,
657
+ "total_displacement": 0.0003,
658
+ "center_displacement": {
659
+ "x": -0.0001,
660
+ "y": -0.0003
661
+ }
662
+ }
663
+ },
664
+ {
665
+ "frame_index": 36,
666
+ "timestamp": 0.6,
667
+ "metrics": {
668
+ "direction": "stationary",
669
+ "intensity": "high",
670
+ "speed": "fast",
671
+ "velocity": 0.0364,
672
+ "acceleration": 2.1029,
673
+ "fluidity": 0.064,
674
+ "expansion": 0.196,
675
+ "total_displacement": 0.0008,
676
+ "center_displacement": {
677
+ "x": -0.0006,
678
+ "y": -0.0004
679
+ }
680
+ }
681
+ },
682
+ {
683
+ "frame_index": 37,
684
+ "timestamp": 0.6166666666666667,
685
+ "metrics": {
686
+ "direction": "stationary",
687
+ "intensity": "high",
688
+ "speed": "slow",
689
+ "velocity": 0.028,
690
+ "acceleration": 2.1194,
691
+ "fluidity": 0.075,
692
+ "expansion": 0.197,
693
+ "total_displacement": 0.0002,
694
+ "center_displacement": {
695
+ "x": -0.0002,
696
+ "y": 0
697
+ }
698
+ }
699
+ },
700
+ {
701
+ "frame_index": 38,
702
+ "timestamp": 0.6333333333333333,
703
+ "metrics": {
704
+ "direction": "stationary",
705
+ "intensity": "high",
706
+ "speed": "fast",
707
+ "velocity": 0.0276,
708
+ "acceleration": 1.6102,
709
+ "fluidity": 0.088,
710
+ "expansion": 0.2,
711
+ "total_displacement": 0.0002,
712
+ "center_displacement": {
713
+ "x": 0.0001,
714
+ "y": 0.0002
715
+ }
716
+ }
717
+ },
718
+ {
719
+ "frame_index": 39,
720
+ "timestamp": 0.65,
721
+ "metrics": {
722
+ "direction": "stationary",
723
+ "intensity": "high",
724
+ "speed": "slow",
725
+ "velocity": 0.0241,
726
+ "acceleration": 1.6084,
727
+ "fluidity": 0.057,
728
+ "expansion": 0.201,
729
+ "total_displacement": 0.0001,
730
+ "center_displacement": {
731
+ "x": 0.0001,
732
+ "y": 0
733
+ }
734
+ }
735
+ },
736
+ {
737
+ "frame_index": 40,
738
+ "timestamp": 0.6666666666666666,
739
+ "metrics": {
740
+ "direction": "stationary",
741
+ "intensity": "low",
742
+ "speed": "slow",
743
+ "velocity": 0.0211,
744
+ "acceleration": 1.3391,
745
+ "fluidity": 0.282,
746
+ "expansion": 0.201,
747
+ "total_displacement": 0.0001,
748
+ "center_displacement": {
749
+ "x": 0,
750
+ "y": 0.0001
751
+ }
752
+ }
753
+ },
754
+ {
755
+ "frame_index": 41,
756
+ "timestamp": 0.6833333333333333,
757
+ "metrics": {
758
+ "direction": "stationary",
759
+ "intensity": "high",
760
+ "speed": "fast",
761
+ "velocity": 0.0365,
762
+ "acceleration": 2.1662,
763
+ "fluidity": 0.107,
764
+ "expansion": 0.205,
765
+ "total_displacement": 0.0012,
766
+ "center_displacement": {
767
+ "x": -0.0004,
768
+ "y": 0.0011
769
+ }
770
+ }
771
+ },
772
+ {
773
+ "frame_index": 42,
774
+ "timestamp": 0.7,
775
+ "metrics": {
776
+ "direction": "stationary",
777
+ "intensity": "high",
778
+ "speed": "fast",
779
+ "velocity": 0.0301,
780
+ "acceleration": 1.7959,
781
+ "fluidity": 0.111,
782
+ "expansion": 0.206,
783
+ "total_displacement": 0.0006,
784
+ "center_displacement": {
785
+ "x": -0.0003,
786
+ "y": 0.0005
787
+ }
788
+ }
789
+ },
790
+ {
791
+ "frame_index": 43,
792
+ "timestamp": 0.7166666666666667,
793
+ "metrics": {
794
+ "direction": "stationary",
795
+ "intensity": "high",
796
+ "speed": "fast",
797
+ "velocity": 0.0458,
798
+ "acceleration": 2.1795,
799
+ "fluidity": 0.125,
800
+ "expansion": 0.21,
801
+ "total_displacement": 0.0016,
802
+ "center_displacement": {
803
+ "x": -0.0004,
804
+ "y": 0.0015
805
+ }
806
+ }
807
+ },
808
+ {
809
+ "frame_index": 44,
810
+ "timestamp": 0.7333333333333333,
811
+ "metrics": {
812
+ "direction": "stationary",
813
+ "intensity": "high",
814
+ "speed": "fast",
815
+ "velocity": 0.0477,
816
+ "acceleration": 1.79,
817
+ "fluidity": 0.086,
818
+ "expansion": 0.211,
819
+ "total_displacement": 0.0013,
820
+ "center_displacement": {
821
+ "x": -0.0004,
822
+ "y": 0.0012
823
+ }
824
+ }
825
+ },
826
+ {
827
+ "frame_index": 45,
828
+ "timestamp": 0.75,
829
+ "metrics": {
830
+ "direction": "stationary",
831
+ "intensity": "high",
832
+ "speed": "fast",
833
+ "velocity": 0.034,
834
+ "acceleration": 2.4349,
835
+ "fluidity": 0.081,
836
+ "expansion": 0.211,
837
+ "total_displacement": 0.0002,
838
+ "center_displacement": {
839
+ "x": -0.0001,
840
+ "y": 0.0002
841
+ }
842
+ }
843
+ },
844
+ {
845
+ "frame_index": 46,
846
+ "timestamp": 0.7666666666666666,
847
+ "metrics": {
848
+ "direction": "stationary",
849
+ "intensity": "medium",
850
+ "speed": "fast",
851
+ "velocity": 0.0353,
852
+ "acceleration": 1.6237,
853
+ "fluidity": 0.21,
854
+ "expansion": 0.213,
855
+ "total_displacement": 0.0002,
856
+ "center_displacement": {
857
+ "x": 0.0002,
858
+ "y": 0.0001
859
+ }
860
+ }
861
+ },
862
+ {
863
+ "frame_index": 47,
864
+ "timestamp": 0.7833333333333333,
865
+ "metrics": {
866
+ "direction": "stationary",
867
+ "intensity": "medium",
868
+ "speed": "fast",
869
+ "velocity": 0.0329,
870
+ "acceleration": 1.47,
871
+ "fluidity": 0.305,
872
+ "expansion": 0.214,
873
+ "total_displacement": 0.0002,
874
+ "center_displacement": {
875
+ "x": 0.0002,
876
+ "y": 0.0002
877
+ }
878
+ }
879
+ },
880
+ {
881
+ "frame_index": 48,
882
+ "timestamp": 0.8,
883
+ "metrics": {
884
+ "direction": "stationary",
885
+ "intensity": "high",
886
+ "speed": "fast",
887
+ "velocity": 0.0299,
888
+ "acceleration": 1.4263,
889
+ "fluidity": 0.178,
890
+ "expansion": 0.215,
891
+ "total_displacement": 0.0003,
892
+ "center_displacement": {
893
+ "x": 0.0003,
894
+ "y": 0
895
+ }
896
+ }
897
+ },
898
+ {
899
+ "frame_index": 49,
900
+ "timestamp": 0.8166666666666667,
901
+ "metrics": {
902
+ "direction": "stationary",
903
+ "intensity": "high",
904
+ "speed": "fast",
905
+ "velocity": 0.0277,
906
+ "acceleration": 1.1971,
907
+ "fluidity": 0.173,
908
+ "expansion": 0.215,
909
+ "total_displacement": 0.0002,
910
+ "center_displacement": {
911
+ "x": 0.0002,
912
+ "y": -0.0001
913
+ }
914
+ }
915
+ },
916
+ {
917
+ "frame_index": 50,
918
+ "timestamp": 0.8333333333333334,
919
+ "metrics": {
920
+ "direction": "stationary",
921
+ "intensity": "high",
922
+ "speed": "fast",
923
+ "velocity": 0.0376,
924
+ "acceleration": 1.7321,
925
+ "fluidity": 0.164,
926
+ "expansion": 0.215,
927
+ "total_displacement": 0.001,
928
+ "center_displacement": {
929
+ "x": 0.0005,
930
+ "y": -0.0008
931
+ }
932
+ }
933
+ },
934
+ {
935
+ "frame_index": 51,
936
+ "timestamp": 0.85,
937
+ "metrics": {
938
+ "direction": "stationary",
939
+ "intensity": "high",
940
+ "speed": "fast",
941
+ "velocity": 0.0346,
942
+ "acceleration": 1.3423,
943
+ "fluidity": 0.129,
944
+ "expansion": 0.215,
945
+ "total_displacement": 0.0007,
946
+ "center_displacement": {
947
+ "x": 0.0003,
948
+ "y": -0.0006
949
+ }
950
+ }
951
+ },
952
+ {
953
+ "frame_index": 52,
954
+ "timestamp": 0.8666666666666667,
955
+ "metrics": {
956
+ "direction": "stationary",
957
+ "intensity": "high",
958
+ "speed": "fast",
959
+ "velocity": 0.0332,
960
+ "acceleration": 1.2208,
961
+ "fluidity": 0.117,
962
+ "expansion": 0.215,
963
+ "total_displacement": 0.0006,
964
+ "center_displacement": {
965
+ "x": 0.0002,
966
+ "y": -0.0005
967
+ }
968
+ }
969
+ },
970
+ {
971
+ "frame_index": 53,
972
+ "timestamp": 0.8833333333333333,
973
+ "metrics": {
974
+ "direction": "stationary",
975
+ "intensity": "high",
976
+ "speed": "slow",
977
+ "velocity": 0.0281,
978
+ "acceleration": 1.4679,
979
+ "fluidity": 0.102,
980
+ "expansion": 0.215,
981
+ "total_displacement": 0.0001,
982
+ "center_displacement": {
983
+ "x": 0.0001,
984
+ "y": 0.0001
985
+ }
986
+ }
987
+ },
988
+ {
989
+ "frame_index": 54,
990
+ "timestamp": 0.9,
991
+ "metrics": {
992
+ "direction": "stationary",
993
+ "intensity": "low",
994
+ "speed": "slow",
995
+ "velocity": 0.0256,
996
+ "acceleration": 1.01,
997
+ "fluidity": 0.326,
998
+ "expansion": 0.215,
999
+ "total_displacement": 0.0001,
1000
+ "center_displacement": {
1001
+ "x": 0,
1002
+ "y": 0.0001
1003
+ }
1004
+ }
1005
+ },
1006
+ {
1007
+ "frame_index": 55,
1008
+ "timestamp": 0.9166666666666666,
1009
+ "metrics": {
1010
+ "direction": "stationary",
1011
+ "intensity": "high",
1012
+ "speed": "fast",
1013
+ "velocity": 0.0329,
1014
+ "acceleration": 1.495,
1015
+ "fluidity": 0.136,
1016
+ "expansion": 0.216,
1017
+ "total_displacement": 0.0007,
1018
+ "center_displacement": {
1019
+ "x": 0.0007,
1020
+ "y": 0
1021
+ }
1022
+ }
1023
+ },
1024
+ {
1025
+ "frame_index": 56,
1026
+ "timestamp": 0.9333333333333333,
1027
+ "metrics": {
1028
+ "direction": "stationary",
1029
+ "intensity": "high",
1030
+ "speed": "fast",
1031
+ "velocity": 0.0308,
1032
+ "acceleration": 1.1118,
1033
+ "fluidity": 0.141,
1034
+ "expansion": 0.217,
1035
+ "total_displacement": 0.0006,
1036
+ "center_displacement": {
1037
+ "x": 0.0006,
1038
+ "y": 0.0001
1039
+ }
1040
+ }
1041
+ },
1042
+ {
1043
+ "frame_index": 57,
1044
+ "timestamp": 0.95,
1045
+ "metrics": {
1046
+ "direction": "stationary",
1047
+ "intensity": "high",
1048
+ "speed": "fast",
1049
+ "velocity": 0.0273,
1050
+ "acceleration": 1.1554,
1051
+ "fluidity": 0.151,
1052
+ "expansion": 0.218,
1053
+ "total_displacement": 0.0003,
1054
+ "center_displacement": {
1055
+ "x": 0.0003,
1056
+ "y": 0.0001
1057
+ }
1058
+ }
1059
+ },
1060
+ {
1061
+ "frame_index": 58,
1062
+ "timestamp": 0.9666666666666667,
1063
+ "metrics": {
1064
+ "direction": "stationary",
1065
+ "intensity": "high",
1066
+ "speed": "fast",
1067
+ "velocity": 0.0794,
1068
+ "acceleration": 4.0386,
1069
+ "fluidity": 0.107,
1070
+ "expansion": 0.22,
1071
+ "total_displacement": 0.0038,
1072
+ "center_displacement": {
1073
+ "x": -0.0001,
1074
+ "y": 0.0038
1075
+ }
1076
+ }
1077
+ },
1078
+ {
1079
+ "frame_index": 59,
1080
+ "timestamp": 0.9833333333333333,
1081
+ "metrics": {
1082
+ "direction": "stationary",
1083
+ "intensity": "high",
1084
+ "speed": "fast",
1085
+ "velocity": 0.0663,
1086
+ "acceleration": 3.06,
1087
+ "fluidity": 0.1,
1088
+ "expansion": 0.221,
1089
+ "total_displacement": 0.0021,
1090
+ "center_displacement": {
1091
+ "x": 0.0001,
1092
+ "y": 0.0021
1093
+ }
1094
+ }
1095
+ },
1096
+ {
1097
+ "frame_index": 60,
1098
+ "timestamp": 1,
1099
+ "metrics": {
1100
+ "direction": "down",
1101
+ "intensity": "high",
1102
+ "speed": "fast",
1103
+ "velocity": 0.274,
1104
+ "acceleration": 13.9959,
1105
+ "fluidity": 0.089,
1106
+ "expansion": 0.223,
1107
+ "total_displacement": 0.0154,
1108
+ "center_displacement": {
1109
+ "x": 0.0002,
1110
+ "y": 0.0154
1111
+ }
1112
+ }
1113
+ },
1114
+ {
1115
+ "frame_index": 61,
1116
+ "timestamp": 1.0166666666666666,
1117
+ "metrics": {
1118
+ "direction": "stationary",
1119
+ "intensity": "high",
1120
+ "speed": "fast",
1121
+ "velocity": 0.141,
1122
+ "acceleration": 16.9543,
1123
+ "fluidity": 0.074,
1124
+ "expansion": 0.224,
1125
+ "total_displacement": 0.0024,
1126
+ "center_displacement": {
1127
+ "x": 0.0002,
1128
+ "y": 0.0024
1129
+ }
1130
+ }
1131
+ },
1132
+ {
1133
+ "frame_index": 62,
1134
+ "timestamp": 1.0333333333333332,
1135
+ "metrics": {
1136
+ "direction": "down",
1137
+ "intensity": "high",
1138
+ "speed": "fast",
1139
+ "velocity": 0.3349,
1140
+ "acceleration": 19.2106,
1141
+ "fluidity": 0.066,
1142
+ "expansion": 0.227,
1143
+ "total_displacement": 0.0143,
1144
+ "center_displacement": {
1145
+ "x": 0.0009,
1146
+ "y": 0.0143
1147
+ }
1148
+ }
1149
+ },
1150
+ {
1151
+ "frame_index": 63,
1152
+ "timestamp": 1.05,
1153
+ "metrics": {
1154
+ "direction": "stationary",
1155
+ "intensity": "high",
1156
+ "speed": "fast",
1157
+ "velocity": 0.2284,
1158
+ "acceleration": 22.9589,
1159
+ "fluidity": 0.057,
1160
+ "expansion": 0.227,
1161
+ "total_displacement": 0.0027,
1162
+ "center_displacement": {
1163
+ "x": 0.0003,
1164
+ "y": 0.0027
1165
+ }
1166
+ }
1167
+ },
1168
+ {
1169
+ "frame_index": 64,
1170
+ "timestamp": 1.0666666666666667,
1171
+ "metrics": {
1172
+ "direction": "stationary",
1173
+ "intensity": "high",
1174
+ "speed": "fast",
1175
+ "velocity": 0.1805,
1176
+ "acceleration": 16.9712,
1177
+ "fluidity": 0.049,
1178
+ "expansion": 0.227,
1179
+ "total_displacement": 0.0003,
1180
+ "center_displacement": {
1181
+ "x": 0.0001,
1182
+ "y": 0.0003
1183
+ }
1184
+ }
1185
+ },
1186
+ {
1187
+ "frame_index": 65,
1188
+ "timestamp": 1.0833333333333333,
1189
+ "metrics": {
1190
+ "direction": "down",
1191
+ "intensity": "high",
1192
+ "speed": "fast",
1193
+ "velocity": 0.3465,
1194
+ "acceleration": 24.1562,
1195
+ "fluidity": 0.043,
1196
+ "expansion": 0.231,
1197
+ "total_displacement": 0.0107,
1198
+ "center_displacement": {
1199
+ "x": 0.0016,
1200
+ "y": 0.0106
1201
+ }
1202
+ }
1203
+ },
1204
+ {
1205
+ "frame_index": 66,
1206
+ "timestamp": 1.1,
1207
+ "metrics": {
1208
+ "direction": "stationary",
1209
+ "intensity": "high",
1210
+ "speed": "fast",
1211
+ "velocity": 0.206,
1212
+ "acceleration": 24.6307,
1213
+ "fluidity": 0.037,
1214
+ "expansion": 0.231,
1215
+ "total_displacement": 0.0011,
1216
+ "center_displacement": {
1217
+ "x": 0.001,
1218
+ "y": 0.0005
1219
+ }
1220
+ }
1221
+ },
1222
+ {
1223
+ "frame_index": 67,
1224
+ "timestamp": 1.1166666666666667,
1225
+ "metrics": {
1226
+ "direction": "stationary",
1227
+ "intensity": "high",
1228
+ "speed": "fast",
1229
+ "velocity": 0.2545,
1230
+ "acceleration": 19.6865,
1231
+ "fluidity": 0.032,
1232
+ "expansion": 0.235,
1233
+ "total_displacement": 0.0047,
1234
+ "center_displacement": {
1235
+ "x": 0.0022,
1236
+ "y": 0.0042
1237
+ }
1238
+ }
1239
+ },
1240
+ {
1241
+ "frame_index": 68,
1242
+ "timestamp": 1.1333333333333333,
1243
+ "metrics": {
1244
+ "direction": "stationary",
1245
+ "intensity": "high",
1246
+ "speed": "fast",
1247
+ "velocity": 0.2361,
1248
+ "acceleration": 19.3326,
1249
+ "fluidity": 0.028,
1250
+ "expansion": 0.237,
1251
+ "total_displacement": 0.0023,
1252
+ "center_displacement": {
1253
+ "x": 0.0014,
1254
+ "y": 0.0018
1255
+ }
1256
+ }
1257
+ },
1258
+ {
1259
+ "frame_index": 69,
1260
+ "timestamp": 1.15,
1261
+ "metrics": {
1262
+ "direction": "stationary",
1263
+ "intensity": "high",
1264
+ "speed": "fast",
1265
+ "velocity": 0.1866,
1266
+ "acceleration": 17.2203,
1267
+ "fluidity": 0.025,
1268
+ "expansion": 0.237,
1269
+ "total_displacement": 0.0008,
1270
+ "center_displacement": {
1271
+ "x": 0.0005,
1272
+ "y": 0.0007
1273
+ }
1274
+ }
1275
+ },
1276
+ {
1277
+ "frame_index": 70,
1278
+ "timestamp": 1.1666666666666667,
1279
+ "metrics": {
1280
+ "direction": "stationary",
1281
+ "intensity": "high",
1282
+ "speed": "fast",
1283
+ "velocity": 0.2468,
1284
+ "acceleration": 17.9569,
1285
+ "fluidity": 0.021,
1286
+ "expansion": 0.242,
1287
+ "total_displacement": 0.0052,
1288
+ "center_displacement": {
1289
+ "x": 0.0044,
1290
+ "y": -0.0028
1291
+ }
1292
+ }
1293
+ },
1294
+ {
1295
+ "frame_index": 71,
1296
+ "timestamp": 1.1833333333333333,
1297
+ "metrics": {
1298
+ "direction": "stationary",
1299
+ "intensity": "high",
1300
+ "speed": "fast",
1301
+ "velocity": 0.1892,
1302
+ "acceleration": 16.9628,
1303
+ "fluidity": 0.019,
1304
+ "expansion": 0.242,
1305
+ "total_displacement": 0.0015,
1306
+ "center_displacement": {
1307
+ "x": 0.0011,
1308
+ "y": -0.0009
1309
+ }
1310
+ }
1311
+ },
1312
+ {
1313
+ "frame_index": 72,
1314
+ "timestamp": 1.2,
1315
+ "metrics": {
1316
+ "direction": "up",
1317
+ "intensity": "high",
1318
+ "speed": "fast",
1319
+ "velocity": 0.3082,
1320
+ "acceleration": 20.8769,
1321
+ "fluidity": 0.016,
1322
+ "expansion": 0.248,
1323
+ "total_displacement": 0.0102,
1324
+ "center_displacement": {
1325
+ "x": 0.0062,
1326
+ "y": -0.0081
1327
+ }
1328
+ }
1329
+ },
1330
+ {
1331
+ "frame_index": 73,
1332
+ "timestamp": 1.2166666666666666,
1333
+ "metrics": {
1334
+ "direction": "stationary",
1335
+ "intensity": "high",
1336
+ "speed": "fast",
1337
+ "velocity": 0.258,
1338
+ "acceleration": 18.7894,
1339
+ "fluidity": 0.014,
1340
+ "expansion": 0.249,
1341
+ "total_displacement": 0.0048,
1342
+ "center_displacement": {
1343
+ "x": 0.0009,
1344
+ "y": -0.0047
1345
+ }
1346
+ }
1347
+ },
1348
+ {
1349
+ "frame_index": 74,
1350
+ "timestamp": 1.2333333333333334,
1351
+ "metrics": {
1352
+ "direction": "up",
1353
+ "intensity": "high",
1354
+ "speed": "fast",
1355
+ "velocity": 0.4267,
1356
+ "acceleration": 24.1119,
1357
+ "fluidity": 0.012,
1358
+ "expansion": 0.252,
1359
+ "total_displacement": 0.0159,
1360
+ "center_displacement": {
1361
+ "x": 0.0049,
1362
+ "y": -0.0151
1363
+ }
1364
+ }
1365
+ },
1366
+ {
1367
+ "frame_index": 75,
1368
+ "timestamp": 1.25,
1369
+ "metrics": {
1370
+ "direction": "up",
1371
+ "intensity": "high",
1372
+ "speed": "fast",
1373
+ "velocity": 0.3443,
1374
+ "acceleration": 24.447,
1375
+ "fluidity": 0.011,
1376
+ "expansion": 0.252,
1377
+ "total_displacement": 0.0064,
1378
+ "center_displacement": {
1379
+ "x": 0.0025,
1380
+ "y": -0.0059
1381
+ }
1382
+ }
1383
+ },
1384
+ {
1385
+ "frame_index": 76,
1386
+ "timestamp": 1.2666666666666666,
1387
+ "metrics": {
1388
+ "direction": "stationary",
1389
+ "intensity": "high",
1390
+ "speed": "fast",
1391
+ "velocity": 0.2922,
1392
+ "acceleration": 20.5096,
1393
+ "fluidity": 0.009,
1394
+ "expansion": 0.252,
1395
+ "total_displacement": 0.0023,
1396
+ "center_displacement": {
1397
+ "x": 0.0005,
1398
+ "y": -0.0023
1399
+ }
1400
+ }
1401
+ },
1402
+ {
1403
+ "frame_index": 77,
1404
+ "timestamp": 1.2833333333333332,
1405
+ "metrics": {
1406
+ "direction": "up",
1407
+ "intensity": "high",
1408
+ "speed": "fast",
1409
+ "velocity": 0.4392,
1410
+ "acceleration": 25.5796,
1411
+ "fluidity": 0.008,
1412
+ "expansion": 0.251,
1413
+ "total_displacement": 0.0116,
1414
+ "center_displacement": {
1415
+ "x": 0.0045,
1416
+ "y": -0.0107
1417
+ }
1418
+ }
1419
+ },
1420
+ {
1421
+ "frame_index": 78,
1422
+ "timestamp": 1.3,
1423
+ "metrics": {
1424
+ "direction": "stationary",
1425
+ "intensity": "high",
1426
+ "speed": "fast",
1427
+ "velocity": 0.312,
1428
+ "acceleration": 25.454,
1429
+ "fluidity": 0.007,
1430
+ "expansion": 0.252,
1431
+ "total_displacement": 0.0029,
1432
+ "center_displacement": {
1433
+ "x": 0.001,
1434
+ "y": -0.0027
1435
+ }
1436
+ }
1437
+ },
1438
+ {
1439
+ "frame_index": 79,
1440
+ "timestamp": 1.3166666666666667,
1441
+ "metrics": {
1442
+ "direction": "right",
1443
+ "intensity": "high",
1444
+ "speed": "fast",
1445
+ "velocity": 0.374,
1446
+ "acceleration": 22.0903,
1447
+ "fluidity": 0.006,
1448
+ "expansion": 0.25,
1449
+ "total_displacement": 0.0075,
1450
+ "center_displacement": {
1451
+ "x": 0.0059,
1452
+ "y": -0.0048
1453
+ }
1454
+ }
1455
+ },
1456
+ {
1457
+ "frame_index": 80,
1458
+ "timestamp": 1.3333333333333333,
1459
+ "metrics": {
1460
+ "direction": "stationary",
1461
+ "intensity": "high",
1462
+ "speed": "fast",
1463
+ "velocity": 0.3019,
1464
+ "acceleration": 23.8408,
1465
+ "fluidity": 0.005,
1466
+ "expansion": 0.25,
1467
+ "total_displacement": 0.0014,
1468
+ "center_displacement": {
1469
+ "x": 0.0013,
1470
+ "y": -0.0004
1471
+ }
1472
+ }
1473
+ },
1474
+ {
1475
+ "frame_index": 81,
1476
+ "timestamp": 1.35,
1477
+ "metrics": {
1478
+ "direction": "stationary",
1479
+ "intensity": "high",
1480
+ "speed": "fast",
1481
+ "velocity": 0.2638,
1482
+ "acceleration": 18.0714,
1483
+ "fluidity": 0.005,
1484
+ "expansion": 0.248,
1485
+ "total_displacement": 0.0011,
1486
+ "center_displacement": {
1487
+ "x": 0,
1488
+ "y": -0.0011
1489
+ }
1490
+ }
1491
+ },
1492
+ {
1493
+ "frame_index": 82,
1494
+ "timestamp": 1.3666666666666667,
1495
+ "metrics": {
1496
+ "direction": "stationary",
1497
+ "intensity": "high",
1498
+ "speed": "fast",
1499
+ "velocity": 0.3077,
1500
+ "acceleration": 19.3583,
1501
+ "fluidity": 0.004,
1502
+ "expansion": 0.246,
1503
+ "total_displacement": 0.0048,
1504
+ "center_displacement": {
1505
+ "x": 0.0047,
1506
+ "y": -0.0013
1507
+ }
1508
+ }
1509
+ },
1510
+ {
1511
+ "frame_index": 83,
1512
+ "timestamp": 1.3833333333333333,
1513
+ "metrics": {
1514
+ "direction": "stationary",
1515
+ "intensity": "high",
1516
+ "speed": "fast",
1517
+ "velocity": 0.2445,
1518
+ "acceleration": 18.1099,
1519
+ "fluidity": 0.003,
1520
+ "expansion": 0.246,
1521
+ "total_displacement": 0.0017,
1522
+ "center_displacement": {
1523
+ "x": 0.0014,
1524
+ "y": -0.0011
1525
+ }
1526
+ }
1527
+ },
1528
+ {
1529
+ "frame_index": 84,
1530
+ "timestamp": 1.4,
1531
+ "metrics": {
1532
+ "direction": "right",
1533
+ "intensity": "high",
1534
+ "speed": "fast",
1535
+ "velocity": 0.2896,
1536
+ "acceleration": 17.4501,
1537
+ "fluidity": 0.003,
1538
+ "expansion": 0.245,
1539
+ "total_displacement": 0.0057,
1540
+ "center_displacement": {
1541
+ "x": 0.0057,
1542
+ "y": -0.0007
1543
+ }
1544
+ }
1545
+ },
1546
+ {
1547
+ "frame_index": 85,
1548
+ "timestamp": 1.4166666666666667,
1549
+ "metrics": {
1550
+ "direction": "stationary",
1551
+ "intensity": "high",
1552
+ "speed": "fast",
1553
+ "velocity": 0.2406,
1554
+ "acceleration": 17.0553,
1555
+ "fluidity": 0.003,
1556
+ "expansion": 0.245,
1557
+ "total_displacement": 0.002,
1558
+ "center_displacement": {
1559
+ "x": 0.002,
1560
+ "y": 0.0004
1561
+ }
1562
+ }
1563
+ },
1564
+ {
1565
+ "frame_index": 86,
1566
+ "timestamp": 1.4333333333333333,
1567
+ "metrics": {
1568
+ "direction": "stationary",
1569
+ "intensity": "high",
1570
+ "speed": "fast",
1571
+ "velocity": 0.2684,
1572
+ "acceleration": 15.824,
1573
+ "fluidity": 0.002,
1574
+ "expansion": 0.244,
1575
+ "total_displacement": 0.005,
1576
+ "center_displacement": {
1577
+ "x": 0.005,
1578
+ "y": 0.0005
1579
+ }
1580
+ }
1581
+ },
1582
+ {
1583
+ "frame_index": 87,
1584
+ "timestamp": 1.45,
1585
+ "metrics": {
1586
+ "direction": "stationary",
1587
+ "intensity": "high",
1588
+ "speed": "fast",
1589
+ "velocity": 0.22,
1590
+ "acceleration": 15.8399,
1591
+ "fluidity": 0.002,
1592
+ "expansion": 0.245,
1593
+ "total_displacement": 0.0014,
1594
+ "center_displacement": {
1595
+ "x": 0.0013,
1596
+ "y": 0.0004
1597
+ }
1598
+ }
1599
+ },
1600
+ {
1601
+ "frame_index": 88,
1602
+ "timestamp": 1.4666666666666666,
1603
+ "metrics": {
1604
+ "direction": "stationary",
1605
+ "intensity": "high",
1606
+ "speed": "fast",
1607
+ "velocity": 0.1953,
1608
+ "acceleration": 12.62,
1609
+ "fluidity": 0.002,
1610
+ "expansion": 0.245,
1611
+ "total_displacement": 0.0009,
1612
+ "center_displacement": {
1613
+ "x": 0.0009,
1614
+ "y": 0.0001
1615
+ }
1616
+ }
1617
+ },
1618
+ {
1619
+ "frame_index": 89,
1620
+ "timestamp": 1.4833333333333334,
1621
+ "metrics": {
1622
+ "direction": "stationary",
1623
+ "intensity": "high",
1624
+ "speed": "fast",
1625
+ "velocity": 0.23,
1626
+ "acceleration": 13.8316,
1627
+ "fluidity": 0.001,
1628
+ "expansion": 0.243,
1629
+ "total_displacement": 0.0039,
1630
+ "center_displacement": {
1631
+ "x": 0.0038,
1632
+ "y": -0.0009
1633
+ }
1634
+ }
1635
+ },
1636
+ {
1637
+ "frame_index": 90,
1638
+ "timestamp": 1.5,
1639
+ "metrics": {
1640
+ "direction": "stationary",
1641
+ "intensity": "high",
1642
+ "speed": "fast",
1643
+ "velocity": 0.1693,
1644
+ "acceleration": 13.6376,
1645
+ "fluidity": 0.001,
1646
+ "expansion": 0.242,
1647
+ "total_displacement": 0.0005,
1648
+ "center_displacement": {
1649
+ "x": 0.0005,
1650
+ "y": -0.0001
1651
+ }
1652
+ }
1653
+ },
1654
+ {
1655
+ "frame_index": 91,
1656
+ "timestamp": 1.5166666666666666,
1657
+ "metrics": {
1658
+ "direction": "stationary",
1659
+ "intensity": "high",
1660
+ "speed": "fast",
1661
+ "velocity": 0.1981,
1662
+ "acceleration": 12.5103,
1663
+ "fluidity": 0.001,
1664
+ "expansion": 0.24,
1665
+ "total_displacement": 0.0033,
1666
+ "center_displacement": {
1667
+ "x": 0.0031,
1668
+ "y": -0.0012
1669
+ }
1670
+ }
1671
+ },
1672
+ {
1673
+ "frame_index": 92,
1674
+ "timestamp": 1.5333333333333332,
1675
+ "metrics": {
1676
+ "direction": "stationary",
1677
+ "intensity": "high",
1678
+ "speed": "fast",
1679
+ "velocity": 0.1657,
1680
+ "acceleration": 11.9829,
1681
+ "fluidity": 0.001,
1682
+ "expansion": 0.237,
1683
+ "total_displacement": 0.0011,
1684
+ "center_displacement": {
1685
+ "x": 0.0005,
1686
+ "y": -0.001
1687
+ }
1688
+ }
1689
+ },
1690
+ {
1691
+ "frame_index": 93,
1692
+ "timestamp": 1.55,
1693
+ "metrics": {
1694
+ "direction": "stationary",
1695
+ "intensity": "high",
1696
+ "speed": "fast",
1697
+ "velocity": 0.1546,
1698
+ "acceleration": 9.8336,
1699
+ "fluidity": 0.001,
1700
+ "expansion": 0.236,
1701
+ "total_displacement": 0.0014,
1702
+ "center_displacement": {
1703
+ "x": 0.0001,
1704
+ "y": -0.0014
1705
+ }
1706
+ }
1707
+ },
1708
+ {
1709
+ "frame_index": 94,
1710
+ "timestamp": 1.5666666666666667,
1711
+ "metrics": {
1712
+ "direction": "stationary",
1713
+ "intensity": "high",
1714
+ "speed": "fast",
1715
+ "velocity": 0.1733,
1716
+ "acceleration": 9.925,
1717
+ "fluidity": 0.001,
1718
+ "expansion": 0.236,
1719
+ "total_displacement": 0.0029,
1720
+ "center_displacement": {
1721
+ "x": 0.0027,
1722
+ "y": -0.001
1723
+ }
1724
+ }
1725
+ },
1726
+ {
1727
+ "frame_index": 95,
1728
+ "timestamp": 1.5833333333333333,
1729
+ "metrics": {
1730
+ "direction": "stationary",
1731
+ "intensity": "high",
1732
+ "speed": "fast",
1733
+ "velocity": 0.138,
1734
+ "acceleration": 9.6841,
1735
+ "fluidity": 0.001,
1736
+ "expansion": 0.236,
1737
+ "total_displacement": 0.001,
1738
+ "center_displacement": {
1739
+ "x": 0.001,
1740
+ "y": 0
1741
+ }
1742
+ }
1743
+ },
1744
+ {
1745
+ "frame_index": 96,
1746
+ "timestamp": 1.6,
1747
+ "metrics": {
1748
+ "direction": "stationary",
1749
+ "intensity": "high",
1750
+ "speed": "fast",
1751
+ "velocity": 0.1584,
1752
+ "acceleration": 8.9992,
1753
+ "fluidity": 0.001,
1754
+ "expansion": 0.238,
1755
+ "total_displacement": 0.0028,
1756
+ "center_displacement": {
1757
+ "x": 0.0028,
1758
+ "y": -0.0004
1759
+ }
1760
+ }
1761
+ },
1762
+ {
1763
+ "frame_index": 97,
1764
+ "timestamp": 1.6166666666666667,
1765
+ "metrics": {
1766
+ "direction": "stationary",
1767
+ "intensity": "high",
1768
+ "speed": "fast",
1769
+ "velocity": 0.125,
1770
+ "acceleration": 9.2114,
1771
+ "fluidity": 0,
1772
+ "expansion": 0.239,
1773
+ "total_displacement": 0.0005,
1774
+ "center_displacement": {
1775
+ "x": 0.0005,
1776
+ "y": 0
1777
+ }
1778
+ }
1779
+ },
1780
+ {
1781
+ "frame_index": 98,
1782
+ "timestamp": 1.6333333333333333,
1783
+ "metrics": {
1784
+ "direction": "stationary",
1785
+ "intensity": "high",
1786
+ "speed": "fast",
1787
+ "velocity": 0.1201,
1788
+ "acceleration": 7.4065,
1789
+ "fluidity": 0,
1790
+ "expansion": 0.243,
1791
+ "total_displacement": 0.001,
1792
+ "center_displacement": {
1793
+ "x": 0.0009,
1794
+ "y": -0.0003
1795
+ }
1796
+ }
1797
+ },
1798
+ {
1799
+ "frame_index": 99,
1800
+ "timestamp": 1.65,
1801
+ "metrics": {
1802
+ "direction": "stationary",
1803
+ "intensity": "high",
1804
+ "speed": "fast",
1805
+ "velocity": 0.1079,
1806
+ "acceleration": 6.8687,
1807
+ "fluidity": 0,
1808
+ "expansion": 0.244,
1809
+ "total_displacement": 0.0005,
1810
+ "center_displacement": {
1811
+ "x": 0.0003,
1812
+ "y": -0.0004
1813
+ }
1814
+ }
1815
+ },
1816
+ {
1817
+ "frame_index": 100,
1818
+ "timestamp": 1.6666666666666667,
1819
+ "metrics": {
1820
+ "direction": "stationary",
1821
+ "intensity": "high",
1822
+ "speed": "fast",
1823
+ "velocity": 0.0935,
1824
+ "acceleration": 5.9798,
1825
+ "fluidity": 0,
1826
+ "expansion": 0.244,
1827
+ "total_displacement": 0.0003,
1828
+ "center_displacement": {
1829
+ "x": 0.0002,
1830
+ "y": -0.0003
1831
+ }
1832
+ }
1833
+ },
1834
+ {
1835
+ "frame_index": 101,
1836
+ "timestamp": 1.6833333333333333,
1837
+ "metrics": {
1838
+ "direction": "stationary",
1839
+ "intensity": "high",
1840
+ "speed": "fast",
1841
+ "velocity": 0.0962,
1842
+ "acceleration": 5.6971,
1843
+ "fluidity": 0,
1844
+ "expansion": 0.245,
1845
+ "total_displacement": 0.0011,
1846
+ "center_displacement": {
1847
+ "x": 0.001,
1848
+ "y": -0.0003
1849
+ }
1850
+ }
1851
+ },
1852
+ {
1853
+ "frame_index": 102,
1854
+ "timestamp": 1.7,
1855
+ "metrics": {
1856
+ "direction": "stationary",
1857
+ "intensity": "high",
1858
+ "speed": "fast",
1859
+ "velocity": 0.0824,
1860
+ "acceleration": 5.1041,
1861
+ "fluidity": 0,
1862
+ "expansion": 0.245,
1863
+ "total_displacement": 0.0005,
1864
+ "center_displacement": {
1865
+ "x": 0.0004,
1866
+ "y": -0.0003
1867
+ }
1868
+ }
1869
+ },
1870
+ {
1871
+ "frame_index": 103,
1872
+ "timestamp": 1.7166666666666666,
1873
+ "metrics": {
1874
+ "direction": "stationary",
1875
+ "intensity": "high",
1876
+ "speed": "fast",
1877
+ "velocity": 0.0836,
1878
+ "acceleration": 4.649,
1879
+ "fluidity": 0,
1880
+ "expansion": 0.244,
1881
+ "total_displacement": 0.001,
1882
+ "center_displacement": {
1883
+ "x": 0.001,
1884
+ "y": 0.0002
1885
+ }
1886
+ }
1887
+ },
1888
+ {
1889
+ "frame_index": 104,
1890
+ "timestamp": 1.7333333333333334,
1891
+ "metrics": {
1892
+ "direction": "stationary",
1893
+ "intensity": "high",
1894
+ "speed": "fast",
1895
+ "velocity": 0.0755,
1896
+ "acceleration": 4.1983,
1897
+ "fluidity": 0,
1898
+ "expansion": 0.243,
1899
+ "total_displacement": 0.0007,
1900
+ "center_displacement": {
1901
+ "x": 0.0007,
1902
+ "y": 0
1903
+ }
1904
+ }
1905
+ },
1906
+ {
1907
+ "frame_index": 105,
1908
+ "timestamp": 1.75,
1909
+ "metrics": {
1910
+ "direction": "stationary",
1911
+ "intensity": "high",
1912
+ "speed": "fast",
1913
+ "velocity": 0.0641,
1914
+ "acceleration": 3.8633,
1915
+ "fluidity": 0,
1916
+ "expansion": 0.243,
1917
+ "total_displacement": 0.0002,
1918
+ "center_displacement": {
1919
+ "x": 0.0002,
1920
+ "y": 0
1921
+ }
1922
+ }
1923
+ },
1924
+ {
1925
+ "frame_index": 106,
1926
+ "timestamp": 1.7666666666666666,
1927
+ "metrics": {
1928
+ "direction": "stationary",
1929
+ "intensity": "high",
1930
+ "speed": "fast",
1931
+ "velocity": 0.0622,
1932
+ "acceleration": 3.3395,
1933
+ "fluidity": 0,
1934
+ "expansion": 0.242,
1935
+ "total_displacement": 0.0004,
1936
+ "center_displacement": {
1937
+ "x": 0.0004,
1938
+ "y": 0
1939
+ }
1940
+ }
1941
+ },
1942
+ {
1943
+ "frame_index": 107,
1944
+ "timestamp": 1.7833333333333332,
1945
+ "metrics": {
1946
+ "direction": "stationary",
1947
+ "intensity": "high",
1948
+ "speed": "slow",
1949
+ "velocity": 0.0511,
1950
+ "acceleration": 3.1939,
1951
+ "fluidity": 0,
1952
+ "expansion": 0.242,
1953
+ "total_displacement": 0,
1954
+ "center_displacement": {
1955
+ "x": 0,
1956
+ "y": 0
1957
+ }
1958
+ }
1959
+ },
1960
+ {
1961
+ "frame_index": 108,
1962
+ "timestamp": 1.8,
1963
+ "metrics": {
1964
+ "direction": "stationary",
1965
+ "intensity": "high",
1966
+ "speed": "fast",
1967
+ "velocity": 0.0471,
1968
+ "acceleration": 2.7221,
1969
+ "fluidity": 0,
1970
+ "expansion": 0.241,
1971
+ "total_displacement": 0.0002,
1972
+ "center_displacement": {
1973
+ "x": 0.0002,
1974
+ "y": -0.0001
1975
+ }
1976
+ }
1977
+ },
1978
+ {
1979
+ "frame_index": 109,
1980
+ "timestamp": 1.8166666666666667,
1981
+ "metrics": {
1982
+ "direction": "stationary",
1983
+ "intensity": "high",
1984
+ "speed": "slow",
1985
+ "velocity": 0.0422,
1986
+ "acceleration": 2.3512,
1987
+ "fluidity": 0.063,
1988
+ "expansion": 0.241,
1989
+ "total_displacement": 0.0001,
1990
+ "center_displacement": {
1991
+ "x": 0.0001,
1992
+ "y": 0
1993
+ }
1994
+ }
1995
+ },
1996
+ {
1997
+ "frame_index": 110,
1998
+ "timestamp": 1.8333333333333333,
1999
+ "metrics": {
2000
+ "direction": "stationary",
2001
+ "intensity": "high",
2002
+ "speed": "fast",
2003
+ "velocity": 0.0424,
2004
+ "acceleration": 2.3805,
2005
+ "fluidity": 0.016,
2006
+ "expansion": 0.24,
2007
+ "total_displacement": 0.0005,
2008
+ "center_displacement": {
2009
+ "x": 0.0005,
2010
+ "y": 0.0001
2011
+ }
2012
+ }
2013
+ },
2014
+ {
2015
+ "frame_index": 111,
2016
+ "timestamp": 1.8499999999999999,
2017
+ "metrics": {
2018
+ "direction": "stationary",
2019
+ "intensity": "high",
2020
+ "speed": "fast",
2021
+ "velocity": 0.037,
2022
+ "acceleration": 2.0613,
2023
+ "fluidity": 0.02,
2024
+ "expansion": 0.24,
2025
+ "total_displacement": 0.0003,
2026
+ "center_displacement": {
2027
+ "x": 0.0003,
2028
+ "y": 0.0001
2029
+ }
2030
+ }
2031
+ },
2032
+ {
2033
+ "frame_index": 112,
2034
+ "timestamp": 1.8666666666666667,
2035
+ "metrics": {
2036
+ "direction": "stationary",
2037
+ "intensity": "high",
2038
+ "speed": "slow",
2039
+ "velocity": 0.0325,
2040
+ "acceleration": 1.8143,
2041
+ "fluidity": 0.025,
2042
+ "expansion": 0.239,
2043
+ "total_displacement": 0.0001,
2044
+ "center_displacement": {
2045
+ "x": 0.0001,
2046
+ "y": 0
2047
+ }
2048
+ }
2049
+ },
2050
+ {
2051
+ "frame_index": 113,
2052
+ "timestamp": 1.8833333333333333,
2053
+ "metrics": {
2054
+ "direction": "stationary",
2055
+ "intensity": "high",
2056
+ "speed": "fast",
2057
+ "velocity": 0.0341,
2058
+ "acceleration": 1.8024,
2059
+ "fluidity": 0.015,
2060
+ "expansion": 0.239,
2061
+ "total_displacement": 0.0004,
2062
+ "center_displacement": {
2063
+ "x": 0.0003,
2064
+ "y": 0.0002
2065
+ }
2066
+ }
2067
+ },
2068
+ {
2069
+ "frame_index": 114,
2070
+ "timestamp": 1.9,
2071
+ "metrics": {
2072
+ "direction": "stationary",
2073
+ "intensity": "high",
2074
+ "speed": "fast",
2075
+ "velocity": 0.0295,
2076
+ "acceleration": 1.5649,
2077
+ "fluidity": 0.015,
2078
+ "expansion": 0.239,
2079
+ "total_displacement": 0.0002,
2080
+ "center_displacement": {
2081
+ "x": 0.0002,
2082
+ "y": 0.0002
2083
+ }
2084
+ }
2085
+ },
2086
+ {
2087
+ "frame_index": 115,
2088
+ "timestamp": 1.9166666666666667,
2089
+ "metrics": {
2090
+ "direction": "stationary",
2091
+ "intensity": "high",
2092
+ "speed": "slow",
2093
+ "velocity": 0.0265,
2094
+ "acceleration": 1.3648,
2095
+ "fluidity": 0.014,
2096
+ "expansion": 0.239,
2097
+ "total_displacement": 0.0002,
2098
+ "center_displacement": {
2099
+ "x": 0.0001,
2100
+ "y": 0.0001
2101
+ }
2102
+ }
2103
+ },
2104
+ {
2105
+ "frame_index": 116,
2106
+ "timestamp": 1.9333333333333333,
2107
+ "metrics": {
2108
+ "direction": "stationary",
2109
+ "intensity": "high",
2110
+ "speed": "slow",
2111
+ "velocity": 0.0239,
2112
+ "acceleration": 1.2534,
2113
+ "fluidity": 0.011,
2114
+ "expansion": 0.239,
2115
+ "total_displacement": 0.0001,
2116
+ "center_displacement": {
2117
+ "x": 0,
2118
+ "y": 0.0001
2119
+ }
2120
+ }
2121
+ },
2122
+ {
2123
+ "frame_index": 117,
2124
+ "timestamp": 1.95,
2125
+ "metrics": {
2126
+ "direction": "stationary",
2127
+ "intensity": "low",
2128
+ "speed": "slow",
2129
+ "velocity": 0.0214,
2130
+ "acceleration": 1.0506,
2131
+ "fluidity": 0.236,
2132
+ "expansion": 0.239,
2133
+ "total_displacement": 0.0001,
2134
+ "center_displacement": {
2135
+ "x": 0,
2136
+ "y": 0.0001
2137
+ }
2138
+ }
2139
+ },
2140
+ {
2141
+ "frame_index": 118,
2142
+ "timestamp": 1.9666666666666666,
2143
+ "metrics": {
2144
+ "direction": "stationary",
2145
+ "intensity": "high",
2146
+ "speed": "fast",
2147
+ "velocity": 0.0214,
2148
+ "acceleration": 1.0392,
2149
+ "fluidity": 0.065,
2150
+ "expansion": 0.239,
2151
+ "total_displacement": 0.0002,
2152
+ "center_displacement": {
2153
+ "x": 0.0002,
2154
+ "y": 0.0001
2155
+ }
2156
+ }
2157
+ },
2158
+ {
2159
+ "frame_index": 119,
2160
+ "timestamp": 1.9833333333333334,
2161
+ "metrics": {
2162
+ "direction": "stationary",
2163
+ "intensity": "high",
2164
+ "speed": "slow",
2165
+ "velocity": 0.0182,
2166
+ "acceleration": 0.9469,
2167
+ "fluidity": 0.078,
2168
+ "expansion": 0.239,
2169
+ "total_displacement": 0.0001,
2170
+ "center_displacement": {
2171
+ "x": 0.0001,
2172
+ "y": 0
2173
+ }
2174
+ }
2175
+ },
2176
+ {
2177
+ "frame_index": 120,
2178
+ "timestamp": 2,
2179
+ "metrics": {
2180
+ "direction": "stationary",
2181
+ "intensity": "high",
2182
+ "speed": "fast",
2183
+ "velocity": 0.0189,
2184
+ "acceleration": 0.8829,
2185
+ "fluidity": 0.095,
2186
+ "expansion": 0.239,
2187
+ "total_displacement": 0.0002,
2188
+ "center_displacement": {
2189
+ "x": 0,
2190
+ "y": -0.0002
2191
+ }
2192
+ }
2193
+ },
2194
+ {
2195
+ "frame_index": 121,
2196
+ "timestamp": 2.0166666666666666,
2197
+ "metrics": {
2198
+ "direction": "stationary",
2199
+ "intensity": "high",
2200
+ "speed": "fast",
2201
+ "velocity": 0.0177,
2202
+ "acceleration": 0.7531,
2203
+ "fluidity": 0.13,
2204
+ "expansion": 0.239,
2205
+ "total_displacement": 0.0002,
2206
+ "center_displacement": {
2207
+ "x": 0.0001,
2208
+ "y": -0.0002
2209
+ }
2210
+ }
2211
+ },
2212
+ {
2213
+ "frame_index": 122,
2214
+ "timestamp": 2.033333333333333,
2215
+ "metrics": {
2216
+ "direction": "stationary",
2217
+ "intensity": "high",
2218
+ "speed": "fast",
2219
+ "velocity": 0.0176,
2220
+ "acceleration": 0.6967,
2221
+ "fluidity": 0.076,
2222
+ "expansion": 0.238,
2223
+ "total_displacement": 0.0003,
2224
+ "center_displacement": {
2225
+ "x": 0,
2226
+ "y": 0.0003
2227
+ }
2228
+ }
2229
+ },
2230
+ {
2231
+ "frame_index": 123,
2232
+ "timestamp": 2.05,
2233
+ "metrics": {
2234
+ "direction": "stationary",
2235
+ "intensity": "high",
2236
+ "speed": "slow",
2237
+ "velocity": 0.0157,
2238
+ "acceleration": 0.6898,
2239
+ "fluidity": 0.075,
2240
+ "expansion": 0.238,
2241
+ "total_displacement": 0.0001,
2242
+ "center_displacement": {
2243
+ "x": 0,
2244
+ "y": 0.0001
2245
+ }
2246
+ }
2247
+ },
2248
+ {
2249
+ "frame_index": 124,
2250
+ "timestamp": 2.0666666666666664,
2251
+ "metrics": {
2252
+ "direction": "stationary",
2253
+ "intensity": "high",
2254
+ "speed": "slow",
2255
+ "velocity": 0.0142,
2256
+ "acceleration": 0.5736,
2257
+ "fluidity": 0.127,
2258
+ "expansion": 0.238,
2259
+ "total_displacement": 0.0001,
2260
+ "center_displacement": {
2261
+ "x": 0,
2262
+ "y": 0.0001
2263
+ }
2264
+ }
2265
+ },
2266
+ {
2267
+ "frame_index": 125,
2268
+ "timestamp": 2.0833333333333335,
2269
+ "metrics": {
2270
+ "direction": "stationary",
2271
+ "intensity": "high",
2272
+ "speed": "fast",
2273
+ "velocity": 0.0189,
2274
+ "acceleration": 0.8216,
2275
+ "fluidity": 0.07,
2276
+ "expansion": 0.238,
2277
+ "total_displacement": 0.0005,
2278
+ "center_displacement": {
2279
+ "x": -0.0003,
2280
+ "y": 0.0004
2281
+ }
2282
+ }
2283
+ },
2284
+ {
2285
+ "frame_index": 126,
2286
+ "timestamp": 2.1,
2287
+ "metrics": {
2288
+ "direction": "stationary",
2289
+ "intensity": "high",
2290
+ "speed": "fast",
2291
+ "velocity": 0.017,
2292
+ "acceleration": 0.6557,
2293
+ "fluidity": 0.068,
2294
+ "expansion": 0.238,
2295
+ "total_displacement": 0.0003,
2296
+ "center_displacement": {
2297
+ "x": -0.0001,
2298
+ "y": 0.0003
2299
+ }
2300
+ }
2301
+ },
2302
+ {
2303
+ "frame_index": 127,
2304
+ "timestamp": 2.1166666666666667,
2305
+ "metrics": {
2306
+ "direction": "stationary",
2307
+ "intensity": "high",
2308
+ "speed": "fast",
2309
+ "velocity": 0.0224,
2310
+ "acceleration": 0.8202,
2311
+ "fluidity": 0.066,
2312
+ "expansion": 0.238,
2313
+ "total_displacement": 0.0007,
2314
+ "center_displacement": {
2315
+ "x": -0.0003,
2316
+ "y": 0.0006
2317
+ }
2318
+ }
2319
+ },
2320
+ {
2321
+ "frame_index": 128,
2322
+ "timestamp": 2.1333333333333333,
2323
+ "metrics": {
2324
+ "direction": "stationary",
2325
+ "intensity": "high",
2326
+ "speed": "fast",
2327
+ "velocity": 0.0225,
2328
+ "acceleration": 0.6904,
2329
+ "fluidity": 0.051,
2330
+ "expansion": 0.238,
2331
+ "total_displacement": 0.0005,
2332
+ "center_displacement": {
2333
+ "x": -0.0001,
2334
+ "y": 0.0005
2335
+ }
2336
+ }
2337
+ },
2338
+ {
2339
+ "frame_index": 129,
2340
+ "timestamp": 2.15,
2341
+ "metrics": {
2342
+ "direction": "stationary",
2343
+ "intensity": "high",
2344
+ "speed": "fast",
2345
+ "velocity": 0.0205,
2346
+ "acceleration": 0.7196,
2347
+ "fluidity": 0.046,
2348
+ "expansion": 0.238,
2349
+ "total_displacement": 0.0003,
2350
+ "center_displacement": {
2351
+ "x": -0.0001,
2352
+ "y": 0.0003
2353
+ }
2354
+ }
2355
+ },
2356
+ {
2357
+ "frame_index": 130,
2358
+ "timestamp": 2.1666666666666665,
2359
+ "metrics": {
2360
+ "direction": "stationary",
2361
+ "intensity": "high",
2362
+ "speed": "slow",
2363
+ "velocity": 0.0175,
2364
+ "acceleration": 0.7882,
2365
+ "fluidity": 0.041,
2366
+ "expansion": 0.237,
2367
+ "total_displacement": 0.0001,
2368
+ "center_displacement": {
2369
+ "x": -0.0001,
2370
+ "y": 0
2371
+ }
2372
+ }
2373
+ },
2374
+ {
2375
+ "frame_index": 131,
2376
+ "timestamp": 2.183333333333333,
2377
+ "metrics": {
2378
+ "direction": "stationary",
2379
+ "intensity": "medium",
2380
+ "speed": "slow",
2381
+ "velocity": 0.016,
2382
+ "acceleration": 0.5634,
2383
+ "fluidity": 0.215,
2384
+ "expansion": 0.236,
2385
+ "total_displacement": 0.0001,
2386
+ "center_displacement": {
2387
+ "x": 0,
2388
+ "y": 0
2389
+ }
2390
+ }
2391
+ },
2392
+ {
2393
+ "frame_index": 132,
2394
+ "timestamp": 2.2,
2395
+ "metrics": {
2396
+ "direction": "stationary",
2397
+ "intensity": "high",
2398
+ "speed": "fast",
2399
+ "velocity": 0.0173,
2400
+ "acceleration": 0.689,
2401
+ "fluidity": 0.076,
2402
+ "expansion": 0.234,
2403
+ "total_displacement": 0.0003,
2404
+ "center_displacement": {
2405
+ "x": 0,
2406
+ "y": -0.0002
2407
+ }
2408
+ }
2409
+ },
2410
+ {
2411
+ "frame_index": 133,
2412
+ "timestamp": 2.216666666666667,
2413
+ "metrics": {
2414
+ "direction": "stationary",
2415
+ "intensity": "high",
2416
+ "speed": "slow",
2417
+ "velocity": 0.0143,
2418
+ "acceleration": 0.6405,
2419
+ "fluidity": 0.083,
2420
+ "expansion": 0.234,
2421
+ "total_displacement": 0.0001,
2422
+ "center_displacement": {
2423
+ "x": 0,
2424
+ "y": -0.0001
2425
+ }
2426
+ }
2427
+ },
2428
+ {
2429
+ "frame_index": 134,
2430
+ "timestamp": 2.2333333333333334,
2431
+ "metrics": {
2432
+ "direction": "stationary",
2433
+ "intensity": "high",
2434
+ "speed": "fast",
2435
+ "velocity": 0.0686,
2436
+ "acceleration": 3.7773,
2437
+ "fluidity": 0.093,
2438
+ "expansion": 0.23,
2439
+ "total_displacement": 0.0038,
2440
+ "center_displacement": {
2441
+ "x": 0,
2442
+ "y": 0.0038
2443
+ }
2444
+ }
2445
+ },
2446
+ {
2447
+ "frame_index": 135,
2448
+ "timestamp": 2.25,
2449
+ "metrics": {
2450
+ "direction": "stationary",
2451
+ "intensity": "high",
2452
+ "speed": "fast",
2453
+ "velocity": 0.0536,
2454
+ "acceleration": 2.9603,
2455
+ "fluidity": 0.063,
2456
+ "expansion": 0.229,
2457
+ "total_displacement": 0.0019,
2458
+ "center_displacement": {
2459
+ "x": -0.0001,
2460
+ "y": 0.0019
2461
+ }
2462
+ }
2463
+ },
2464
+ {
2465
+ "frame_index": 136,
2466
+ "timestamp": 2.2666666666666666,
2467
+ "metrics": {
2468
+ "direction": "stationary",
2469
+ "intensity": "high",
2470
+ "speed": "fast",
2471
+ "velocity": 0.0569,
2472
+ "acceleration": 2.1957,
2473
+ "fluidity": 0.06,
2474
+ "expansion": 0.229,
2475
+ "total_displacement": 0.0015,
2476
+ "center_displacement": {
2477
+ "x": 0,
2478
+ "y": 0.0015
2479
+ }
2480
+ }
2481
+ },
2482
+ {
2483
+ "frame_index": 137,
2484
+ "timestamp": 2.283333333333333,
2485
+ "metrics": {
2486
+ "direction": "down",
2487
+ "intensity": "high",
2488
+ "speed": "fast",
2489
+ "velocity": 0.2019,
2490
+ "acceleration": 10.2968,
2491
+ "fluidity": 0.054,
2492
+ "expansion": 0.227,
2493
+ "total_displacement": 0.0105,
2494
+ "center_displacement": {
2495
+ "x": -0.0003,
2496
+ "y": 0.0105
2497
+ }
2498
+ }
2499
+ },
2500
+ {
2501
+ "frame_index": 138,
2502
+ "timestamp": 2.3,
2503
+ "metrics": {
2504
+ "direction": "stationary",
2505
+ "intensity": "high",
2506
+ "speed": "fast",
2507
+ "velocity": 0.1156,
2508
+ "acceleration": 11.0428,
2509
+ "fluidity": 0.044,
2510
+ "expansion": 0.226,
2511
+ "total_displacement": 0.0025,
2512
+ "center_displacement": {
2513
+ "x": -0.0002,
2514
+ "y": 0.0025
2515
+ }
2516
+ }
2517
+ },
2518
+ {
2519
+ "frame_index": 139,
2520
+ "timestamp": 2.3166666666666664,
2521
+ "metrics": {
2522
+ "direction": "down",
2523
+ "intensity": "high",
2524
+ "speed": "fast",
2525
+ "velocity": 0.2797,
2526
+ "acceleration": 14.8018,
2527
+ "fluidity": 0.04,
2528
+ "expansion": 0.221,
2529
+ "total_displacement": 0.0124,
2530
+ "center_displacement": {
2531
+ "x": -0.0003,
2532
+ "y": 0.0124
2533
+ }
2534
+ }
2535
+ },
2536
+ {
2537
+ "frame_index": 140,
2538
+ "timestamp": 2.3333333333333335,
2539
+ "metrics": {
2540
+ "direction": "stationary",
2541
+ "intensity": "high",
2542
+ "speed": "fast",
2543
+ "velocity": 0.2214,
2544
+ "acceleration": 15.8765,
2545
+ "fluidity": 0.034,
2546
+ "expansion": 0.221,
2547
+ "total_displacement": 0.0048,
2548
+ "center_displacement": {
2549
+ "x": 0,
2550
+ "y": 0.0048
2551
+ }
2552
+ }
2553
+ },
2554
+ {
2555
+ "frame_index": 141,
2556
+ "timestamp": 2.35,
2557
+ "metrics": {
2558
+ "direction": "stationary",
2559
+ "intensity": "high",
2560
+ "speed": "slow",
2561
+ "velocity": 0.1555,
2562
+ "acceleration": 14.678,
2563
+ "fluidity": 0.03,
2564
+ "expansion": 0.22,
2565
+ "total_displacement": 0.0001,
2566
+ "center_displacement": {
2567
+ "x": 0,
2568
+ "y": -0.0001
2569
+ }
2570
+ }
2571
+ },
2572
+ {
2573
+ "frame_index": 142,
2574
+ "timestamp": 2.3666666666666667,
2575
+ "metrics": {
2576
+ "direction": "down",
2577
+ "intensity": "high",
2578
+ "speed": "fast",
2579
+ "velocity": 0.3565,
2580
+ "acceleration": 22.8035,
2581
+ "fluidity": 0.026,
2582
+ "expansion": 0.218,
2583
+ "total_displacement": 0.0128,
2584
+ "center_displacement": {
2585
+ "x": 0,
2586
+ "y": 0.0128
2587
+ }
2588
+ }
2589
+ },
2590
+ {
2591
+ "frame_index": 143,
2592
+ "timestamp": 2.3833333333333333,
2593
+ "metrics": {
2594
+ "direction": "stationary",
2595
+ "intensity": "high",
2596
+ "speed": "fast",
2597
+ "velocity": 0.2303,
2598
+ "acceleration": 22.0639,
2599
+ "fluidity": 0.022,
2600
+ "expansion": 0.218,
2601
+ "total_displacement": 0.0031,
2602
+ "center_displacement": {
2603
+ "x": 0.0001,
2604
+ "y": 0.0031
2605
+ }
2606
+ }
2607
+ },
2608
+ {
2609
+ "frame_index": 144,
2610
+ "timestamp": 2.4,
2611
+ "metrics": {
2612
+ "direction": "down",
2613
+ "intensity": "high",
2614
+ "speed": "fast",
2615
+ "velocity": 0.3683,
2616
+ "acceleration": 23.0341,
2617
+ "fluidity": 0.019,
2618
+ "expansion": 0.214,
2619
+ "total_displacement": 0.0122,
2620
+ "center_displacement": {
2621
+ "x": 0.0008,
2622
+ "y": 0.0122
2623
+ }
2624
+ }
2625
+ },
2626
+ {
2627
+ "frame_index": 145,
2628
+ "timestamp": 2.4166666666666665,
2629
+ "metrics": {
2630
+ "direction": "stationary",
2631
+ "intensity": "high",
2632
+ "speed": "fast",
2633
+ "velocity": 0.2725,
2634
+ "acceleration": 25.916,
2635
+ "fluidity": 0.017,
2636
+ "expansion": 0.214,
2637
+ "total_displacement": 0.0023,
2638
+ "center_displacement": {
2639
+ "x": 0.0001,
2640
+ "y": 0.0022
2641
+ }
2642
+ }
2643
+ },
2644
+ {
2645
+ "frame_index": 146,
2646
+ "timestamp": 2.433333333333333,
2647
+ "metrics": {
2648
+ "direction": "stationary",
2649
+ "intensity": "high",
2650
+ "speed": "fast",
2651
+ "velocity": 0.2323,
2652
+ "acceleration": 18.9078,
2653
+ "fluidity": 0.015,
2654
+ "expansion": 0.213,
2655
+ "total_displacement": 0.001,
2656
+ "center_displacement": {
2657
+ "x": 0.0009,
2658
+ "y": -0.0003
2659
+ }
2660
+ }
2661
+ },
2662
+ {
2663
+ "frame_index": 147,
2664
+ "timestamp": 2.45,
2665
+ "metrics": {
2666
+ "direction": "stationary",
2667
+ "intensity": "high",
2668
+ "speed": "fast",
2669
+ "velocity": 0.2271,
2670
+ "acceleration": 17.3051,
2671
+ "fluidity": 0.013,
2672
+ "expansion": 0.213,
2673
+ "total_displacement": 0.0006,
2674
+ "center_displacement": {
2675
+ "x": 0.0005,
2676
+ "y": 0.0004
2677
+ }
2678
+ }
2679
+ },
2680
+ {
2681
+ "frame_index": 148,
2682
+ "timestamp": 2.466666666666667,
2683
+ "metrics": {
2684
+ "direction": "stationary",
2685
+ "intensity": "high",
2686
+ "speed": "fast",
2687
+ "velocity": 0.1935,
2688
+ "acceleration": 15.6304,
2689
+ "fluidity": 0.011,
2690
+ "expansion": 0.213,
2691
+ "total_displacement": 0.0007,
2692
+ "center_displacement": {
2693
+ "x": 0.0006,
2694
+ "y": -0.0003
2695
+ }
2696
+ }
2697
+ },
2698
+ {
2699
+ "frame_index": 149,
2700
+ "timestamp": 2.4833333333333334,
2701
+ "metrics": {
2702
+ "direction": "stationary",
2703
+ "intensity": "high",
2704
+ "speed": "fast",
2705
+ "velocity": 0.2306,
2706
+ "acceleration": 16.3765,
2707
+ "fluidity": 0.01,
2708
+ "expansion": 0.212,
2709
+ "total_displacement": 0.0045,
2710
+ "center_displacement": {
2711
+ "x": 0.0031,
2712
+ "y": -0.0033
2713
+ }
2714
+ }
2715
+ },
2716
+ {
2717
+ "frame_index": 150,
2718
+ "timestamp": 2.5,
2719
+ "metrics": {
2720
+ "direction": "stationary",
2721
+ "intensity": "high",
2722
+ "speed": "fast",
2723
+ "velocity": 0.2042,
2724
+ "acceleration": 13.8859,
2725
+ "fluidity": 0.008,
2726
+ "expansion": 0.211,
2727
+ "total_displacement": 0.0028,
2728
+ "center_displacement": {
2729
+ "x": 0.0009,
2730
+ "y": -0.0026
2731
+ }
2732
+ }
2733
+ },
2734
+ {
2735
+ "frame_index": 151,
2736
+ "timestamp": 2.5166666666666666,
2737
+ "metrics": {
2738
+ "direction": "up",
2739
+ "intensity": "high",
2740
+ "speed": "fast",
2741
+ "velocity": 0.3447,
2742
+ "acceleration": 20.2457,
2743
+ "fluidity": 0.007,
2744
+ "expansion": 0.21,
2745
+ "total_displacement": 0.0125,
2746
+ "center_displacement": {
2747
+ "x": 0.003,
2748
+ "y": -0.0121
2749
+ }
2750
+ }
2751
+ },
2752
+ {
2753
+ "frame_index": 152,
2754
+ "timestamp": 2.533333333333333,
2755
+ "metrics": {
2756
+ "direction": "stationary",
2757
+ "intensity": "high",
2758
+ "speed": "fast",
2759
+ "velocity": 0.2624,
2760
+ "acceleration": 19.8363,
2761
+ "fluidity": 0.006,
2762
+ "expansion": 0.21,
2763
+ "total_displacement": 0.0045,
2764
+ "center_displacement": {
2765
+ "x": 0.0011,
2766
+ "y": -0.0044
2767
+ }
2768
+ }
2769
+ },
2770
+ {
2771
+ "frame_index": 153,
2772
+ "timestamp": 2.55,
2773
+ "metrics": {
2774
+ "direction": "stationary",
2775
+ "intensity": "high",
2776
+ "speed": "fast",
2777
+ "velocity": 0.2262,
2778
+ "acceleration": 16.141,
2779
+ "fluidity": 0.006,
2780
+ "expansion": 0.211,
2781
+ "total_displacement": 0.0016,
2782
+ "center_displacement": {
2783
+ "x": 0.0007,
2784
+ "y": -0.0014
2785
+ }
2786
+ }
2787
+ },
2788
+ {
2789
+ "frame_index": 154,
2790
+ "timestamp": 2.5666666666666664,
2791
+ "metrics": {
2792
+ "direction": "up",
2793
+ "intensity": "high",
2794
+ "speed": "fast",
2795
+ "velocity": 0.4216,
2796
+ "acceleration": 25.4549,
2797
+ "fluidity": 0.005,
2798
+ "expansion": 0.206,
2799
+ "total_displacement": 0.0142,
2800
+ "center_displacement": {
2801
+ "x": 0.0032,
2802
+ "y": -0.0139
2803
+ }
2804
+ }
2805
+ },
2806
+ {
2807
+ "frame_index": 155,
2808
+ "timestamp": 2.5833333333333335,
2809
+ "metrics": {
2810
+ "direction": "stationary",
2811
+ "intensity": "high",
2812
+ "speed": "fast",
2813
+ "velocity": 0.2673,
2814
+ "acceleration": 25.7738,
2815
+ "fluidity": 0.004,
2816
+ "expansion": 0.206,
2817
+ "total_displacement": 0.0026,
2818
+ "center_displacement": {
2819
+ "x": 0.0011,
2820
+ "y": -0.0024
2821
+ }
2822
+ }
2823
+ },
2824
+ {
2825
+ "frame_index": 156,
2826
+ "timestamp": 2.6,
2827
+ "metrics": {
2828
+ "direction": "up",
2829
+ "intensity": "high",
2830
+ "speed": "fast",
2831
+ "velocity": 0.3323,
2832
+ "acceleration": 20.6687,
2833
+ "fluidity": 0.004,
2834
+ "expansion": 0.201,
2835
+ "total_displacement": 0.0069,
2836
+ "center_displacement": {
2837
+ "x": 0.0023,
2838
+ "y": -0.0065
2839
+ }
2840
+ }
2841
+ },
2842
+ {
2843
+ "frame_index": 157,
2844
+ "timestamp": 2.6166666666666667,
2845
+ "metrics": {
2846
+ "direction": "stationary",
2847
+ "intensity": "high",
2848
+ "speed": "fast",
2849
+ "velocity": 0.3073,
2850
+ "acceleration": 21.0621,
2851
+ "fluidity": 0.003,
2852
+ "expansion": 0.2,
2853
+ "total_displacement": 0.0035,
2854
+ "center_displacement": {
2855
+ "x": 0.001,
2856
+ "y": -0.0033
2857
+ }
2858
+ }
2859
+ },
2860
+ {
2861
+ "frame_index": 158,
2862
+ "timestamp": 2.6333333333333333,
2863
+ "metrics": {
2864
+ "direction": "stationary",
2865
+ "intensity": "high",
2866
+ "speed": "fast",
2867
+ "velocity": 0.2991,
2868
+ "acceleration": 18.0948,
2869
+ "fluidity": 0.003,
2870
+ "expansion": 0.195,
2871
+ "total_displacement": 0.0048,
2872
+ "center_displacement": {
2873
+ "x": 0.0034,
2874
+ "y": -0.0034
2875
+ }
2876
+ }
2877
+ },
2878
+ {
2879
+ "frame_index": 159,
2880
+ "timestamp": 2.65,
2881
+ "metrics": {
2882
+ "direction": "stationary",
2883
+ "intensity": "high",
2884
+ "speed": "fast",
2885
+ "velocity": 0.2577,
2886
+ "acceleration": 17.9181,
2887
+ "fluidity": 0.002,
2888
+ "expansion": 0.194,
2889
+ "total_displacement": 0.0015,
2890
+ "center_displacement": {
2891
+ "x": 0.0007,
2892
+ "y": -0.0014
2893
+ }
2894
+ }
2895
+ },
2896
+ {
2897
+ "frame_index": 160,
2898
+ "timestamp": 2.6666666666666665,
2899
+ "metrics": {
2900
+ "direction": "stationary",
2901
+ "intensity": "high",
2902
+ "speed": "fast",
2903
+ "velocity": 0.2337,
2904
+ "acceleration": 14.5879,
2905
+ "fluidity": 0.002,
2906
+ "expansion": 0.194,
2907
+ "total_displacement": 0.0012,
2908
+ "center_displacement": {
2909
+ "x": 0.0005,
2910
+ "y": -0.0011
2911
+ }
2912
+ }
2913
+ },
2914
+ {
2915
+ "frame_index": 161,
2916
+ "timestamp": 2.683333333333333,
2917
+ "metrics": {
2918
+ "direction": "stationary",
2919
+ "intensity": "high",
2920
+ "speed": "fast",
2921
+ "velocity": 0.2467,
2922
+ "acceleration": 14.5353,
2923
+ "fluidity": 0.002,
2924
+ "expansion": 0.191,
2925
+ "total_displacement": 0.0033,
2926
+ "center_displacement": {
2927
+ "x": 0.0031,
2928
+ "y": -0.0009
2929
+ }
2930
+ }
2931
+ },
2932
+ {
2933
+ "frame_index": 162,
2934
+ "timestamp": 2.7,
2935
+ "metrics": {
2936
+ "direction": "stationary",
2937
+ "intensity": "high",
2938
+ "speed": "fast",
2939
+ "velocity": 0.2213,
2940
+ "acceleration": 12.4955,
2941
+ "fluidity": 0.002,
2942
+ "expansion": 0.191,
2943
+ "total_displacement": 0.0025,
2944
+ "center_displacement": {
2945
+ "x": 0.0011,
2946
+ "y": -0.0022
2947
+ }
2948
+ }
2949
+ },
2950
+ {
2951
+ "frame_index": 163,
2952
+ "timestamp": 2.716666666666667,
2953
+ "metrics": {
2954
+ "direction": "stationary",
2955
+ "intensity": "high",
2956
+ "speed": "fast",
2957
+ "velocity": 0.2164,
2958
+ "acceleration": 10.6537,
2959
+ "fluidity": 0.001,
2960
+ "expansion": 0.187,
2961
+ "total_displacement": 0.0027,
2962
+ "center_displacement": {
2963
+ "x": 0.0027,
2964
+ "y": -0.0006
2965
+ }
2966
+ }
2967
+ },
2968
+ {
2969
+ "frame_index": 164,
2970
+ "timestamp": 2.7333333333333334,
2971
+ "metrics": {
2972
+ "direction": "stationary",
2973
+ "intensity": "high",
2974
+ "speed": "fast",
2975
+ "velocity": 0.1839,
2976
+ "acceleration": 11.1152,
2977
+ "fluidity": 0.001,
2978
+ "expansion": 0.186,
2979
+ "total_displacement": 0.0008,
2980
+ "center_displacement": {
2981
+ "x": 0.0007,
2982
+ "y": -0.0005
2983
+ }
2984
+ }
2985
+ },
2986
+ {
2987
+ "frame_index": 165,
2988
+ "timestamp": 2.75,
2989
+ "metrics": {
2990
+ "direction": "stationary",
2991
+ "intensity": "high",
2992
+ "speed": "fast",
2993
+ "velocity": 0.1742,
2994
+ "acceleration": 8.9315,
2995
+ "fluidity": 0.001,
2996
+ "expansion": 0.185,
2997
+ "total_displacement": 0.0013,
2998
+ "center_displacement": {
2999
+ "x": 0.0008,
3000
+ "y": -0.001
3001
+ }
3002
+ }
3003
+ },
3004
+ {
3005
+ "frame_index": 166,
3006
+ "timestamp": 2.7666666666666666,
3007
+ "metrics": {
3008
+ "direction": "stationary",
3009
+ "intensity": "high",
3010
+ "speed": "fast",
3011
+ "velocity": 0.2067,
3012
+ "acceleration": 10.3295,
3013
+ "fluidity": 0.001,
3014
+ "expansion": 0.18,
3015
+ "total_displacement": 0.0042,
3016
+ "center_displacement": {
3017
+ "x": 0.0028,
3018
+ "y": -0.0032
3019
+ }
3020
+ }
3021
+ },
3022
+ {
3023
+ "frame_index": 167,
3024
+ "timestamp": 2.783333333333333,
3025
+ "metrics": {
3026
+ "direction": "stationary",
3027
+ "intensity": "high",
3028
+ "speed": "fast",
3029
+ "velocity": 0.1622,
3030
+ "acceleration": 10.1212,
3031
+ "fluidity": 0.001,
3032
+ "expansion": 0.178,
3033
+ "total_displacement": 0.0014,
3034
+ "center_displacement": {
3035
+ "x": 0.0012,
3036
+ "y": -0.0007
3037
+ }
3038
+ }
3039
+ },
3040
+ {
3041
+ "frame_index": 168,
3042
+ "timestamp": 2.8,
3043
+ "metrics": {
3044
+ "direction": "stationary",
3045
+ "intensity": "high",
3046
+ "speed": "fast",
3047
+ "velocity": 0.1856,
3048
+ "acceleration": 9.0748,
3049
+ "fluidity": 0.001,
3050
+ "expansion": 0.177,
3051
+ "total_displacement": 0.0033,
3052
+ "center_displacement": {
3053
+ "x": 0.0007,
3054
+ "y": -0.0032
3055
+ }
3056
+ }
3057
+ },
3058
+ {
3059
+ "frame_index": 169,
3060
+ "timestamp": 2.8166666666666664,
3061
+ "metrics": {
3062
+ "direction": "stationary",
3063
+ "intensity": "high",
3064
+ "speed": "fast",
3065
+ "velocity": 0.156,
3066
+ "acceleration": 9.3265,
3067
+ "fluidity": 0.001,
3068
+ "expansion": 0.176,
3069
+ "total_displacement": 0.0012,
3070
+ "center_displacement": {
3071
+ "x": 0.0006,
3072
+ "y": -0.001
3073
+ }
3074
+ }
3075
+ },
3076
+ {
3077
+ "frame_index": 170,
3078
+ "timestamp": 2.8333333333333335,
3079
+ "metrics": {
3080
+ "direction": "stationary",
3081
+ "intensity": "high",
3082
+ "speed": "fast",
3083
+ "velocity": 0.1451,
3084
+ "acceleration": 7.2397,
3085
+ "fluidity": 0.001,
3086
+ "expansion": 0.172,
3087
+ "total_displacement": 0.0013,
3088
+ "center_displacement": {
3089
+ "x": 0.0013,
3090
+ "y": -0.0002
3091
+ }
3092
+ }
3093
+ },
3094
+ {
3095
+ "frame_index": 171,
3096
+ "timestamp": 2.85,
3097
+ "metrics": {
3098
+ "direction": "stationary",
3099
+ "intensity": "high",
3100
+ "speed": "fast",
3101
+ "velocity": 0.1303,
3102
+ "acceleration": 7.0422,
3103
+ "fluidity": 0,
3104
+ "expansion": 0.171,
3105
+ "total_displacement": 0.0006,
3106
+ "center_displacement": {
3107
+ "x": 0.0004,
3108
+ "y": -0.0004
3109
+ }
3110
+ }
3111
+ },
3112
+ {
3113
+ "frame_index": 172,
3114
+ "timestamp": 2.8666666666666667,
3115
+ "metrics": {
3116
+ "direction": "stationary",
3117
+ "intensity": "high",
3118
+ "speed": "fast",
3119
+ "velocity": 0.1148,
3120
+ "acceleration": 6.0024,
3121
+ "fluidity": 0,
3122
+ "expansion": 0.17,
3123
+ "total_displacement": 0.0005,
3124
+ "center_displacement": {
3125
+ "x": -0.0001,
3126
+ "y": -0.0005
3127
+ }
3128
+ }
3129
+ },
3130
+ {
3131
+ "frame_index": 173,
3132
+ "timestamp": 2.8833333333333333,
3133
+ "metrics": {
3134
+ "direction": "stationary",
3135
+ "intensity": "high",
3136
+ "speed": "fast",
3137
+ "velocity": 0.131,
3138
+ "acceleration": 6.6612,
3139
+ "fluidity": 0,
3140
+ "expansion": 0.171,
3141
+ "total_displacement": 0.0022,
3142
+ "center_displacement": {
3143
+ "x": 0.0022,
3144
+ "y": 0.0003
3145
+ }
3146
+ }
3147
+ },
3148
+ {
3149
+ "frame_index": 174,
3150
+ "timestamp": 2.9,
3151
+ "metrics": {
3152
+ "direction": "stationary",
3153
+ "intensity": "high",
3154
+ "speed": "fast",
3155
+ "velocity": 0.1066,
3156
+ "acceleration": 6.179,
3157
+ "fluidity": 0,
3158
+ "expansion": 0.17,
3159
+ "total_displacement": 0.0008,
3160
+ "center_displacement": {
3161
+ "x": 0.0008,
3162
+ "y": 0.0002
3163
+ }
3164
+ }
3165
+ },
3166
+ {
3167
+ "frame_index": 175,
3168
+ "timestamp": 2.9166666666666665,
3169
+ "metrics": {
3170
+ "direction": "stationary",
3171
+ "intensity": "high",
3172
+ "speed": "fast",
3173
+ "velocity": 0.1063,
3174
+ "acceleration": 5.0441,
3175
+ "fluidity": 0,
3176
+ "expansion": 0.168,
3177
+ "total_displacement": 0.0012,
3178
+ "center_displacement": {
3179
+ "x": 0.0012,
3180
+ "y": 0.0001
3181
+ }
3182
+ }
3183
+ },
3184
+ {
3185
+ "frame_index": 176,
3186
+ "timestamp": 2.933333333333333,
3187
+ "metrics": {
3188
+ "direction": "stationary",
3189
+ "intensity": "high",
3190
+ "speed": "fast",
3191
+ "velocity": 0.0941,
3192
+ "acceleration": 5.0755,
3193
+ "fluidity": 0,
3194
+ "expansion": 0.168,
3195
+ "total_displacement": 0.0005,
3196
+ "center_displacement": {
3197
+ "x": 0.0001,
3198
+ "y": -0.0005
3199
+ }
3200
+ }
3201
+ },
3202
+ {
3203
+ "frame_index": 177,
3204
+ "timestamp": 2.95,
3205
+ "metrics": {
3206
+ "direction": "stationary",
3207
+ "intensity": "high",
3208
+ "speed": "fast",
3209
+ "velocity": 0.082,
3210
+ "acceleration": 4.2463,
3211
+ "fluidity": 0,
3212
+ "expansion": 0.168,
3213
+ "total_displacement": 0.0003,
3214
+ "center_displacement": {
3215
+ "x": 0.0003,
3216
+ "y": -0.0001
3217
+ }
3218
+ }
3219
+ },
3220
+ {
3221
+ "frame_index": 178,
3222
+ "timestamp": 2.966666666666667,
3223
+ "metrics": {
3224
+ "direction": "stationary",
3225
+ "intensity": "high",
3226
+ "speed": "fast",
3227
+ "velocity": 0.0747,
3228
+ "acceleration": 3.6591,
3229
+ "fluidity": 0,
3230
+ "expansion": 0.167,
3231
+ "total_displacement": 0.0003,
3232
+ "center_displacement": {
3233
+ "x": 0,
3234
+ "y": 0.0003
3235
+ }
3236
+ }
3237
+ },
3238
+ {
3239
+ "frame_index": 179,
3240
+ "timestamp": 2.9833333333333334,
3241
+ "metrics": {
3242
+ "direction": "stationary",
3243
+ "intensity": "medium",
3244
+ "speed": "fast",
3245
+ "velocity": 0.0671,
3246
+ "acceleration": 3.2635,
3247
+ "fluidity": 0.159,
3248
+ "expansion": 0.166,
3249
+ "total_displacement": 0.0003,
3250
+ "center_displacement": {
3251
+ "x": 0.0002,
3252
+ "y": 0.0002
3253
+ }
3254
+ }
3255
+ },
3256
+ {
3257
+ "frame_index": 180,
3258
+ "timestamp": 3,
3259
+ "metrics": {
3260
+ "direction": "stationary",
3261
+ "intensity": "high",
3262
+ "speed": "fast",
3263
+ "velocity": 0.0591,
3264
+ "acceleration": 2.8652,
3265
+ "fluidity": 0.04,
3266
+ "expansion": 0.165,
3267
+ "total_displacement": 0.0002,
3268
+ "center_displacement": {
3269
+ "x": 0,
3270
+ "y": 0.0002
3271
+ }
3272
+ }
3273
+ },
3274
+ {
3275
+ "frame_index": 181,
3276
+ "timestamp": 3.0166666666666666,
3277
+ "metrics": {
3278
+ "direction": "stationary",
3279
+ "intensity": "high",
3280
+ "speed": "slow",
3281
+ "velocity": 0.0517,
3282
+ "acceleration": 2.5477,
3283
+ "fluidity": 0.05,
3284
+ "expansion": 0.164,
3285
+ "total_displacement": 0.0001,
3286
+ "center_displacement": {
3287
+ "x": -0.0001,
3288
+ "y": 0
3289
+ }
3290
+ }
3291
+ },
3292
+ {
3293
+ "frame_index": 182,
3294
+ "timestamp": 3.033333333333333,
3295
+ "metrics": {
3296
+ "direction": "stationary",
3297
+ "intensity": "high",
3298
+ "speed": "fast",
3299
+ "velocity": 0.0687,
3300
+ "acceleration": 3.5291,
3301
+ "fluidity": 0.062,
3302
+ "expansion": 0.164,
3303
+ "total_displacement": 0.0016,
3304
+ "center_displacement": {
3305
+ "x": 0.0004,
3306
+ "y": 0.0016
3307
+ }
3308
+ }
3309
+ },
3310
+ {
3311
+ "frame_index": 183,
3312
+ "timestamp": 3.05,
3313
+ "metrics": {
3314
+ "direction": "stationary",
3315
+ "intensity": "high",
3316
+ "speed": "fast",
3317
+ "velocity": 0.0566,
3318
+ "acceleration": 2.9811,
3319
+ "fluidity": 0.038,
3320
+ "expansion": 0.164,
3321
+ "total_displacement": 0.0008,
3322
+ "center_displacement": {
3323
+ "x": 0.0001,
3324
+ "y": 0.0008
3325
+ }
3326
+ }
3327
+ },
3328
+ {
3329
+ "frame_index": 184,
3330
+ "timestamp": 3.0666666666666664,
3331
+ "metrics": {
3332
+ "direction": "stationary",
3333
+ "intensity": "high",
3334
+ "speed": "fast",
3335
+ "velocity": 0.0508,
3336
+ "acceleration": 2.5782,
3337
+ "fluidity": 0.037,
3338
+ "expansion": 0.164,
3339
+ "total_displacement": 0.0004,
3340
+ "center_displacement": {
3341
+ "x": 0,
3342
+ "y": 0.0004
3343
+ }
3344
+ }
3345
+ },
3346
+ {
3347
+ "frame_index": 185,
3348
+ "timestamp": 3.0833333333333335,
3349
+ "metrics": {
3350
+ "direction": "stationary",
3351
+ "intensity": "high",
3352
+ "speed": "fast",
3353
+ "velocity": 0.0475,
3354
+ "acceleration": 2.4533,
3355
+ "fluidity": 0.034,
3356
+ "expansion": 0.16,
3357
+ "total_displacement": 0.0002,
3358
+ "center_displacement": {
3359
+ "x": 0.0001,
3360
+ "y": 0.0002
3361
+ }
3362
+ }
3363
+ },
3364
+ {
3365
+ "frame_index": 186,
3366
+ "timestamp": 3.1,
3367
+ "metrics": {
3368
+ "direction": "stationary",
3369
+ "intensity": "high",
3370
+ "speed": "fast",
3371
+ "velocity": 0.044,
3372
+ "acceleration": 2.1114,
3373
+ "fluidity": 0.027,
3374
+ "expansion": 0.159,
3375
+ "total_displacement": 0.0004,
3376
+ "center_displacement": {
3377
+ "x": 0.0003,
3378
+ "y": 0.0002
3379
+ }
3380
+ }
3381
+ }
3382
+ ],
3383
+ "summary": {
3384
+ "direction": {
3385
+ "distribution": {
3386
+ "stationary": 170,
3387
+ "left": 1,
3388
+ "down": 7,
3389
+ "up": 7,
3390
+ "right": 2
3391
+ },
3392
+ "dominant": "stationary"
3393
+ },
3394
+ "intensity": {
3395
+ "distribution": {
3396
+ "low": 4,
3397
+ "high": 177,
3398
+ "medium": 6
3399
+ },
3400
+ "dominant": "high"
3401
+ },
3402
+ "speed": {
3403
+ "distribution": {
3404
+ "slow": 21,
3405
+ "fast": 166
3406
+ },
3407
+ "dominant": "fast"
3408
+ },
3409
+ "velocity": {
3410
+ "mean": 0.139,
3411
+ "std": 0.1266,
3412
+ "min": 0,
3413
+ "max": 1.051
3414
+ },
3415
+ "acceleration": {
3416
+ "mean": 10.2417,
3417
+ "std": 9.9677,
3418
+ "min": 0,
3419
+ "max": 63.0628
3420
+ },
3421
+ "fluidity": {
3422
+ "mean": 0.044,
3423
+ "std": 0.06
3424
+ },
3425
+ "expansion": {
3426
+ "mean": 0.21,
3427
+ "std": 0.03
3428
+ },
3429
+ "movement_segments": [
3430
+ {
3431
+ "start_frame": 7,
3432
+ "start_time": 0.11666666666666667,
3433
+ "peak_velocity": 0.2033,
3434
+ "dominant_direction": "stationary",
3435
+ "end_frame": 7,
3436
+ "end_time": 0.11666666666666667,
3437
+ "duration": 0
3438
+ },
3439
+ {
3440
+ "start_frame": 35,
3441
+ "start_time": 0.5833333333333334,
3442
+ "peak_velocity": 0.0316,
3443
+ "dominant_direction": "stationary",
3444
+ "end_frame": 35,
3445
+ "end_time": 0.5833333333333334,
3446
+ "duration": 0
3447
+ },
3448
+ {
3449
+ "start_frame": 46,
3450
+ "start_time": 0.7666666666666666,
3451
+ "peak_velocity": 0.0353,
3452
+ "dominant_direction": "stationary",
3453
+ "end_frame": 47,
3454
+ "end_time": 0.7833333333333333,
3455
+ "duration": 0.01666666666666672
3456
+ },
3457
+ {
3458
+ "start_frame": 131,
3459
+ "start_time": 2.183333333333333,
3460
+ "peak_velocity": 0.016,
3461
+ "dominant_direction": "stationary",
3462
+ "end_frame": 131,
3463
+ "end_time": 2.183333333333333,
3464
+ "duration": 0
3465
+ },
3466
+ {
3467
+ "start_frame": 179,
3468
+ "start_time": 2.9833333333333334,
3469
+ "peak_velocity": 0.0671,
3470
+ "dominant_direction": "stationary",
3471
+ "end_frame": 179,
3472
+ "end_time": 2.9833333333333334,
3473
+ "duration": 0
3474
+ }
3475
+ ]
3476
+ }
3477
+ }
3478
+ }
src/.gradio/cached_examples/9/Output/67da006c6e22d7f3b1b0/mediapipe_full_balette.json ADDED
@@ -0,0 +1,3478 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "analysis_metadata": {
3
+ "timestamp": "2025-06-08T15:21:19.211586",
4
+ "version": "1.0.0",
5
+ "model_info": {
6
+ "name": "mediapipe-full",
7
+ "type": "pose_estimation"
8
+ }
9
+ },
10
+ "video_info": {
11
+ "fps": 60,
12
+ "duration_seconds": 3.1166666666666667,
13
+ "width": 1280,
14
+ "height": 688,
15
+ "frame_count": 187
16
+ },
17
+ "movement_analysis": {
18
+ "frame_count": 187,
19
+ "frames": [
20
+ {
21
+ "frame_index": 0,
22
+ "timestamp": 0,
23
+ "metrics": {
24
+ "direction": "stationary",
25
+ "intensity": "low",
26
+ "speed": "slow",
27
+ "velocity": 0,
28
+ "acceleration": 0,
29
+ "fluidity": 0,
30
+ "expansion": 0.142,
31
+ "total_displacement": 0
32
+ }
33
+ },
34
+ {
35
+ "frame_index": 1,
36
+ "timestamp": 0.016666666666666666,
37
+ "metrics": {
38
+ "direction": "left",
39
+ "intensity": "high",
40
+ "speed": "fast",
41
+ "velocity": 1.051,
42
+ "acceleration": 63.0628,
43
+ "fluidity": 0,
44
+ "expansion": 0.15,
45
+ "total_displacement": 0.0175,
46
+ "center_displacement": {
47
+ "x": -0.0175,
48
+ "y": 0.0004
49
+ }
50
+ }
51
+ },
52
+ {
53
+ "frame_index": 2,
54
+ "timestamp": 0.03333333333333333,
55
+ "metrics": {
56
+ "direction": "stationary",
57
+ "intensity": "high",
58
+ "speed": "fast",
59
+ "velocity": 0.0654,
60
+ "acceleration": 59.1406,
61
+ "fluidity": 0,
62
+ "expansion": 0.149,
63
+ "total_displacement": 0.0011,
64
+ "center_displacement": {
65
+ "x": -0.0011,
66
+ "y": -0.0002
67
+ }
68
+ }
69
+ },
70
+ {
71
+ "frame_index": 3,
72
+ "timestamp": 0.05,
73
+ "metrics": {
74
+ "direction": "stationary",
75
+ "intensity": "high",
76
+ "speed": "fast",
77
+ "velocity": 0.2949,
78
+ "acceleration": 30.5825,
79
+ "fluidity": 0.092,
80
+ "expansion": 0.15,
81
+ "total_displacement": 0.0011,
82
+ "center_displacement": {
83
+ "x": -0.001,
84
+ "y": -0.0002
85
+ }
86
+ }
87
+ },
88
+ {
89
+ "frame_index": 4,
90
+ "timestamp": 0.06666666666666667,
91
+ "metrics": {
92
+ "direction": "stationary",
93
+ "intensity": "high",
94
+ "speed": "fast",
95
+ "velocity": 0.36,
96
+ "acceleration": 38.7168,
97
+ "fluidity": 0.023,
98
+ "expansion": 0.149,
99
+ "total_displacement": 0.0005,
100
+ "center_displacement": {
101
+ "x": 0.0004,
102
+ "y": -0.0002
103
+ }
104
+ }
105
+ },
106
+ {
107
+ "frame_index": 5,
108
+ "timestamp": 0.08333333333333333,
109
+ "metrics": {
110
+ "direction": "stationary",
111
+ "intensity": "high",
112
+ "speed": "fast",
113
+ "velocity": 0.2096,
114
+ "acceleration": 33.4529,
115
+ "fluidity": 0.029,
116
+ "expansion": 0.151,
117
+ "total_displacement": 0.002,
118
+ "center_displacement": {
119
+ "x": 0.0017,
120
+ "y": -0.0011
121
+ }
122
+ }
123
+ },
124
+ {
125
+ "frame_index": 6,
126
+ "timestamp": 0.1,
127
+ "metrics": {
128
+ "direction": "stationary",
129
+ "intensity": "high",
130
+ "speed": "fast",
131
+ "velocity": 0.2213,
132
+ "acceleration": 27.1474,
133
+ "fluidity": 0.036,
134
+ "expansion": 0.152,
135
+ "total_displacement": 0.0003,
136
+ "center_displacement": {
137
+ "x": -0.0002,
138
+ "y": -0.0003
139
+ }
140
+ }
141
+ },
142
+ {
143
+ "frame_index": 7,
144
+ "timestamp": 0.11666666666666667,
145
+ "metrics": {
146
+ "direction": "stationary",
147
+ "intensity": "medium",
148
+ "speed": "fast",
149
+ "velocity": 0.2033,
150
+ "acceleration": 24.8517,
151
+ "fluidity": 0.16,
152
+ "expansion": 0.155,
153
+ "total_displacement": 0.0004,
154
+ "center_displacement": {
155
+ "x": 0.0001,
156
+ "y": 0.0004
157
+ }
158
+ }
159
+ },
160
+ {
161
+ "frame_index": 8,
162
+ "timestamp": 0.13333333333333333,
163
+ "metrics": {
164
+ "direction": "stationary",
165
+ "intensity": "high",
166
+ "speed": "fast",
167
+ "velocity": 0.1729,
168
+ "acceleration": 21.8885,
169
+ "fluidity": 0.056,
170
+ "expansion": 0.156,
171
+ "total_displacement": 0.001,
172
+ "center_displacement": {
173
+ "x": -0.0009,
174
+ "y": 0.0001
175
+ }
176
+ }
177
+ },
178
+ {
179
+ "frame_index": 9,
180
+ "timestamp": 0.15,
181
+ "metrics": {
182
+ "direction": "stationary",
183
+ "intensity": "high",
184
+ "speed": "fast",
185
+ "velocity": 0.1527,
186
+ "acceleration": 19.1312,
187
+ "fluidity": 0.063,
188
+ "expansion": 0.156,
189
+ "total_displacement": 0.0002,
190
+ "center_displacement": {
191
+ "x": -0.0001,
192
+ "y": 0.0002
193
+ }
194
+ }
195
+ },
196
+ {
197
+ "frame_index": 10,
198
+ "timestamp": 0.16666666666666666,
199
+ "metrics": {
200
+ "direction": "stationary",
201
+ "intensity": "high",
202
+ "speed": "fast",
203
+ "velocity": 0.1571,
204
+ "acceleration": 17.7603,
205
+ "fluidity": 0.07,
206
+ "expansion": 0.159,
207
+ "total_displacement": 0.0017,
208
+ "center_displacement": {
209
+ "x": -0.0001,
210
+ "y": -0.0017
211
+ }
212
+ }
213
+ },
214
+ {
215
+ "frame_index": 11,
216
+ "timestamp": 0.18333333333333332,
217
+ "metrics": {
218
+ "direction": "stationary",
219
+ "intensity": "high",
220
+ "speed": "fast",
221
+ "velocity": 0.1276,
222
+ "acceleration": 15.7758,
223
+ "fluidity": 0.047,
224
+ "expansion": 0.16,
225
+ "total_displacement": 0.0005,
226
+ "center_displacement": {
227
+ "x": 0.0003,
228
+ "y": -0.0003
229
+ }
230
+ }
231
+ },
232
+ {
233
+ "frame_index": 12,
234
+ "timestamp": 0.2,
235
+ "metrics": {
236
+ "direction": "stationary",
237
+ "intensity": "high",
238
+ "speed": "fast",
239
+ "velocity": 0.1568,
240
+ "acceleration": 15.6038,
241
+ "fluidity": 0.045,
242
+ "expansion": 0.171,
243
+ "total_displacement": 0.0032,
244
+ "center_displacement": {
245
+ "x": -0.0032,
246
+ "y": -0.0001
247
+ }
248
+ }
249
+ },
250
+ {
251
+ "frame_index": 13,
252
+ "timestamp": 0.21666666666666667,
253
+ "metrics": {
254
+ "direction": "stationary",
255
+ "intensity": "high",
256
+ "speed": "fast",
257
+ "velocity": 0.1198,
258
+ "acceleration": 14.5715,
259
+ "fluidity": 0.041,
260
+ "expansion": 0.173,
261
+ "total_displacement": 0.0006,
262
+ "center_displacement": {
263
+ "x": -0.0004,
264
+ "y": 0.0005
265
+ }
266
+ }
267
+ },
268
+ {
269
+ "frame_index": 14,
270
+ "timestamp": 0.23333333333333334,
271
+ "metrics": {
272
+ "direction": "stationary",
273
+ "intensity": "high",
274
+ "speed": "fast",
275
+ "velocity": 0.1172,
276
+ "acceleration": 11.8933,
277
+ "fluidity": 0.033,
278
+ "expansion": 0.173,
279
+ "total_displacement": 0.0011,
280
+ "center_displacement": {
281
+ "x": -0.0007,
282
+ "y": 0.0008
283
+ }
284
+ }
285
+ },
286
+ {
287
+ "frame_index": 15,
288
+ "timestamp": 0.25,
289
+ "metrics": {
290
+ "direction": "stationary",
291
+ "intensity": "high",
292
+ "speed": "fast",
293
+ "velocity": 0.1102,
294
+ "acceleration": 10.778,
295
+ "fluidity": 0.03,
296
+ "expansion": 0.172,
297
+ "total_displacement": 0.0008,
298
+ "center_displacement": {
299
+ "x": -0.0008,
300
+ "y": 0.0002
301
+ }
302
+ }
303
+ },
304
+ {
305
+ "frame_index": 16,
306
+ "timestamp": 0.26666666666666666,
307
+ "metrics": {
308
+ "direction": "stationary",
309
+ "intensity": "high",
310
+ "speed": "fast",
311
+ "velocity": 0.0949,
312
+ "acceleration": 9.5334,
313
+ "fluidity": 0.026,
314
+ "expansion": 0.172,
315
+ "total_displacement": 0.0005,
316
+ "center_displacement": {
317
+ "x": 0,
318
+ "y": 0.0005
319
+ }
320
+ }
321
+ },
322
+ {
323
+ "frame_index": 17,
324
+ "timestamp": 0.2833333333333333,
325
+ "metrics": {
326
+ "direction": "stationary",
327
+ "intensity": "high",
328
+ "speed": "fast",
329
+ "velocity": 0.0866,
330
+ "acceleration": 8.1758,
331
+ "fluidity": 0.022,
332
+ "expansion": 0.174,
333
+ "total_displacement": 0.0004,
334
+ "center_displacement": {
335
+ "x": -0.0004,
336
+ "y": 0
337
+ }
338
+ }
339
+ },
340
+ {
341
+ "frame_index": 18,
342
+ "timestamp": 0.3,
343
+ "metrics": {
344
+ "direction": "stationary",
345
+ "intensity": "high",
346
+ "speed": "fast",
347
+ "velocity": 0.0767,
348
+ "acceleration": 7.2556,
349
+ "fluidity": 0.019,
350
+ "expansion": 0.175,
351
+ "total_displacement": 0.0003,
352
+ "center_displacement": {
353
+ "x": 0,
354
+ "y": 0.0003
355
+ }
356
+ }
357
+ },
358
+ {
359
+ "frame_index": 19,
360
+ "timestamp": 0.31666666666666665,
361
+ "metrics": {
362
+ "direction": "stationary",
363
+ "intensity": "high",
364
+ "speed": "fast",
365
+ "velocity": 0.0817,
366
+ "acceleration": 7.042,
367
+ "fluidity": 0.017,
368
+ "expansion": 0.177,
369
+ "total_displacement": 0.0011,
370
+ "center_displacement": {
371
+ "x": -0.0011,
372
+ "y": 0
373
+ }
374
+ }
375
+ },
376
+ {
377
+ "frame_index": 20,
378
+ "timestamp": 0.3333333333333333,
379
+ "metrics": {
380
+ "direction": "stationary",
381
+ "intensity": "high",
382
+ "speed": "fast",
383
+ "velocity": 0.0676,
384
+ "acceleration": 6.2615,
385
+ "fluidity": 0.015,
386
+ "expansion": 0.179,
387
+ "total_displacement": 0.0004,
388
+ "center_displacement": {
389
+ "x": -0.0003,
390
+ "y": 0.0003
391
+ }
392
+ }
393
+ },
394
+ {
395
+ "frame_index": 21,
396
+ "timestamp": 0.35,
397
+ "metrics": {
398
+ "direction": "stationary",
399
+ "intensity": "high",
400
+ "speed": "fast",
401
+ "velocity": 0.0607,
402
+ "acceleration": 5.2741,
403
+ "fluidity": 0.013,
404
+ "expansion": 0.179,
405
+ "total_displacement": 0.0003,
406
+ "center_displacement": {
407
+ "x": -0.0003,
408
+ "y": 0
409
+ }
410
+ }
411
+ },
412
+ {
413
+ "frame_index": 22,
414
+ "timestamp": 0.36666666666666664,
415
+ "metrics": {
416
+ "direction": "stationary",
417
+ "intensity": "high",
418
+ "speed": "fast",
419
+ "velocity": 0.0578,
420
+ "acceleration": 4.7129,
421
+ "fluidity": 0.011,
422
+ "expansion": 0.183,
423
+ "total_displacement": 0.0004,
424
+ "center_displacement": {
425
+ "x": -0.0002,
426
+ "y": 0.0003
427
+ }
428
+ }
429
+ },
430
+ {
431
+ "frame_index": 23,
432
+ "timestamp": 0.3833333333333333,
433
+ "metrics": {
434
+ "direction": "stationary",
435
+ "intensity": "high",
436
+ "speed": "fast",
437
+ "velocity": 0.0493,
438
+ "acceleration": 4.2135,
439
+ "fluidity": 0.01,
440
+ "expansion": 0.183,
441
+ "total_displacement": 0.0002,
442
+ "center_displacement": {
443
+ "x": -0.0002,
444
+ "y": 0.0001
445
+ }
446
+ }
447
+ },
448
+ {
449
+ "frame_index": 24,
450
+ "timestamp": 0.4,
451
+ "metrics": {
452
+ "direction": "stationary",
453
+ "intensity": "high",
454
+ "speed": "fast",
455
+ "velocity": 0.0724,
456
+ "acceleration": 5.2104,
457
+ "fluidity": 0.008,
458
+ "expansion": 0.191,
459
+ "total_displacement": 0.002,
460
+ "center_displacement": {
461
+ "x": -0.0018,
462
+ "y": 0.0009
463
+ }
464
+ }
465
+ },
466
+ {
467
+ "frame_index": 25,
468
+ "timestamp": 0.4166666666666667,
469
+ "metrics": {
470
+ "direction": "stationary",
471
+ "intensity": "high",
472
+ "speed": "slow",
473
+ "velocity": 0.0467,
474
+ "acceleration": 5.2539,
475
+ "fluidity": 0.007,
476
+ "expansion": 0.191,
477
+ "total_displacement": 0.0001,
478
+ "center_displacement": {
479
+ "x": -0.0001,
480
+ "y": 0
481
+ }
482
+ }
483
+ },
484
+ {
485
+ "frame_index": 26,
486
+ "timestamp": 0.43333333333333335,
487
+ "metrics": {
488
+ "direction": "stationary",
489
+ "intensity": "high",
490
+ "speed": "fast",
491
+ "velocity": 0.0614,
492
+ "acceleration": 4.7211,
493
+ "fluidity": 0.006,
494
+ "expansion": 0.192,
495
+ "total_displacement": 0.0013,
496
+ "center_displacement": {
497
+ "x": -0.0013,
498
+ "y": -0.0001
499
+ }
500
+ }
501
+ },
502
+ {
503
+ "frame_index": 27,
504
+ "timestamp": 0.45,
505
+ "metrics": {
506
+ "direction": "stationary",
507
+ "intensity": "high",
508
+ "speed": "fast",
509
+ "velocity": 0.0493,
510
+ "acceleration": 4.7025,
511
+ "fluidity": 0.005,
512
+ "expansion": 0.191,
513
+ "total_displacement": 0.0003,
514
+ "center_displacement": {
515
+ "x": -0.0003,
516
+ "y": -0.0001
517
+ }
518
+ }
519
+ },
520
+ {
521
+ "frame_index": 28,
522
+ "timestamp": 0.4666666666666667,
523
+ "metrics": {
524
+ "direction": "stationary",
525
+ "intensity": "high",
526
+ "speed": "fast",
527
+ "velocity": 0.0441,
528
+ "acceleration": 3.7031,
529
+ "fluidity": 0.086,
530
+ "expansion": 0.191,
531
+ "total_displacement": 0.0003,
532
+ "center_displacement": {
533
+ "x": -0.0003,
534
+ "y": 0.0001
535
+ }
536
+ }
537
+ },
538
+ {
539
+ "frame_index": 29,
540
+ "timestamp": 0.48333333333333334,
541
+ "metrics": {
542
+ "direction": "stationary",
543
+ "intensity": "high",
544
+ "speed": "fast",
545
+ "velocity": 0.0545,
546
+ "acceleration": 3.9435,
547
+ "fluidity": 0.024,
548
+ "expansion": 0.192,
549
+ "total_displacement": 0.0011,
550
+ "center_displacement": {
551
+ "x": -0.0008,
552
+ "y": 0.0007
553
+ }
554
+ }
555
+ },
556
+ {
557
+ "frame_index": 30,
558
+ "timestamp": 0.5,
559
+ "metrics": {
560
+ "direction": "stationary",
561
+ "intensity": "high",
562
+ "speed": "fast",
563
+ "velocity": 0.0412,
564
+ "acceleration": 3.7837,
565
+ "fluidity": 0.029,
566
+ "expansion": 0.192,
567
+ "total_displacement": 0.0003,
568
+ "center_displacement": {
569
+ "x": -0.0003,
570
+ "y": 0.0001
571
+ }
572
+ }
573
+ },
574
+ {
575
+ "frame_index": 31,
576
+ "timestamp": 0.5166666666666666,
577
+ "metrics": {
578
+ "direction": "stationary",
579
+ "intensity": "high",
580
+ "speed": "fast",
581
+ "velocity": 0.0436,
582
+ "acceleration": 3.1217,
583
+ "fluidity": 0.035,
584
+ "expansion": 0.192,
585
+ "total_displacement": 0.0006,
586
+ "center_displacement": {
587
+ "x": 0,
588
+ "y": -0.0006
589
+ }
590
+ }
591
+ },
592
+ {
593
+ "frame_index": 32,
594
+ "timestamp": 0.5333333333333333,
595
+ "metrics": {
596
+ "direction": "stationary",
597
+ "intensity": "high",
598
+ "speed": "fast",
599
+ "velocity": 0.0395,
600
+ "acceleration": 2.9474,
601
+ "fluidity": 0.022,
602
+ "expansion": 0.192,
603
+ "total_displacement": 0.0003,
604
+ "center_displacement": {
605
+ "x": 0.0001,
606
+ "y": -0.0003
607
+ }
608
+ }
609
+ },
610
+ {
611
+ "frame_index": 33,
612
+ "timestamp": 0.55,
613
+ "metrics": {
614
+ "direction": "stationary",
615
+ "intensity": "high",
616
+ "speed": "fast",
617
+ "velocity": 0.0341,
618
+ "acceleration": 2.5603,
619
+ "fluidity": 0.022,
620
+ "expansion": 0.192,
621
+ "total_displacement": 0.0002,
622
+ "center_displacement": {
623
+ "x": 0.0001,
624
+ "y": -0.0001
625
+ }
626
+ }
627
+ },
628
+ {
629
+ "frame_index": 34,
630
+ "timestamp": 0.5666666666666667,
631
+ "metrics": {
632
+ "direction": "stationary",
633
+ "intensity": "high",
634
+ "speed": "fast",
635
+ "velocity": 0.0341,
636
+ "acceleration": 2.2634,
637
+ "fluidity": 0.02,
638
+ "expansion": 0.193,
639
+ "total_displacement": 0.0003,
640
+ "center_displacement": {
641
+ "x": -0.0001,
642
+ "y": -0.0003
643
+ }
644
+ }
645
+ },
646
+ {
647
+ "frame_index": 35,
648
+ "timestamp": 0.5833333333333334,
649
+ "metrics": {
650
+ "direction": "stationary",
651
+ "intensity": "medium",
652
+ "speed": "fast",
653
+ "velocity": 0.0316,
654
+ "acceleration": 1.9529,
655
+ "fluidity": 0.215,
656
+ "expansion": 0.194,
657
+ "total_displacement": 0.0003,
658
+ "center_displacement": {
659
+ "x": -0.0001,
660
+ "y": -0.0003
661
+ }
662
+ }
663
+ },
664
+ {
665
+ "frame_index": 36,
666
+ "timestamp": 0.6,
667
+ "metrics": {
668
+ "direction": "stationary",
669
+ "intensity": "high",
670
+ "speed": "fast",
671
+ "velocity": 0.0364,
672
+ "acceleration": 2.1029,
673
+ "fluidity": 0.064,
674
+ "expansion": 0.196,
675
+ "total_displacement": 0.0008,
676
+ "center_displacement": {
677
+ "x": -0.0006,
678
+ "y": -0.0004
679
+ }
680
+ }
681
+ },
682
+ {
683
+ "frame_index": 37,
684
+ "timestamp": 0.6166666666666667,
685
+ "metrics": {
686
+ "direction": "stationary",
687
+ "intensity": "high",
688
+ "speed": "slow",
689
+ "velocity": 0.028,
690
+ "acceleration": 2.1194,
691
+ "fluidity": 0.075,
692
+ "expansion": 0.197,
693
+ "total_displacement": 0.0002,
694
+ "center_displacement": {
695
+ "x": -0.0002,
696
+ "y": 0
697
+ }
698
+ }
699
+ },
700
+ {
701
+ "frame_index": 38,
702
+ "timestamp": 0.6333333333333333,
703
+ "metrics": {
704
+ "direction": "stationary",
705
+ "intensity": "high",
706
+ "speed": "fast",
707
+ "velocity": 0.0276,
708
+ "acceleration": 1.6102,
709
+ "fluidity": 0.088,
710
+ "expansion": 0.2,
711
+ "total_displacement": 0.0002,
712
+ "center_displacement": {
713
+ "x": 0.0001,
714
+ "y": 0.0002
715
+ }
716
+ }
717
+ },
718
+ {
719
+ "frame_index": 39,
720
+ "timestamp": 0.65,
721
+ "metrics": {
722
+ "direction": "stationary",
723
+ "intensity": "high",
724
+ "speed": "slow",
725
+ "velocity": 0.0241,
726
+ "acceleration": 1.6084,
727
+ "fluidity": 0.057,
728
+ "expansion": 0.201,
729
+ "total_displacement": 0.0001,
730
+ "center_displacement": {
731
+ "x": 0.0001,
732
+ "y": 0
733
+ }
734
+ }
735
+ },
736
+ {
737
+ "frame_index": 40,
738
+ "timestamp": 0.6666666666666666,
739
+ "metrics": {
740
+ "direction": "stationary",
741
+ "intensity": "low",
742
+ "speed": "slow",
743
+ "velocity": 0.0211,
744
+ "acceleration": 1.3391,
745
+ "fluidity": 0.282,
746
+ "expansion": 0.201,
747
+ "total_displacement": 0.0001,
748
+ "center_displacement": {
749
+ "x": 0,
750
+ "y": 0.0001
751
+ }
752
+ }
753
+ },
754
+ {
755
+ "frame_index": 41,
756
+ "timestamp": 0.6833333333333333,
757
+ "metrics": {
758
+ "direction": "stationary",
759
+ "intensity": "high",
760
+ "speed": "fast",
761
+ "velocity": 0.0365,
762
+ "acceleration": 2.1662,
763
+ "fluidity": 0.107,
764
+ "expansion": 0.205,
765
+ "total_displacement": 0.0012,
766
+ "center_displacement": {
767
+ "x": -0.0004,
768
+ "y": 0.0011
769
+ }
770
+ }
771
+ },
772
+ {
773
+ "frame_index": 42,
774
+ "timestamp": 0.7,
775
+ "metrics": {
776
+ "direction": "stationary",
777
+ "intensity": "high",
778
+ "speed": "fast",
779
+ "velocity": 0.0301,
780
+ "acceleration": 1.7959,
781
+ "fluidity": 0.111,
782
+ "expansion": 0.206,
783
+ "total_displacement": 0.0006,
784
+ "center_displacement": {
785
+ "x": -0.0003,
786
+ "y": 0.0005
787
+ }
788
+ }
789
+ },
790
+ {
791
+ "frame_index": 43,
792
+ "timestamp": 0.7166666666666667,
793
+ "metrics": {
794
+ "direction": "stationary",
795
+ "intensity": "high",
796
+ "speed": "fast",
797
+ "velocity": 0.0458,
798
+ "acceleration": 2.1795,
799
+ "fluidity": 0.125,
800
+ "expansion": 0.21,
801
+ "total_displacement": 0.0016,
802
+ "center_displacement": {
803
+ "x": -0.0004,
804
+ "y": 0.0015
805
+ }
806
+ }
807
+ },
808
+ {
809
+ "frame_index": 44,
810
+ "timestamp": 0.7333333333333333,
811
+ "metrics": {
812
+ "direction": "stationary",
813
+ "intensity": "high",
814
+ "speed": "fast",
815
+ "velocity": 0.0477,
816
+ "acceleration": 1.79,
817
+ "fluidity": 0.086,
818
+ "expansion": 0.211,
819
+ "total_displacement": 0.0013,
820
+ "center_displacement": {
821
+ "x": -0.0004,
822
+ "y": 0.0012
823
+ }
824
+ }
825
+ },
826
+ {
827
+ "frame_index": 45,
828
+ "timestamp": 0.75,
829
+ "metrics": {
830
+ "direction": "stationary",
831
+ "intensity": "high",
832
+ "speed": "fast",
833
+ "velocity": 0.034,
834
+ "acceleration": 2.4349,
835
+ "fluidity": 0.081,
836
+ "expansion": 0.211,
837
+ "total_displacement": 0.0002,
838
+ "center_displacement": {
839
+ "x": -0.0001,
840
+ "y": 0.0002
841
+ }
842
+ }
843
+ },
844
+ {
845
+ "frame_index": 46,
846
+ "timestamp": 0.7666666666666666,
847
+ "metrics": {
848
+ "direction": "stationary",
849
+ "intensity": "medium",
850
+ "speed": "fast",
851
+ "velocity": 0.0353,
852
+ "acceleration": 1.6237,
853
+ "fluidity": 0.21,
854
+ "expansion": 0.213,
855
+ "total_displacement": 0.0002,
856
+ "center_displacement": {
857
+ "x": 0.0002,
858
+ "y": 0.0001
859
+ }
860
+ }
861
+ },
862
+ {
863
+ "frame_index": 47,
864
+ "timestamp": 0.7833333333333333,
865
+ "metrics": {
866
+ "direction": "stationary",
867
+ "intensity": "medium",
868
+ "speed": "fast",
869
+ "velocity": 0.0329,
870
+ "acceleration": 1.47,
871
+ "fluidity": 0.305,
872
+ "expansion": 0.214,
873
+ "total_displacement": 0.0002,
874
+ "center_displacement": {
875
+ "x": 0.0002,
876
+ "y": 0.0002
877
+ }
878
+ }
879
+ },
880
+ {
881
+ "frame_index": 48,
882
+ "timestamp": 0.8,
883
+ "metrics": {
884
+ "direction": "stationary",
885
+ "intensity": "high",
886
+ "speed": "fast",
887
+ "velocity": 0.0299,
888
+ "acceleration": 1.4263,
889
+ "fluidity": 0.178,
890
+ "expansion": 0.215,
891
+ "total_displacement": 0.0003,
892
+ "center_displacement": {
893
+ "x": 0.0003,
894
+ "y": 0
895
+ }
896
+ }
897
+ },
898
+ {
899
+ "frame_index": 49,
900
+ "timestamp": 0.8166666666666667,
901
+ "metrics": {
902
+ "direction": "stationary",
903
+ "intensity": "high",
904
+ "speed": "fast",
905
+ "velocity": 0.0277,
906
+ "acceleration": 1.1971,
907
+ "fluidity": 0.173,
908
+ "expansion": 0.215,
909
+ "total_displacement": 0.0002,
910
+ "center_displacement": {
911
+ "x": 0.0002,
912
+ "y": -0.0001
913
+ }
914
+ }
915
+ },
916
+ {
917
+ "frame_index": 50,
918
+ "timestamp": 0.8333333333333334,
919
+ "metrics": {
920
+ "direction": "stationary",
921
+ "intensity": "high",
922
+ "speed": "fast",
923
+ "velocity": 0.0376,
924
+ "acceleration": 1.7321,
925
+ "fluidity": 0.164,
926
+ "expansion": 0.215,
927
+ "total_displacement": 0.001,
928
+ "center_displacement": {
929
+ "x": 0.0005,
930
+ "y": -0.0008
931
+ }
932
+ }
933
+ },
934
+ {
935
+ "frame_index": 51,
936
+ "timestamp": 0.85,
937
+ "metrics": {
938
+ "direction": "stationary",
939
+ "intensity": "high",
940
+ "speed": "fast",
941
+ "velocity": 0.0346,
942
+ "acceleration": 1.3423,
943
+ "fluidity": 0.129,
944
+ "expansion": 0.215,
945
+ "total_displacement": 0.0007,
946
+ "center_displacement": {
947
+ "x": 0.0003,
948
+ "y": -0.0006
949
+ }
950
+ }
951
+ },
952
+ {
953
+ "frame_index": 52,
954
+ "timestamp": 0.8666666666666667,
955
+ "metrics": {
956
+ "direction": "stationary",
957
+ "intensity": "high",
958
+ "speed": "fast",
959
+ "velocity": 0.0332,
960
+ "acceleration": 1.2208,
961
+ "fluidity": 0.117,
962
+ "expansion": 0.215,
963
+ "total_displacement": 0.0006,
964
+ "center_displacement": {
965
+ "x": 0.0002,
966
+ "y": -0.0005
967
+ }
968
+ }
969
+ },
970
+ {
971
+ "frame_index": 53,
972
+ "timestamp": 0.8833333333333333,
973
+ "metrics": {
974
+ "direction": "stationary",
975
+ "intensity": "high",
976
+ "speed": "slow",
977
+ "velocity": 0.0281,
978
+ "acceleration": 1.4679,
979
+ "fluidity": 0.102,
980
+ "expansion": 0.215,
981
+ "total_displacement": 0.0001,
982
+ "center_displacement": {
983
+ "x": 0.0001,
984
+ "y": 0.0001
985
+ }
986
+ }
987
+ },
988
+ {
989
+ "frame_index": 54,
990
+ "timestamp": 0.9,
991
+ "metrics": {
992
+ "direction": "stationary",
993
+ "intensity": "low",
994
+ "speed": "slow",
995
+ "velocity": 0.0256,
996
+ "acceleration": 1.01,
997
+ "fluidity": 0.326,
998
+ "expansion": 0.215,
999
+ "total_displacement": 0.0001,
1000
+ "center_displacement": {
1001
+ "x": 0,
1002
+ "y": 0.0001
1003
+ }
1004
+ }
1005
+ },
1006
+ {
1007
+ "frame_index": 55,
1008
+ "timestamp": 0.9166666666666666,
1009
+ "metrics": {
1010
+ "direction": "stationary",
1011
+ "intensity": "high",
1012
+ "speed": "fast",
1013
+ "velocity": 0.0329,
1014
+ "acceleration": 1.495,
1015
+ "fluidity": 0.136,
1016
+ "expansion": 0.216,
1017
+ "total_displacement": 0.0007,
1018
+ "center_displacement": {
1019
+ "x": 0.0007,
1020
+ "y": 0
1021
+ }
1022
+ }
1023
+ },
1024
+ {
1025
+ "frame_index": 56,
1026
+ "timestamp": 0.9333333333333333,
1027
+ "metrics": {
1028
+ "direction": "stationary",
1029
+ "intensity": "high",
1030
+ "speed": "fast",
1031
+ "velocity": 0.0308,
1032
+ "acceleration": 1.1118,
1033
+ "fluidity": 0.141,
1034
+ "expansion": 0.217,
1035
+ "total_displacement": 0.0006,
1036
+ "center_displacement": {
1037
+ "x": 0.0006,
1038
+ "y": 0.0001
1039
+ }
1040
+ }
1041
+ },
1042
+ {
1043
+ "frame_index": 57,
1044
+ "timestamp": 0.95,
1045
+ "metrics": {
1046
+ "direction": "stationary",
1047
+ "intensity": "high",
1048
+ "speed": "fast",
1049
+ "velocity": 0.0273,
1050
+ "acceleration": 1.1554,
1051
+ "fluidity": 0.151,
1052
+ "expansion": 0.218,
1053
+ "total_displacement": 0.0003,
1054
+ "center_displacement": {
1055
+ "x": 0.0003,
1056
+ "y": 0.0001
1057
+ }
1058
+ }
1059
+ },
1060
+ {
1061
+ "frame_index": 58,
1062
+ "timestamp": 0.9666666666666667,
1063
+ "metrics": {
1064
+ "direction": "stationary",
1065
+ "intensity": "high",
1066
+ "speed": "fast",
1067
+ "velocity": 0.0794,
1068
+ "acceleration": 4.0386,
1069
+ "fluidity": 0.107,
1070
+ "expansion": 0.22,
1071
+ "total_displacement": 0.0038,
1072
+ "center_displacement": {
1073
+ "x": -0.0001,
1074
+ "y": 0.0038
1075
+ }
1076
+ }
1077
+ },
1078
+ {
1079
+ "frame_index": 59,
1080
+ "timestamp": 0.9833333333333333,
1081
+ "metrics": {
1082
+ "direction": "stationary",
1083
+ "intensity": "high",
1084
+ "speed": "fast",
1085
+ "velocity": 0.0663,
1086
+ "acceleration": 3.06,
1087
+ "fluidity": 0.1,
1088
+ "expansion": 0.221,
1089
+ "total_displacement": 0.0021,
1090
+ "center_displacement": {
1091
+ "x": 0.0001,
1092
+ "y": 0.0021
1093
+ }
1094
+ }
1095
+ },
1096
+ {
1097
+ "frame_index": 60,
1098
+ "timestamp": 1,
1099
+ "metrics": {
1100
+ "direction": "down",
1101
+ "intensity": "high",
1102
+ "speed": "fast",
1103
+ "velocity": 0.274,
1104
+ "acceleration": 13.9959,
1105
+ "fluidity": 0.089,
1106
+ "expansion": 0.223,
1107
+ "total_displacement": 0.0154,
1108
+ "center_displacement": {
1109
+ "x": 0.0002,
1110
+ "y": 0.0154
1111
+ }
1112
+ }
1113
+ },
1114
+ {
1115
+ "frame_index": 61,
1116
+ "timestamp": 1.0166666666666666,
1117
+ "metrics": {
1118
+ "direction": "stationary",
1119
+ "intensity": "high",
1120
+ "speed": "fast",
1121
+ "velocity": 0.141,
1122
+ "acceleration": 16.9543,
1123
+ "fluidity": 0.074,
1124
+ "expansion": 0.224,
1125
+ "total_displacement": 0.0024,
1126
+ "center_displacement": {
1127
+ "x": 0.0002,
1128
+ "y": 0.0024
1129
+ }
1130
+ }
1131
+ },
1132
+ {
1133
+ "frame_index": 62,
1134
+ "timestamp": 1.0333333333333332,
1135
+ "metrics": {
1136
+ "direction": "down",
1137
+ "intensity": "high",
1138
+ "speed": "fast",
1139
+ "velocity": 0.3349,
1140
+ "acceleration": 19.2106,
1141
+ "fluidity": 0.066,
1142
+ "expansion": 0.227,
1143
+ "total_displacement": 0.0143,
1144
+ "center_displacement": {
1145
+ "x": 0.0009,
1146
+ "y": 0.0143
1147
+ }
1148
+ }
1149
+ },
1150
+ {
1151
+ "frame_index": 63,
1152
+ "timestamp": 1.05,
1153
+ "metrics": {
1154
+ "direction": "stationary",
1155
+ "intensity": "high",
1156
+ "speed": "fast",
1157
+ "velocity": 0.2284,
1158
+ "acceleration": 22.9589,
1159
+ "fluidity": 0.057,
1160
+ "expansion": 0.227,
1161
+ "total_displacement": 0.0027,
1162
+ "center_displacement": {
1163
+ "x": 0.0003,
1164
+ "y": 0.0027
1165
+ }
1166
+ }
1167
+ },
1168
+ {
1169
+ "frame_index": 64,
1170
+ "timestamp": 1.0666666666666667,
1171
+ "metrics": {
1172
+ "direction": "stationary",
1173
+ "intensity": "high",
1174
+ "speed": "fast",
1175
+ "velocity": 0.1805,
1176
+ "acceleration": 16.9712,
1177
+ "fluidity": 0.049,
1178
+ "expansion": 0.227,
1179
+ "total_displacement": 0.0003,
1180
+ "center_displacement": {
1181
+ "x": 0.0001,
1182
+ "y": 0.0003
1183
+ }
1184
+ }
1185
+ },
1186
+ {
1187
+ "frame_index": 65,
1188
+ "timestamp": 1.0833333333333333,
1189
+ "metrics": {
1190
+ "direction": "down",
1191
+ "intensity": "high",
1192
+ "speed": "fast",
1193
+ "velocity": 0.3465,
1194
+ "acceleration": 24.1562,
1195
+ "fluidity": 0.043,
1196
+ "expansion": 0.231,
1197
+ "total_displacement": 0.0107,
1198
+ "center_displacement": {
1199
+ "x": 0.0016,
1200
+ "y": 0.0106
1201
+ }
1202
+ }
1203
+ },
1204
+ {
1205
+ "frame_index": 66,
1206
+ "timestamp": 1.1,
1207
+ "metrics": {
1208
+ "direction": "stationary",
1209
+ "intensity": "high",
1210
+ "speed": "fast",
1211
+ "velocity": 0.206,
1212
+ "acceleration": 24.6307,
1213
+ "fluidity": 0.037,
1214
+ "expansion": 0.231,
1215
+ "total_displacement": 0.0011,
1216
+ "center_displacement": {
1217
+ "x": 0.001,
1218
+ "y": 0.0005
1219
+ }
1220
+ }
1221
+ },
1222
+ {
1223
+ "frame_index": 67,
1224
+ "timestamp": 1.1166666666666667,
1225
+ "metrics": {
1226
+ "direction": "stationary",
1227
+ "intensity": "high",
1228
+ "speed": "fast",
1229
+ "velocity": 0.2545,
1230
+ "acceleration": 19.6865,
1231
+ "fluidity": 0.032,
1232
+ "expansion": 0.235,
1233
+ "total_displacement": 0.0047,
1234
+ "center_displacement": {
1235
+ "x": 0.0022,
1236
+ "y": 0.0042
1237
+ }
1238
+ }
1239
+ },
1240
+ {
1241
+ "frame_index": 68,
1242
+ "timestamp": 1.1333333333333333,
1243
+ "metrics": {
1244
+ "direction": "stationary",
1245
+ "intensity": "high",
1246
+ "speed": "fast",
1247
+ "velocity": 0.2361,
1248
+ "acceleration": 19.3326,
1249
+ "fluidity": 0.028,
1250
+ "expansion": 0.237,
1251
+ "total_displacement": 0.0023,
1252
+ "center_displacement": {
1253
+ "x": 0.0014,
1254
+ "y": 0.0018
1255
+ }
1256
+ }
1257
+ },
1258
+ {
1259
+ "frame_index": 69,
1260
+ "timestamp": 1.15,
1261
+ "metrics": {
1262
+ "direction": "stationary",
1263
+ "intensity": "high",
1264
+ "speed": "fast",
1265
+ "velocity": 0.1866,
1266
+ "acceleration": 17.2203,
1267
+ "fluidity": 0.025,
1268
+ "expansion": 0.237,
1269
+ "total_displacement": 0.0008,
1270
+ "center_displacement": {
1271
+ "x": 0.0005,
1272
+ "y": 0.0007
1273
+ }
1274
+ }
1275
+ },
1276
+ {
1277
+ "frame_index": 70,
1278
+ "timestamp": 1.1666666666666667,
1279
+ "metrics": {
1280
+ "direction": "stationary",
1281
+ "intensity": "high",
1282
+ "speed": "fast",
1283
+ "velocity": 0.2468,
1284
+ "acceleration": 17.9569,
1285
+ "fluidity": 0.021,
1286
+ "expansion": 0.242,
1287
+ "total_displacement": 0.0052,
1288
+ "center_displacement": {
1289
+ "x": 0.0044,
1290
+ "y": -0.0028
1291
+ }
1292
+ }
1293
+ },
1294
+ {
1295
+ "frame_index": 71,
1296
+ "timestamp": 1.1833333333333333,
1297
+ "metrics": {
1298
+ "direction": "stationary",
1299
+ "intensity": "high",
1300
+ "speed": "fast",
1301
+ "velocity": 0.1892,
1302
+ "acceleration": 16.9628,
1303
+ "fluidity": 0.019,
1304
+ "expansion": 0.242,
1305
+ "total_displacement": 0.0015,
1306
+ "center_displacement": {
1307
+ "x": 0.0011,
1308
+ "y": -0.0009
1309
+ }
1310
+ }
1311
+ },
1312
+ {
1313
+ "frame_index": 72,
1314
+ "timestamp": 1.2,
1315
+ "metrics": {
1316
+ "direction": "up",
1317
+ "intensity": "high",
1318
+ "speed": "fast",
1319
+ "velocity": 0.3082,
1320
+ "acceleration": 20.8769,
1321
+ "fluidity": 0.016,
1322
+ "expansion": 0.248,
1323
+ "total_displacement": 0.0102,
1324
+ "center_displacement": {
1325
+ "x": 0.0062,
1326
+ "y": -0.0081
1327
+ }
1328
+ }
1329
+ },
1330
+ {
1331
+ "frame_index": 73,
1332
+ "timestamp": 1.2166666666666666,
1333
+ "metrics": {
1334
+ "direction": "stationary",
1335
+ "intensity": "high",
1336
+ "speed": "fast",
1337
+ "velocity": 0.258,
1338
+ "acceleration": 18.7894,
1339
+ "fluidity": 0.014,
1340
+ "expansion": 0.249,
1341
+ "total_displacement": 0.0048,
1342
+ "center_displacement": {
1343
+ "x": 0.0009,
1344
+ "y": -0.0047
1345
+ }
1346
+ }
1347
+ },
1348
+ {
1349
+ "frame_index": 74,
1350
+ "timestamp": 1.2333333333333334,
1351
+ "metrics": {
1352
+ "direction": "up",
1353
+ "intensity": "high",
1354
+ "speed": "fast",
1355
+ "velocity": 0.4267,
1356
+ "acceleration": 24.1119,
1357
+ "fluidity": 0.012,
1358
+ "expansion": 0.252,
1359
+ "total_displacement": 0.0159,
1360
+ "center_displacement": {
1361
+ "x": 0.0049,
1362
+ "y": -0.0151
1363
+ }
1364
+ }
1365
+ },
1366
+ {
1367
+ "frame_index": 75,
1368
+ "timestamp": 1.25,
1369
+ "metrics": {
1370
+ "direction": "up",
1371
+ "intensity": "high",
1372
+ "speed": "fast",
1373
+ "velocity": 0.3443,
1374
+ "acceleration": 24.447,
1375
+ "fluidity": 0.011,
1376
+ "expansion": 0.252,
1377
+ "total_displacement": 0.0064,
1378
+ "center_displacement": {
1379
+ "x": 0.0025,
1380
+ "y": -0.0059
1381
+ }
1382
+ }
1383
+ },
1384
+ {
1385
+ "frame_index": 76,
1386
+ "timestamp": 1.2666666666666666,
1387
+ "metrics": {
1388
+ "direction": "stationary",
1389
+ "intensity": "high",
1390
+ "speed": "fast",
1391
+ "velocity": 0.2922,
1392
+ "acceleration": 20.5096,
1393
+ "fluidity": 0.009,
1394
+ "expansion": 0.252,
1395
+ "total_displacement": 0.0023,
1396
+ "center_displacement": {
1397
+ "x": 0.0005,
1398
+ "y": -0.0023
1399
+ }
1400
+ }
1401
+ },
1402
+ {
1403
+ "frame_index": 77,
1404
+ "timestamp": 1.2833333333333332,
1405
+ "metrics": {
1406
+ "direction": "up",
1407
+ "intensity": "high",
1408
+ "speed": "fast",
1409
+ "velocity": 0.4392,
1410
+ "acceleration": 25.5796,
1411
+ "fluidity": 0.008,
1412
+ "expansion": 0.251,
1413
+ "total_displacement": 0.0116,
1414
+ "center_displacement": {
1415
+ "x": 0.0045,
1416
+ "y": -0.0107
1417
+ }
1418
+ }
1419
+ },
1420
+ {
1421
+ "frame_index": 78,
1422
+ "timestamp": 1.3,
1423
+ "metrics": {
1424
+ "direction": "stationary",
1425
+ "intensity": "high",
1426
+ "speed": "fast",
1427
+ "velocity": 0.312,
1428
+ "acceleration": 25.454,
1429
+ "fluidity": 0.007,
1430
+ "expansion": 0.252,
1431
+ "total_displacement": 0.0029,
1432
+ "center_displacement": {
1433
+ "x": 0.001,
1434
+ "y": -0.0027
1435
+ }
1436
+ }
1437
+ },
1438
+ {
1439
+ "frame_index": 79,
1440
+ "timestamp": 1.3166666666666667,
1441
+ "metrics": {
1442
+ "direction": "right",
1443
+ "intensity": "high",
1444
+ "speed": "fast",
1445
+ "velocity": 0.374,
1446
+ "acceleration": 22.0903,
1447
+ "fluidity": 0.006,
1448
+ "expansion": 0.25,
1449
+ "total_displacement": 0.0075,
1450
+ "center_displacement": {
1451
+ "x": 0.0059,
1452
+ "y": -0.0048
1453
+ }
1454
+ }
1455
+ },
1456
+ {
1457
+ "frame_index": 80,
1458
+ "timestamp": 1.3333333333333333,
1459
+ "metrics": {
1460
+ "direction": "stationary",
1461
+ "intensity": "high",
1462
+ "speed": "fast",
1463
+ "velocity": 0.3019,
1464
+ "acceleration": 23.8408,
1465
+ "fluidity": 0.005,
1466
+ "expansion": 0.25,
1467
+ "total_displacement": 0.0014,
1468
+ "center_displacement": {
1469
+ "x": 0.0013,
1470
+ "y": -0.0004
1471
+ }
1472
+ }
1473
+ },
1474
+ {
1475
+ "frame_index": 81,
1476
+ "timestamp": 1.35,
1477
+ "metrics": {
1478
+ "direction": "stationary",
1479
+ "intensity": "high",
1480
+ "speed": "fast",
1481
+ "velocity": 0.2638,
1482
+ "acceleration": 18.0714,
1483
+ "fluidity": 0.005,
1484
+ "expansion": 0.248,
1485
+ "total_displacement": 0.0011,
1486
+ "center_displacement": {
1487
+ "x": 0,
1488
+ "y": -0.0011
1489
+ }
1490
+ }
1491
+ },
1492
+ {
1493
+ "frame_index": 82,
1494
+ "timestamp": 1.3666666666666667,
1495
+ "metrics": {
1496
+ "direction": "stationary",
1497
+ "intensity": "high",
1498
+ "speed": "fast",
1499
+ "velocity": 0.3077,
1500
+ "acceleration": 19.3583,
1501
+ "fluidity": 0.004,
1502
+ "expansion": 0.246,
1503
+ "total_displacement": 0.0048,
1504
+ "center_displacement": {
1505
+ "x": 0.0047,
1506
+ "y": -0.0013
1507
+ }
1508
+ }
1509
+ },
1510
+ {
1511
+ "frame_index": 83,
1512
+ "timestamp": 1.3833333333333333,
1513
+ "metrics": {
1514
+ "direction": "stationary",
1515
+ "intensity": "high",
1516
+ "speed": "fast",
1517
+ "velocity": 0.2445,
1518
+ "acceleration": 18.1099,
1519
+ "fluidity": 0.003,
1520
+ "expansion": 0.246,
1521
+ "total_displacement": 0.0017,
1522
+ "center_displacement": {
1523
+ "x": 0.0014,
1524
+ "y": -0.0011
1525
+ }
1526
+ }
1527
+ },
1528
+ {
1529
+ "frame_index": 84,
1530
+ "timestamp": 1.4,
1531
+ "metrics": {
1532
+ "direction": "right",
1533
+ "intensity": "high",
1534
+ "speed": "fast",
1535
+ "velocity": 0.2896,
1536
+ "acceleration": 17.4501,
1537
+ "fluidity": 0.003,
1538
+ "expansion": 0.245,
1539
+ "total_displacement": 0.0057,
1540
+ "center_displacement": {
1541
+ "x": 0.0057,
1542
+ "y": -0.0007
1543
+ }
1544
+ }
1545
+ },
1546
+ {
1547
+ "frame_index": 85,
1548
+ "timestamp": 1.4166666666666667,
1549
+ "metrics": {
1550
+ "direction": "stationary",
1551
+ "intensity": "high",
1552
+ "speed": "fast",
1553
+ "velocity": 0.2406,
1554
+ "acceleration": 17.0553,
1555
+ "fluidity": 0.003,
1556
+ "expansion": 0.245,
1557
+ "total_displacement": 0.002,
1558
+ "center_displacement": {
1559
+ "x": 0.002,
1560
+ "y": 0.0004
1561
+ }
1562
+ }
1563
+ },
1564
+ {
1565
+ "frame_index": 86,
1566
+ "timestamp": 1.4333333333333333,
1567
+ "metrics": {
1568
+ "direction": "stationary",
1569
+ "intensity": "high",
1570
+ "speed": "fast",
1571
+ "velocity": 0.2684,
1572
+ "acceleration": 15.824,
1573
+ "fluidity": 0.002,
1574
+ "expansion": 0.244,
1575
+ "total_displacement": 0.005,
1576
+ "center_displacement": {
1577
+ "x": 0.005,
1578
+ "y": 0.0005
1579
+ }
1580
+ }
1581
+ },
1582
+ {
1583
+ "frame_index": 87,
1584
+ "timestamp": 1.45,
1585
+ "metrics": {
1586
+ "direction": "stationary",
1587
+ "intensity": "high",
1588
+ "speed": "fast",
1589
+ "velocity": 0.22,
1590
+ "acceleration": 15.8399,
1591
+ "fluidity": 0.002,
1592
+ "expansion": 0.245,
1593
+ "total_displacement": 0.0014,
1594
+ "center_displacement": {
1595
+ "x": 0.0013,
1596
+ "y": 0.0004
1597
+ }
1598
+ }
1599
+ },
1600
+ {
1601
+ "frame_index": 88,
1602
+ "timestamp": 1.4666666666666666,
1603
+ "metrics": {
1604
+ "direction": "stationary",
1605
+ "intensity": "high",
1606
+ "speed": "fast",
1607
+ "velocity": 0.1953,
1608
+ "acceleration": 12.62,
1609
+ "fluidity": 0.002,
1610
+ "expansion": 0.245,
1611
+ "total_displacement": 0.0009,
1612
+ "center_displacement": {
1613
+ "x": 0.0009,
1614
+ "y": 0.0001
1615
+ }
1616
+ }
1617
+ },
1618
+ {
1619
+ "frame_index": 89,
1620
+ "timestamp": 1.4833333333333334,
1621
+ "metrics": {
1622
+ "direction": "stationary",
1623
+ "intensity": "high",
1624
+ "speed": "fast",
1625
+ "velocity": 0.23,
1626
+ "acceleration": 13.8316,
1627
+ "fluidity": 0.001,
1628
+ "expansion": 0.243,
1629
+ "total_displacement": 0.0039,
1630
+ "center_displacement": {
1631
+ "x": 0.0038,
1632
+ "y": -0.0009
1633
+ }
1634
+ }
1635
+ },
1636
+ {
1637
+ "frame_index": 90,
1638
+ "timestamp": 1.5,
1639
+ "metrics": {
1640
+ "direction": "stationary",
1641
+ "intensity": "high",
1642
+ "speed": "fast",
1643
+ "velocity": 0.1693,
1644
+ "acceleration": 13.6376,
1645
+ "fluidity": 0.001,
1646
+ "expansion": 0.242,
1647
+ "total_displacement": 0.0005,
1648
+ "center_displacement": {
1649
+ "x": 0.0005,
1650
+ "y": -0.0001
1651
+ }
1652
+ }
1653
+ },
1654
+ {
1655
+ "frame_index": 91,
1656
+ "timestamp": 1.5166666666666666,
1657
+ "metrics": {
1658
+ "direction": "stationary",
1659
+ "intensity": "high",
1660
+ "speed": "fast",
1661
+ "velocity": 0.1981,
1662
+ "acceleration": 12.5103,
1663
+ "fluidity": 0.001,
1664
+ "expansion": 0.24,
1665
+ "total_displacement": 0.0033,
1666
+ "center_displacement": {
1667
+ "x": 0.0031,
1668
+ "y": -0.0012
1669
+ }
1670
+ }
1671
+ },
1672
+ {
1673
+ "frame_index": 92,
1674
+ "timestamp": 1.5333333333333332,
1675
+ "metrics": {
1676
+ "direction": "stationary",
1677
+ "intensity": "high",
1678
+ "speed": "fast",
1679
+ "velocity": 0.1657,
1680
+ "acceleration": 11.9829,
1681
+ "fluidity": 0.001,
1682
+ "expansion": 0.237,
1683
+ "total_displacement": 0.0011,
1684
+ "center_displacement": {
1685
+ "x": 0.0005,
1686
+ "y": -0.001
1687
+ }
1688
+ }
1689
+ },
1690
+ {
1691
+ "frame_index": 93,
1692
+ "timestamp": 1.55,
1693
+ "metrics": {
1694
+ "direction": "stationary",
1695
+ "intensity": "high",
1696
+ "speed": "fast",
1697
+ "velocity": 0.1546,
1698
+ "acceleration": 9.8336,
1699
+ "fluidity": 0.001,
1700
+ "expansion": 0.236,
1701
+ "total_displacement": 0.0014,
1702
+ "center_displacement": {
1703
+ "x": 0.0001,
1704
+ "y": -0.0014
1705
+ }
1706
+ }
1707
+ },
1708
+ {
1709
+ "frame_index": 94,
1710
+ "timestamp": 1.5666666666666667,
1711
+ "metrics": {
1712
+ "direction": "stationary",
1713
+ "intensity": "high",
1714
+ "speed": "fast",
1715
+ "velocity": 0.1733,
1716
+ "acceleration": 9.925,
1717
+ "fluidity": 0.001,
1718
+ "expansion": 0.236,
1719
+ "total_displacement": 0.0029,
1720
+ "center_displacement": {
1721
+ "x": 0.0027,
1722
+ "y": -0.001
1723
+ }
1724
+ }
1725
+ },
1726
+ {
1727
+ "frame_index": 95,
1728
+ "timestamp": 1.5833333333333333,
1729
+ "metrics": {
1730
+ "direction": "stationary",
1731
+ "intensity": "high",
1732
+ "speed": "fast",
1733
+ "velocity": 0.138,
1734
+ "acceleration": 9.6841,
1735
+ "fluidity": 0.001,
1736
+ "expansion": 0.236,
1737
+ "total_displacement": 0.001,
1738
+ "center_displacement": {
1739
+ "x": 0.001,
1740
+ "y": 0
1741
+ }
1742
+ }
1743
+ },
1744
+ {
1745
+ "frame_index": 96,
1746
+ "timestamp": 1.6,
1747
+ "metrics": {
1748
+ "direction": "stationary",
1749
+ "intensity": "high",
1750
+ "speed": "fast",
1751
+ "velocity": 0.1584,
1752
+ "acceleration": 8.9992,
1753
+ "fluidity": 0.001,
1754
+ "expansion": 0.238,
1755
+ "total_displacement": 0.0028,
1756
+ "center_displacement": {
1757
+ "x": 0.0028,
1758
+ "y": -0.0004
1759
+ }
1760
+ }
1761
+ },
1762
+ {
1763
+ "frame_index": 97,
1764
+ "timestamp": 1.6166666666666667,
1765
+ "metrics": {
1766
+ "direction": "stationary",
1767
+ "intensity": "high",
1768
+ "speed": "fast",
1769
+ "velocity": 0.125,
1770
+ "acceleration": 9.2114,
1771
+ "fluidity": 0,
1772
+ "expansion": 0.239,
1773
+ "total_displacement": 0.0005,
1774
+ "center_displacement": {
1775
+ "x": 0.0005,
1776
+ "y": 0
1777
+ }
1778
+ }
1779
+ },
1780
+ {
1781
+ "frame_index": 98,
1782
+ "timestamp": 1.6333333333333333,
1783
+ "metrics": {
1784
+ "direction": "stationary",
1785
+ "intensity": "high",
1786
+ "speed": "fast",
1787
+ "velocity": 0.1201,
1788
+ "acceleration": 7.4065,
1789
+ "fluidity": 0,
1790
+ "expansion": 0.243,
1791
+ "total_displacement": 0.001,
1792
+ "center_displacement": {
1793
+ "x": 0.0009,
1794
+ "y": -0.0003
1795
+ }
1796
+ }
1797
+ },
1798
+ {
1799
+ "frame_index": 99,
1800
+ "timestamp": 1.65,
1801
+ "metrics": {
1802
+ "direction": "stationary",
1803
+ "intensity": "high",
1804
+ "speed": "fast",
1805
+ "velocity": 0.1079,
1806
+ "acceleration": 6.8687,
1807
+ "fluidity": 0,
1808
+ "expansion": 0.244,
1809
+ "total_displacement": 0.0005,
1810
+ "center_displacement": {
1811
+ "x": 0.0003,
1812
+ "y": -0.0004
1813
+ }
1814
+ }
1815
+ },
1816
+ {
1817
+ "frame_index": 100,
1818
+ "timestamp": 1.6666666666666667,
1819
+ "metrics": {
1820
+ "direction": "stationary",
1821
+ "intensity": "high",
1822
+ "speed": "fast",
1823
+ "velocity": 0.0935,
1824
+ "acceleration": 5.9798,
1825
+ "fluidity": 0,
1826
+ "expansion": 0.244,
1827
+ "total_displacement": 0.0003,
1828
+ "center_displacement": {
1829
+ "x": 0.0002,
1830
+ "y": -0.0003
1831
+ }
1832
+ }
1833
+ },
1834
+ {
1835
+ "frame_index": 101,
1836
+ "timestamp": 1.6833333333333333,
1837
+ "metrics": {
1838
+ "direction": "stationary",
1839
+ "intensity": "high",
1840
+ "speed": "fast",
1841
+ "velocity": 0.0962,
1842
+ "acceleration": 5.6971,
1843
+ "fluidity": 0,
1844
+ "expansion": 0.245,
1845
+ "total_displacement": 0.0011,
1846
+ "center_displacement": {
1847
+ "x": 0.001,
1848
+ "y": -0.0003
1849
+ }
1850
+ }
1851
+ },
1852
+ {
1853
+ "frame_index": 102,
1854
+ "timestamp": 1.7,
1855
+ "metrics": {
1856
+ "direction": "stationary",
1857
+ "intensity": "high",
1858
+ "speed": "fast",
1859
+ "velocity": 0.0824,
1860
+ "acceleration": 5.1041,
1861
+ "fluidity": 0,
1862
+ "expansion": 0.245,
1863
+ "total_displacement": 0.0005,
1864
+ "center_displacement": {
1865
+ "x": 0.0004,
1866
+ "y": -0.0003
1867
+ }
1868
+ }
1869
+ },
1870
+ {
1871
+ "frame_index": 103,
1872
+ "timestamp": 1.7166666666666666,
1873
+ "metrics": {
1874
+ "direction": "stationary",
1875
+ "intensity": "high",
1876
+ "speed": "fast",
1877
+ "velocity": 0.0836,
1878
+ "acceleration": 4.649,
1879
+ "fluidity": 0,
1880
+ "expansion": 0.244,
1881
+ "total_displacement": 0.001,
1882
+ "center_displacement": {
1883
+ "x": 0.001,
1884
+ "y": 0.0002
1885
+ }
1886
+ }
1887
+ },
1888
+ {
1889
+ "frame_index": 104,
1890
+ "timestamp": 1.7333333333333334,
1891
+ "metrics": {
1892
+ "direction": "stationary",
1893
+ "intensity": "high",
1894
+ "speed": "fast",
1895
+ "velocity": 0.0755,
1896
+ "acceleration": 4.1983,
1897
+ "fluidity": 0,
1898
+ "expansion": 0.243,
1899
+ "total_displacement": 0.0007,
1900
+ "center_displacement": {
1901
+ "x": 0.0007,
1902
+ "y": 0
1903
+ }
1904
+ }
1905
+ },
1906
+ {
1907
+ "frame_index": 105,
1908
+ "timestamp": 1.75,
1909
+ "metrics": {
1910
+ "direction": "stationary",
1911
+ "intensity": "high",
1912
+ "speed": "fast",
1913
+ "velocity": 0.0641,
1914
+ "acceleration": 3.8633,
1915
+ "fluidity": 0,
1916
+ "expansion": 0.243,
1917
+ "total_displacement": 0.0002,
1918
+ "center_displacement": {
1919
+ "x": 0.0002,
1920
+ "y": 0
1921
+ }
1922
+ }
1923
+ },
1924
+ {
1925
+ "frame_index": 106,
1926
+ "timestamp": 1.7666666666666666,
1927
+ "metrics": {
1928
+ "direction": "stationary",
1929
+ "intensity": "high",
1930
+ "speed": "fast",
1931
+ "velocity": 0.0622,
1932
+ "acceleration": 3.3395,
1933
+ "fluidity": 0,
1934
+ "expansion": 0.242,
1935
+ "total_displacement": 0.0004,
1936
+ "center_displacement": {
1937
+ "x": 0.0004,
1938
+ "y": 0
1939
+ }
1940
+ }
1941
+ },
1942
+ {
1943
+ "frame_index": 107,
1944
+ "timestamp": 1.7833333333333332,
1945
+ "metrics": {
1946
+ "direction": "stationary",
1947
+ "intensity": "high",
1948
+ "speed": "slow",
1949
+ "velocity": 0.0511,
1950
+ "acceleration": 3.1939,
1951
+ "fluidity": 0,
1952
+ "expansion": 0.242,
1953
+ "total_displacement": 0,
1954
+ "center_displacement": {
1955
+ "x": 0,
1956
+ "y": 0
1957
+ }
1958
+ }
1959
+ },
1960
+ {
1961
+ "frame_index": 108,
1962
+ "timestamp": 1.8,
1963
+ "metrics": {
1964
+ "direction": "stationary",
1965
+ "intensity": "high",
1966
+ "speed": "fast",
1967
+ "velocity": 0.0471,
1968
+ "acceleration": 2.7221,
1969
+ "fluidity": 0,
1970
+ "expansion": 0.241,
1971
+ "total_displacement": 0.0002,
1972
+ "center_displacement": {
1973
+ "x": 0.0002,
1974
+ "y": -0.0001
1975
+ }
1976
+ }
1977
+ },
1978
+ {
1979
+ "frame_index": 109,
1980
+ "timestamp": 1.8166666666666667,
1981
+ "metrics": {
1982
+ "direction": "stationary",
1983
+ "intensity": "high",
1984
+ "speed": "slow",
1985
+ "velocity": 0.0422,
1986
+ "acceleration": 2.3512,
1987
+ "fluidity": 0.063,
1988
+ "expansion": 0.241,
1989
+ "total_displacement": 0.0001,
1990
+ "center_displacement": {
1991
+ "x": 0.0001,
1992
+ "y": 0
1993
+ }
1994
+ }
1995
+ },
1996
+ {
1997
+ "frame_index": 110,
1998
+ "timestamp": 1.8333333333333333,
1999
+ "metrics": {
2000
+ "direction": "stationary",
2001
+ "intensity": "high",
2002
+ "speed": "fast",
2003
+ "velocity": 0.0424,
2004
+ "acceleration": 2.3805,
2005
+ "fluidity": 0.016,
2006
+ "expansion": 0.24,
2007
+ "total_displacement": 0.0005,
2008
+ "center_displacement": {
2009
+ "x": 0.0005,
2010
+ "y": 0.0001
2011
+ }
2012
+ }
2013
+ },
2014
+ {
2015
+ "frame_index": 111,
2016
+ "timestamp": 1.8499999999999999,
2017
+ "metrics": {
2018
+ "direction": "stationary",
2019
+ "intensity": "high",
2020
+ "speed": "fast",
2021
+ "velocity": 0.037,
2022
+ "acceleration": 2.0613,
2023
+ "fluidity": 0.02,
2024
+ "expansion": 0.24,
2025
+ "total_displacement": 0.0003,
2026
+ "center_displacement": {
2027
+ "x": 0.0003,
2028
+ "y": 0.0001
2029
+ }
2030
+ }
2031
+ },
2032
+ {
2033
+ "frame_index": 112,
2034
+ "timestamp": 1.8666666666666667,
2035
+ "metrics": {
2036
+ "direction": "stationary",
2037
+ "intensity": "high",
2038
+ "speed": "slow",
2039
+ "velocity": 0.0325,
2040
+ "acceleration": 1.8143,
2041
+ "fluidity": 0.025,
2042
+ "expansion": 0.239,
2043
+ "total_displacement": 0.0001,
2044
+ "center_displacement": {
2045
+ "x": 0.0001,
2046
+ "y": 0
2047
+ }
2048
+ }
2049
+ },
2050
+ {
2051
+ "frame_index": 113,
2052
+ "timestamp": 1.8833333333333333,
2053
+ "metrics": {
2054
+ "direction": "stationary",
2055
+ "intensity": "high",
2056
+ "speed": "fast",
2057
+ "velocity": 0.0341,
2058
+ "acceleration": 1.8024,
2059
+ "fluidity": 0.015,
2060
+ "expansion": 0.239,
2061
+ "total_displacement": 0.0004,
2062
+ "center_displacement": {
2063
+ "x": 0.0003,
2064
+ "y": 0.0002
2065
+ }
2066
+ }
2067
+ },
2068
+ {
2069
+ "frame_index": 114,
2070
+ "timestamp": 1.9,
2071
+ "metrics": {
2072
+ "direction": "stationary",
2073
+ "intensity": "high",
2074
+ "speed": "fast",
2075
+ "velocity": 0.0295,
2076
+ "acceleration": 1.5649,
2077
+ "fluidity": 0.015,
2078
+ "expansion": 0.239,
2079
+ "total_displacement": 0.0002,
2080
+ "center_displacement": {
2081
+ "x": 0.0002,
2082
+ "y": 0.0002
2083
+ }
2084
+ }
2085
+ },
2086
+ {
2087
+ "frame_index": 115,
2088
+ "timestamp": 1.9166666666666667,
2089
+ "metrics": {
2090
+ "direction": "stationary",
2091
+ "intensity": "high",
2092
+ "speed": "slow",
2093
+ "velocity": 0.0265,
2094
+ "acceleration": 1.3648,
2095
+ "fluidity": 0.014,
2096
+ "expansion": 0.239,
2097
+ "total_displacement": 0.0002,
2098
+ "center_displacement": {
2099
+ "x": 0.0001,
2100
+ "y": 0.0001
2101
+ }
2102
+ }
2103
+ },
2104
+ {
2105
+ "frame_index": 116,
2106
+ "timestamp": 1.9333333333333333,
2107
+ "metrics": {
2108
+ "direction": "stationary",
2109
+ "intensity": "high",
2110
+ "speed": "slow",
2111
+ "velocity": 0.0239,
2112
+ "acceleration": 1.2534,
2113
+ "fluidity": 0.011,
2114
+ "expansion": 0.239,
2115
+ "total_displacement": 0.0001,
2116
+ "center_displacement": {
2117
+ "x": 0,
2118
+ "y": 0.0001
2119
+ }
2120
+ }
2121
+ },
2122
+ {
2123
+ "frame_index": 117,
2124
+ "timestamp": 1.95,
2125
+ "metrics": {
2126
+ "direction": "stationary",
2127
+ "intensity": "low",
2128
+ "speed": "slow",
2129
+ "velocity": 0.0214,
2130
+ "acceleration": 1.0506,
2131
+ "fluidity": 0.236,
2132
+ "expansion": 0.239,
2133
+ "total_displacement": 0.0001,
2134
+ "center_displacement": {
2135
+ "x": 0,
2136
+ "y": 0.0001
2137
+ }
2138
+ }
2139
+ },
2140
+ {
2141
+ "frame_index": 118,
2142
+ "timestamp": 1.9666666666666666,
2143
+ "metrics": {
2144
+ "direction": "stationary",
2145
+ "intensity": "high",
2146
+ "speed": "fast",
2147
+ "velocity": 0.0214,
2148
+ "acceleration": 1.0392,
2149
+ "fluidity": 0.065,
2150
+ "expansion": 0.239,
2151
+ "total_displacement": 0.0002,
2152
+ "center_displacement": {
2153
+ "x": 0.0002,
2154
+ "y": 0.0001
2155
+ }
2156
+ }
2157
+ },
2158
+ {
2159
+ "frame_index": 119,
2160
+ "timestamp": 1.9833333333333334,
2161
+ "metrics": {
2162
+ "direction": "stationary",
2163
+ "intensity": "high",
2164
+ "speed": "slow",
2165
+ "velocity": 0.0182,
2166
+ "acceleration": 0.9469,
2167
+ "fluidity": 0.078,
2168
+ "expansion": 0.239,
2169
+ "total_displacement": 0.0001,
2170
+ "center_displacement": {
2171
+ "x": 0.0001,
2172
+ "y": 0
2173
+ }
2174
+ }
2175
+ },
2176
+ {
2177
+ "frame_index": 120,
2178
+ "timestamp": 2,
2179
+ "metrics": {
2180
+ "direction": "stationary",
2181
+ "intensity": "high",
2182
+ "speed": "fast",
2183
+ "velocity": 0.0189,
2184
+ "acceleration": 0.8829,
2185
+ "fluidity": 0.095,
2186
+ "expansion": 0.239,
2187
+ "total_displacement": 0.0002,
2188
+ "center_displacement": {
2189
+ "x": 0,
2190
+ "y": -0.0002
2191
+ }
2192
+ }
2193
+ },
2194
+ {
2195
+ "frame_index": 121,
2196
+ "timestamp": 2.0166666666666666,
2197
+ "metrics": {
2198
+ "direction": "stationary",
2199
+ "intensity": "high",
2200
+ "speed": "fast",
2201
+ "velocity": 0.0177,
2202
+ "acceleration": 0.7531,
2203
+ "fluidity": 0.13,
2204
+ "expansion": 0.239,
2205
+ "total_displacement": 0.0002,
2206
+ "center_displacement": {
2207
+ "x": 0.0001,
2208
+ "y": -0.0002
2209
+ }
2210
+ }
2211
+ },
2212
+ {
2213
+ "frame_index": 122,
2214
+ "timestamp": 2.033333333333333,
2215
+ "metrics": {
2216
+ "direction": "stationary",
2217
+ "intensity": "high",
2218
+ "speed": "fast",
2219
+ "velocity": 0.0176,
2220
+ "acceleration": 0.6967,
2221
+ "fluidity": 0.076,
2222
+ "expansion": 0.238,
2223
+ "total_displacement": 0.0003,
2224
+ "center_displacement": {
2225
+ "x": 0,
2226
+ "y": 0.0003
2227
+ }
2228
+ }
2229
+ },
2230
+ {
2231
+ "frame_index": 123,
2232
+ "timestamp": 2.05,
2233
+ "metrics": {
2234
+ "direction": "stationary",
2235
+ "intensity": "high",
2236
+ "speed": "slow",
2237
+ "velocity": 0.0157,
2238
+ "acceleration": 0.6898,
2239
+ "fluidity": 0.075,
2240
+ "expansion": 0.238,
2241
+ "total_displacement": 0.0001,
2242
+ "center_displacement": {
2243
+ "x": 0,
2244
+ "y": 0.0001
2245
+ }
2246
+ }
2247
+ },
2248
+ {
2249
+ "frame_index": 124,
2250
+ "timestamp": 2.0666666666666664,
2251
+ "metrics": {
2252
+ "direction": "stationary",
2253
+ "intensity": "high",
2254
+ "speed": "slow",
2255
+ "velocity": 0.0142,
2256
+ "acceleration": 0.5736,
2257
+ "fluidity": 0.127,
2258
+ "expansion": 0.238,
2259
+ "total_displacement": 0.0001,
2260
+ "center_displacement": {
2261
+ "x": 0,
2262
+ "y": 0.0001
2263
+ }
2264
+ }
2265
+ },
2266
+ {
2267
+ "frame_index": 125,
2268
+ "timestamp": 2.0833333333333335,
2269
+ "metrics": {
2270
+ "direction": "stationary",
2271
+ "intensity": "high",
2272
+ "speed": "fast",
2273
+ "velocity": 0.0189,
2274
+ "acceleration": 0.8216,
2275
+ "fluidity": 0.07,
2276
+ "expansion": 0.238,
2277
+ "total_displacement": 0.0005,
2278
+ "center_displacement": {
2279
+ "x": -0.0003,
2280
+ "y": 0.0004
2281
+ }
2282
+ }
2283
+ },
2284
+ {
2285
+ "frame_index": 126,
2286
+ "timestamp": 2.1,
2287
+ "metrics": {
2288
+ "direction": "stationary",
2289
+ "intensity": "high",
2290
+ "speed": "fast",
2291
+ "velocity": 0.017,
2292
+ "acceleration": 0.6557,
2293
+ "fluidity": 0.068,
2294
+ "expansion": 0.238,
2295
+ "total_displacement": 0.0003,
2296
+ "center_displacement": {
2297
+ "x": -0.0001,
2298
+ "y": 0.0003
2299
+ }
2300
+ }
2301
+ },
2302
+ {
2303
+ "frame_index": 127,
2304
+ "timestamp": 2.1166666666666667,
2305
+ "metrics": {
2306
+ "direction": "stationary",
2307
+ "intensity": "high",
2308
+ "speed": "fast",
2309
+ "velocity": 0.0224,
2310
+ "acceleration": 0.8202,
2311
+ "fluidity": 0.066,
2312
+ "expansion": 0.238,
2313
+ "total_displacement": 0.0007,
2314
+ "center_displacement": {
2315
+ "x": -0.0003,
2316
+ "y": 0.0006
2317
+ }
2318
+ }
2319
+ },
2320
+ {
2321
+ "frame_index": 128,
2322
+ "timestamp": 2.1333333333333333,
2323
+ "metrics": {
2324
+ "direction": "stationary",
2325
+ "intensity": "high",
2326
+ "speed": "fast",
2327
+ "velocity": 0.0225,
2328
+ "acceleration": 0.6904,
2329
+ "fluidity": 0.051,
2330
+ "expansion": 0.238,
2331
+ "total_displacement": 0.0005,
2332
+ "center_displacement": {
2333
+ "x": -0.0001,
2334
+ "y": 0.0005
2335
+ }
2336
+ }
2337
+ },
2338
+ {
2339
+ "frame_index": 129,
2340
+ "timestamp": 2.15,
2341
+ "metrics": {
2342
+ "direction": "stationary",
2343
+ "intensity": "high",
2344
+ "speed": "fast",
2345
+ "velocity": 0.0205,
2346
+ "acceleration": 0.7196,
2347
+ "fluidity": 0.046,
2348
+ "expansion": 0.238,
2349
+ "total_displacement": 0.0003,
2350
+ "center_displacement": {
2351
+ "x": -0.0001,
2352
+ "y": 0.0003
2353
+ }
2354
+ }
2355
+ },
2356
+ {
2357
+ "frame_index": 130,
2358
+ "timestamp": 2.1666666666666665,
2359
+ "metrics": {
2360
+ "direction": "stationary",
2361
+ "intensity": "high",
2362
+ "speed": "slow",
2363
+ "velocity": 0.0175,
2364
+ "acceleration": 0.7882,
2365
+ "fluidity": 0.041,
2366
+ "expansion": 0.237,
2367
+ "total_displacement": 0.0001,
2368
+ "center_displacement": {
2369
+ "x": -0.0001,
2370
+ "y": 0
2371
+ }
2372
+ }
2373
+ },
2374
+ {
2375
+ "frame_index": 131,
2376
+ "timestamp": 2.183333333333333,
2377
+ "metrics": {
2378
+ "direction": "stationary",
2379
+ "intensity": "medium",
2380
+ "speed": "slow",
2381
+ "velocity": 0.016,
2382
+ "acceleration": 0.5634,
2383
+ "fluidity": 0.215,
2384
+ "expansion": 0.236,
2385
+ "total_displacement": 0.0001,
2386
+ "center_displacement": {
2387
+ "x": 0,
2388
+ "y": 0
2389
+ }
2390
+ }
2391
+ },
2392
+ {
2393
+ "frame_index": 132,
2394
+ "timestamp": 2.2,
2395
+ "metrics": {
2396
+ "direction": "stationary",
2397
+ "intensity": "high",
2398
+ "speed": "fast",
2399
+ "velocity": 0.0173,
2400
+ "acceleration": 0.689,
2401
+ "fluidity": 0.076,
2402
+ "expansion": 0.234,
2403
+ "total_displacement": 0.0003,
2404
+ "center_displacement": {
2405
+ "x": 0,
2406
+ "y": -0.0002
2407
+ }
2408
+ }
2409
+ },
2410
+ {
2411
+ "frame_index": 133,
2412
+ "timestamp": 2.216666666666667,
2413
+ "metrics": {
2414
+ "direction": "stationary",
2415
+ "intensity": "high",
2416
+ "speed": "slow",
2417
+ "velocity": 0.0143,
2418
+ "acceleration": 0.6405,
2419
+ "fluidity": 0.083,
2420
+ "expansion": 0.234,
2421
+ "total_displacement": 0.0001,
2422
+ "center_displacement": {
2423
+ "x": 0,
2424
+ "y": -0.0001
2425
+ }
2426
+ }
2427
+ },
2428
+ {
2429
+ "frame_index": 134,
2430
+ "timestamp": 2.2333333333333334,
2431
+ "metrics": {
2432
+ "direction": "stationary",
2433
+ "intensity": "high",
2434
+ "speed": "fast",
2435
+ "velocity": 0.0686,
2436
+ "acceleration": 3.7773,
2437
+ "fluidity": 0.093,
2438
+ "expansion": 0.23,
2439
+ "total_displacement": 0.0038,
2440
+ "center_displacement": {
2441
+ "x": 0,
2442
+ "y": 0.0038
2443
+ }
2444
+ }
2445
+ },
2446
+ {
2447
+ "frame_index": 135,
2448
+ "timestamp": 2.25,
2449
+ "metrics": {
2450
+ "direction": "stationary",
2451
+ "intensity": "high",
2452
+ "speed": "fast",
2453
+ "velocity": 0.0536,
2454
+ "acceleration": 2.9603,
2455
+ "fluidity": 0.063,
2456
+ "expansion": 0.229,
2457
+ "total_displacement": 0.0019,
2458
+ "center_displacement": {
2459
+ "x": -0.0001,
2460
+ "y": 0.0019
2461
+ }
2462
+ }
2463
+ },
2464
+ {
2465
+ "frame_index": 136,
2466
+ "timestamp": 2.2666666666666666,
2467
+ "metrics": {
2468
+ "direction": "stationary",
2469
+ "intensity": "high",
2470
+ "speed": "fast",
2471
+ "velocity": 0.0569,
2472
+ "acceleration": 2.1957,
2473
+ "fluidity": 0.06,
2474
+ "expansion": 0.229,
2475
+ "total_displacement": 0.0015,
2476
+ "center_displacement": {
2477
+ "x": 0,
2478
+ "y": 0.0015
2479
+ }
2480
+ }
2481
+ },
2482
+ {
2483
+ "frame_index": 137,
2484
+ "timestamp": 2.283333333333333,
2485
+ "metrics": {
2486
+ "direction": "down",
2487
+ "intensity": "high",
2488
+ "speed": "fast",
2489
+ "velocity": 0.2019,
2490
+ "acceleration": 10.2968,
2491
+ "fluidity": 0.054,
2492
+ "expansion": 0.227,
2493
+ "total_displacement": 0.0105,
2494
+ "center_displacement": {
2495
+ "x": -0.0003,
2496
+ "y": 0.0105
2497
+ }
2498
+ }
2499
+ },
2500
+ {
2501
+ "frame_index": 138,
2502
+ "timestamp": 2.3,
2503
+ "metrics": {
2504
+ "direction": "stationary",
2505
+ "intensity": "high",
2506
+ "speed": "fast",
2507
+ "velocity": 0.1156,
2508
+ "acceleration": 11.0428,
2509
+ "fluidity": 0.044,
2510
+ "expansion": 0.226,
2511
+ "total_displacement": 0.0025,
2512
+ "center_displacement": {
2513
+ "x": -0.0002,
2514
+ "y": 0.0025
2515
+ }
2516
+ }
2517
+ },
2518
+ {
2519
+ "frame_index": 139,
2520
+ "timestamp": 2.3166666666666664,
2521
+ "metrics": {
2522
+ "direction": "down",
2523
+ "intensity": "high",
2524
+ "speed": "fast",
2525
+ "velocity": 0.2797,
2526
+ "acceleration": 14.8018,
2527
+ "fluidity": 0.04,
2528
+ "expansion": 0.221,
2529
+ "total_displacement": 0.0124,
2530
+ "center_displacement": {
2531
+ "x": -0.0003,
2532
+ "y": 0.0124
2533
+ }
2534
+ }
2535
+ },
2536
+ {
2537
+ "frame_index": 140,
2538
+ "timestamp": 2.3333333333333335,
2539
+ "metrics": {
2540
+ "direction": "stationary",
2541
+ "intensity": "high",
2542
+ "speed": "fast",
2543
+ "velocity": 0.2214,
2544
+ "acceleration": 15.8765,
2545
+ "fluidity": 0.034,
2546
+ "expansion": 0.221,
2547
+ "total_displacement": 0.0048,
2548
+ "center_displacement": {
2549
+ "x": 0,
2550
+ "y": 0.0048
2551
+ }
2552
+ }
2553
+ },
2554
+ {
2555
+ "frame_index": 141,
2556
+ "timestamp": 2.35,
2557
+ "metrics": {
2558
+ "direction": "stationary",
2559
+ "intensity": "high",
2560
+ "speed": "slow",
2561
+ "velocity": 0.1555,
2562
+ "acceleration": 14.678,
2563
+ "fluidity": 0.03,
2564
+ "expansion": 0.22,
2565
+ "total_displacement": 0.0001,
2566
+ "center_displacement": {
2567
+ "x": 0,
2568
+ "y": -0.0001
2569
+ }
2570
+ }
2571
+ },
2572
+ {
2573
+ "frame_index": 142,
2574
+ "timestamp": 2.3666666666666667,
2575
+ "metrics": {
2576
+ "direction": "down",
2577
+ "intensity": "high",
2578
+ "speed": "fast",
2579
+ "velocity": 0.3565,
2580
+ "acceleration": 22.8035,
2581
+ "fluidity": 0.026,
2582
+ "expansion": 0.218,
2583
+ "total_displacement": 0.0128,
2584
+ "center_displacement": {
2585
+ "x": 0,
2586
+ "y": 0.0128
2587
+ }
2588
+ }
2589
+ },
2590
+ {
2591
+ "frame_index": 143,
2592
+ "timestamp": 2.3833333333333333,
2593
+ "metrics": {
2594
+ "direction": "stationary",
2595
+ "intensity": "high",
2596
+ "speed": "fast",
2597
+ "velocity": 0.2303,
2598
+ "acceleration": 22.0639,
2599
+ "fluidity": 0.022,
2600
+ "expansion": 0.218,
2601
+ "total_displacement": 0.0031,
2602
+ "center_displacement": {
2603
+ "x": 0.0001,
2604
+ "y": 0.0031
2605
+ }
2606
+ }
2607
+ },
2608
+ {
2609
+ "frame_index": 144,
2610
+ "timestamp": 2.4,
2611
+ "metrics": {
2612
+ "direction": "down",
2613
+ "intensity": "high",
2614
+ "speed": "fast",
2615
+ "velocity": 0.3683,
2616
+ "acceleration": 23.0341,
2617
+ "fluidity": 0.019,
2618
+ "expansion": 0.214,
2619
+ "total_displacement": 0.0122,
2620
+ "center_displacement": {
2621
+ "x": 0.0008,
2622
+ "y": 0.0122
2623
+ }
2624
+ }
2625
+ },
2626
+ {
2627
+ "frame_index": 145,
2628
+ "timestamp": 2.4166666666666665,
2629
+ "metrics": {
2630
+ "direction": "stationary",
2631
+ "intensity": "high",
2632
+ "speed": "fast",
2633
+ "velocity": 0.2725,
2634
+ "acceleration": 25.916,
2635
+ "fluidity": 0.017,
2636
+ "expansion": 0.214,
2637
+ "total_displacement": 0.0023,
2638
+ "center_displacement": {
2639
+ "x": 0.0001,
2640
+ "y": 0.0022
2641
+ }
2642
+ }
2643
+ },
2644
+ {
2645
+ "frame_index": 146,
2646
+ "timestamp": 2.433333333333333,
2647
+ "metrics": {
2648
+ "direction": "stationary",
2649
+ "intensity": "high",
2650
+ "speed": "fast",
2651
+ "velocity": 0.2323,
2652
+ "acceleration": 18.9078,
2653
+ "fluidity": 0.015,
2654
+ "expansion": 0.213,
2655
+ "total_displacement": 0.001,
2656
+ "center_displacement": {
2657
+ "x": 0.0009,
2658
+ "y": -0.0003
2659
+ }
2660
+ }
2661
+ },
2662
+ {
2663
+ "frame_index": 147,
2664
+ "timestamp": 2.45,
2665
+ "metrics": {
2666
+ "direction": "stationary",
2667
+ "intensity": "high",
2668
+ "speed": "fast",
2669
+ "velocity": 0.2271,
2670
+ "acceleration": 17.3051,
2671
+ "fluidity": 0.013,
2672
+ "expansion": 0.213,
2673
+ "total_displacement": 0.0006,
2674
+ "center_displacement": {
2675
+ "x": 0.0005,
2676
+ "y": 0.0004
2677
+ }
2678
+ }
2679
+ },
2680
+ {
2681
+ "frame_index": 148,
2682
+ "timestamp": 2.466666666666667,
2683
+ "metrics": {
2684
+ "direction": "stationary",
2685
+ "intensity": "high",
2686
+ "speed": "fast",
2687
+ "velocity": 0.1935,
2688
+ "acceleration": 15.6304,
2689
+ "fluidity": 0.011,
2690
+ "expansion": 0.213,
2691
+ "total_displacement": 0.0007,
2692
+ "center_displacement": {
2693
+ "x": 0.0006,
2694
+ "y": -0.0003
2695
+ }
2696
+ }
2697
+ },
2698
+ {
2699
+ "frame_index": 149,
2700
+ "timestamp": 2.4833333333333334,
2701
+ "metrics": {
2702
+ "direction": "stationary",
2703
+ "intensity": "high",
2704
+ "speed": "fast",
2705
+ "velocity": 0.2306,
2706
+ "acceleration": 16.3765,
2707
+ "fluidity": 0.01,
2708
+ "expansion": 0.212,
2709
+ "total_displacement": 0.0045,
2710
+ "center_displacement": {
2711
+ "x": 0.0031,
2712
+ "y": -0.0033
2713
+ }
2714
+ }
2715
+ },
2716
+ {
2717
+ "frame_index": 150,
2718
+ "timestamp": 2.5,
2719
+ "metrics": {
2720
+ "direction": "stationary",
2721
+ "intensity": "high",
2722
+ "speed": "fast",
2723
+ "velocity": 0.2042,
2724
+ "acceleration": 13.8859,
2725
+ "fluidity": 0.008,
2726
+ "expansion": 0.211,
2727
+ "total_displacement": 0.0028,
2728
+ "center_displacement": {
2729
+ "x": 0.0009,
2730
+ "y": -0.0026
2731
+ }
2732
+ }
2733
+ },
2734
+ {
2735
+ "frame_index": 151,
2736
+ "timestamp": 2.5166666666666666,
2737
+ "metrics": {
2738
+ "direction": "up",
2739
+ "intensity": "high",
2740
+ "speed": "fast",
2741
+ "velocity": 0.3447,
2742
+ "acceleration": 20.2457,
2743
+ "fluidity": 0.007,
2744
+ "expansion": 0.21,
2745
+ "total_displacement": 0.0125,
2746
+ "center_displacement": {
2747
+ "x": 0.003,
2748
+ "y": -0.0121
2749
+ }
2750
+ }
2751
+ },
2752
+ {
2753
+ "frame_index": 152,
2754
+ "timestamp": 2.533333333333333,
2755
+ "metrics": {
2756
+ "direction": "stationary",
2757
+ "intensity": "high",
2758
+ "speed": "fast",
2759
+ "velocity": 0.2624,
2760
+ "acceleration": 19.8363,
2761
+ "fluidity": 0.006,
2762
+ "expansion": 0.21,
2763
+ "total_displacement": 0.0045,
2764
+ "center_displacement": {
2765
+ "x": 0.0011,
2766
+ "y": -0.0044
2767
+ }
2768
+ }
2769
+ },
2770
+ {
2771
+ "frame_index": 153,
2772
+ "timestamp": 2.55,
2773
+ "metrics": {
2774
+ "direction": "stationary",
2775
+ "intensity": "high",
2776
+ "speed": "fast",
2777
+ "velocity": 0.2262,
2778
+ "acceleration": 16.141,
2779
+ "fluidity": 0.006,
2780
+ "expansion": 0.211,
2781
+ "total_displacement": 0.0016,
2782
+ "center_displacement": {
2783
+ "x": 0.0007,
2784
+ "y": -0.0014
2785
+ }
2786
+ }
2787
+ },
2788
+ {
2789
+ "frame_index": 154,
2790
+ "timestamp": 2.5666666666666664,
2791
+ "metrics": {
2792
+ "direction": "up",
2793
+ "intensity": "high",
2794
+ "speed": "fast",
2795
+ "velocity": 0.4216,
2796
+ "acceleration": 25.4549,
2797
+ "fluidity": 0.005,
2798
+ "expansion": 0.206,
2799
+ "total_displacement": 0.0142,
2800
+ "center_displacement": {
2801
+ "x": 0.0032,
2802
+ "y": -0.0139
2803
+ }
2804
+ }
2805
+ },
2806
+ {
2807
+ "frame_index": 155,
2808
+ "timestamp": 2.5833333333333335,
2809
+ "metrics": {
2810
+ "direction": "stationary",
2811
+ "intensity": "high",
2812
+ "speed": "fast",
2813
+ "velocity": 0.2673,
2814
+ "acceleration": 25.7738,
2815
+ "fluidity": 0.004,
2816
+ "expansion": 0.206,
2817
+ "total_displacement": 0.0026,
2818
+ "center_displacement": {
2819
+ "x": 0.0011,
2820
+ "y": -0.0024
2821
+ }
2822
+ }
2823
+ },
2824
+ {
2825
+ "frame_index": 156,
2826
+ "timestamp": 2.6,
2827
+ "metrics": {
2828
+ "direction": "up",
2829
+ "intensity": "high",
2830
+ "speed": "fast",
2831
+ "velocity": 0.3323,
2832
+ "acceleration": 20.6687,
2833
+ "fluidity": 0.004,
2834
+ "expansion": 0.201,
2835
+ "total_displacement": 0.0069,
2836
+ "center_displacement": {
2837
+ "x": 0.0023,
2838
+ "y": -0.0065
2839
+ }
2840
+ }
2841
+ },
2842
+ {
2843
+ "frame_index": 157,
2844
+ "timestamp": 2.6166666666666667,
2845
+ "metrics": {
2846
+ "direction": "stationary",
2847
+ "intensity": "high",
2848
+ "speed": "fast",
2849
+ "velocity": 0.3073,
2850
+ "acceleration": 21.0621,
2851
+ "fluidity": 0.003,
2852
+ "expansion": 0.2,
2853
+ "total_displacement": 0.0035,
2854
+ "center_displacement": {
2855
+ "x": 0.001,
2856
+ "y": -0.0033
2857
+ }
2858
+ }
2859
+ },
2860
+ {
2861
+ "frame_index": 158,
2862
+ "timestamp": 2.6333333333333333,
2863
+ "metrics": {
2864
+ "direction": "stationary",
2865
+ "intensity": "high",
2866
+ "speed": "fast",
2867
+ "velocity": 0.2991,
2868
+ "acceleration": 18.0948,
2869
+ "fluidity": 0.003,
2870
+ "expansion": 0.195,
2871
+ "total_displacement": 0.0048,
2872
+ "center_displacement": {
2873
+ "x": 0.0034,
2874
+ "y": -0.0034
2875
+ }
2876
+ }
2877
+ },
2878
+ {
2879
+ "frame_index": 159,
2880
+ "timestamp": 2.65,
2881
+ "metrics": {
2882
+ "direction": "stationary",
2883
+ "intensity": "high",
2884
+ "speed": "fast",
2885
+ "velocity": 0.2577,
2886
+ "acceleration": 17.9181,
2887
+ "fluidity": 0.002,
2888
+ "expansion": 0.194,
2889
+ "total_displacement": 0.0015,
2890
+ "center_displacement": {
2891
+ "x": 0.0007,
2892
+ "y": -0.0014
2893
+ }
2894
+ }
2895
+ },
2896
+ {
2897
+ "frame_index": 160,
2898
+ "timestamp": 2.6666666666666665,
2899
+ "metrics": {
2900
+ "direction": "stationary",
2901
+ "intensity": "high",
2902
+ "speed": "fast",
2903
+ "velocity": 0.2337,
2904
+ "acceleration": 14.5879,
2905
+ "fluidity": 0.002,
2906
+ "expansion": 0.194,
2907
+ "total_displacement": 0.0012,
2908
+ "center_displacement": {
2909
+ "x": 0.0005,
2910
+ "y": -0.0011
2911
+ }
2912
+ }
2913
+ },
2914
+ {
2915
+ "frame_index": 161,
2916
+ "timestamp": 2.683333333333333,
2917
+ "metrics": {
2918
+ "direction": "stationary",
2919
+ "intensity": "high",
2920
+ "speed": "fast",
2921
+ "velocity": 0.2467,
2922
+ "acceleration": 14.5353,
2923
+ "fluidity": 0.002,
2924
+ "expansion": 0.191,
2925
+ "total_displacement": 0.0033,
2926
+ "center_displacement": {
2927
+ "x": 0.0031,
2928
+ "y": -0.0009
2929
+ }
2930
+ }
2931
+ },
2932
+ {
2933
+ "frame_index": 162,
2934
+ "timestamp": 2.7,
2935
+ "metrics": {
2936
+ "direction": "stationary",
2937
+ "intensity": "high",
2938
+ "speed": "fast",
2939
+ "velocity": 0.2213,
2940
+ "acceleration": 12.4955,
2941
+ "fluidity": 0.002,
2942
+ "expansion": 0.191,
2943
+ "total_displacement": 0.0025,
2944
+ "center_displacement": {
2945
+ "x": 0.0011,
2946
+ "y": -0.0022
2947
+ }
2948
+ }
2949
+ },
2950
+ {
2951
+ "frame_index": 163,
2952
+ "timestamp": 2.716666666666667,
2953
+ "metrics": {
2954
+ "direction": "stationary",
2955
+ "intensity": "high",
2956
+ "speed": "fast",
2957
+ "velocity": 0.2164,
2958
+ "acceleration": 10.6537,
2959
+ "fluidity": 0.001,
2960
+ "expansion": 0.187,
2961
+ "total_displacement": 0.0027,
2962
+ "center_displacement": {
2963
+ "x": 0.0027,
2964
+ "y": -0.0006
2965
+ }
2966
+ }
2967
+ },
2968
+ {
2969
+ "frame_index": 164,
2970
+ "timestamp": 2.7333333333333334,
2971
+ "metrics": {
2972
+ "direction": "stationary",
2973
+ "intensity": "high",
2974
+ "speed": "fast",
2975
+ "velocity": 0.1839,
2976
+ "acceleration": 11.1152,
2977
+ "fluidity": 0.001,
2978
+ "expansion": 0.186,
2979
+ "total_displacement": 0.0008,
2980
+ "center_displacement": {
2981
+ "x": 0.0007,
2982
+ "y": -0.0005
2983
+ }
2984
+ }
2985
+ },
2986
+ {
2987
+ "frame_index": 165,
2988
+ "timestamp": 2.75,
2989
+ "metrics": {
2990
+ "direction": "stationary",
2991
+ "intensity": "high",
2992
+ "speed": "fast",
2993
+ "velocity": 0.1742,
2994
+ "acceleration": 8.9315,
2995
+ "fluidity": 0.001,
2996
+ "expansion": 0.185,
2997
+ "total_displacement": 0.0013,
2998
+ "center_displacement": {
2999
+ "x": 0.0008,
3000
+ "y": -0.001
3001
+ }
3002
+ }
3003
+ },
3004
+ {
3005
+ "frame_index": 166,
3006
+ "timestamp": 2.7666666666666666,
3007
+ "metrics": {
3008
+ "direction": "stationary",
3009
+ "intensity": "high",
3010
+ "speed": "fast",
3011
+ "velocity": 0.2067,
3012
+ "acceleration": 10.3295,
3013
+ "fluidity": 0.001,
3014
+ "expansion": 0.18,
3015
+ "total_displacement": 0.0042,
3016
+ "center_displacement": {
3017
+ "x": 0.0028,
3018
+ "y": -0.0032
3019
+ }
3020
+ }
3021
+ },
3022
+ {
3023
+ "frame_index": 167,
3024
+ "timestamp": 2.783333333333333,
3025
+ "metrics": {
3026
+ "direction": "stationary",
3027
+ "intensity": "high",
3028
+ "speed": "fast",
3029
+ "velocity": 0.1622,
3030
+ "acceleration": 10.1212,
3031
+ "fluidity": 0.001,
3032
+ "expansion": 0.178,
3033
+ "total_displacement": 0.0014,
3034
+ "center_displacement": {
3035
+ "x": 0.0012,
3036
+ "y": -0.0007
3037
+ }
3038
+ }
3039
+ },
3040
+ {
3041
+ "frame_index": 168,
3042
+ "timestamp": 2.8,
3043
+ "metrics": {
3044
+ "direction": "stationary",
3045
+ "intensity": "high",
3046
+ "speed": "fast",
3047
+ "velocity": 0.1856,
3048
+ "acceleration": 9.0748,
3049
+ "fluidity": 0.001,
3050
+ "expansion": 0.177,
3051
+ "total_displacement": 0.0033,
3052
+ "center_displacement": {
3053
+ "x": 0.0007,
3054
+ "y": -0.0032
3055
+ }
3056
+ }
3057
+ },
3058
+ {
3059
+ "frame_index": 169,
3060
+ "timestamp": 2.8166666666666664,
3061
+ "metrics": {
3062
+ "direction": "stationary",
3063
+ "intensity": "high",
3064
+ "speed": "fast",
3065
+ "velocity": 0.156,
3066
+ "acceleration": 9.3265,
3067
+ "fluidity": 0.001,
3068
+ "expansion": 0.176,
3069
+ "total_displacement": 0.0012,
3070
+ "center_displacement": {
3071
+ "x": 0.0006,
3072
+ "y": -0.001
3073
+ }
3074
+ }
3075
+ },
3076
+ {
3077
+ "frame_index": 170,
3078
+ "timestamp": 2.8333333333333335,
3079
+ "metrics": {
3080
+ "direction": "stationary",
3081
+ "intensity": "high",
3082
+ "speed": "fast",
3083
+ "velocity": 0.1451,
3084
+ "acceleration": 7.2397,
3085
+ "fluidity": 0.001,
3086
+ "expansion": 0.172,
3087
+ "total_displacement": 0.0013,
3088
+ "center_displacement": {
3089
+ "x": 0.0013,
3090
+ "y": -0.0002
3091
+ }
3092
+ }
3093
+ },
3094
+ {
3095
+ "frame_index": 171,
3096
+ "timestamp": 2.85,
3097
+ "metrics": {
3098
+ "direction": "stationary",
3099
+ "intensity": "high",
3100
+ "speed": "fast",
3101
+ "velocity": 0.1303,
3102
+ "acceleration": 7.0422,
3103
+ "fluidity": 0,
3104
+ "expansion": 0.171,
3105
+ "total_displacement": 0.0006,
3106
+ "center_displacement": {
3107
+ "x": 0.0004,
3108
+ "y": -0.0004
3109
+ }
3110
+ }
3111
+ },
3112
+ {
3113
+ "frame_index": 172,
3114
+ "timestamp": 2.8666666666666667,
3115
+ "metrics": {
3116
+ "direction": "stationary",
3117
+ "intensity": "high",
3118
+ "speed": "fast",
3119
+ "velocity": 0.1148,
3120
+ "acceleration": 6.0024,
3121
+ "fluidity": 0,
3122
+ "expansion": 0.17,
3123
+ "total_displacement": 0.0005,
3124
+ "center_displacement": {
3125
+ "x": -0.0001,
3126
+ "y": -0.0005
3127
+ }
3128
+ }
3129
+ },
3130
+ {
3131
+ "frame_index": 173,
3132
+ "timestamp": 2.8833333333333333,
3133
+ "metrics": {
3134
+ "direction": "stationary",
3135
+ "intensity": "high",
3136
+ "speed": "fast",
3137
+ "velocity": 0.131,
3138
+ "acceleration": 6.6612,
3139
+ "fluidity": 0,
3140
+ "expansion": 0.171,
3141
+ "total_displacement": 0.0022,
3142
+ "center_displacement": {
3143
+ "x": 0.0022,
3144
+ "y": 0.0003
3145
+ }
3146
+ }
3147
+ },
3148
+ {
3149
+ "frame_index": 174,
3150
+ "timestamp": 2.9,
3151
+ "metrics": {
3152
+ "direction": "stationary",
3153
+ "intensity": "high",
3154
+ "speed": "fast",
3155
+ "velocity": 0.1066,
3156
+ "acceleration": 6.179,
3157
+ "fluidity": 0,
3158
+ "expansion": 0.17,
3159
+ "total_displacement": 0.0008,
3160
+ "center_displacement": {
3161
+ "x": 0.0008,
3162
+ "y": 0.0002
3163
+ }
3164
+ }
3165
+ },
3166
+ {
3167
+ "frame_index": 175,
3168
+ "timestamp": 2.9166666666666665,
3169
+ "metrics": {
3170
+ "direction": "stationary",
3171
+ "intensity": "high",
3172
+ "speed": "fast",
3173
+ "velocity": 0.1063,
3174
+ "acceleration": 5.0441,
3175
+ "fluidity": 0,
3176
+ "expansion": 0.168,
3177
+ "total_displacement": 0.0012,
3178
+ "center_displacement": {
3179
+ "x": 0.0012,
3180
+ "y": 0.0001
3181
+ }
3182
+ }
3183
+ },
3184
+ {
3185
+ "frame_index": 176,
3186
+ "timestamp": 2.933333333333333,
3187
+ "metrics": {
3188
+ "direction": "stationary",
3189
+ "intensity": "high",
3190
+ "speed": "fast",
3191
+ "velocity": 0.0941,
3192
+ "acceleration": 5.0755,
3193
+ "fluidity": 0,
3194
+ "expansion": 0.168,
3195
+ "total_displacement": 0.0005,
3196
+ "center_displacement": {
3197
+ "x": 0.0001,
3198
+ "y": -0.0005
3199
+ }
3200
+ }
3201
+ },
3202
+ {
3203
+ "frame_index": 177,
3204
+ "timestamp": 2.95,
3205
+ "metrics": {
3206
+ "direction": "stationary",
3207
+ "intensity": "high",
3208
+ "speed": "fast",
3209
+ "velocity": 0.082,
3210
+ "acceleration": 4.2463,
3211
+ "fluidity": 0,
3212
+ "expansion": 0.168,
3213
+ "total_displacement": 0.0003,
3214
+ "center_displacement": {
3215
+ "x": 0.0003,
3216
+ "y": -0.0001
3217
+ }
3218
+ }
3219
+ },
3220
+ {
3221
+ "frame_index": 178,
3222
+ "timestamp": 2.966666666666667,
3223
+ "metrics": {
3224
+ "direction": "stationary",
3225
+ "intensity": "high",
3226
+ "speed": "fast",
3227
+ "velocity": 0.0747,
3228
+ "acceleration": 3.6591,
3229
+ "fluidity": 0,
3230
+ "expansion": 0.167,
3231
+ "total_displacement": 0.0003,
3232
+ "center_displacement": {
3233
+ "x": 0,
3234
+ "y": 0.0003
3235
+ }
3236
+ }
3237
+ },
3238
+ {
3239
+ "frame_index": 179,
3240
+ "timestamp": 2.9833333333333334,
3241
+ "metrics": {
3242
+ "direction": "stationary",
3243
+ "intensity": "medium",
3244
+ "speed": "fast",
3245
+ "velocity": 0.0671,
3246
+ "acceleration": 3.2635,
3247
+ "fluidity": 0.159,
3248
+ "expansion": 0.166,
3249
+ "total_displacement": 0.0003,
3250
+ "center_displacement": {
3251
+ "x": 0.0002,
3252
+ "y": 0.0002
3253
+ }
3254
+ }
3255
+ },
3256
+ {
3257
+ "frame_index": 180,
3258
+ "timestamp": 3,
3259
+ "metrics": {
3260
+ "direction": "stationary",
3261
+ "intensity": "high",
3262
+ "speed": "fast",
3263
+ "velocity": 0.0591,
3264
+ "acceleration": 2.8652,
3265
+ "fluidity": 0.04,
3266
+ "expansion": 0.165,
3267
+ "total_displacement": 0.0002,
3268
+ "center_displacement": {
3269
+ "x": 0,
3270
+ "y": 0.0002
3271
+ }
3272
+ }
3273
+ },
3274
+ {
3275
+ "frame_index": 181,
3276
+ "timestamp": 3.0166666666666666,
3277
+ "metrics": {
3278
+ "direction": "stationary",
3279
+ "intensity": "high",
3280
+ "speed": "slow",
3281
+ "velocity": 0.0517,
3282
+ "acceleration": 2.5477,
3283
+ "fluidity": 0.05,
3284
+ "expansion": 0.164,
3285
+ "total_displacement": 0.0001,
3286
+ "center_displacement": {
3287
+ "x": -0.0001,
3288
+ "y": 0
3289
+ }
3290
+ }
3291
+ },
3292
+ {
3293
+ "frame_index": 182,
3294
+ "timestamp": 3.033333333333333,
3295
+ "metrics": {
3296
+ "direction": "stationary",
3297
+ "intensity": "high",
3298
+ "speed": "fast",
3299
+ "velocity": 0.0687,
3300
+ "acceleration": 3.5291,
3301
+ "fluidity": 0.062,
3302
+ "expansion": 0.164,
3303
+ "total_displacement": 0.0016,
3304
+ "center_displacement": {
3305
+ "x": 0.0004,
3306
+ "y": 0.0016
3307
+ }
3308
+ }
3309
+ },
3310
+ {
3311
+ "frame_index": 183,
3312
+ "timestamp": 3.05,
3313
+ "metrics": {
3314
+ "direction": "stationary",
3315
+ "intensity": "high",
3316
+ "speed": "fast",
3317
+ "velocity": 0.0566,
3318
+ "acceleration": 2.9811,
3319
+ "fluidity": 0.038,
3320
+ "expansion": 0.164,
3321
+ "total_displacement": 0.0008,
3322
+ "center_displacement": {
3323
+ "x": 0.0001,
3324
+ "y": 0.0008
3325
+ }
3326
+ }
3327
+ },
3328
+ {
3329
+ "frame_index": 184,
3330
+ "timestamp": 3.0666666666666664,
3331
+ "metrics": {
3332
+ "direction": "stationary",
3333
+ "intensity": "high",
3334
+ "speed": "fast",
3335
+ "velocity": 0.0508,
3336
+ "acceleration": 2.5782,
3337
+ "fluidity": 0.037,
3338
+ "expansion": 0.164,
3339
+ "total_displacement": 0.0004,
3340
+ "center_displacement": {
3341
+ "x": 0,
3342
+ "y": 0.0004
3343
+ }
3344
+ }
3345
+ },
3346
+ {
3347
+ "frame_index": 185,
3348
+ "timestamp": 3.0833333333333335,
3349
+ "metrics": {
3350
+ "direction": "stationary",
3351
+ "intensity": "high",
3352
+ "speed": "fast",
3353
+ "velocity": 0.0475,
3354
+ "acceleration": 2.4533,
3355
+ "fluidity": 0.034,
3356
+ "expansion": 0.16,
3357
+ "total_displacement": 0.0002,
3358
+ "center_displacement": {
3359
+ "x": 0.0001,
3360
+ "y": 0.0002
3361
+ }
3362
+ }
3363
+ },
3364
+ {
3365
+ "frame_index": 186,
3366
+ "timestamp": 3.1,
3367
+ "metrics": {
3368
+ "direction": "stationary",
3369
+ "intensity": "high",
3370
+ "speed": "fast",
3371
+ "velocity": 0.044,
3372
+ "acceleration": 2.1114,
3373
+ "fluidity": 0.027,
3374
+ "expansion": 0.159,
3375
+ "total_displacement": 0.0004,
3376
+ "center_displacement": {
3377
+ "x": 0.0003,
3378
+ "y": 0.0002
3379
+ }
3380
+ }
3381
+ }
3382
+ ],
3383
+ "summary": {
3384
+ "direction": {
3385
+ "distribution": {
3386
+ "stationary": 170,
3387
+ "left": 1,
3388
+ "down": 7,
3389
+ "up": 7,
3390
+ "right": 2
3391
+ },
3392
+ "dominant": "stationary"
3393
+ },
3394
+ "intensity": {
3395
+ "distribution": {
3396
+ "low": 4,
3397
+ "high": 177,
3398
+ "medium": 6
3399
+ },
3400
+ "dominant": "high"
3401
+ },
3402
+ "speed": {
3403
+ "distribution": {
3404
+ "slow": 21,
3405
+ "fast": 166
3406
+ },
3407
+ "dominant": "fast"
3408
+ },
3409
+ "velocity": {
3410
+ "mean": 0.139,
3411
+ "std": 0.1266,
3412
+ "min": 0,
3413
+ "max": 1.051
3414
+ },
3415
+ "acceleration": {
3416
+ "mean": 10.2417,
3417
+ "std": 9.9677,
3418
+ "min": 0,
3419
+ "max": 63.0628
3420
+ },
3421
+ "fluidity": {
3422
+ "mean": 0.044,
3423
+ "std": 0.06
3424
+ },
3425
+ "expansion": {
3426
+ "mean": 0.21,
3427
+ "std": 0.03
3428
+ },
3429
+ "movement_segments": [
3430
+ {
3431
+ "start_frame": 7,
3432
+ "start_time": 0.11666666666666667,
3433
+ "peak_velocity": 0.2033,
3434
+ "dominant_direction": "stationary",
3435
+ "end_frame": 7,
3436
+ "end_time": 0.11666666666666667,
3437
+ "duration": 0
3438
+ },
3439
+ {
3440
+ "start_frame": 35,
3441
+ "start_time": 0.5833333333333334,
3442
+ "peak_velocity": 0.0316,
3443
+ "dominant_direction": "stationary",
3444
+ "end_frame": 35,
3445
+ "end_time": 0.5833333333333334,
3446
+ "duration": 0
3447
+ },
3448
+ {
3449
+ "start_frame": 46,
3450
+ "start_time": 0.7666666666666666,
3451
+ "peak_velocity": 0.0353,
3452
+ "dominant_direction": "stationary",
3453
+ "end_frame": 47,
3454
+ "end_time": 0.7833333333333333,
3455
+ "duration": 0.01666666666666672
3456
+ },
3457
+ {
3458
+ "start_frame": 131,
3459
+ "start_time": 2.183333333333333,
3460
+ "peak_velocity": 0.016,
3461
+ "dominant_direction": "stationary",
3462
+ "end_frame": 131,
3463
+ "end_time": 2.183333333333333,
3464
+ "duration": 0
3465
+ },
3466
+ {
3467
+ "start_frame": 179,
3468
+ "start_time": 2.9833333333333334,
3469
+ "peak_velocity": 0.0671,
3470
+ "dominant_direction": "stationary",
3471
+ "end_frame": 179,
3472
+ "end_time": 2.9833333333333334,
3473
+ "duration": 0
3474
+ }
3475
+ ]
3476
+ }
3477
+ }
3478
+ }
src/.gradio/cached_examples/9/log.csv ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ Output,timestamp
2
+ "{""json_file"": {""path"": "".gradio/cached_examples/9/Output/6444ff5b7cd73ce6e3ac/mediapipe_full_balette.json"", ""url"": ""/gradio_api/file=/private/var/folders/wz/v3427jc170563frpfjc2z0240000gn/T/gradio/bf1e2669e09e83253c3e09a2dc343da3ab9e39adce656e201a4288d05210f036/mediapipe_full_balette.json"", ""size"": null, ""orig_name"": ""mediapipe_full_balette.json"", ""mime_type"": null, ""is_stream"": false, ""meta"": {""_type"": ""gradio.FileData""}}, ""video"": {""path"": "".gradio/cached_examples/9/Output/3e1643b3cd3925885fe5/balette.mp4"", ""url"": ""/gradio_api/file=/private/var/folders/wz/v3427jc170563frpfjc2z0240000gn/T/gradio/3a7815d060e9046b7a136f4c135a1e8f1ae2173d66391ee985e7c786cc13643d/balette.mp4"", ""size"": null, ""orig_name"": ""balette.mp4"", ""mime_type"": null, ""is_stream"": false, ""meta"": {""_type"": ""gradio.FileData""}}}",2025-06-08 18:59:34.744472
3
+ "{""json_file"": {""path"": "".gradio/cached_examples/9/Output/67da006c6e22d7f3b1b0/mediapipe_full_balette.json"", ""url"": ""/gradio_api/file=/private/var/folders/wz/v3427jc170563frpfjc2z0240000gn/T/gradio/bf1e2669e09e83253c3e09a2dc343da3ab9e39adce656e201a4288d05210f036/mediapipe_full_balette.json"", ""size"": null, ""orig_name"": ""mediapipe_full_balette.json"", ""mime_type"": null, ""is_stream"": false, ""meta"": {""_type"": ""gradio.FileData""}}, ""video"": null}",2025-06-08 18:59:34.755591
src/.gradio/flagged/dataset1.csv ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ x,output,timestamp
2
+ "{""video"": "".gradio/flagged/x/949d27b917ca4cf29777/balette.mp4"", ""subtitles"": null}","{""video"": "".gradio/flagged/output/f270170a4a91ac730c49/balette.mp4"", ""subtitles"": null}",2025-06-08 12:30:56.261942
3
+ "{""video"": "".gradio/flagged/x/97ecfa403560d9ee017f/world.mp4"", ""subtitles"": null}",,2025-06-08 12:49:54.452684
src/.gradio/flagged/output/f270170a4a91ac730c49/balette.mp4 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:75e5ff7c8e5eb31b54686b0250a1ebc739ea1128bb18f116f8f0215159e0979b
3
+ size 621415
src/.gradio/flagged/x/949d27b917ca4cf29777/balette.mp4 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:75e5ff7c8e5eb31b54686b0250a1ebc739ea1128bb18f116f8f0215159e0979b
3
+ size 621415
src/.gradio/flagged/x/97ecfa403560d9ee017f/world.mp4 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:71944d7430c461f0cd6e7fd10cee7eb72786352a3678fc7bc0ae3d410f72aece
3
+ size 1570024
src/CLAUDE.md ADDED
@@ -0,0 +1,147 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # CLAUDE.md
2
+
3
+ This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
4
+
5
+ ## Project Overview
6
+
7
+ This is a Gradio custom component called `gradio_overlay_video` that enables interactive pose visualization overlays on video content. The component processes JSON pose data from multiple keypoint formats (MediaPipe, COCO, COCO-WholeBody, Sociopticon, YOLOv11) and renders it as interactive overlays on top of video files.
8
+
9
+ ## Architecture
10
+
11
+ ### Backend (`backend/gradio_overlay_video/`)
12
+ - **overlay_video.py**: Main component class `OverlayVideo` that extends Gradio's Component base class
13
+ - Uses modular `VisualizationProcessor` to preprocess JSON data into streamlined visualization instructions
14
+ - Supports events: change, clear, play, pause, end
15
+ - **visualization_processors.py**: Modular preprocessing system with specialized processors:
16
+ - `JointsProcessor`: Extracts joint/keypoint positions for circle visualization
17
+ - `BonesProcessor`: Processes skeleton connections for line visualization with auto-format detection
18
+ - `DirectionArrowProcessor`: Creates direction arrow data from movement metrics with format-aware center calculation
19
+ - `MotionTrailProcessor`: Generates faded motion trails from pose history
20
+ - `LabanProcessor`: Extracts Laban Movement Analysis metrics for text overlay
21
+ - `VisualizationProcessor`: Main coordinator that combines all processors
22
+ - **keypoint_formats.py**: Keypoint format definitions and skeleton configurations:
23
+ - `KeypointFormat`: Enum for supported formats (MediaPipe, COCO, COCO-WholeBody, Sociopticon, YOLOv11)
24
+ - `SkeletonDefinitions`: Skeleton connection definitions for each format
25
+ - `KeypointFormatDetector`: Auto-detection logic based on keypoint count and structure
26
+ - `YOLOv11DataConverter`: Converts YOLOv11 pixel coordinates to normalized format
27
+
28
+ ### Frontend (`frontend/`)
29
+ - **Svelte-based** custom Gradio component using TypeScript
30
+ - **shared/InteractiveOverlay.svelte**: Handles file uploads for video and JSON
31
+ - **shared/OverlayPlayer.svelte**: Core video player with modular overlay rendering
32
+ - Uses streamlined visualization instructions from backend
33
+ - Supports independent toggle controls for: joints, bones, direction arrows, motion trails, Laban metrics
34
+ - FPS-aware playback using video metadata
35
+ - Dynamic control visibility based on data capabilities
36
+ - **shared/Video.svelte**: Base video component wrapper
37
+ - Uses @gradio/* dependencies and FFmpeg for video processing
38
+
39
+ ### Demo Application (`demo/`)
40
+ - **app.py**: Example Gradio app showing component usage
41
+ - **space.py**: Hugging Face Space deployment version
42
+ - Uses sample files from `files/` directory (balette.mp4 and mediapipe JSON data)
43
+
44
+ ## Common Development Commands
45
+
46
+ ### Python/Backend Development
47
+ ```bash
48
+ # Install in development mode
49
+ pip install -e .
50
+
51
+ # Run demo application
52
+ cd demo && python app.py
53
+
54
+ # Build package
55
+ python -m build
56
+ ```
57
+
58
+ ### Frontend Development
59
+ ```bash
60
+ # Install frontend dependencies
61
+ cd frontend && npm install
62
+
63
+ # Build frontend components
64
+ # (No specific build command found - likely handled by Gradio's build system)
65
+ ```
66
+
67
+ ## Data Format Expectations
68
+
69
+ ### Input JSON Structure
70
+ The component expects JSON files with this structure:
71
+ - `video_info`: Metadata about the video including `fps`, `width`, `height`, `duration_seconds`
72
+ - `movement_analysis.frames[]`: Array of frame data containing:
73
+ - `timestamp`: Frame timing
74
+ - `keypoints[0].points[]`: Array of pose points with x/y coordinates and confidence
75
+ - `metrics`: Laban Movement Analysis metrics (direction, intensity, speed, velocity, etc.)
76
+
77
+ ### Processed Output Structure
78
+ The backend preprocesses this into streamlined visualization instructions:
79
+ - `video_info`: Original video metadata
80
+ - `fps`: Extracted frame rate for proper playback timing
81
+ - `keypoint_format`: Detected format type (mediapipe, coco, coco_wholebody, sociopticon, yolo11_pose)
82
+ - `capabilities`: Flags indicating which visualization types are available
83
+ - `frames[]`: Array of processed frame data containing:
84
+ - `timestamp`: Frame timing
85
+ - `joints`: Array of joint positions for circle rendering
86
+ - `bones`: Array of bone connections for line rendering
87
+ - `direction_arrow`: Arrow data for movement direction visualization
88
+ - `motion_trail`: Array of trail segments for motion path rendering
89
+ - `laban_metrics`: Cleaned metrics for text overlay display
90
+
91
+ ### Visualization Processors
92
+ Each processor can be individually enabled/disabled:
93
+ - **JointsProcessor**: Filters keypoints by confidence, extracts x/y positions
94
+ - **BonesProcessor**: Auto-detects keypoint format and uses appropriate skeleton definitions:
95
+ - MediaPipe Pose (33 keypoints): Full face, body, and hand landmarks
96
+ - COCO Keypoints (17 keypoints): Basic body joints
97
+ - COCO-WholeBody (133 keypoints): Body + face + hands + feet
98
+ - Sociopticon (18-21 keypoints): Enhanced torso detail
99
+ - YOLOv11 Pose (17 keypoints): Uses COCO skeleton with pixel coordinate conversion
100
+ - **DirectionArrowProcessor**: Calculates body center using format-specific core points
101
+ - **MotionTrailProcessor**: Maintains trail history with configurable length and alpha values
102
+ - **LabanProcessor**: Sanitizes and formats movement analysis metrics
103
+
104
+ ## Package Structure
105
+
106
+ This is a Gradio custom component package with:
107
+ - Python backend component in `/backend/gradio_overlay_video/`
108
+ - Svelte frontend in `/frontend/`
109
+ - Demo applications in `/demo/`
110
+ - Build configuration in `pyproject.toml`
111
+ - Version: 0.0.7
112
+
113
+ ## Supported Keypoint Formats
114
+
115
+ ### MediaPipe Pose (33 keypoints)
116
+ - Face landmarks (nose, eyes, ears, mouth)
117
+ - Body pose (shoulders, elbows, wrists, hips, knees, ankles)
118
+ - Hand landmarks (left and right hand keypoints)
119
+ - Auto-detected when JSON contains 33 keypoints
120
+
121
+ ### COCO Keypoints (17 keypoints)
122
+ - Standard COCO dataset format
123
+ - Basic body joints: nose, eyes, ears, shoulders, elbows, wrists, hips, knees, ankles
124
+ - Auto-detected when JSON contains 17 keypoints
125
+
126
+ ### COCO-WholeBody (133 keypoints)
127
+ - Extended COCO format with additional detail
128
+ - Body (17) + Face (68) + Left Hand (21) + Right Hand (21) + Feet (6)
129
+ - Auto-detected when JSON contains 133 keypoints
130
+
131
+ ### Sociopticon (18-21 keypoints)
132
+ - Custom format with enhanced torso detail
133
+ - Similar to COCO but with additional mid-torso points
134
+ - Auto-detected when JSON contains 18-21 keypoints
135
+
136
+ ### YOLOv11 Pose (17 keypoints)
137
+ - YOLOv11 pose estimation format with pixel coordinates
138
+ - Uses COCO keypoint structure but with different data organization
139
+ - Auto-detected based on JSON structure (metadata.model contains "yolo" and "pose")
140
+ - Automatically converts pixel coordinates to normalized values
141
+ - Designed for single-frame pose showcase
142
+
143
+ ### Format Detection
144
+ - Automatic detection based on keypoint count and structure
145
+ - Special detection for YOLOv11 based on metadata and data organization
146
+ - Fallback to MediaPipe format if detection is unclear
147
+ - Format information included in processed output for frontend reference
src/README.md ADDED
@@ -0,0 +1,239 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ tags: [gradio-custom-component, gradio-5, laban-movement-analysis, pose-visualisation, pose-estimation, movement-visualisation, visualisation, video]
3
+ title: gradio_overlay_video
4
+ emoji: 🏃
5
+ short_description: pose data overlayed video controller
6
+ colorFrom: purple
7
+ colorTo: green
8
+ sdk: gradio
9
+ sdk_version: 5.33.0
10
+ pinned: false
11
+ app_file: space.py
12
+ ---
13
+
14
+ # `gradio_overlay_video`
15
+ <img alt="Static Badge" src="https://img.shields.io/badge/version%20-%200.0.8%20-%20orange">
16
+
17
+ overlayed video controller
18
+
19
+ ## Installation
20
+
21
+ ```bash
22
+ pip install gradio_overlay_video
23
+ ```
24
+
25
+ ## Usage
26
+
27
+ ```python
28
+
29
+ import gradio as gr
30
+ from gradio_overlay_video import OverlayVideo
31
+ from pathlib import Path
32
+
33
+ DEMO_DIR = Path(__file__).parent.parent
34
+ sample_video_path = DEMO_DIR / "files/balette.mp4"
35
+ sample_json_path = DEMO_DIR / "files/mediapipe_full_kp_balette.json"
36
+ mediapipe_json_path = DEMO_DIR / "files/mediapipe_heavy_kp_parkour.json"
37
+ movenet_json_path = DEMO_DIR / "files/movenet_thunder_kp_skate.json"
38
+ yolo8_json_path = DEMO_DIR / "files/yolov8_kp_dance.json"
39
+ yolo11_json_path = DEMO_DIR / "files/yolov11.json"
40
+
41
+ def prepare_visualization_data(json_path, video_path):
42
+ """
43
+ This function simply validates the inputs and passes them to the
44
+ custom OverlayVideo component for frontend processing.
45
+ """
46
+ if not json_path:
47
+ raise gr.Error("A JSON file is required to generate a visualization.")
48
+
49
+ print(f"✅ Preparing visualization with JSON: {json_path}")
50
+ if video_path:
51
+ print(f"✅ Video background provided: {video_path}")
52
+ else:
53
+ print("ℹ️ No video background provided. Visualization will be on a black background.")
54
+
55
+ # The backend's job is just to pass the filepaths to the frontend.
56
+ # The return format (video_path, json_path) must match what postprocess expects.
57
+ return (video_path, json_path)
58
+
59
+
60
+ with gr.Blocks(theme=gr.themes.Default(primary_hue="rose", secondary_hue="pink")) as demo:
61
+ gr.Markdown(
62
+ "# 🩰 Interactive Pose Visualization\n"
63
+ "1. **Upload a JSON file** with pose data.\n"
64
+ "2. **(Optional) Upload a video** to use as the background.\n"
65
+ "3. Click 'Display Visualization' to see the interactive result."
66
+ )
67
+
68
+ with gr.Row():
69
+ with gr.Column(scale=1):
70
+ # Use standard gr.File for robust input handling
71
+ json_upload = gr.File(
72
+ label="Upload Required JSON File",
73
+ file_types=[".json"],
74
+ type="filepath"
75
+ )
76
+ video_upload = gr.File(
77
+ label="Upload Optional Video File",
78
+ file_types=["video"],
79
+ type="filepath",
80
+ value=None
81
+ )
82
+ btn = gr.Button("Display Visualization", variant="primary")
83
+
84
+ with gr.Column(scale=1):
85
+ output_ov = OverlayVideo(label="Output", interactive=False, autoplay=True)
86
+
87
+ btn.click(
88
+ fn=prepare_visualization_data,
89
+ inputs=[json_upload, video_upload],
90
+ outputs=[output_ov]
91
+ )
92
+
93
+ gr.Examples(
94
+ examples=[
95
+ [str(mediapipe_json_path), None],
96
+ [str(movenet_json_path), None],
97
+ [str(yolo8_json_path), None],
98
+ [str(sample_json_path), str(sample_video_path)],
99
+ [str(yolo11_json_path), None]
100
+ ],
101
+ inputs=[json_upload, video_upload],
102
+ outputs=output_ov,
103
+ fn=prepare_visualization_data,
104
+ cache_examples=True
105
+ )
106
+
107
+ if __name__ == "__main__":
108
+ demo.launch(allowed_paths=["/Users/csabi/Develop/overlay_video/files"])
109
+ ```
110
+
111
+ ## `OverlayVideo`
112
+
113
+ ### Initialization
114
+
115
+ <table>
116
+ <thead>
117
+ <tr>
118
+ <th align="left">name</th>
119
+ <th align="left" style="width: 25%;">type</th>
120
+ <th align="left">default</th>
121
+ <th align="left">description</th>
122
+ </tr>
123
+ </thead>
124
+ <tbody>
125
+ <tr>
126
+ <td align="left"><code>value</code></td>
127
+ <td align="left" style="width: 25%;">
128
+
129
+ ```python
130
+ typing.Any
131
+ ```
132
+
133
+ </td>
134
+ <td align="left"><code>None</code></td>
135
+ <td align="left">None</td>
136
+ </tr>
137
+
138
+ <tr>
139
+ <td align="left"><code>label</code></td>
140
+ <td align="left" style="width: 25%;">
141
+
142
+ ```python
143
+ str | None
144
+ ```
145
+
146
+ </td>
147
+ <td align="left"><code>None</code></td>
148
+ <td align="left">None</td>
149
+ </tr>
150
+
151
+ <tr>
152
+ <td align="left"><code>interactive</code></td>
153
+ <td align="left" style="width: 25%;">
154
+
155
+ ```python
156
+ bool | None
157
+ ```
158
+
159
+ </td>
160
+ <td align="left"><code>None</code></td>
161
+ <td align="left">None</td>
162
+ </tr>
163
+
164
+ <tr>
165
+ <td align="left"><code>autoplay</code></td>
166
+ <td align="left" style="width: 25%;">
167
+
168
+ ```python
169
+ bool
170
+ ```
171
+
172
+ </td>
173
+ <td align="left"><code>False</code></td>
174
+ <td align="left">None</td>
175
+ </tr>
176
+
177
+ <tr>
178
+ <td align="left"><code>loop</code></td>
179
+ <td align="left" style="width: 25%;">
180
+
181
+ ```python
182
+ bool
183
+ ```
184
+
185
+ </td>
186
+ <td align="left"><code>False</code></td>
187
+ <td align="left">None</td>
188
+ </tr>
189
+
190
+ <tr>
191
+ <td align="left"><code>mode</code></td>
192
+ <td align="left" style="width: 25%;">
193
+
194
+ ```python
195
+ str
196
+ ```
197
+
198
+ </td>
199
+ <td align="left"><code>"overlay"</code></td>
200
+ <td align="left">None</td>
201
+ </tr>
202
+ </tbody></table>
203
+
204
+
205
+ ### Events
206
+
207
+ | name | description |
208
+ |:-----|:------------|
209
+ | `change` | Triggered when the value of the OverlayVideo changes either because of user input (e.g. a user types in a textbox) OR because of a function update (e.g. an image receives a value from the output of an event trigger). See `.input()` for a listener that is only triggered by user input. |
210
+ | `clear` | This listener is triggered when the user clears the OverlayVideo using the clear button for the component. |
211
+ | `play` | This listener is triggered when the user plays the media in the OverlayVideo. |
212
+ | `pause` | This listener is triggered when the media in the OverlayVideo stops for any reason. |
213
+ | `end` | This listener is triggered when the user reaches the end of the media playing in the OverlayVideo. |
214
+
215
+
216
+
217
+ ### User function
218
+
219
+ The impact on the users predict function varies depending on whether the component is used as an input or output for an event (or both).
220
+
221
+ - When used as an Input, the component only impacts the input signature of the user function.
222
+ - When used as an output, the component only impacts the return signature of the user function.
223
+
224
+ The code snippet below is accurate in cases where the component is used as both an input and an output.
225
+
226
+
227
+
228
+ ```python
229
+ def predict(
230
+ value: str | None
231
+ ) -> typing.Optional[typing.Tuple[str | None, str | None]][
232
+ typing.Tuple[str | None, str | None][
233
+ str | None, str | None
234
+ ],
235
+ None,
236
+ ]:
237
+ return value
238
+ ```
239
+
src/backend/gradio_overlay_video/__init__.py ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+
2
+ from .overlay_video import OverlayVideo
3
+
4
+ __all__ = ['OverlayVideo']
src/backend/gradio_overlay_video/keypoint_formats.py ADDED
@@ -0,0 +1,356 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ Keypoint format definitions and skeleton configurations for different pose estimation models.
3
+ Supports: MediaPipe, COCO, COCO-WholeBody, and Sociopticon formats.
4
+ """
5
+
6
+ from typing import Dict, List, Tuple, Optional
7
+ from enum import Enum
8
+
9
+
10
+ class KeypointFormat(Enum):
11
+ """Supported keypoint formats."""
12
+ MEDIAPIPE = "mediapipe"
13
+ COCO = "coco"
14
+ COCO_WHOLEBODY = "coco_wholebody"
15
+ SOCIOPTICON = "sociopticon"
16
+ YOLO11_POSE = "yolo11_pose"
17
+
18
+
19
+ class SkeletonDefinitions:
20
+ """Skeleton connection definitions for different keypoint formats."""
21
+
22
+ # MediaPipe pose skeleton connections (33 keypoints)
23
+ MEDIAPIPE_SKELETON = [
24
+ # Face connections
25
+ (0, 1), (1, 2), (2, 3), (3, 7), # left eye region
26
+ (0, 4), (4, 5), (5, 6), (6, 8), # right eye region
27
+ (9, 10), # mouth
28
+ # Upper body
29
+ (11, 12), # shoulders
30
+ (11, 13), (13, 15), # left arm
31
+ (12, 14), (14, 16), # right arm
32
+ (11, 23), (12, 24), # shoulders to hips
33
+ (23, 24), # hips
34
+ # Lower body
35
+ (23, 25), (25, 27), (27, 29), (27, 31), # left leg
36
+ (24, 26), (26, 28), (28, 30), (28, 32), # right leg
37
+ # Hands
38
+ (15, 17), (15, 19), (15, 21), # left hand
39
+ (16, 18), (16, 20), (16, 22), # right hand
40
+ ]
41
+
42
+ # COCO keypoint skeleton connections (17 keypoints)
43
+ # Order: nose, left_eye, right_eye, left_ear, right_ear, left_shoulder, right_shoulder,
44
+ # left_elbow, right_elbow, left_wrist, right_wrist, left_hip, right_hip,
45
+ # left_knee, right_knee, left_ankle, right_ankle
46
+ COCO_SKELETON = [
47
+ # Head connections
48
+ (0, 1), (0, 2), # nose to eyes
49
+ (1, 3), (2, 4), # eyes to ears
50
+ # Upper body
51
+ (5, 6), # shoulders
52
+ (5, 7), (7, 9), # left arm
53
+ (6, 8), (8, 10), # right arm
54
+ (5, 11), (6, 12), # shoulders to hips
55
+ (11, 12), # hips
56
+ # Lower body
57
+ (11, 13), (13, 15), # left leg
58
+ (12, 14), (14, 16), # right leg
59
+ ]
60
+
61
+ # COCO-WholeBody skeleton connections (133 keypoints total)
62
+ # Body (17) + Face (68) + Left Hand (21) + Right Hand (21) + Feet (6)
63
+ COCO_WHOLEBODY_SKELETON = [
64
+ # Body connections (same as COCO)
65
+ (0, 1), (0, 2), (1, 3), (2, 4), # head
66
+ (5, 6), # shoulders
67
+ (5, 7), (7, 9), # left arm
68
+ (6, 8), (8, 10), # right arm
69
+ (5, 11), (6, 12), # shoulders to hips
70
+ (11, 12), # hips
71
+ (11, 13), (13, 15), # left leg
72
+ (12, 14), (14, 16), # right leg
73
+
74
+ # Face outline connections (simplified from 68 points for performance)
75
+ (17, 18), (18, 19), (19, 20), (20, 21), (21, 22), (22, 23), (23, 24), (24, 25), (25, 26), # jaw
76
+ (27, 28), (28, 29), (29, 30), # nose bridge
77
+ (31, 32), (32, 33), (33, 34), (34, 35), # nose
78
+ (36, 37), (37, 38), (38, 39), (39, 40), (40, 41), (41, 36), # left eye
79
+ (42, 43), (43, 44), (44, 45), (45, 46), (46, 47), (47, 42), # right eye
80
+ (48, 49), (49, 50), (50, 51), (51, 52), (52, 53), (53, 54), (54, 55), (55, 56), (56, 57), (57, 58), (58, 59), (59, 48), # outer lip
81
+ (60, 61), (61, 62), (62, 63), (63, 64), (64, 65), (65, 66), (66, 67), (67, 60), # inner lip
82
+
83
+ # Left hand connections (21 points starting at index 91)
84
+ (91, 92), (92, 93), (93, 94), (94, 95), # thumb
85
+ (91, 96), (96, 97), (97, 98), (98, 99), # index finger
86
+ (91, 100), (100, 101), (101, 102), (102, 103), # middle finger
87
+ (91, 104), (104, 105), (105, 106), (106, 107), # ring finger
88
+ (91, 108), (108, 109), (109, 110), (110, 111), # pinky
89
+
90
+ # Right hand connections (21 points starting at index 112)
91
+ (112, 113), (113, 114), (114, 115), (115, 116), # thumb
92
+ (112, 117), (117, 118), (118, 119), (119, 120), # index finger
93
+ (112, 121), (121, 122), (122, 123), (123, 124), # middle finger
94
+ (112, 125), (125, 126), (126, 127), (127, 128), # ring finger
95
+ (112, 129), (129, 130), (130, 131), (131, 132), # pinky
96
+ ]
97
+
98
+ # Sociopticon skeleton connections (assuming extended COCO-like format)
99
+ SOCIOPTICON_SKELETON = [
100
+ # Head connections
101
+ (0, 1), (0, 2), (1, 3), (2, 4), # head structure
102
+ # Upper body with more detail
103
+ (5, 6), # shoulders
104
+ (5, 7), (7, 9), # left arm
105
+ (6, 8), (8, 10), # right arm
106
+ (5, 11), (6, 12), # shoulders to hips
107
+ (11, 12), # hips
108
+ # Additional torso points (if available)
109
+ (5, 17), (6, 18), # shoulder to mid-torso
110
+ (17, 18), (17, 11), (18, 12), # torso connections
111
+ # Lower body
112
+ (11, 13), (13, 15), # left leg
113
+ (12, 14), (14, 16), # right leg
114
+ ]
115
+
116
+ @classmethod
117
+ def get_skeleton(cls, format_type: KeypointFormat) -> List[Tuple[int, int]]:
118
+ """Get skeleton connections for the specified format."""
119
+ if format_type == KeypointFormat.MEDIAPIPE:
120
+ return cls.MEDIAPIPE_SKELETON
121
+ elif format_type == KeypointFormat.COCO:
122
+ return cls.COCO_SKELETON
123
+ elif format_type == KeypointFormat.COCO_WHOLEBODY:
124
+ return cls.COCO_WHOLEBODY_SKELETON
125
+ elif format_type == KeypointFormat.SOCIOPTICON:
126
+ return cls.SOCIOPTICON_SKELETON
127
+ elif format_type == KeypointFormat.YOLO11_POSE:
128
+ return cls.COCO_SKELETON # YOLOv11 uses COCO format
129
+ else:
130
+ return cls.MEDIAPIPE_SKELETON # default
131
+
132
+
133
+ class KeypointFormatDetector:
134
+ """Detects keypoint format based on data structure and keypoint count."""
135
+
136
+ # Core body point indices for different formats (used for center calculation)
137
+ CORE_POINT_INDICES = {
138
+ KeypointFormat.MEDIAPIPE: [11, 12, 23, 24], # shoulders and hips
139
+ KeypointFormat.COCO: [5, 6, 11, 12], # shoulders and hips
140
+ KeypointFormat.COCO_WHOLEBODY: [5, 6, 11, 12], # shoulders and hips (body part)
141
+ KeypointFormat.SOCIOPTICON: [5, 6, 11, 12], # shoulders and hips
142
+ KeypointFormat.YOLO11_POSE: [5, 6, 11, 12] # shoulders and hips (COCO format)
143
+ }
144
+
145
+ @classmethod
146
+ def detect_format(cls, points: List[Dict]) -> KeypointFormat:
147
+ """
148
+ Detect keypoint format based on number of points and structure.
149
+
150
+ Args:
151
+ points: List of keypoint dictionaries
152
+
153
+ Returns:
154
+ Detected KeypointFormat
155
+ """
156
+ num_points = len(points)
157
+
158
+ # Detect based on keypoint count
159
+ if num_points == 17:
160
+ return KeypointFormat.COCO
161
+ elif num_points == 133:
162
+ return KeypointFormat.COCO_WHOLEBODY
163
+ elif num_points == 33:
164
+ return KeypointFormat.MEDIAPIPE
165
+ elif num_points in [18, 19, 20, 21]: # Sociopticon variations
166
+ return KeypointFormat.SOCIOPTICON
167
+
168
+ # Additional heuristics based on keypoint names (if available)
169
+ if points and isinstance(points[0], dict):
170
+ first_point = points[0]
171
+ if 'name' in first_point:
172
+ name = first_point['name'].lower()
173
+ if 'nose' in name:
174
+ # MediaPipe uses 'nose', COCO uses indices
175
+ return KeypointFormat.MEDIAPIPE
176
+
177
+ # Default fallback
178
+ return KeypointFormat.MEDIAPIPE
179
+
180
+ @classmethod
181
+ def detect_yolo11_format(cls, data: Dict) -> bool:
182
+ """
183
+ Detect if data is in YOLOv11 format based on structure.
184
+
185
+ Args:
186
+ data: Raw JSON data dictionary
187
+
188
+ Returns:
189
+ True if YOLOv11 format detected
190
+ """
191
+ # Check for YOLOv11 specific structure
192
+ if 'metadata' in data and 'keypoints' in data:
193
+ metadata = data['metadata']
194
+ if isinstance(metadata, dict) and 'model' in metadata:
195
+ model_name = metadata['model'].lower()
196
+ if 'yolo' in model_name and 'pose' in model_name:
197
+ return True
198
+
199
+ # Check keypoints structure: should be list of lists of [x,y] coordinates
200
+ keypoints = data['keypoints']
201
+ if isinstance(keypoints, list) and len(keypoints) > 0:
202
+ first_frame = keypoints[0]
203
+ if isinstance(first_frame, list) and len(first_frame) == 17:
204
+ # Check if points are [x,y] coordinate pairs
205
+ first_point = first_frame[0]
206
+ if isinstance(first_point, list) and len(first_point) == 2:
207
+ return True
208
+
209
+ return False
210
+
211
+ @classmethod
212
+ def get_core_points(cls, format_type: KeypointFormat) -> List[int]:
213
+ """Get core body point indices for center calculation."""
214
+ return cls.CORE_POINT_INDICES.get(format_type, cls.CORE_POINT_INDICES[KeypointFormat.MEDIAPIPE])
215
+
216
+ @classmethod
217
+ def format_info(cls, format_type: KeypointFormat) -> Dict:
218
+ """Get information about a keypoint format."""
219
+ info = {
220
+ KeypointFormat.MEDIAPIPE: {
221
+ "name": "MediaPipe Pose",
222
+ "keypoints": 33,
223
+ "description": "Google MediaPipe pose estimation with face, body, and hand landmarks"
224
+ },
225
+ KeypointFormat.COCO: {
226
+ "name": "COCO Keypoints",
227
+ "keypoints": 17,
228
+ "description": "COCO dataset keypoint format with basic body joints"
229
+ },
230
+ KeypointFormat.COCO_WHOLEBODY: {
231
+ "name": "COCO-WholeBody",
232
+ "keypoints": 133,
233
+ "description": "Extended COCO format with face, hands, and feet keypoints"
234
+ },
235
+ KeypointFormat.SOCIOPTICON: {
236
+ "name": "Sociopticon",
237
+ "keypoints": "18-21",
238
+ "description": "Sociopticon keypoint format with enhanced torso detail"
239
+ },
240
+ KeypointFormat.YOLO11_POSE: {
241
+ "name": "YOLOv11 Pose",
242
+ "keypoints": 17,
243
+ "description": "YOLOv11 pose estimation with COCO format keypoints and pixel coordinates"
244
+ }
245
+ }
246
+
247
+ return info.get(format_type, info[KeypointFormat.MEDIAPIPE])
248
+
249
+
250
+ class YOLOv11DataConverter:
251
+ """Converts YOLOv11 pose data to standard format."""
252
+
253
+ @classmethod
254
+ def convert_to_standard_format(cls, yolo_data: Dict, video_width: int = 1920, video_height: int = 1080) -> Dict:
255
+ """
256
+ Convert YOLOv11 format to standard format expected by visualization processors.
257
+
258
+ Args:
259
+ yolo_data: Raw YOLOv11 JSON data
260
+ video_width: Video width for coordinate normalization (default: 1920)
261
+ video_height: Video height for coordinate normalization (default: 1080)
262
+
263
+ Returns:
264
+ Dictionary in standard format
265
+ """
266
+ # Extract first frame keypoints (YOLOv11 data contains list of frames)
267
+ if 'keypoints' not in yolo_data or not yolo_data['keypoints']:
268
+ raise ValueError("No keypoints found in YOLOv11 data")
269
+
270
+ first_frame_keypoints = yolo_data['keypoints'][0]
271
+
272
+ # Convert to standard point format
273
+ points = []
274
+ for i, point_coords in enumerate(first_frame_keypoints):
275
+ x, y = point_coords
276
+
277
+ # Check if point is valid (YOLOv11 uses [0,0] for invalid points)
278
+ if x == 0 and y == 0:
279
+ # Invalid point - set low confidence
280
+ points.append({
281
+ 'x': 0.0,
282
+ 'y': 0.0,
283
+ 'confidence': 0.0,
284
+ 'index': i
285
+ })
286
+ else:
287
+ # Valid point - normalize coordinates and set high confidence
288
+ points.append({
289
+ 'x': x / video_width, # Normalize to 0-1 range
290
+ 'y': y / video_height, # Normalize to 0-1 range
291
+ 'confidence': 0.9, # Default high confidence for valid points
292
+ 'index': i
293
+ })
294
+
295
+ # Create standard format structure for single frame
296
+ converted_data = {
297
+ 'video_info': {
298
+ 'fps': 30, # Default FPS for single frame
299
+ 'width': video_width,
300
+ 'height': video_height,
301
+ 'duration_seconds': 0.033 # Single frame duration
302
+ },
303
+ 'movement_analysis': {
304
+ 'frames': [
305
+ {
306
+ 'timestamp': 0.0,
307
+ 'keypoints': [
308
+ {
309
+ 'points': points
310
+ }
311
+ ],
312
+ 'metrics': {
313
+ 'direction': 'stationary',
314
+ 'intensity': 0.0,
315
+ 'speed': 0.0,
316
+ 'velocity': {'x': 0, 'y': 0}
317
+ }
318
+ }
319
+ ]
320
+ }
321
+ }
322
+
323
+ return converted_data
324
+
325
+ @classmethod
326
+ def estimate_video_dimensions(cls, keypoints: List[List[float]]) -> Tuple[int, int]:
327
+ """
328
+ Estimate video dimensions based on keypoint coordinates.
329
+
330
+ Args:
331
+ keypoints: List of [x, y] coordinate pairs
332
+
333
+ Returns:
334
+ Tuple of (width, height) estimates
335
+ """
336
+ valid_points = [point for point in keypoints if point[0] > 0 or point[1] > 0]
337
+
338
+ if not valid_points:
339
+ return 1920, 1080 # Default dimensions
340
+
341
+ max_x = max(point[0] for point in valid_points)
342
+ max_y = max(point[1] for point in valid_points)
343
+
344
+ # Add some margin and round to common video dimensions
345
+ estimated_width = int(max_x * 1.2)
346
+ estimated_height = int(max_y * 1.2)
347
+
348
+ # Round to common video dimensions
349
+ common_widths = [1920, 1280, 854, 640]
350
+ common_heights = [1080, 720, 480, 360]
351
+
352
+ # Find closest common dimensions
353
+ width = min(common_widths, key=lambda w: abs(w - estimated_width))
354
+ height = min(common_heights, key=lambda h: abs(h - estimated_height))
355
+
356
+ return width, height
src/backend/gradio_overlay_video/overlay_video.py ADDED
@@ -0,0 +1,97 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # backend/gradio_overlay_video/overlay_video.py
2
+
3
+ from __future__ import annotations
4
+ from pathlib import Path
5
+ from typing import Any, Callable, Optional, Tuple
6
+ import json
7
+
8
+ from gradio_client import handle_file
9
+ from gradio_client.documentation import document
10
+ import gradio as gr
11
+ from gradio.components.base import Component
12
+ from gradio.data_classes import FileData, GradioModel
13
+ from gradio.events import Events
14
+
15
+ # This data model expects the raw, pre-processed JSON string
16
+ class OverlayVideoData(GradioModel):
17
+ video: Optional[FileData] = None
18
+ json_data: Optional[str] = None
19
+
20
+
21
+ @document()
22
+ class OverlayVideo(Component):
23
+ """An output component that plays a video with an interactive, toggleable overlay of pose data."""
24
+
25
+ data_model = OverlayVideoData
26
+ EVENTS = [Events.change, Events.clear, Events.play, Events.pause, Events.end]
27
+
28
+ def __init__(
29
+ self,
30
+ value: Any = None,
31
+ *,
32
+ label: str | None = None,
33
+ interactive: bool | None = None,
34
+ autoplay: bool = False,
35
+ loop: bool = False,
36
+ mode: str = "overlay", # Custom prop for the frontend
37
+ **kwargs
38
+ ):
39
+ self.autoplay = autoplay
40
+ self.loop = loop
41
+ self.mode = mode
42
+ super().__init__(label=label, interactive=interactive, value=value, **kwargs)
43
+
44
+ def preprocess(self, payload: OverlayVideoData | None) -> str | None:
45
+ """
46
+ This component is output-only, so preprocess does nothing.
47
+ It is required to satisfy the abstract class requirements.
48
+ """
49
+ # We return None because this component does not handle input.
50
+ return None
51
+
52
+ def postprocess(self, value: Tuple[str | None, str | None] | None) -> OverlayVideoData | None:
53
+ """
54
+ Takes video and JSON file paths, preprocesses the JSON with visualization processors,
55
+ and sends streamlined visualization instructions to the frontend.
56
+ """
57
+ if value is None or value[1] is None:
58
+ return None
59
+
60
+ video_path, json_path = value
61
+
62
+ try:
63
+ with open(json_path, 'r', encoding='utf-8') as f:
64
+ full_data = json.load(f)
65
+
66
+ # Import and use the new visualization processor
67
+ from .visualization_processors import VisualizationProcessor
68
+
69
+ # Initialize processor with all visualization types enabled
70
+ processor = VisualizationProcessor(
71
+ enable_joints=True,
72
+ enable_bones=True,
73
+ enable_direction_arrows=True,
74
+ enable_motion_trails=True,
75
+ enable_laban=True,
76
+ trail_length=10
77
+ )
78
+
79
+ # Process the JSON data into streamlined visualization instructions
80
+ visualization_data = processor.process_json_data(full_data)
81
+
82
+ # Convert to JSON string for frontend
83
+ json_content = json.dumps(visualization_data)
84
+
85
+ except Exception as e:
86
+ print(f"Error processing JSON file: {e}")
87
+ import traceback
88
+ print(traceback.format_exc())
89
+ return None
90
+
91
+ return OverlayVideoData(
92
+ video=handle_file(video_path) if video_path else None,
93
+ json_data=json_content
94
+ )
95
+
96
+ def example_payload(self) -> Any: return None
97
+ def example_value(self) -> Any: return None
src/backend/gradio_overlay_video/templates/component/assets/worker-BAOIWoxA.js ADDED
@@ -0,0 +1 @@
 
 
1
+ (function(){"use strict";const i="https://unpkg.com/@ffmpeg/core@0.12.9/dist/umd/ffmpeg-core.js";var E;(function(t){t.LOAD="LOAD",t.EXEC="EXEC",t.FFPROBE="FFPROBE",t.WRITE_FILE="WRITE_FILE",t.READ_FILE="READ_FILE",t.DELETE_FILE="DELETE_FILE",t.RENAME="RENAME",t.CREATE_DIR="CREATE_DIR",t.LIST_DIR="LIST_DIR",t.DELETE_DIR="DELETE_DIR",t.ERROR="ERROR",t.DOWNLOAD="DOWNLOAD",t.PROGRESS="PROGRESS",t.LOG="LOG",t.MOUNT="MOUNT",t.UNMOUNT="UNMOUNT"})(E||(E={}));const f=new Error("unknown message type"),a=new Error("ffmpeg is not loaded, call `await ffmpeg.load()` first"),u=new Error("failed to import ffmpeg-core.js");let r;const O=async({coreURL:t,wasmURL:n,workerURL:e})=>{const o=!r;try{t||(t=i),importScripts(t)}catch{if((!t||t===i)&&(t=i.replace("/umd/","/esm/")),self.createFFmpegCore=(await import(t)).default,!self.createFFmpegCore)throw u}const s=t,c=n||t.replace(/.js$/g,".wasm"),p=e||t.replace(/.js$/g,".worker.js");return r=await self.createFFmpegCore({mainScriptUrlOrBlob:`${s}#${btoa(JSON.stringify({wasmURL:c,workerURL:p}))}`}),r.setLogger(R=>self.postMessage({type:E.LOG,data:R})),r.setProgress(R=>self.postMessage({type:E.PROGRESS,data:R})),o},m=({args:t,timeout:n=-1})=>{r.setTimeout(n),r.exec(...t);const e=r.ret;return r.reset(),e},l=({args:t,timeout:n=-1})=>{r.setTimeout(n),r.ffprobe(...t);const e=r.ret;return r.reset(),e},D=({path:t,data:n})=>(r.FS.writeFile(t,n),!0),S=({path:t,encoding:n})=>r.FS.readFile(t,{encoding:n}),I=({path:t})=>(r.FS.unlink(t),!0),L=({oldPath:t,newPath:n})=>(r.FS.rename(t,n),!0),N=({path:t})=>(r.FS.mkdir(t),!0),A=({path:t})=>{const n=r.FS.readdir(t),e=[];for(const o of n){const s=r.FS.stat(`${t}/${o}`),c=r.FS.isDir(s.mode);e.push({name:o,isDir:c})}return e},k=({path:t})=>(r.FS.rmdir(t),!0),w=({fsType:t,options:n,mountPoint:e})=>{const o=t,s=r.FS.filesystems[o];return s?(r.FS.mount(s,n,e),!0):!1},b=({mountPoint:t})=>(r.FS.unmount(t),!0);self.onmessage=async({data:{id:t,type:n,data:e}})=>{const o=[];let s;try{if(n!==E.LOAD&&!r)throw a;switch(n){case E.LOAD:s=await O(e);break;case E.EXEC:s=m(e);break;case E.FFPROBE:s=l(e);break;case E.WRITE_FILE:s=D(e);break;case E.READ_FILE:s=S(e);break;case E.DELETE_FILE:s=I(e);break;case E.RENAME:s=L(e);break;case E.CREATE_DIR:s=N(e);break;case E.LIST_DIR:s=A(e);break;case E.DELETE_DIR:s=k(e);break;case E.MOUNT:s=w(e);break;case E.UNMOUNT:s=b(e);break;default:throw f}}catch(c){self.postMessage({id:t,type:E.ERROR,data:c.toString()});return}s instanceof Uint8Array&&o.push(s.buffer),self.postMessage({id:t,type:n,data:s},o)}})();
src/backend/gradio_overlay_video/templates/component/index.js ADDED
The diff for this file is too large to render. See raw diff
 
src/backend/gradio_overlay_video/templates/component/style.css ADDED
The diff for this file is too large to render. See raw diff
 
src/backend/gradio_overlay_video/templates/example/assets/worker-BAOIWoxA.js ADDED
@@ -0,0 +1 @@
 
 
1
+ (function(){"use strict";const i="https://unpkg.com/@ffmpeg/core@0.12.9/dist/umd/ffmpeg-core.js";var E;(function(t){t.LOAD="LOAD",t.EXEC="EXEC",t.FFPROBE="FFPROBE",t.WRITE_FILE="WRITE_FILE",t.READ_FILE="READ_FILE",t.DELETE_FILE="DELETE_FILE",t.RENAME="RENAME",t.CREATE_DIR="CREATE_DIR",t.LIST_DIR="LIST_DIR",t.DELETE_DIR="DELETE_DIR",t.ERROR="ERROR",t.DOWNLOAD="DOWNLOAD",t.PROGRESS="PROGRESS",t.LOG="LOG",t.MOUNT="MOUNT",t.UNMOUNT="UNMOUNT"})(E||(E={}));const f=new Error("unknown message type"),a=new Error("ffmpeg is not loaded, call `await ffmpeg.load()` first"),u=new Error("failed to import ffmpeg-core.js");let r;const O=async({coreURL:t,wasmURL:n,workerURL:e})=>{const o=!r;try{t||(t=i),importScripts(t)}catch{if((!t||t===i)&&(t=i.replace("/umd/","/esm/")),self.createFFmpegCore=(await import(t)).default,!self.createFFmpegCore)throw u}const s=t,c=n||t.replace(/.js$/g,".wasm"),p=e||t.replace(/.js$/g,".worker.js");return r=await self.createFFmpegCore({mainScriptUrlOrBlob:`${s}#${btoa(JSON.stringify({wasmURL:c,workerURL:p}))}`}),r.setLogger(R=>self.postMessage({type:E.LOG,data:R})),r.setProgress(R=>self.postMessage({type:E.PROGRESS,data:R})),o},m=({args:t,timeout:n=-1})=>{r.setTimeout(n),r.exec(...t);const e=r.ret;return r.reset(),e},l=({args:t,timeout:n=-1})=>{r.setTimeout(n),r.ffprobe(...t);const e=r.ret;return r.reset(),e},D=({path:t,data:n})=>(r.FS.writeFile(t,n),!0),S=({path:t,encoding:n})=>r.FS.readFile(t,{encoding:n}),I=({path:t})=>(r.FS.unlink(t),!0),L=({oldPath:t,newPath:n})=>(r.FS.rename(t,n),!0),N=({path:t})=>(r.FS.mkdir(t),!0),A=({path:t})=>{const n=r.FS.readdir(t),e=[];for(const o of n){const s=r.FS.stat(`${t}/${o}`),c=r.FS.isDir(s.mode);e.push({name:o,isDir:c})}return e},k=({path:t})=>(r.FS.rmdir(t),!0),w=({fsType:t,options:n,mountPoint:e})=>{const o=t,s=r.FS.filesystems[o];return s?(r.FS.mount(s,n,e),!0):!1},b=({mountPoint:t})=>(r.FS.unmount(t),!0);self.onmessage=async({data:{id:t,type:n,data:e}})=>{const o=[];let s;try{if(n!==E.LOAD&&!r)throw a;switch(n){case E.LOAD:s=await O(e);break;case E.EXEC:s=m(e);break;case E.FFPROBE:s=l(e);break;case E.WRITE_FILE:s=D(e);break;case E.READ_FILE:s=S(e);break;case E.DELETE_FILE:s=I(e);break;case E.RENAME:s=L(e);break;case E.CREATE_DIR:s=N(e);break;case E.LIST_DIR:s=A(e);break;case E.DELETE_DIR:s=k(e);break;case E.MOUNT:s=w(e);break;case E.UNMOUNT:s=b(e);break;default:throw f}}catch(c){self.postMessage({id:t,type:E.ERROR,data:c.toString()});return}s instanceof Uint8Array&&o.push(s.buffer),self.postMessage({id:t,type:n,data:s},o)}})();
src/backend/gradio_overlay_video/templates/example/index.js ADDED
The diff for this file is too large to render. See raw diff
 
src/backend/gradio_overlay_video/templates/example/style.css ADDED
@@ -0,0 +1 @@
 
 
1
+ .unstyled-link.svelte-151nsdd{all:unset;cursor:pointer}.overlay.svelte-1pwzuub{position:absolute;background-color:#0006;width:100%;height:100%}.hidden.svelte-1pwzuub{display:none}.load-wrap.svelte-1pwzuub{display:flex;justify-content:center;align-items:center;height:100%}.loader.svelte-1pwzuub{display:flex;position:relative;background-color:var(--border-color-accent-subdued);animation:svelte-1pwzuub-shadowPulse 2s linear infinite;box-shadow:-24px 0 var(--border-color-accent-subdued),24px 0 var(--border-color-accent-subdued);margin:var(--spacing-md);border-radius:50%;width:10px;height:10px;scale:.5}@keyframes svelte-1pwzuub-shadowPulse{33%{box-shadow:-24px 0 var(--border-color-accent-subdued),24px 0 #fff;background:#fff}66%{box-shadow:-24px 0 #fff,24px 0 #fff;background:var(--border-color-accent-subdued)}to{box-shadow:-24px 0 #fff,24px 0 var(--border-color-accent-subdued);background:#fff}}.container.svelte-13u05e4{flex:none;max-width:none}.container.svelte-13u05e4 video{width:var(--size-full);height:var(--size-full);object-fit:cover}.container.svelte-13u05e4:hover,.container.selected.svelte-13u05e4{border-color:var(--border-color-accent)}.container.table.svelte-13u05e4{margin:0 auto;border:2px solid var(--border-color-primary);border-radius:var(--radius-lg);overflow:hidden;width:var(--size-20);height:var(--size-20);object-fit:cover}.container.gallery.svelte-13u05e4{height:var(--size-20);max-height:var(--size-20);object-fit:cover}
src/backend/gradio_overlay_video/visualization_processors.py ADDED
@@ -0,0 +1,502 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ Visualization processors for different overlay types.
3
+ Each processor extracts and prepares specific visualization data from JSON.
4
+ Supports multiple keypoint formats: MediaPipe, COCO, COCO-WholeBody, Sociopticon.
5
+ """
6
+
7
+ from typing import Dict, List, Any, Optional, Tuple
8
+ import math
9
+ from dataclasses import dataclass
10
+ from .keypoint_formats import KeypointFormat, SkeletonDefinitions, KeypointFormatDetector, YOLOv11DataConverter
11
+
12
+
13
+ @dataclass
14
+ class VisualizationFrame:
15
+ """Unified frame data structure for all visualization types."""
16
+ timestamp: float
17
+ joints: Optional[List[Dict]] = None
18
+ bones: Optional[List[Dict]] = None
19
+ direction_arrow: Optional[Dict] = None
20
+ motion_trail: Optional[List[Dict]] = None
21
+ laban_metrics: Optional[Dict] = None
22
+
23
+
24
+ class JointsProcessor:
25
+ """Processes joint/keypoint data for circle visualization."""
26
+
27
+ def process_frame(self, frame_data: Dict) -> Optional[List[Dict]]:
28
+ """Extract joint positions from frame data."""
29
+ keypoints_data = frame_data.get('keypoints', [])
30
+ if not keypoints_data or not keypoints_data[0].get('points'):
31
+ return None
32
+
33
+ joints = []
34
+ points = keypoints_data[0]['points']
35
+
36
+ for point in points:
37
+ x = point.get('x', 0)
38
+ y = point.get('y', 0)
39
+ confidence = point.get('confidence', 0)
40
+
41
+ # Filter out low confidence points and 0,0 coordinates (invalid detections)
42
+ if confidence > 0.3 and not (x == 0 and y == 0):
43
+ joints.append({
44
+ 'x': x,
45
+ 'y': y,
46
+ 'confidence': confidence,
47
+ 'name': point.get('name', '')
48
+ })
49
+
50
+ return joints if joints else None
51
+
52
+
53
+ class BonesProcessor:
54
+ """Processes skeleton/bone connections for line visualization."""
55
+
56
+ # MediaPipe pose skeleton connections (33 keypoints)
57
+ MEDIAPIPE_SKELETON = [
58
+ # Face connections
59
+ (0, 1), (1, 2), (2, 3), (3, 7), # left eye region
60
+ (0, 4), (4, 5), (5, 6), (6, 8), # right eye region
61
+ (9, 10), # mouth
62
+ # Upper body
63
+ (11, 12), # shoulders
64
+ (11, 13), (13, 15), # left arm
65
+ (12, 14), (14, 16), # right arm
66
+ (11, 23), (12, 24), # shoulders to hips
67
+ (23, 24), # hips
68
+ # Lower body
69
+ (23, 25), (25, 27), (27, 29), (27, 31), # left leg
70
+ (24, 26), (26, 28), (28, 30), (28, 32), # right leg
71
+ # Hands
72
+ (15, 17), (15, 19), (15, 21), # left hand
73
+ (16, 18), (16, 20), (16, 22), # right hand
74
+ ]
75
+
76
+ # COCO keypoint skeleton connections (17 keypoints)
77
+ # Order: nose, eyes, ears, shoulders, elbows, wrists, hips, knees, ankles
78
+ COCO_SKELETON = [
79
+ # Head connections
80
+ (0, 1), (0, 2), # nose to eyes
81
+ (1, 3), (2, 4), # eyes to ears
82
+ # Upper body
83
+ (5, 6), # shoulders
84
+ (5, 7), (7, 9), # left arm
85
+ (6, 8), (8, 10), # right arm
86
+ (5, 11), (6, 12), # shoulders to hips
87
+ (11, 12), # hips
88
+ # Lower body
89
+ (11, 13), (13, 15), # left leg
90
+ (12, 14), (14, 16), # right leg
91
+ ]
92
+
93
+ # COCO-WholeBody skeleton connections (133 keypoints total)
94
+ # Body (17) + Face (68) + Left Hand (21) + Right Hand (21) + Feet (6)
95
+ COCO_WHOLEBODY_SKELETON = [
96
+ # Body connections (same as COCO)
97
+ (0, 1), (0, 2), (1, 3), (2, 4), # head
98
+ (5, 6), # shoulders
99
+ (5, 7), (7, 9), # left arm
100
+ (6, 8), (8, 10), # right arm
101
+ (5, 11), (6, 12), # shoulders to hips
102
+ (11, 12), # hips
103
+ (11, 13), (13, 15), # left leg
104
+ (12, 14), (14, 16), # right leg
105
+
106
+ # Face outline (simplified from 68 points)
107
+ (17, 18), (18, 19), (19, 20), (20, 21), # jaw line (partial)
108
+ (22, 23), (23, 24), (24, 25), (25, 26), # eyebrow left
109
+ (27, 28), (28, 29), (29, 30), (30, 31), # eyebrow right
110
+ (36, 37), (37, 38), (38, 39), (39, 40), (40, 41), (41, 36), # left eye
111
+ (42, 43), (43, 44), (44, 45), (45, 46), (46, 47), (47, 42), # right eye
112
+ (48, 49), (49, 50), (50, 51), (51, 52), (52, 53), # mouth outline (partial)
113
+
114
+ # Left hand connections (21 points starting at index 91)
115
+ (91, 92), (92, 93), (93, 94), (94, 95), # thumb
116
+ (91, 96), (96, 97), (97, 98), (98, 99), # index finger
117
+ (91, 100), (100, 101), (101, 102), (102, 103), # middle finger
118
+ (91, 104), (104, 105), (105, 106), (106, 107), # ring finger
119
+ (91, 108), (108, 109), (109, 110), (110, 111), # pinky
120
+
121
+ # Right hand connections (21 points starting at index 112)
122
+ (112, 113), (113, 114), (114, 115), (115, 116), # thumb
123
+ (112, 117), (117, 118), (118, 119), (119, 120), # index finger
124
+ (112, 121), (121, 122), (122, 123), (123, 124), # middle finger
125
+ (112, 125), (125, 126), (126, 127), (127, 128), # ring finger
126
+ (112, 129), (129, 130), (130, 131), (131, 132), # pinky
127
+ ]
128
+
129
+ # Sociopticon skeleton connections (custom format)
130
+ # Assuming similar to COCO but with additional torso detail
131
+ SOCIOPTICON_SKELETON = [
132
+ # Head connections
133
+ (0, 1), (0, 2), (1, 3), (2, 4), # head structure
134
+ # Upper body with more detail
135
+ (5, 6), # shoulders
136
+ (5, 7), (7, 9), # left arm
137
+ (6, 8), (8, 10), # right arm
138
+ (5, 11), (6, 12), # shoulders to hips
139
+ (11, 12), # hips
140
+ # Torso detail (if available)
141
+ (5, 17), (6, 18), # shoulder to mid-torso
142
+ (17, 18), (17, 11), (18, 12), # torso connections
143
+ # Lower body
144
+ (11, 13), (13, 15), # left leg
145
+ (12, 14), (14, 16), # right leg
146
+ ]
147
+
148
+ def __init__(self):
149
+ self.detected_format: Optional[KeypointFormat] = None
150
+
151
+ def detect_keypoint_format(self, points: List[Dict]) -> KeypointFormat:
152
+ """Detect the keypoint format based on number of points and structure."""
153
+ return KeypointFormatDetector.detect_format(points)
154
+
155
+ def get_skeleton_connections(self, format_type: KeypointFormat) -> List[Tuple[int, int]]:
156
+ """Get skeleton connections for the specified format."""
157
+ return SkeletonDefinitions.get_skeleton(format_type)
158
+
159
+ def process_frame(self, frame_data: Dict) -> Optional[List[Dict]]:
160
+ """Extract bone connections from frame data with auto-format detection."""
161
+ keypoints_data = frame_data.get('keypoints', [])
162
+ if not keypoints_data or not keypoints_data[0].get('points'):
163
+ return None
164
+
165
+ points = keypoints_data[0]['points']
166
+
167
+ # Auto-detect keypoint format if not already detected
168
+ if not self.detected_format:
169
+ self.detected_format = self.detect_keypoint_format(points)
170
+ format_info = KeypointFormatDetector.format_info(self.detected_format)
171
+ print(f"Detected keypoint format: {format_info['name']} ({len(points)} points)")
172
+
173
+ # Get appropriate skeleton connections
174
+ skeleton_connections = self.get_skeleton_connections(self.detected_format)
175
+
176
+ # Try index-based approach first (more reliable for standard formats)
177
+ bones = self._process_by_index(points, skeleton_connections)
178
+
179
+ # Fallback to name-based approach if index-based fails
180
+ if not bones:
181
+ bones = self._process_by_name(points, skeleton_connections)
182
+
183
+ return bones if bones else None
184
+
185
+ def _process_by_index(self, points: List[Dict], skeleton_connections: List[Tuple[int, int]]) -> List[Dict]:
186
+ """Process skeleton connections using point indices."""
187
+ bones = []
188
+
189
+ for connection in skeleton_connections:
190
+ idx1, idx2 = connection
191
+
192
+ # Check if indices are valid
193
+ if idx1 < len(points) and idx2 < len(points):
194
+ p1 = points[idx1]
195
+ p2 = points[idx2]
196
+
197
+ p1_x, p1_y = p1.get('x', 0), p1.get('y', 0)
198
+ p2_x, p2_y = p2.get('x', 0), p2.get('y', 0)
199
+ p1_conf, p2_conf = p1.get('confidence', 0), p2.get('confidence', 0)
200
+
201
+ # Check confidence, validity, and filter out 0,0 coordinates
202
+ if (p1_conf > 0.3 and p2_conf > 0.3 and
203
+ not math.isnan(p1_x) and not math.isnan(p1_y) and
204
+ not math.isnan(p2_x) and not math.isnan(p2_y) and
205
+ not (p1_x == 0 and p1_y == 0) and
206
+ not (p2_x == 0 and p2_y == 0)):
207
+
208
+ bones.append({
209
+ 'start': {'x': p1_x, 'y': p1_y},
210
+ 'end': {'x': p2_x, 'y': p2_y},
211
+ 'confidence': min(p1_conf, p2_conf),
212
+ 'connection': f"{idx1}-{idx2}",
213
+ 'format': self.detected_format.value
214
+ })
215
+
216
+ return bones
217
+
218
+ def _process_by_name(self, points: List[Dict], skeleton_connections: List[Tuple[int, int]]) -> List[Dict]:
219
+ """Fallback: Process skeleton connections using point names (MediaPipe style)."""
220
+ # Create lookup dict by keypoint name
221
+ points_by_name = {p.get('name', ''): p for p in points}
222
+
223
+ # Get keypoint names in order
224
+ keypoint_names = [p.get('name', '') for p in points]
225
+
226
+ bones = []
227
+
228
+ for connection in skeleton_connections:
229
+ idx1, idx2 = connection
230
+
231
+ if idx1 < len(keypoint_names) and idx2 < len(keypoint_names):
232
+ name1 = keypoint_names[idx1]
233
+ name2 = keypoint_names[idx2]
234
+
235
+ if name1 in points_by_name and name2 in points_by_name:
236
+ p1 = points_by_name[name1]
237
+ p2 = points_by_name[name2]
238
+
239
+ p1_x, p1_y = p1.get('x', 0), p1.get('y', 0)
240
+ p2_x, p2_y = p2.get('x', 0), p2.get('y', 0)
241
+ p1_conf, p2_conf = p1.get('confidence', 0), p2.get('confidence', 0)
242
+
243
+ # Check confidence, validity, and filter out 0,0 coordinates
244
+ if (p1_conf > 0.3 and p2_conf > 0.3 and
245
+ not math.isnan(p1_x) and not math.isnan(p1_y) and
246
+ not math.isnan(p2_x) and not math.isnan(p2_y) and
247
+ not (p1_x == 0 and p1_y == 0) and
248
+ not (p2_x == 0 and p2_y == 0)):
249
+
250
+ bones.append({
251
+ 'start': {'x': p1_x, 'y': p1_y},
252
+ 'end': {'x': p2_x, 'y': p2_y},
253
+ 'confidence': min(p1_conf, p2_conf),
254
+ 'connection': f"{name1}-{name2}",
255
+ 'format': self.detected_format.value
256
+ })
257
+
258
+ return bones
259
+
260
+
261
+ class DirectionArrowProcessor:
262
+ """Processes movement direction data for arrow visualization."""
263
+
264
+ def process_frame(self, frame_data: Dict) -> Optional[Dict]:
265
+ """Extract direction arrow data from frame metrics."""
266
+ metrics = frame_data.get('metrics', {})
267
+ keypoints_data = frame_data.get('keypoints', [])
268
+
269
+ direction = metrics.get('direction', 'stationary')
270
+ if direction == 'stationary':
271
+ return None
272
+
273
+ # Calculate body center from keypoints
274
+ if keypoints_data and keypoints_data[0].get('points'):
275
+ points = keypoints_data[0]['points']
276
+ valid_points = [p for p in points
277
+ if p.get('confidence', 0) > 0.3 and
278
+ not math.isnan(p.get('x', 0)) and
279
+ not math.isnan(p.get('y', 0)) and
280
+ not (p.get('x', 0) == 0 and p.get('y', 0) == 0)]
281
+
282
+ if valid_points:
283
+ center_x = sum(p['x'] for p in valid_points) / len(valid_points)
284
+ center_y = sum(p['y'] for p in valid_points) / len(valid_points)
285
+
286
+ # Direction vectors (normalized coordinates)
287
+ direction_vectors = {
288
+ 'up': (0, -0.1),
289
+ 'down': (0, 0.1),
290
+ 'left': (-0.1, 0),
291
+ 'right': (0.1, 0),
292
+ }
293
+
294
+ if direction in direction_vectors:
295
+ dx, dy = direction_vectors[direction]
296
+
297
+ return {
298
+ 'start': {'x': center_x, 'y': center_y},
299
+ 'end': {'x': center_x + dx, 'y': center_y + dy},
300
+ 'direction': direction,
301
+ 'intensity': metrics.get('intensity', 'medium'),
302
+ 'speed': metrics.get('speed', 'medium'),
303
+ 'velocity': metrics.get('velocity', 0)
304
+ }
305
+
306
+ return None
307
+
308
+
309
+ class MotionTrailProcessor:
310
+ """Processes motion trail data for path visualization."""
311
+
312
+ def __init__(self, trail_length: int = 10):
313
+ self.trail_length = trail_length
314
+ self.trails = {} # Store trails for each keypoint
315
+
316
+ def process_frame(self, frame_data: Dict, frame_index: int) -> Optional[List[Dict]]:
317
+ """Extract and update motion trail data."""
318
+ keypoints_data = frame_data.get('keypoints', [])
319
+ if not keypoints_data or not keypoints_data[0].get('points'):
320
+ return None
321
+
322
+ points = keypoints_data[0]['points']
323
+
324
+ # Update trails for each keypoint
325
+ for point in points:
326
+ x, y = point.get('x', 0), point.get('y', 0)
327
+ confidence = point.get('confidence', 0)
328
+
329
+ # Filter out low confidence and 0,0 coordinates
330
+ if confidence > 0.3 and not (x == 0 and y == 0):
331
+ name = point.get('name', '')
332
+ if name not in self.trails:
333
+ self.trails[name] = []
334
+
335
+ # Add current position to trail
336
+ self.trails[name].append({
337
+ 'x': x,
338
+ 'y': y,
339
+ 'frame': frame_index
340
+ })
341
+
342
+ # Keep only recent positions
343
+ if len(self.trails[name]) > self.trail_length:
344
+ self.trails[name] = self.trails[name][-self.trail_length:]
345
+
346
+ # Create trail segments for drawing
347
+ trail_segments = []
348
+ for joint_name, trail in self.trails.items():
349
+ if len(trail) >= 2:
350
+ for i in range(1, len(trail)):
351
+ p1 = trail[i-1]
352
+ p2 = trail[i]
353
+
354
+ # Calculate alpha based on age
355
+ alpha = i / len(trail)
356
+
357
+ trail_segments.append({
358
+ 'start': {'x': p1['x'], 'y': p1['y']},
359
+ 'end': {'x': p2['x'], 'y': p2['y']},
360
+ 'alpha': alpha,
361
+ 'joint': joint_name
362
+ })
363
+
364
+ return trail_segments if trail_segments else None
365
+
366
+
367
+ class LabanProcessor:
368
+ """Processes Laban Movement Analysis data for text and visual overlays."""
369
+
370
+ def process_frame(self, frame_data: Dict) -> Optional[Dict]:
371
+ """Extract Laban notation metrics from frame data."""
372
+ metrics = frame_data.get('metrics', {})
373
+ if not metrics:
374
+ return None
375
+
376
+ # Extract and clean metrics
377
+ def safe_value(val, default=0):
378
+ if isinstance(val, (int, float)) and not math.isnan(val):
379
+ return val
380
+ return default
381
+
382
+ laban_data = {
383
+ 'direction': metrics.get('direction', 'stationary'),
384
+ 'intensity': metrics.get('intensity', 'low'),
385
+ 'speed': metrics.get('speed', 'slow'),
386
+ 'velocity': safe_value(metrics.get('velocity'), 0),
387
+ 'acceleration': safe_value(metrics.get('acceleration'), 0),
388
+ 'fluidity': safe_value(metrics.get('fluidity'), 0),
389
+ 'expansion': safe_value(metrics.get('expansion'), 0),
390
+ 'total_displacement': safe_value(metrics.get('total_displacement'), 0)
391
+ }
392
+
393
+ # Add center displacement if available
394
+ center_displacement = metrics.get('center_displacement')
395
+ if center_displacement:
396
+ laban_data['center_displacement'] = {
397
+ 'x': safe_value(center_displacement.get('x'), 0),
398
+ 'y': safe_value(center_displacement.get('y'), 0)
399
+ }
400
+
401
+ return laban_data
402
+
403
+
404
+ class VisualizationProcessor:
405
+ """Main processor that coordinates all visualization types."""
406
+
407
+ def __init__(self,
408
+ enable_joints: bool = True,
409
+ enable_bones: bool = True,
410
+ enable_direction_arrows: bool = True,
411
+ enable_motion_trails: bool = True,
412
+ enable_laban: bool = True,
413
+ trail_length: int = 10):
414
+
415
+ self.enable_joints = enable_joints
416
+ self.enable_bones = enable_bones
417
+ self.enable_direction_arrows = enable_direction_arrows
418
+ self.enable_motion_trails = enable_motion_trails
419
+ self.enable_laban = enable_laban
420
+ self.detected_format = None
421
+
422
+ # Initialize processors
423
+ self.joints_processor = JointsProcessor() if enable_joints else None
424
+ self.bones_processor = BonesProcessor() if enable_bones else None
425
+ self.direction_processor = DirectionArrowProcessor() if enable_direction_arrows else None
426
+ self.trail_processor = MotionTrailProcessor(trail_length) if enable_motion_trails else None
427
+ self.laban_processor = LabanProcessor() if enable_laban else None
428
+
429
+ def process_json_data(self, json_data: Dict) -> Dict:
430
+ """Process full JSON data and return streamlined visualization instructions."""
431
+ # Check if this is YOLOv11 format and convert if needed
432
+ if KeypointFormatDetector.detect_yolo11_format(json_data):
433
+ print("Detected YOLOv11 pose format - converting to standard format...")
434
+
435
+ # Estimate video dimensions from keypoints
436
+ if 'keypoints' in json_data and json_data['keypoints']:
437
+ first_frame_keypoints = json_data['keypoints'][0]
438
+ video_width, video_height = YOLOv11DataConverter.estimate_video_dimensions(first_frame_keypoints)
439
+ print(f"Estimated video dimensions: {video_width}x{video_height}")
440
+ else:
441
+ video_width, video_height = 1920, 1080 # Default
442
+
443
+ # Convert YOLOv11 to standard format
444
+ json_data = YOLOv11DataConverter.convert_to_standard_format(
445
+ json_data, video_width, video_height
446
+ )
447
+ print("YOLOv11 data converted successfully")
448
+
449
+ video_info = json_data.get('video_info', {})
450
+ source_frames = json_data.get('movement_analysis', {}).get('frames', [])
451
+
452
+ processed_frames = []
453
+
454
+ for frame_index, frame in enumerate(source_frames):
455
+ viz_frame = VisualizationFrame(
456
+ timestamp=frame.get('timestamp', 0)
457
+ )
458
+
459
+ # Process each visualization type
460
+ if self.joints_processor:
461
+ viz_frame.joints = self.joints_processor.process_frame(frame)
462
+
463
+ if self.bones_processor:
464
+ viz_frame.bones = self.bones_processor.process_frame(frame)
465
+
466
+ if self.direction_processor:
467
+ viz_frame.direction_arrow = self.direction_processor.process_frame(frame)
468
+
469
+ if self.trail_processor:
470
+ viz_frame.motion_trail = self.trail_processor.process_frame(frame, frame_index)
471
+
472
+ if self.laban_processor:
473
+ viz_frame.laban_metrics = self.laban_processor.process_frame(frame)
474
+
475
+ # Convert to dict for JSON serialization
476
+ processed_frames.append({
477
+ 'timestamp': viz_frame.timestamp,
478
+ 'joints': viz_frame.joints,
479
+ 'bones': viz_frame.bones,
480
+ 'direction_arrow': viz_frame.direction_arrow,
481
+ 'motion_trail': viz_frame.motion_trail,
482
+ 'laban_metrics': viz_frame.laban_metrics
483
+ })
484
+
485
+ # Get detected format from bones processor
486
+ detected_format = None
487
+ if self.bones_processor and hasattr(self.bones_processor, 'detected_format'):
488
+ detected_format = self.bones_processor.detected_format
489
+
490
+ return {
491
+ 'video_info': video_info,
492
+ 'fps': video_info.get('fps', 30), # Extract FPS for frontend
493
+ 'frames': processed_frames,
494
+ 'keypoint_format': detected_format.value if detected_format else None, # Add detected format info
495
+ 'capabilities': {
496
+ 'has_joints': self.enable_joints,
497
+ 'has_bones': self.enable_bones,
498
+ 'has_direction_arrows': self.enable_direction_arrows,
499
+ 'has_motion_trails': self.enable_motion_trails,
500
+ 'has_laban': self.enable_laban
501
+ }
502
+ }
src/demo/.gradio/cached_examples/9/Output/b558f74ed1913fbba573/balette.mp4 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:75e5ff7c8e5eb31b54686b0250a1ebc739ea1128bb18f116f8f0215159e0979b
3
+ size 621415
src/demo/.gradio/cached_examples/9/log.csv ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ Output,timestamp
2
+ "{""video"": {""path"": "".gradio/cached_examples/9/Output/b558f74ed1913fbba573/balette.mp4"", ""url"": ""/gradio_api/file=/private/var/folders/wz/v3427jc170563frpfjc2z0240000gn/T/gradio/d1815483c8302d65adbf0fcd64bf7a30390181dc1a4a8175ce9b53bd3aa91971/balette.mp4"", ""size"": null, ""orig_name"": ""balette.mp4"", ""mime_type"": null, ""is_stream"": false, ""meta"": {""_type"": ""gradio.FileData""}}, ""json_data"": ""{\""video_info\"": {\""fps\"": 60, \""duration_seconds\"": 3.1166666666666667, \""width\"": 1280, \""height\"": 688, \""frame_count\"": 187}, \""fps\"": 60, \""frames\"": [{\""timestamp\"": 0, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""low\"", \""speed\"": \""slow\"", \""velocity\"": 0, \""acceleration\"": 0, \""fluidity\"": 0, \""expansion\"": 0.142, \""total_displacement\"": 0}}, {\""timestamp\"": 0.016666666666666666, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""left\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 1.051, \""acceleration\"": 63.0628, \""fluidity\"": 0, \""expansion\"": 0.15, \""total_displacement\"": 0.0175, \""center_displacement\"": {\""x\"": -0.0175, \""y\"": 0.0004}}}, {\""timestamp\"": 0.03333333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0654, \""acceleration\"": 59.1406, \""fluidity\"": 0, \""expansion\"": 0.149, \""total_displacement\"": 0.0011, \""center_displacement\"": {\""x\"": -0.0011, \""y\"": -0.0002}}}, {\""timestamp\"": 0.05, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.2949, \""acceleration\"": 30.5825, \""fluidity\"": 0.092, \""expansion\"": 0.15, \""total_displacement\"": 0.0011, \""center_displacement\"": {\""x\"": -0.001, \""y\"": -0.0002}}}, {\""timestamp\"": 0.06666666666666667, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.36, \""acceleration\"": 38.7168, \""fluidity\"": 0.023, \""expansion\"": 0.149, \""total_displacement\"": 0.0005, \""center_displacement\"": {\""x\"": 0.0004, \""y\"": -0.0002}}}, {\""timestamp\"": 0.08333333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.2096, \""acceleration\"": 33.4529, \""fluidity\"": 0.029, \""expansion\"": 0.151, \""total_displacement\"": 0.002, \""center_displacement\"": {\""x\"": 0.0017, \""y\"": -0.0011}}}, {\""timestamp\"": 0.1, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.2213, \""acceleration\"": 27.1474, \""fluidity\"": 0.036, \""expansion\"": 0.152, \""total_displacement\"": 0.0003, \""center_displacement\"": {\""x\"": -0.0002, \""y\"": -0.0003}}}, {\""timestamp\"": 0.11666666666666667, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""medium\"", \""speed\"": \""fast\"", \""velocity\"": 0.2033, \""acceleration\"": 24.8517, \""fluidity\"": 0.16, \""expansion\"": 0.155, \""total_displacement\"": 0.0004, \""center_displacement\"": {\""x\"": 0.0001, \""y\"": 0.0004}}}, {\""timestamp\"": 0.13333333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.1729, \""acceleration\"": 21.8885, \""fluidity\"": 0.056, \""expansion\"": 0.156, \""total_displacement\"": 0.001, \""center_displacement\"": {\""x\"": -0.0009, \""y\"": 0.0001}}}, {\""timestamp\"": 0.15, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.1527, \""acceleration\"": 19.1312, \""fluidity\"": 0.063, \""expansion\"": 0.156, \""total_displacement\"": 0.0002, \""center_displacement\"": {\""x\"": -0.0001, \""y\"": 0.0002}}}, {\""timestamp\"": 0.16666666666666666, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.1571, \""acceleration\"": 17.7603, \""fluidity\"": 0.07, \""expansion\"": 0.159, \""total_displacement\"": 0.0017, \""center_displacement\"": {\""x\"": -0.0001, \""y\"": -0.0017}}}, {\""timestamp\"": 0.18333333333333332, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.1276, \""acceleration\"": 15.7758, \""fluidity\"": 0.047, \""expansion\"": 0.16, \""total_displacement\"": 0.0005, \""center_displacement\"": {\""x\"": 0.0003, \""y\"": -0.0003}}}, {\""timestamp\"": 0.2, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.1568, \""acceleration\"": 15.6038, \""fluidity\"": 0.045, \""expansion\"": 0.171, \""total_displacement\"": 0.0032, \""center_displacement\"": {\""x\"": -0.0032, \""y\"": -0.0001}}}, {\""timestamp\"": 0.21666666666666667, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.1198, \""acceleration\"": 14.5715, \""fluidity\"": 0.041, \""expansion\"": 0.173, \""total_displacement\"": 0.0006, \""center_displacement\"": {\""x\"": -0.0004, \""y\"": 0.0005}}}, {\""timestamp\"": 0.23333333333333334, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.1172, \""acceleration\"": 11.8933, \""fluidity\"": 0.033, \""expansion\"": 0.173, \""total_displacement\"": 0.0011, \""center_displacement\"": {\""x\"": -0.0007, \""y\"": 0.0008}}}, {\""timestamp\"": 0.25, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.1102, \""acceleration\"": 10.778, \""fluidity\"": 0.03, \""expansion\"": 0.172, \""total_displacement\"": 0.0008, \""center_displacement\"": {\""x\"": -0.0008, \""y\"": 0.0002}}}, {\""timestamp\"": 0.26666666666666666, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0949, \""acceleration\"": 9.5334, \""fluidity\"": 0.026, \""expansion\"": 0.172, \""total_displacement\"": 0.0005, \""center_displacement\"": {\""x\"": 0, \""y\"": 0.0005}}}, {\""timestamp\"": 0.2833333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0866, \""acceleration\"": 8.1758, \""fluidity\"": 0.022, \""expansion\"": 0.174, \""total_displacement\"": 0.0004, \""center_displacement\"": {\""x\"": -0.0004, \""y\"": 0}}}, {\""timestamp\"": 0.3, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0767, \""acceleration\"": 7.2556, \""fluidity\"": 0.019, \""expansion\"": 0.175, \""total_displacement\"": 0.0003, \""center_displacement\"": {\""x\"": 0, \""y\"": 0.0003}}}, {\""timestamp\"": 0.31666666666666665, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0817, \""acceleration\"": 7.042, \""fluidity\"": 0.017, \""expansion\"": 0.177, \""total_displacement\"": 0.0011, \""center_displacement\"": {\""x\"": -0.0011, \""y\"": 0}}}, {\""timestamp\"": 0.3333333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0676, \""acceleration\"": 6.2615, \""fluidity\"": 0.015, \""expansion\"": 0.179, \""total_displacement\"": 0.0004, \""center_displacement\"": {\""x\"": -0.0003, \""y\"": 0.0003}}}, {\""timestamp\"": 0.35, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0607, \""acceleration\"": 5.2741, \""fluidity\"": 0.013, \""expansion\"": 0.179, \""total_displacement\"": 0.0003, \""center_displacement\"": {\""x\"": -0.0003, \""y\"": 0}}}, {\""timestamp\"": 0.36666666666666664, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0578, \""acceleration\"": 4.7129, \""fluidity\"": 0.011, \""expansion\"": 0.183, \""total_displacement\"": 0.0004, \""center_displacement\"": {\""x\"": -0.0002, \""y\"": 0.0003}}}, {\""timestamp\"": 0.3833333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0493, \""acceleration\"": 4.2135, \""fluidity\"": 0.01, \""expansion\"": 0.183, \""total_displacement\"": 0.0002, \""center_displacement\"": {\""x\"": -0.0002, \""y\"": 0.0001}}}, {\""timestamp\"": 0.4, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0724, \""acceleration\"": 5.2104, \""fluidity\"": 0.008, \""expansion\"": 0.191, \""total_displacement\"": 0.002, \""center_displacement\"": {\""x\"": -0.0018, \""y\"": 0.0009}}}, {\""timestamp\"": 0.4166666666666667, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""slow\"", \""velocity\"": 0.0467, \""acceleration\"": 5.2539, \""fluidity\"": 0.007, \""expansion\"": 0.191, \""total_displacement\"": 0.0001, \""center_displacement\"": {\""x\"": -0.0001, \""y\"": 0}}}, {\""timestamp\"": 0.43333333333333335, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0614, \""acceleration\"": 4.7211, \""fluidity\"": 0.006, \""expansion\"": 0.192, \""total_displacement\"": 0.0013, \""center_displacement\"": {\""x\"": -0.0013, \""y\"": -0.0001}}}, {\""timestamp\"": 0.45, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0493, \""acceleration\"": 4.7025, \""fluidity\"": 0.005, \""expansion\"": 0.191, \""total_displacement\"": 0.0003, \""center_displacement\"": {\""x\"": -0.0003, \""y\"": -0.0001}}}, {\""timestamp\"": 0.4666666666666667, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0441, \""acceleration\"": 3.7031, \""fluidity\"": 0.086, \""expansion\"": 0.191, \""total_displacement\"": 0.0003, \""center_displacement\"": {\""x\"": -0.0003, \""y\"": 0.0001}}}, {\""timestamp\"": 0.48333333333333334, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0545, \""acceleration\"": 3.9435, \""fluidity\"": 0.024, \""expansion\"": 0.192, \""total_displacement\"": 0.0011, \""center_displacement\"": {\""x\"": -0.0008, \""y\"": 0.0007}}}, {\""timestamp\"": 0.5, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0412, \""acceleration\"": 3.7837, \""fluidity\"": 0.029, \""expansion\"": 0.192, \""total_displacement\"": 0.0003, \""center_displacement\"": {\""x\"": -0.0003, \""y\"": 0.0001}}}, {\""timestamp\"": 0.5166666666666666, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0436, \""acceleration\"": 3.1217, \""fluidity\"": 0.035, \""expansion\"": 0.192, \""total_displacement\"": 0.0006, \""center_displacement\"": {\""x\"": 0, \""y\"": -0.0006}}}, {\""timestamp\"": 0.5333333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0395, \""acceleration\"": 2.9474, \""fluidity\"": 0.022, \""expansion\"": 0.192, \""total_displacement\"": 0.0003, \""center_displacement\"": {\""x\"": 0.0001, \""y\"": -0.0003}}}, {\""timestamp\"": 0.55, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0341, \""acceleration\"": 2.5603, \""fluidity\"": 0.022, \""expansion\"": 0.192, \""total_displacement\"": 0.0002, \""center_displacement\"": {\""x\"": 0.0001, \""y\"": -0.0001}}}, {\""timestamp\"": 0.5666666666666667, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0341, \""acceleration\"": 2.2634, \""fluidity\"": 0.02, \""expansion\"": 0.193, \""total_displacement\"": 0.0003, \""center_displacement\"": {\""x\"": -0.0001, \""y\"": -0.0003}}}, {\""timestamp\"": 0.5833333333333334, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""medium\"", \""speed\"": \""fast\"", \""velocity\"": 0.0316, \""acceleration\"": 1.9529, \""fluidity\"": 0.215, \""expansion\"": 0.194, \""total_displacement\"": 0.0003, \""center_displacement\"": {\""x\"": -0.0001, \""y\"": -0.0003}}}, {\""timestamp\"": 0.6, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0364, \""acceleration\"": 2.1029, \""fluidity\"": 0.064, \""expansion\"": 0.196, \""total_displacement\"": 0.0008, \""center_displacement\"": {\""x\"": -0.0006, \""y\"": -0.0004}}}, {\""timestamp\"": 0.6166666666666667, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""slow\"", \""velocity\"": 0.028, \""acceleration\"": 2.1194, \""fluidity\"": 0.075, \""expansion\"": 0.197, \""total_displacement\"": 0.0002, \""center_displacement\"": {\""x\"": -0.0002, \""y\"": 0}}}, {\""timestamp\"": 0.6333333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0276, \""acceleration\"": 1.6102, \""fluidity\"": 0.088, \""expansion\"": 0.2, \""total_displacement\"": 0.0002, \""center_displacement\"": {\""x\"": 0.0001, \""y\"": 0.0002}}}, {\""timestamp\"": 0.65, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""slow\"", \""velocity\"": 0.0241, \""acceleration\"": 1.6084, \""fluidity\"": 0.057, \""expansion\"": 0.201, \""total_displacement\"": 0.0001, \""center_displacement\"": {\""x\"": 0.0001, \""y\"": 0}}}, {\""timestamp\"": 0.6666666666666666, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""low\"", \""speed\"": \""slow\"", \""velocity\"": 0.0211, \""acceleration\"": 1.3391, \""fluidity\"": 0.282, \""expansion\"": 0.201, \""total_displacement\"": 0.0001, \""center_displacement\"": {\""x\"": 0, \""y\"": 0.0001}}}, {\""timestamp\"": 0.6833333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0365, \""acceleration\"": 2.1662, \""fluidity\"": 0.107, \""expansion\"": 0.205, \""total_displacement\"": 0.0012, \""center_displacement\"": {\""x\"": -0.0004, \""y\"": 0.0011}}}, {\""timestamp\"": 0.7, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0301, \""acceleration\"": 1.7959, \""fluidity\"": 0.111, \""expansion\"": 0.206, \""total_displacement\"": 0.0006, \""center_displacement\"": {\""x\"": -0.0003, \""y\"": 0.0005}}}, {\""timestamp\"": 0.7166666666666667, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0458, \""acceleration\"": 2.1795, \""fluidity\"": 0.125, \""expansion\"": 0.21, \""total_displacement\"": 0.0016, \""center_displacement\"": {\""x\"": -0.0004, \""y\"": 0.0015}}}, {\""timestamp\"": 0.7333333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0477, \""acceleration\"": 1.79, \""fluidity\"": 0.086, \""expansion\"": 0.211, \""total_displacement\"": 0.0013, \""center_displacement\"": {\""x\"": -0.0004, \""y\"": 0.0012}}}, {\""timestamp\"": 0.75, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.034, \""acceleration\"": 2.4349, \""fluidity\"": 0.081, \""expansion\"": 0.211, \""total_displacement\"": 0.0002, \""center_displacement\"": {\""x\"": -0.0001, \""y\"": 0.0002}}}, {\""timestamp\"": 0.7666666666666666, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""medium\"", \""speed\"": \""fast\"", \""velocity\"": 0.0353, \""acceleration\"": 1.6237, \""fluidity\"": 0.21, \""expansion\"": 0.213, \""total_displacement\"": 0.0002, \""center_displacement\"": {\""x\"": 0.0002, \""y\"": 0.0001}}}, {\""timestamp\"": 0.7833333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""medium\"", \""speed\"": \""fast\"", \""velocity\"": 0.0329, \""acceleration\"": 1.47, \""fluidity\"": 0.305, \""expansion\"": 0.214, \""total_displacement\"": 0.0002, \""center_displacement\"": {\""x\"": 0.0002, \""y\"": 0.0002}}}, {\""timestamp\"": 0.8, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0299, \""acceleration\"": 1.4263, \""fluidity\"": 0.178, \""expansion\"": 0.215, \""total_displacement\"": 0.0003, \""center_displacement\"": {\""x\"": 0.0003, \""y\"": 0}}}, {\""timestamp\"": 0.8166666666666667, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0277, \""acceleration\"": 1.1971, \""fluidity\"": 0.173, \""expansion\"": 0.215, \""total_displacement\"": 0.0002, \""center_displacement\"": {\""x\"": 0.0002, \""y\"": -0.0001}}}, {\""timestamp\"": 0.8333333333333334, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0376, \""acceleration\"": 1.7321, \""fluidity\"": 0.164, \""expansion\"": 0.215, \""total_displacement\"": 0.001, \""center_displacement\"": {\""x\"": 0.0005, \""y\"": -0.0008}}}, {\""timestamp\"": 0.85, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0346, \""acceleration\"": 1.3423, \""fluidity\"": 0.129, \""expansion\"": 0.215, \""total_displacement\"": 0.0007, \""center_displacement\"": {\""x\"": 0.0003, \""y\"": -0.0006}}}, {\""timestamp\"": 0.8666666666666667, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0332, \""acceleration\"": 1.2208, \""fluidity\"": 0.117, \""expansion\"": 0.215, \""total_displacement\"": 0.0006, \""center_displacement\"": {\""x\"": 0.0002, \""y\"": -0.0005}}}, {\""timestamp\"": 0.8833333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""slow\"", \""velocity\"": 0.0281, \""acceleration\"": 1.4679, \""fluidity\"": 0.102, \""expansion\"": 0.215, \""total_displacement\"": 0.0001, \""center_displacement\"": {\""x\"": 0.0001, \""y\"": 0.0001}}}, {\""timestamp\"": 0.9, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""low\"", \""speed\"": \""slow\"", \""velocity\"": 0.0256, \""acceleration\"": 1.01, \""fluidity\"": 0.326, \""expansion\"": 0.215, \""total_displacement\"": 0.0001, \""center_displacement\"": {\""x\"": 0, \""y\"": 0.0001}}}, {\""timestamp\"": 0.9166666666666666, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0329, \""acceleration\"": 1.495, \""fluidity\"": 0.136, \""expansion\"": 0.216, \""total_displacement\"": 0.0007, \""center_displacement\"": {\""x\"": 0.0007, \""y\"": 0}}}, {\""timestamp\"": 0.9333333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0308, \""acceleration\"": 1.1118, \""fluidity\"": 0.141, \""expansion\"": 0.217, \""total_displacement\"": 0.0006, \""center_displacement\"": {\""x\"": 0.0006, \""y\"": 0.0001}}}, {\""timestamp\"": 0.95, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0273, \""acceleration\"": 1.1554, \""fluidity\"": 0.151, \""expansion\"": 0.218, \""total_displacement\"": 0.0003, \""center_displacement\"": {\""x\"": 0.0003, \""y\"": 0.0001}}}, {\""timestamp\"": 0.9666666666666667, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0794, \""acceleration\"": 4.0386, \""fluidity\"": 0.107, \""expansion\"": 0.22, \""total_displacement\"": 0.0038, \""center_displacement\"": {\""x\"": -0.0001, \""y\"": 0.0038}}}, {\""timestamp\"": 0.9833333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0663, \""acceleration\"": 3.06, \""fluidity\"": 0.1, \""expansion\"": 0.221, \""total_displacement\"": 0.0021, \""center_displacement\"": {\""x\"": 0.0001, \""y\"": 0.0021}}}, {\""timestamp\"": 1, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""down\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.274, \""acceleration\"": 13.9959, \""fluidity\"": 0.089, \""expansion\"": 0.223, \""total_displacement\"": 0.0154, \""center_displacement\"": {\""x\"": 0.0002, \""y\"": 0.0154}}}, {\""timestamp\"": 1.0166666666666666, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.141, \""acceleration\"": 16.9543, \""fluidity\"": 0.074, \""expansion\"": 0.224, \""total_displacement\"": 0.0024, \""center_displacement\"": {\""x\"": 0.0002, \""y\"": 0.0024}}}, {\""timestamp\"": 1.0333333333333332, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""down\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.3349, \""acceleration\"": 19.2106, \""fluidity\"": 0.066, \""expansion\"": 0.227, \""total_displacement\"": 0.0143, \""center_displacement\"": {\""x\"": 0.0009, \""y\"": 0.0143}}}, {\""timestamp\"": 1.05, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.2284, \""acceleration\"": 22.9589, \""fluidity\"": 0.057, \""expansion\"": 0.227, \""total_displacement\"": 0.0027, \""center_displacement\"": {\""x\"": 0.0003, \""y\"": 0.0027}}}, {\""timestamp\"": 1.0666666666666667, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.1805, \""acceleration\"": 16.9712, \""fluidity\"": 0.049, \""expansion\"": 0.227, \""total_displacement\"": 0.0003, \""center_displacement\"": {\""x\"": 0.0001, \""y\"": 0.0003}}}, {\""timestamp\"": 1.0833333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""down\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.3465, \""acceleration\"": 24.1562, \""fluidity\"": 0.043, \""expansion\"": 0.231, \""total_displacement\"": 0.0107, \""center_displacement\"": {\""x\"": 0.0016, \""y\"": 0.0106}}}, {\""timestamp\"": 1.1, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.206, \""acceleration\"": 24.6307, \""fluidity\"": 0.037, \""expansion\"": 0.231, \""total_displacement\"": 0.0011, \""center_displacement\"": {\""x\"": 0.001, \""y\"": 0.0005}}}, {\""timestamp\"": 1.1166666666666667, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.2545, \""acceleration\"": 19.6865, \""fluidity\"": 0.032, \""expansion\"": 0.235, \""total_displacement\"": 0.0047, \""center_displacement\"": {\""x\"": 0.0022, \""y\"": 0.0042}}}, {\""timestamp\"": 1.1333333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.2361, \""acceleration\"": 19.3326, \""fluidity\"": 0.028, \""expansion\"": 0.237, \""total_displacement\"": 0.0023, \""center_displacement\"": {\""x\"": 0.0014, \""y\"": 0.0018}}}, {\""timestamp\"": 1.15, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.1866, \""acceleration\"": 17.2203, \""fluidity\"": 0.025, \""expansion\"": 0.237, \""total_displacement\"": 0.0008, \""center_displacement\"": {\""x\"": 0.0005, \""y\"": 0.0007}}}, {\""timestamp\"": 1.1666666666666667, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.2468, \""acceleration\"": 17.9569, \""fluidity\"": 0.021, \""expansion\"": 0.242, \""total_displacement\"": 0.0052, \""center_displacement\"": {\""x\"": 0.0044, \""y\"": -0.0028}}}, {\""timestamp\"": 1.1833333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.1892, \""acceleration\"": 16.9628, \""fluidity\"": 0.019, \""expansion\"": 0.242, \""total_displacement\"": 0.0015, \""center_displacement\"": {\""x\"": 0.0011, \""y\"": -0.0009}}}, {\""timestamp\"": 1.2, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""up\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.3082, \""acceleration\"": 20.8769, \""fluidity\"": 0.016, \""expansion\"": 0.248, \""total_displacement\"": 0.0102, \""center_displacement\"": {\""x\"": 0.0062, \""y\"": -0.0081}}}, {\""timestamp\"": 1.2166666666666666, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.258, \""acceleration\"": 18.7894, \""fluidity\"": 0.014, \""expansion\"": 0.249, \""total_displacement\"": 0.0048, \""center_displacement\"": {\""x\"": 0.0009, \""y\"": -0.0047}}}, {\""timestamp\"": 1.2333333333333334, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""up\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.4267, \""acceleration\"": 24.1119, \""fluidity\"": 0.012, \""expansion\"": 0.252, \""total_displacement\"": 0.0159, \""center_displacement\"": {\""x\"": 0.0049, \""y\"": -0.0151}}}, {\""timestamp\"": 1.25, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""up\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.3443, \""acceleration\"": 24.447, \""fluidity\"": 0.011, \""expansion\"": 0.252, \""total_displacement\"": 0.0064, \""center_displacement\"": {\""x\"": 0.0025, \""y\"": -0.0059}}}, {\""timestamp\"": 1.2666666666666666, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.2922, \""acceleration\"": 20.5096, \""fluidity\"": 0.009, \""expansion\"": 0.252, \""total_displacement\"": 0.0023, \""center_displacement\"": {\""x\"": 0.0005, \""y\"": -0.0023}}}, {\""timestamp\"": 1.2833333333333332, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""up\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.4392, \""acceleration\"": 25.5796, \""fluidity\"": 0.008, \""expansion\"": 0.251, \""total_displacement\"": 0.0116, \""center_displacement\"": {\""x\"": 0.0045, \""y\"": -0.0107}}}, {\""timestamp\"": 1.3, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.312, \""acceleration\"": 25.454, \""fluidity\"": 0.007, \""expansion\"": 0.252, \""total_displacement\"": 0.0029, \""center_displacement\"": {\""x\"": 0.001, \""y\"": -0.0027}}}, {\""timestamp\"": 1.3166666666666667, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""right\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.374, \""acceleration\"": 22.0903, \""fluidity\"": 0.006, \""expansion\"": 0.25, \""total_displacement\"": 0.0075, \""center_displacement\"": {\""x\"": 0.0059, \""y\"": -0.0048}}}, {\""timestamp\"": 1.3333333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.3019, \""acceleration\"": 23.8408, \""fluidity\"": 0.005, \""expansion\"": 0.25, \""total_displacement\"": 0.0014, \""center_displacement\"": {\""x\"": 0.0013, \""y\"": -0.0004}}}, {\""timestamp\"": 1.35, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.2638, \""acceleration\"": 18.0714, \""fluidity\"": 0.005, \""expansion\"": 0.248, \""total_displacement\"": 0.0011, \""center_displacement\"": {\""x\"": 0, \""y\"": -0.0011}}}, {\""timestamp\"": 1.3666666666666667, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.3077, \""acceleration\"": 19.3583, \""fluidity\"": 0.004, \""expansion\"": 0.246, \""total_displacement\"": 0.0048, \""center_displacement\"": {\""x\"": 0.0047, \""y\"": -0.0013}}}, {\""timestamp\"": 1.3833333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.2445, \""acceleration\"": 18.1099, \""fluidity\"": 0.003, \""expansion\"": 0.246, \""total_displacement\"": 0.0017, \""center_displacement\"": {\""x\"": 0.0014, \""y\"": -0.0011}}}, {\""timestamp\"": 1.4, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""right\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.2896, \""acceleration\"": 17.4501, \""fluidity\"": 0.003, \""expansion\"": 0.245, \""total_displacement\"": 0.0057, \""center_displacement\"": {\""x\"": 0.0057, \""y\"": -0.0007}}}, {\""timestamp\"": 1.4166666666666667, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.2406, \""acceleration\"": 17.0553, \""fluidity\"": 0.003, \""expansion\"": 0.245, \""total_displacement\"": 0.002, \""center_displacement\"": {\""x\"": 0.002, \""y\"": 0.0004}}}, {\""timestamp\"": 1.4333333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.2684, \""acceleration\"": 15.824, \""fluidity\"": 0.002, \""expansion\"": 0.244, \""total_displacement\"": 0.005, \""center_displacement\"": {\""x\"": 0.005, \""y\"": 0.0005}}}, {\""timestamp\"": 1.45, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.22, \""acceleration\"": 15.8399, \""fluidity\"": 0.002, \""expansion\"": 0.245, \""total_displacement\"": 0.0014, \""center_displacement\"": {\""x\"": 0.0013, \""y\"": 0.0004}}}, {\""timestamp\"": 1.4666666666666666, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.1953, \""acceleration\"": 12.62, \""fluidity\"": 0.002, \""expansion\"": 0.245, \""total_displacement\"": 0.0009, \""center_displacement\"": {\""x\"": 0.0009, \""y\"": 0.0001}}}, {\""timestamp\"": 1.4833333333333334, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.23, \""acceleration\"": 13.8316, \""fluidity\"": 0.001, \""expansion\"": 0.243, \""total_displacement\"": 0.0039, \""center_displacement\"": {\""x\"": 0.0038, \""y\"": -0.0009}}}, {\""timestamp\"": 1.5, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.1693, \""acceleration\"": 13.6376, \""fluidity\"": 0.001, \""expansion\"": 0.242, \""total_displacement\"": 0.0005, \""center_displacement\"": {\""x\"": 0.0005, \""y\"": -0.0001}}}, {\""timestamp\"": 1.5166666666666666, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.1981, \""acceleration\"": 12.5103, \""fluidity\"": 0.001, \""expansion\"": 0.24, \""total_displacement\"": 0.0033, \""center_displacement\"": {\""x\"": 0.0031, \""y\"": -0.0012}}}, {\""timestamp\"": 1.5333333333333332, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.1657, \""acceleration\"": 11.9829, \""fluidity\"": 0.001, \""expansion\"": 0.237, \""total_displacement\"": 0.0011, \""center_displacement\"": {\""x\"": 0.0005, \""y\"": -0.001}}}, {\""timestamp\"": 1.55, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.1546, \""acceleration\"": 9.8336, \""fluidity\"": 0.001, \""expansion\"": 0.236, \""total_displacement\"": 0.0014, \""center_displacement\"": {\""x\"": 0.0001, \""y\"": -0.0014}}}, {\""timestamp\"": 1.5666666666666667, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.1733, \""acceleration\"": 9.925, \""fluidity\"": 0.001, \""expansion\"": 0.236, \""total_displacement\"": 0.0029, \""center_displacement\"": {\""x\"": 0.0027, \""y\"": -0.001}}}, {\""timestamp\"": 1.5833333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.138, \""acceleration\"": 9.6841, \""fluidity\"": 0.001, \""expansion\"": 0.236, \""total_displacement\"": 0.001, \""center_displacement\"": {\""x\"": 0.001, \""y\"": 0}}}, {\""timestamp\"": 1.6, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.1584, \""acceleration\"": 8.9992, \""fluidity\"": 0.001, \""expansion\"": 0.238, \""total_displacement\"": 0.0028, \""center_displacement\"": {\""x\"": 0.0028, \""y\"": -0.0004}}}, {\""timestamp\"": 1.6166666666666667, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.125, \""acceleration\"": 9.2114, \""fluidity\"": 0, \""expansion\"": 0.239, \""total_displacement\"": 0.0005, \""center_displacement\"": {\""x\"": 0.0005, \""y\"": 0}}}, {\""timestamp\"": 1.6333333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.1201, \""acceleration\"": 7.4065, \""fluidity\"": 0, \""expansion\"": 0.243, \""total_displacement\"": 0.001, \""center_displacement\"": {\""x\"": 0.0009, \""y\"": -0.0003}}}, {\""timestamp\"": 1.65, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.1079, \""acceleration\"": 6.8687, \""fluidity\"": 0, \""expansion\"": 0.244, \""total_displacement\"": 0.0005, \""center_displacement\"": {\""x\"": 0.0003, \""y\"": -0.0004}}}, {\""timestamp\"": 1.6666666666666667, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0935, \""acceleration\"": 5.9798, \""fluidity\"": 0, \""expansion\"": 0.244, \""total_displacement\"": 0.0003, \""center_displacement\"": {\""x\"": 0.0002, \""y\"": -0.0003}}}, {\""timestamp\"": 1.6833333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0962, \""acceleration\"": 5.6971, \""fluidity\"": 0, \""expansion\"": 0.245, \""total_displacement\"": 0.0011, \""center_displacement\"": {\""x\"": 0.001, \""y\"": -0.0003}}}, {\""timestamp\"": 1.7, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0824, \""acceleration\"": 5.1041, \""fluidity\"": 0, \""expansion\"": 0.245, \""total_displacement\"": 0.0005, \""center_displacement\"": {\""x\"": 0.0004, \""y\"": -0.0003}}}, {\""timestamp\"": 1.7166666666666666, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0836, \""acceleration\"": 4.649, \""fluidity\"": 0, \""expansion\"": 0.244, \""total_displacement\"": 0.001, \""center_displacement\"": {\""x\"": 0.001, \""y\"": 0.0002}}}, {\""timestamp\"": 1.7333333333333334, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0755, \""acceleration\"": 4.1983, \""fluidity\"": 0, \""expansion\"": 0.243, \""total_displacement\"": 0.0007, \""center_displacement\"": {\""x\"": 0.0007, \""y\"": 0}}}, {\""timestamp\"": 1.75, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0641, \""acceleration\"": 3.8633, \""fluidity\"": 0, \""expansion\"": 0.243, \""total_displacement\"": 0.0002, \""center_displacement\"": {\""x\"": 0.0002, \""y\"": 0}}}, {\""timestamp\"": 1.7666666666666666, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0622, \""acceleration\"": 3.3395, \""fluidity\"": 0, \""expansion\"": 0.242, \""total_displacement\"": 0.0004, \""center_displacement\"": {\""x\"": 0.0004, \""y\"": 0}}}, {\""timestamp\"": 1.7833333333333332, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""slow\"", \""velocity\"": 0.0511, \""acceleration\"": 3.1939, \""fluidity\"": 0, \""expansion\"": 0.242, \""total_displacement\"": 0, \""center_displacement\"": {\""x\"": 0, \""y\"": 0}}}, {\""timestamp\"": 1.8, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0471, \""acceleration\"": 2.7221, \""fluidity\"": 0, \""expansion\"": 0.241, \""total_displacement\"": 0.0002, \""center_displacement\"": {\""x\"": 0.0002, \""y\"": -0.0001}}}, {\""timestamp\"": 1.8166666666666667, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""slow\"", \""velocity\"": 0.0422, \""acceleration\"": 2.3512, \""fluidity\"": 0.063, \""expansion\"": 0.241, \""total_displacement\"": 0.0001, \""center_displacement\"": {\""x\"": 0.0001, \""y\"": 0}}}, {\""timestamp\"": 1.8333333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0424, \""acceleration\"": 2.3805, \""fluidity\"": 0.016, \""expansion\"": 0.24, \""total_displacement\"": 0.0005, \""center_displacement\"": {\""x\"": 0.0005, \""y\"": 0.0001}}}, {\""timestamp\"": 1.8499999999999999, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.037, \""acceleration\"": 2.0613, \""fluidity\"": 0.02, \""expansion\"": 0.24, \""total_displacement\"": 0.0003, \""center_displacement\"": {\""x\"": 0.0003, \""y\"": 0.0001}}}, {\""timestamp\"": 1.8666666666666667, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""slow\"", \""velocity\"": 0.0325, \""acceleration\"": 1.8143, \""fluidity\"": 0.025, \""expansion\"": 0.239, \""total_displacement\"": 0.0001, \""center_displacement\"": {\""x\"": 0.0001, \""y\"": 0}}}, {\""timestamp\"": 1.8833333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0341, \""acceleration\"": 1.8024, \""fluidity\"": 0.015, \""expansion\"": 0.239, \""total_displacement\"": 0.0004, \""center_displacement\"": {\""x\"": 0.0003, \""y\"": 0.0002}}}, {\""timestamp\"": 1.9, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0295, \""acceleration\"": 1.5649, \""fluidity\"": 0.015, \""expansion\"": 0.239, \""total_displacement\"": 0.0002, \""center_displacement\"": {\""x\"": 0.0002, \""y\"": 0.0002}}}, {\""timestamp\"": 1.9166666666666667, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""slow\"", \""velocity\"": 0.0265, \""acceleration\"": 1.3648, \""fluidity\"": 0.014, \""expansion\"": 0.239, \""total_displacement\"": 0.0002, \""center_displacement\"": {\""x\"": 0.0001, \""y\"": 0.0001}}}, {\""timestamp\"": 1.9333333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""slow\"", \""velocity\"": 0.0239, \""acceleration\"": 1.2534, \""fluidity\"": 0.011, \""expansion\"": 0.239, \""total_displacement\"": 0.0001, \""center_displacement\"": {\""x\"": 0, \""y\"": 0.0001}}}, {\""timestamp\"": 1.95, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""low\"", \""speed\"": \""slow\"", \""velocity\"": 0.0214, \""acceleration\"": 1.0506, \""fluidity\"": 0.236, \""expansion\"": 0.239, \""total_displacement\"": 0.0001, \""center_displacement\"": {\""x\"": 0, \""y\"": 0.0001}}}, {\""timestamp\"": 1.9666666666666666, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0214, \""acceleration\"": 1.0392, \""fluidity\"": 0.065, \""expansion\"": 0.239, \""total_displacement\"": 0.0002, \""center_displacement\"": {\""x\"": 0.0002, \""y\"": 0.0001}}}, {\""timestamp\"": 1.9833333333333334, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""slow\"", \""velocity\"": 0.0182, \""acceleration\"": 0.9469, \""fluidity\"": 0.078, \""expansion\"": 0.239, \""total_displacement\"": 0.0001, \""center_displacement\"": {\""x\"": 0.0001, \""y\"": 0}}}, {\""timestamp\"": 2, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0189, \""acceleration\"": 0.8829, \""fluidity\"": 0.095, \""expansion\"": 0.239, \""total_displacement\"": 0.0002, \""center_displacement\"": {\""x\"": 0, \""y\"": -0.0002}}}, {\""timestamp\"": 2.0166666666666666, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0177, \""acceleration\"": 0.7531, \""fluidity\"": 0.13, \""expansion\"": 0.239, \""total_displacement\"": 0.0002, \""center_displacement\"": {\""x\"": 0.0001, \""y\"": -0.0002}}}, {\""timestamp\"": 2.033333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0176, \""acceleration\"": 0.6967, \""fluidity\"": 0.076, \""expansion\"": 0.238, \""total_displacement\"": 0.0003, \""center_displacement\"": {\""x\"": 0, \""y\"": 0.0003}}}, {\""timestamp\"": 2.05, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""slow\"", \""velocity\"": 0.0157, \""acceleration\"": 0.6898, \""fluidity\"": 0.075, \""expansion\"": 0.238, \""total_displacement\"": 0.0001, \""center_displacement\"": {\""x\"": 0, \""y\"": 0.0001}}}, {\""timestamp\"": 2.0666666666666664, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""slow\"", \""velocity\"": 0.0142, \""acceleration\"": 0.5736, \""fluidity\"": 0.127, \""expansion\"": 0.238, \""total_displacement\"": 0.0001, \""center_displacement\"": {\""x\"": 0, \""y\"": 0.0001}}}, {\""timestamp\"": 2.0833333333333335, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0189, \""acceleration\"": 0.8216, \""fluidity\"": 0.07, \""expansion\"": 0.238, \""total_displacement\"": 0.0005, \""center_displacement\"": {\""x\"": -0.0003, \""y\"": 0.0004}}}, {\""timestamp\"": 2.1, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.017, \""acceleration\"": 0.6557, \""fluidity\"": 0.068, \""expansion\"": 0.238, \""total_displacement\"": 0.0003, \""center_displacement\"": {\""x\"": -0.0001, \""y\"": 0.0003}}}, {\""timestamp\"": 2.1166666666666667, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0224, \""acceleration\"": 0.8202, \""fluidity\"": 0.066, \""expansion\"": 0.238, \""total_displacement\"": 0.0007, \""center_displacement\"": {\""x\"": -0.0003, \""y\"": 0.0006}}}, {\""timestamp\"": 2.1333333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0225, \""acceleration\"": 0.6904, \""fluidity\"": 0.051, \""expansion\"": 0.238, \""total_displacement\"": 0.0005, \""center_displacement\"": {\""x\"": -0.0001, \""y\"": 0.0005}}}, {\""timestamp\"": 2.15, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0205, \""acceleration\"": 0.7196, \""fluidity\"": 0.046, \""expansion\"": 0.238, \""total_displacement\"": 0.0003, \""center_displacement\"": {\""x\"": -0.0001, \""y\"": 0.0003}}}, {\""timestamp\"": 2.1666666666666665, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""slow\"", \""velocity\"": 0.0175, \""acceleration\"": 0.7882, \""fluidity\"": 0.041, \""expansion\"": 0.237, \""total_displacement\"": 0.0001, \""center_displacement\"": {\""x\"": -0.0001, \""y\"": 0}}}, {\""timestamp\"": 2.183333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""medium\"", \""speed\"": \""slow\"", \""velocity\"": 0.016, \""acceleration\"": 0.5634, \""fluidity\"": 0.215, \""expansion\"": 0.236, \""total_displacement\"": 0.0001, \""center_displacement\"": {\""x\"": 0, \""y\"": 0}}}, {\""timestamp\"": 2.2, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0173, \""acceleration\"": 0.689, \""fluidity\"": 0.076, \""expansion\"": 0.234, \""total_displacement\"": 0.0003, \""center_displacement\"": {\""x\"": 0, \""y\"": -0.0002}}}, {\""timestamp\"": 2.216666666666667, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""slow\"", \""velocity\"": 0.0143, \""acceleration\"": 0.6405, \""fluidity\"": 0.083, \""expansion\"": 0.234, \""total_displacement\"": 0.0001, \""center_displacement\"": {\""x\"": 0, \""y\"": -0.0001}}}, {\""timestamp\"": 2.2333333333333334, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0686, \""acceleration\"": 3.7773, \""fluidity\"": 0.093, \""expansion\"": 0.23, \""total_displacement\"": 0.0038, \""center_displacement\"": {\""x\"": 0, \""y\"": 0.0038}}}, {\""timestamp\"": 2.25, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0536, \""acceleration\"": 2.9603, \""fluidity\"": 0.063, \""expansion\"": 0.229, \""total_displacement\"": 0.0019, \""center_displacement\"": {\""x\"": -0.0001, \""y\"": 0.0019}}}, {\""timestamp\"": 2.2666666666666666, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0569, \""acceleration\"": 2.1957, \""fluidity\"": 0.06, \""expansion\"": 0.229, \""total_displacement\"": 0.0015, \""center_displacement\"": {\""x\"": 0, \""y\"": 0.0015}}}, {\""timestamp\"": 2.283333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""down\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.2019, \""acceleration\"": 10.2968, \""fluidity\"": 0.054, \""expansion\"": 0.227, \""total_displacement\"": 0.0105, \""center_displacement\"": {\""x\"": -0.0003, \""y\"": 0.0105}}}, {\""timestamp\"": 2.3, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.1156, \""acceleration\"": 11.0428, \""fluidity\"": 0.044, \""expansion\"": 0.226, \""total_displacement\"": 0.0025, \""center_displacement\"": {\""x\"": -0.0002, \""y\"": 0.0025}}}, {\""timestamp\"": 2.3166666666666664, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""down\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.2797, \""acceleration\"": 14.8018, \""fluidity\"": 0.04, \""expansion\"": 0.221, \""total_displacement\"": 0.0124, \""center_displacement\"": {\""x\"": -0.0003, \""y\"": 0.0124}}}, {\""timestamp\"": 2.3333333333333335, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.2214, \""acceleration\"": 15.8765, \""fluidity\"": 0.034, \""expansion\"": 0.221, \""total_displacement\"": 0.0048, \""center_displacement\"": {\""x\"": 0, \""y\"": 0.0048}}}, {\""timestamp\"": 2.35, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""slow\"", \""velocity\"": 0.1555, \""acceleration\"": 14.678, \""fluidity\"": 0.03, \""expansion\"": 0.22, \""total_displacement\"": 0.0001, \""center_displacement\"": {\""x\"": 0, \""y\"": -0.0001}}}, {\""timestamp\"": 2.3666666666666667, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""down\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.3565, \""acceleration\"": 22.8035, \""fluidity\"": 0.026, \""expansion\"": 0.218, \""total_displacement\"": 0.0128, \""center_displacement\"": {\""x\"": 0, \""y\"": 0.0128}}}, {\""timestamp\"": 2.3833333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.2303, \""acceleration\"": 22.0639, \""fluidity\"": 0.022, \""expansion\"": 0.218, \""total_displacement\"": 0.0031, \""center_displacement\"": {\""x\"": 0.0001, \""y\"": 0.0031}}}, {\""timestamp\"": 2.4, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""down\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.3683, \""acceleration\"": 23.0341, \""fluidity\"": 0.019, \""expansion\"": 0.214, \""total_displacement\"": 0.0122, \""center_displacement\"": {\""x\"": 0.0008, \""y\"": 0.0122}}}, {\""timestamp\"": 2.4166666666666665, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.2725, \""acceleration\"": 25.916, \""fluidity\"": 0.017, \""expansion\"": 0.214, \""total_displacement\"": 0.0023, \""center_displacement\"": {\""x\"": 0.0001, \""y\"": 0.0022}}}, {\""timestamp\"": 2.433333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.2323, \""acceleration\"": 18.9078, \""fluidity\"": 0.015, \""expansion\"": 0.213, \""total_displacement\"": 0.001, \""center_displacement\"": {\""x\"": 0.0009, \""y\"": -0.0003}}}, {\""timestamp\"": 2.45, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.2271, \""acceleration\"": 17.3051, \""fluidity\"": 0.013, \""expansion\"": 0.213, \""total_displacement\"": 0.0006, \""center_displacement\"": {\""x\"": 0.0005, \""y\"": 0.0004}}}, {\""timestamp\"": 2.466666666666667, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.1935, \""acceleration\"": 15.6304, \""fluidity\"": 0.011, \""expansion\"": 0.213, \""total_displacement\"": 0.0007, \""center_displacement\"": {\""x\"": 0.0006, \""y\"": -0.0003}}}, {\""timestamp\"": 2.4833333333333334, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.2306, \""acceleration\"": 16.3765, \""fluidity\"": 0.01, \""expansion\"": 0.212, \""total_displacement\"": 0.0045, \""center_displacement\"": {\""x\"": 0.0031, \""y\"": -0.0033}}}, {\""timestamp\"": 2.5, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.2042, \""acceleration\"": 13.8859, \""fluidity\"": 0.008, \""expansion\"": 0.211, \""total_displacement\"": 0.0028, \""center_displacement\"": {\""x\"": 0.0009, \""y\"": -0.0026}}}, {\""timestamp\"": 2.5166666666666666, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""up\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.3447, \""acceleration\"": 20.2457, \""fluidity\"": 0.007, \""expansion\"": 0.21, \""total_displacement\"": 0.0125, \""center_displacement\"": {\""x\"": 0.003, \""y\"": -0.0121}}}, {\""timestamp\"": 2.533333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.2624, \""acceleration\"": 19.8363, \""fluidity\"": 0.006, \""expansion\"": 0.21, \""total_displacement\"": 0.0045, \""center_displacement\"": {\""x\"": 0.0011, \""y\"": -0.0044}}}, {\""timestamp\"": 2.55, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.2262, \""acceleration\"": 16.141, \""fluidity\"": 0.006, \""expansion\"": 0.211, \""total_displacement\"": 0.0016, \""center_displacement\"": {\""x\"": 0.0007, \""y\"": -0.0014}}}, {\""timestamp\"": 2.5666666666666664, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""up\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.4216, \""acceleration\"": 25.4549, \""fluidity\"": 0.005, \""expansion\"": 0.206, \""total_displacement\"": 0.0142, \""center_displacement\"": {\""x\"": 0.0032, \""y\"": -0.0139}}}, {\""timestamp\"": 2.5833333333333335, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.2673, \""acceleration\"": 25.7738, \""fluidity\"": 0.004, \""expansion\"": 0.206, \""total_displacement\"": 0.0026, \""center_displacement\"": {\""x\"": 0.0011, \""y\"": -0.0024}}}, {\""timestamp\"": 2.6, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""up\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.3323, \""acceleration\"": 20.6687, \""fluidity\"": 0.004, \""expansion\"": 0.201, \""total_displacement\"": 0.0069, \""center_displacement\"": {\""x\"": 0.0023, \""y\"": -0.0065}}}, {\""timestamp\"": 2.6166666666666667, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.3073, \""acceleration\"": 21.0621, \""fluidity\"": 0.003, \""expansion\"": 0.2, \""total_displacement\"": 0.0035, \""center_displacement\"": {\""x\"": 0.001, \""y\"": -0.0033}}}, {\""timestamp\"": 2.6333333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.2991, \""acceleration\"": 18.0948, \""fluidity\"": 0.003, \""expansion\"": 0.195, \""total_displacement\"": 0.0048, \""center_displacement\"": {\""x\"": 0.0034, \""y\"": -0.0034}}}, {\""timestamp\"": 2.65, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.2577, \""acceleration\"": 17.9181, \""fluidity\"": 0.002, \""expansion\"": 0.194, \""total_displacement\"": 0.0015, \""center_displacement\"": {\""x\"": 0.0007, \""y\"": -0.0014}}}, {\""timestamp\"": 2.6666666666666665, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.2337, \""acceleration\"": 14.5879, \""fluidity\"": 0.002, \""expansion\"": 0.194, \""total_displacement\"": 0.0012, \""center_displacement\"": {\""x\"": 0.0005, \""y\"": -0.0011}}}, {\""timestamp\"": 2.683333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.2467, \""acceleration\"": 14.5353, \""fluidity\"": 0.002, \""expansion\"": 0.191, \""total_displacement\"": 0.0033, \""center_displacement\"": {\""x\"": 0.0031, \""y\"": -0.0009}}}, {\""timestamp\"": 2.7, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.2213, \""acceleration\"": 12.4955, \""fluidity\"": 0.002, \""expansion\"": 0.191, \""total_displacement\"": 0.0025, \""center_displacement\"": {\""x\"": 0.0011, \""y\"": -0.0022}}}, {\""timestamp\"": 2.716666666666667, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.2164, \""acceleration\"": 10.6537, \""fluidity\"": 0.001, \""expansion\"": 0.187, \""total_displacement\"": 0.0027, \""center_displacement\"": {\""x\"": 0.0027, \""y\"": -0.0006}}}, {\""timestamp\"": 2.7333333333333334, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.1839, \""acceleration\"": 11.1152, \""fluidity\"": 0.001, \""expansion\"": 0.186, \""total_displacement\"": 0.0008, \""center_displacement\"": {\""x\"": 0.0007, \""y\"": -0.0005}}}, {\""timestamp\"": 2.75, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.1742, \""acceleration\"": 8.9315, \""fluidity\"": 0.001, \""expansion\"": 0.185, \""total_displacement\"": 0.0013, \""center_displacement\"": {\""x\"": 0.0008, \""y\"": -0.001}}}, {\""timestamp\"": 2.7666666666666666, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.2067, \""acceleration\"": 10.3295, \""fluidity\"": 0.001, \""expansion\"": 0.18, \""total_displacement\"": 0.0042, \""center_displacement\"": {\""x\"": 0.0028, \""y\"": -0.0032}}}, {\""timestamp\"": 2.783333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.1622, \""acceleration\"": 10.1212, \""fluidity\"": 0.001, \""expansion\"": 0.178, \""total_displacement\"": 0.0014, \""center_displacement\"": {\""x\"": 0.0012, \""y\"": -0.0007}}}, {\""timestamp\"": 2.8, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.1856, \""acceleration\"": 9.0748, \""fluidity\"": 0.001, \""expansion\"": 0.177, \""total_displacement\"": 0.0033, \""center_displacement\"": {\""x\"": 0.0007, \""y\"": -0.0032}}}, {\""timestamp\"": 2.8166666666666664, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.156, \""acceleration\"": 9.3265, \""fluidity\"": 0.001, \""expansion\"": 0.176, \""total_displacement\"": 0.0012, \""center_displacement\"": {\""x\"": 0.0006, \""y\"": -0.001}}}, {\""timestamp\"": 2.8333333333333335, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.1451, \""acceleration\"": 7.2397, \""fluidity\"": 0.001, \""expansion\"": 0.172, \""total_displacement\"": 0.0013, \""center_displacement\"": {\""x\"": 0.0013, \""y\"": -0.0002}}}, {\""timestamp\"": 2.85, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.1303, \""acceleration\"": 7.0422, \""fluidity\"": 0, \""expansion\"": 0.171, \""total_displacement\"": 0.0006, \""center_displacement\"": {\""x\"": 0.0004, \""y\"": -0.0004}}}, {\""timestamp\"": 2.8666666666666667, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.1148, \""acceleration\"": 6.0024, \""fluidity\"": 0, \""expansion\"": 0.17, \""total_displacement\"": 0.0005, \""center_displacement\"": {\""x\"": -0.0001, \""y\"": -0.0005}}}, {\""timestamp\"": 2.8833333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.131, \""acceleration\"": 6.6612, \""fluidity\"": 0, \""expansion\"": 0.171, \""total_displacement\"": 0.0022, \""center_displacement\"": {\""x\"": 0.0022, \""y\"": 0.0003}}}, {\""timestamp\"": 2.9, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.1066, \""acceleration\"": 6.179, \""fluidity\"": 0, \""expansion\"": 0.17, \""total_displacement\"": 0.0008, \""center_displacement\"": {\""x\"": 0.0008, \""y\"": 0.0002}}}, {\""timestamp\"": 2.9166666666666665, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.1063, \""acceleration\"": 5.0441, \""fluidity\"": 0, \""expansion\"": 0.168, \""total_displacement\"": 0.0012, \""center_displacement\"": {\""x\"": 0.0012, \""y\"": 0.0001}}}, {\""timestamp\"": 2.933333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0941, \""acceleration\"": 5.0755, \""fluidity\"": 0, \""expansion\"": 0.168, \""total_displacement\"": 0.0005, \""center_displacement\"": {\""x\"": 0.0001, \""y\"": -0.0005}}}, {\""timestamp\"": 2.95, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.082, \""acceleration\"": 4.2463, \""fluidity\"": 0, \""expansion\"": 0.168, \""total_displacement\"": 0.0003, \""center_displacement\"": {\""x\"": 0.0003, \""y\"": -0.0001}}}, {\""timestamp\"": 2.966666666666667, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0747, \""acceleration\"": 3.6591, \""fluidity\"": 0, \""expansion\"": 0.167, \""total_displacement\"": 0.0003, \""center_displacement\"": {\""x\"": 0, \""y\"": 0.0003}}}, {\""timestamp\"": 2.9833333333333334, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""medium\"", \""speed\"": \""fast\"", \""velocity\"": 0.0671, \""acceleration\"": 3.2635, \""fluidity\"": 0.159, \""expansion\"": 0.166, \""total_displacement\"": 0.0003, \""center_displacement\"": {\""x\"": 0.0002, \""y\"": 0.0002}}}, {\""timestamp\"": 3, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0591, \""acceleration\"": 2.8652, \""fluidity\"": 0.04, \""expansion\"": 0.165, \""total_displacement\"": 0.0002, \""center_displacement\"": {\""x\"": 0, \""y\"": 0.0002}}}, {\""timestamp\"": 3.0166666666666666, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""slow\"", \""velocity\"": 0.0517, \""acceleration\"": 2.5477, \""fluidity\"": 0.05, \""expansion\"": 0.164, \""total_displacement\"": 0.0001, \""center_displacement\"": {\""x\"": -0.0001, \""y\"": 0}}}, {\""timestamp\"": 3.033333333333333, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0687, \""acceleration\"": 3.5291, \""fluidity\"": 0.062, \""expansion\"": 0.164, \""total_displacement\"": 0.0016, \""center_displacement\"": {\""x\"": 0.0004, \""y\"": 0.0016}}}, {\""timestamp\"": 3.05, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0566, \""acceleration\"": 2.9811, \""fluidity\"": 0.038, \""expansion\"": 0.164, \""total_displacement\"": 0.0008, \""center_displacement\"": {\""x\"": 0.0001, \""y\"": 0.0008}}}, {\""timestamp\"": 3.0666666666666664, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0508, \""acceleration\"": 2.5782, \""fluidity\"": 0.037, \""expansion\"": 0.164, \""total_displacement\"": 0.0004, \""center_displacement\"": {\""x\"": 0, \""y\"": 0.0004}}}, {\""timestamp\"": 3.0833333333333335, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.0475, \""acceleration\"": 2.4533, \""fluidity\"": 0.034, \""expansion\"": 0.16, \""total_displacement\"": 0.0002, \""center_displacement\"": {\""x\"": 0.0001, \""y\"": 0.0002}}}, {\""timestamp\"": 3.1, \""joints\"": null, \""bones\"": null, \""direction_arrow\"": null, \""motion_trail\"": null, \""laban_metrics\"": {\""direction\"": \""stationary\"", \""intensity\"": \""high\"", \""speed\"": \""fast\"", \""velocity\"": 0.044, \""acceleration\"": 2.1114, \""fluidity\"": 0.027, \""expansion\"": 0.159, \""total_displacement\"": 0.0004, \""center_displacement\"": {\""x\"": 0.0003, \""y\"": 0.0002}}}], \""capabilities\"": {\""has_joints\"": true, \""has_bones\"": true, \""has_direction_arrows\"": true, \""has_motion_trails\"": true, \""has_laban\"": true}}""}",2025-06-09 16:49:29.087331
src/demo/__init__.py ADDED
File without changes
src/demo/app.py ADDED
@@ -0,0 +1,81 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ import gradio as gr
3
+ from gradio_overlay_video import OverlayVideo
4
+ from pathlib import Path
5
+
6
+ DEMO_DIR = Path(__file__).parent.parent
7
+ sample_video_path = DEMO_DIR / "files/balette.mp4"
8
+ sample_json_path = DEMO_DIR / "files/mediapipe_full_kp_balette.json"
9
+ mediapipe_json_path = DEMO_DIR / "files/mediapipe_heavy_kp_parkour.json"
10
+ movenet_json_path = DEMO_DIR / "files/movenet_thunder_kp_skate.json"
11
+ yolo8_json_path = DEMO_DIR / "files/yolov8_kp_dance.json"
12
+ yolo11_json_path = DEMO_DIR / "files/yolov11.json"
13
+
14
+ def prepare_visualization_data(json_path, video_path):
15
+ """
16
+ This function simply validates the inputs and passes them to the
17
+ custom OverlayVideo component for frontend processing.
18
+ """
19
+ if not json_path:
20
+ raise gr.Error("A JSON file is required to generate a visualization.")
21
+
22
+ print(f"✅ Preparing visualization with JSON: {json_path}")
23
+ if video_path:
24
+ print(f"✅ Video background provided: {video_path}")
25
+ else:
26
+ print("ℹ️ No video background provided. Visualization will be on a black background.")
27
+
28
+ # The backend's job is just to pass the filepaths to the frontend.
29
+ # The return format (video_path, json_path) must match what postprocess expects.
30
+ return (video_path, json_path)
31
+
32
+
33
+ with gr.Blocks(theme=gr.themes.Default(primary_hue="rose", secondary_hue="pink")) as demo:
34
+ gr.Markdown(
35
+ "# 🩰 Interactive Pose Visualization\n"
36
+ "1. **Upload a JSON file** with pose data.\n"
37
+ "2. **(Optional) Upload a video** to use as the background.\n"
38
+ "3. Click 'Display Visualization' to see the interactive result."
39
+ )
40
+
41
+ with gr.Row():
42
+ with gr.Column(scale=1):
43
+ # Use standard gr.File for robust input handling
44
+ json_upload = gr.File(
45
+ label="Upload Required JSON File",
46
+ file_types=[".json"],
47
+ type="filepath"
48
+ )
49
+ video_upload = gr.File(
50
+ label="Upload Optional Video File",
51
+ file_types=["video"],
52
+ type="filepath",
53
+ value=None
54
+ )
55
+ btn = gr.Button("Display Visualization", variant="primary")
56
+
57
+ with gr.Column(scale=1):
58
+ output_ov = OverlayVideo(label="Output", interactive=False, autoplay=True)
59
+
60
+ btn.click(
61
+ fn=prepare_visualization_data,
62
+ inputs=[json_upload, video_upload],
63
+ outputs=[output_ov]
64
+ )
65
+
66
+ gr.Examples(
67
+ examples=[
68
+ [str(mediapipe_json_path), None],
69
+ [str(movenet_json_path), None],
70
+ [str(yolo8_json_path), None],
71
+ [str(sample_json_path), str(sample_video_path)],
72
+ [str(yolo11_json_path), None]
73
+ ],
74
+ inputs=[json_upload, video_upload],
75
+ outputs=output_ov,
76
+ fn=prepare_visualization_data,
77
+ cache_examples=True
78
+ )
79
+
80
+ if __name__ == "__main__":
81
+ demo.launch(allowed_paths=["/Users/csabi/Develop/overlay_video/files"])
src/demo/css.css ADDED
@@ -0,0 +1,157 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ html {
2
+ font-family: Inter;
3
+ font-size: 16px;
4
+ font-weight: 400;
5
+ line-height: 1.5;
6
+ -webkit-text-size-adjust: 100%;
7
+ background: #fff;
8
+ color: #323232;
9
+ -webkit-font-smoothing: antialiased;
10
+ -moz-osx-font-smoothing: grayscale;
11
+ text-rendering: optimizeLegibility;
12
+ }
13
+
14
+ :root {
15
+ --space: 1;
16
+ --vspace: calc(var(--space) * 1rem);
17
+ --vspace-0: calc(3 * var(--space) * 1rem);
18
+ --vspace-1: calc(2 * var(--space) * 1rem);
19
+ --vspace-2: calc(1.5 * var(--space) * 1rem);
20
+ --vspace-3: calc(0.5 * var(--space) * 1rem);
21
+ }
22
+
23
+ .app {
24
+ max-width: 748px !important;
25
+ }
26
+
27
+ .prose p {
28
+ margin: var(--vspace) 0;
29
+ line-height: var(--vspace * 2);
30
+ font-size: 1rem;
31
+ }
32
+
33
+ code {
34
+ font-family: "Inconsolata", sans-serif;
35
+ font-size: 16px;
36
+ }
37
+
38
+ h1,
39
+ h1 code {
40
+ font-weight: 400;
41
+ line-height: calc(2.5 / var(--space) * var(--vspace));
42
+ }
43
+
44
+ h1 code {
45
+ background: none;
46
+ border: none;
47
+ letter-spacing: 0.05em;
48
+ padding-bottom: 5px;
49
+ position: relative;
50
+ padding: 0;
51
+ }
52
+
53
+ h2 {
54
+ margin: var(--vspace-1) 0 var(--vspace-2) 0;
55
+ line-height: 1em;
56
+ }
57
+
58
+ h3,
59
+ h3 code {
60
+ margin: var(--vspace-1) 0 var(--vspace-2) 0;
61
+ line-height: 1em;
62
+ }
63
+
64
+ h4,
65
+ h5,
66
+ h6 {
67
+ margin: var(--vspace-3) 0 var(--vspace-3) 0;
68
+ line-height: var(--vspace);
69
+ }
70
+
71
+ .bigtitle,
72
+ h1,
73
+ h1 code {
74
+ font-size: calc(8px * 4.5);
75
+ word-break: break-word;
76
+ }
77
+
78
+ .title,
79
+ h2,
80
+ h2 code {
81
+ font-size: calc(8px * 3.375);
82
+ font-weight: lighter;
83
+ word-break: break-word;
84
+ border: none;
85
+ background: none;
86
+ }
87
+
88
+ .subheading1,
89
+ h3,
90
+ h3 code {
91
+ font-size: calc(8px * 1.8);
92
+ font-weight: 600;
93
+ border: none;
94
+ background: none;
95
+ letter-spacing: 0.1em;
96
+ text-transform: uppercase;
97
+ }
98
+
99
+ h2 code {
100
+ padding: 0;
101
+ position: relative;
102
+ letter-spacing: 0.05em;
103
+ }
104
+
105
+ blockquote {
106
+ font-size: calc(8px * 1.1667);
107
+ font-style: italic;
108
+ line-height: calc(1.1667 * var(--vspace));
109
+ margin: var(--vspace-2) var(--vspace-2);
110
+ }
111
+
112
+ .subheading2,
113
+ h4 {
114
+ font-size: calc(8px * 1.4292);
115
+ text-transform: uppercase;
116
+ font-weight: 600;
117
+ }
118
+
119
+ .subheading3,
120
+ h5 {
121
+ font-size: calc(8px * 1.2917);
122
+ line-height: calc(1.2917 * var(--vspace));
123
+
124
+ font-weight: lighter;
125
+ text-transform: uppercase;
126
+ letter-spacing: 0.15em;
127
+ }
128
+
129
+ h6 {
130
+ font-size: calc(8px * 1.1667);
131
+ font-size: 1.1667em;
132
+ font-weight: normal;
133
+ font-style: italic;
134
+ font-family: "le-monde-livre-classic-byol", serif !important;
135
+ letter-spacing: 0px !important;
136
+ }
137
+
138
+ #start .md > *:first-child {
139
+ margin-top: 0;
140
+ }
141
+
142
+ h2 + h3 {
143
+ margin-top: 0;
144
+ }
145
+
146
+ .md hr {
147
+ border: none;
148
+ border-top: 1px solid var(--block-border-color);
149
+ margin: var(--vspace-2) 0 var(--vspace-2) 0;
150
+ }
151
+ .prose ul {
152
+ margin: var(--vspace-2) 0 var(--vspace-1) 0;
153
+ }
154
+
155
+ .gap {
156
+ gap: 0;
157
+ }
src/demo/requirements.txt ADDED
@@ -0,0 +1 @@
 
 
1
+ gradio_overlay_video
src/demo/space.py ADDED
@@ -0,0 +1,206 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ import gradio as gr
3
+ from app import demo as app
4
+ import os
5
+
6
+ _docs = {'OverlayVideo': {'description': 'An output component that plays a video with an interactive, toggleable overlay of pose data.', 'members': {'__init__': {'value': {'type': 'typing.Any', 'default': 'None', 'description': None}, 'label': {'type': 'str | None', 'default': 'None', 'description': None}, 'interactive': {'type': 'bool | None', 'default': 'None', 'description': None}, 'autoplay': {'type': 'bool', 'default': 'False', 'description': None}, 'loop': {'type': 'bool', 'default': 'False', 'description': None}, 'mode': {'type': 'str', 'default': '"overlay"', 'description': None}}, 'postprocess': {'value': {'type': 'typing.Optional[typing.Tuple[str | None, str | None]][\n typing.Tuple[str | None, str | None][\n str | None, str | None\n ],\n None,\n]', 'description': None}}, 'preprocess': {'return': {'type': 'str | None', 'description': None}, 'value': None}}, 'events': {'change': {'type': None, 'default': None, 'description': 'Triggered when the value of the OverlayVideo changes either because of user input (e.g. a user types in a textbox) OR because of a function update (e.g. an image receives a value from the output of an event trigger). See `.input()` for a listener that is only triggered by user input.'}, 'clear': {'type': None, 'default': None, 'description': 'This listener is triggered when the user clears the OverlayVideo using the clear button for the component.'}, 'play': {'type': None, 'default': None, 'description': 'This listener is triggered when the user plays the media in the OverlayVideo.'}, 'pause': {'type': None, 'default': None, 'description': 'This listener is triggered when the media in the OverlayVideo stops for any reason.'}, 'end': {'type': None, 'default': None, 'description': 'This listener is triggered when the user reaches the end of the media playing in the OverlayVideo.'}}}, '__meta__': {'additional_interfaces': {}, 'user_fn_refs': {'OverlayVideo': []}}}
7
+
8
+ abs_path = os.path.join(os.path.dirname(__file__), "css.css")
9
+
10
+ with gr.Blocks(
11
+ css=abs_path,
12
+ theme=gr.themes.Default(
13
+ font_mono=[
14
+ gr.themes.GoogleFont("Inconsolata"),
15
+ "monospace",
16
+ ],
17
+ ),
18
+ ) as demo:
19
+ gr.Markdown(
20
+ """
21
+ # `gradio_overlay_video`
22
+
23
+ <div style="display: flex; gap: 7px;">
24
+ <img alt="Static Badge" src="https://img.shields.io/badge/version%20-%200.0.8%20-%20orange">
25
+ </div>
26
+
27
+ overlayed video controller
28
+ """, elem_classes=["md-custom"], header_links=True)
29
+ app.render()
30
+ gr.Markdown(
31
+ """
32
+ ## Installation
33
+
34
+ ```bash
35
+ pip install gradio_overlay_video
36
+ ```
37
+
38
+ ## Usage
39
+
40
+ ```python
41
+
42
+ import gradio as gr
43
+ from gradio_overlay_video import OverlayVideo
44
+ from pathlib import Path
45
+
46
+ DEMO_DIR = Path(__file__).parent.parent
47
+ sample_video_path = DEMO_DIR / "files/balette.mp4"
48
+ sample_json_path = DEMO_DIR / "files/mediapipe_full_kp_balette.json"
49
+ mediapipe_json_path = DEMO_DIR / "files/mediapipe_heavy_kp_parkour.json"
50
+ movenet_json_path = DEMO_DIR / "files/movenet_thunder_kp_skate.json"
51
+ yolo8_json_path = DEMO_DIR / "files/yolov8_kp_dance.json"
52
+ yolo11_json_path = DEMO_DIR / "files/yolov11.json"
53
+
54
+ def prepare_visualization_data(json_path, video_path):
55
+ \"\"\"
56
+ This function simply validates the inputs and passes them to the
57
+ custom OverlayVideo component for frontend processing.
58
+ \"\"\"
59
+ if not json_path:
60
+ raise gr.Error("A JSON file is required to generate a visualization.")
61
+
62
+ print(f"✅ Preparing visualization with JSON: {json_path}")
63
+ if video_path:
64
+ print(f"✅ Video background provided: {video_path}")
65
+ else:
66
+ print("ℹ️ No video background provided. Visualization will be on a black background.")
67
+
68
+ # The backend's job is just to pass the filepaths to the frontend.
69
+ # The return format (video_path, json_path) must match what postprocess expects.
70
+ return (video_path, json_path)
71
+
72
+
73
+ with gr.Blocks(theme=gr.themes.Default(primary_hue="rose", secondary_hue="pink")) as demo:
74
+ gr.Markdown(
75
+ "# 🩰 Interactive Pose Visualization\n"
76
+ "1. **Upload a JSON file** with pose data.\n"
77
+ "2. **(Optional) Upload a video** to use as the background.\n"
78
+ "3. Click 'Display Visualization' to see the interactive result."
79
+ )
80
+
81
+ with gr.Row():
82
+ with gr.Column(scale=1):
83
+ # Use standard gr.File for robust input handling
84
+ json_upload = gr.File(
85
+ label="Upload Required JSON File",
86
+ file_types=[".json"],
87
+ type="filepath"
88
+ )
89
+ video_upload = gr.File(
90
+ label="Upload Optional Video File",
91
+ file_types=["video"],
92
+ type="filepath",
93
+ value=None
94
+ )
95
+ btn = gr.Button("Display Visualization", variant="primary")
96
+
97
+ with gr.Column(scale=1):
98
+ output_ov = OverlayVideo(label="Output", interactive=False, autoplay=True)
99
+
100
+ btn.click(
101
+ fn=prepare_visualization_data,
102
+ inputs=[json_upload, video_upload],
103
+ outputs=[output_ov]
104
+ )
105
+
106
+ gr.Examples(
107
+ examples=[
108
+ [str(mediapipe_json_path), None],
109
+ [str(movenet_json_path), None],
110
+ [str(yolo8_json_path), None],
111
+ [str(sample_json_path), str(sample_video_path)],
112
+ [str(yolo11_json_path), None]
113
+ ],
114
+ inputs=[json_upload, video_upload],
115
+ outputs=output_ov,
116
+ fn=prepare_visualization_data,
117
+ cache_examples=True
118
+ )
119
+
120
+ if __name__ == "__main__":
121
+ demo.launch(allowed_paths=["/Users/csabi/Develop/overlay_video/files"])
122
+ ```
123
+ """, elem_classes=["md-custom"], header_links=True)
124
+
125
+
126
+ gr.Markdown("""
127
+ ## `OverlayVideo`
128
+
129
+ ### Initialization
130
+ """, elem_classes=["md-custom"], header_links=True)
131
+
132
+ gr.ParamViewer(value=_docs["OverlayVideo"]["members"]["__init__"], linkify=[])
133
+
134
+
135
+ gr.Markdown("### Events")
136
+ gr.ParamViewer(value=_docs["OverlayVideo"]["events"], linkify=['Event'])
137
+
138
+
139
+
140
+
141
+ gr.Markdown("""
142
+
143
+ ### User function
144
+
145
+ The impact on the users predict function varies depending on whether the component is used as an input or output for an event (or both).
146
+
147
+ - When used as an Input, the component only impacts the input signature of the user function.
148
+ - When used as an output, the component only impacts the return signature of the user function.
149
+
150
+ The code snippet below is accurate in cases where the component is used as both an input and an output.
151
+
152
+
153
+
154
+ ```python
155
+ def predict(
156
+ value: str | None
157
+ ) -> typing.Optional[typing.Tuple[str | None, str | None]][
158
+ typing.Tuple[str | None, str | None][
159
+ str | None, str | None
160
+ ],
161
+ None,
162
+ ]:
163
+ return value
164
+ ```
165
+ """, elem_classes=["md-custom", "OverlayVideo-user-fn"], header_links=True)
166
+
167
+
168
+
169
+
170
+ demo.load(None, js=r"""function() {
171
+ const refs = {};
172
+ const user_fn_refs = {
173
+ OverlayVideo: [], };
174
+ requestAnimationFrame(() => {
175
+
176
+ Object.entries(user_fn_refs).forEach(([key, refs]) => {
177
+ if (refs.length > 0) {
178
+ const el = document.querySelector(`.${key}-user-fn`);
179
+ if (!el) return;
180
+ refs.forEach(ref => {
181
+ el.innerHTML = el.innerHTML.replace(
182
+ new RegExp("\\b"+ref+"\\b", "g"),
183
+ `<a href="#h-${ref.toLowerCase()}">${ref}</a>`
184
+ );
185
+ })
186
+ }
187
+ })
188
+
189
+ Object.entries(refs).forEach(([key, refs]) => {
190
+ if (refs.length > 0) {
191
+ const el = document.querySelector(`.${key}`);
192
+ if (!el) return;
193
+ refs.forEach(ref => {
194
+ el.innerHTML = el.innerHTML.replace(
195
+ new RegExp("\\b"+ref+"\\b", "g"),
196
+ `<a href="#h-${ref.toLowerCase()}">${ref}</a>`
197
+ );
198
+ })
199
+ }
200
+ })
201
+ })
202
+ }
203
+
204
+ """)
205
+
206
+ demo.launch()
src/files/balette.mp4 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:75e5ff7c8e5eb31b54686b0250a1ebc739ea1128bb18f116f8f0215159e0979b
3
+ size 621415
src/files/mediapipe_full_kp_balette.json ADDED
The diff for this file is too large to render. See raw diff
 
src/files/mediapipe_heavy_kp_parkour.json ADDED
The diff for this file is too large to render. See raw diff
 
src/files/movenet_thunder_kp_skate.json ADDED
The diff for this file is too large to render. See raw diff
 
src/files/yolov11.json ADDED
The diff for this file is too large to render. See raw diff
 
src/files/yolov8_kp_dance.json ADDED
The diff for this file is too large to render. See raw diff
 
src/frontend/Example.svelte ADDED
@@ -0,0 +1,79 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <script lang="ts">
2
+ import Video from "./shared/Video.svelte";
3
+ import { playable } from "./shared/utils";
4
+ import { type FileData } from "@gradio/client";
5
+
6
+ export let type: "gallery" | "table";
7
+ export let selected = false;
8
+ export let value: { video: FileData; subtitles: FileData | null } | null;
9
+ export let loop: boolean;
10
+ let video: HTMLVideoElement;
11
+
12
+ async function init(): Promise<void> {
13
+ video.muted = true;
14
+ video.playsInline = true;
15
+ video.controls = false;
16
+ video.setAttribute("muted", "");
17
+
18
+ await video.play();
19
+ video.pause();
20
+ }
21
+ </script>
22
+
23
+ {#if value}
24
+ {#if playable()}
25
+ <div
26
+ class="container"
27
+ class:table={type === "table"}
28
+ class:gallery={type === "gallery"}
29
+ class:selected
30
+ >
31
+ <Video
32
+ muted
33
+ playsinline
34
+ bind:node={video}
35
+ on:loadeddata={init}
36
+ on:mouseover={video.play.bind(video)}
37
+ on:mouseout={video.pause.bind(video)}
38
+ src={value?.video.url}
39
+ is_stream={false}
40
+ {loop}
41
+ />
42
+
43
+ </div>
44
+ {:else}
45
+ <div>{value}</div>
46
+ {/if}
47
+ {/if}
48
+
49
+ <style>
50
+ .container {
51
+ flex: none;
52
+ max-width: none;
53
+ }
54
+ .container :global(video) {
55
+ width: var(--size-full);
56
+ height: var(--size-full);
57
+ object-fit: cover;
58
+ }
59
+
60
+ .container:hover,
61
+ .container.selected {
62
+ border-color: var(--border-color-accent);
63
+ }
64
+ .container.table {
65
+ margin: 0 auto;
66
+ border: 2px solid var(--border-color-primary);
67
+ border-radius: var(--radius-lg);
68
+ overflow: hidden;
69
+ width: var(--size-20);
70
+ height: var(--size-20);
71
+ object-fit: cover;
72
+ }
73
+
74
+ .container.gallery {
75
+ height: var(--size-20);
76
+ max-height: var(--size-20);
77
+ object-fit: cover;
78
+ }
79
+ </style>
src/frontend/Index.svelte ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <svelte:options accessors={true} />
2
+
3
+ <script lang="ts">
4
+ import type { Gradio } from "@gradio/utils";
5
+ import type { FileData } from "@gradio/client";
6
+ import { Block } from "@gradio/atoms";
7
+ import { StatusTracker } from "@gradio/statustracker";
8
+ import type { LoadingStatus } from "@gradio/statustracker";
9
+ import OverlayPlayer from "./shared/OverlayPlayer.svelte";
10
+
11
+ export let value: { video: { file: FileData } | null; json_data: string | null } | null = null;
12
+ export let gradio: Gradio;
13
+ // Unused props can be kept for Gradio compatibility, the warnings are harmless
14
+ export let elem_id = "", elem_classes = [], visible = true, loading_status: LoadingStatus, height, width, container, scale, min_width;
15
+ export let autoplay = false, loop = false;
16
+
17
+ let video_url: string | null | undefined;
18
+ let json_content: string | null | undefined;
19
+
20
+ $: {
21
+ if (value) {
22
+ video_url = value.video?.url;
23
+ json_content = value.json_data;
24
+ } else {
25
+ video_url = null;
26
+ json_content = null;
27
+ }
28
+ }
29
+ </script>
30
+
31
+ <Block {visible} {elem_id} {elem_classes} {height} {width} {container} {scale} {min_width} allow_overflow={false}>
32
+ <StatusTracker {...loading_status} autoscroll={gradio.autoscroll} i18n={gradio.i18n} />
33
+ {#if json_content}
34
+ <OverlayPlayer
35
+ video_src={video_url}
36
+ json_data_str={json_content}
37
+ {autoplay}
38
+ {loop}
39
+ />
40
+ {/if}
41
+ </Block>
src/frontend/gradio.config.js ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ export default {
2
+ plugins: [],
3
+ svelte: {
4
+ preprocess: [],
5
+ },
6
+ build: {
7
+ target: "modules",
8
+ },
9
+ };
src/frontend/index.ts ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ export { default as BaseExample } from "./Example.svelte";
2
+ import { default as Index } from "./Index.svelte";
3
+ export default Index;