Upload folder using huggingface_hub
Browse filesThis view is limited to 50 files because it contains too many changes.
See raw diff
- .gitattributes +7 -0
- .gitignore +12 -0
- .gradio/cached_examples/9/Output/b558f74ed1913fbba573/balette.mp4 +3 -0
- .gradio/cached_examples/9/log.csv +2 -0
- README.md +232 -5
- __init__.py +0 -0
- app.py +81 -0
- css.css +157 -0
- requirements.txt +1 -0
- space.py +206 -0
- src/.DS_Store +0 -0
- src/.claude/settings.local.json +12 -0
- src/.gitignore +12 -0
- src/.gradio/cached_examples/9/Output/3e1643b3cd3925885fe5/balette.mp4 +3 -0
- src/.gradio/cached_examples/9/Output/6444ff5b7cd73ce6e3ac/mediapipe_full_balette.json +3478 -0
- src/.gradio/cached_examples/9/Output/67da006c6e22d7f3b1b0/mediapipe_full_balette.json +3478 -0
- src/.gradio/cached_examples/9/log.csv +3 -0
- src/.gradio/flagged/dataset1.csv +3 -0
- src/.gradio/flagged/output/f270170a4a91ac730c49/balette.mp4 +3 -0
- src/.gradio/flagged/x/949d27b917ca4cf29777/balette.mp4 +3 -0
- src/.gradio/flagged/x/97ecfa403560d9ee017f/world.mp4 +3 -0
- src/CLAUDE.md +147 -0
- src/README.md +239 -0
- src/backend/gradio_overlay_video/__init__.py +4 -0
- src/backend/gradio_overlay_video/keypoint_formats.py +356 -0
- src/backend/gradio_overlay_video/overlay_video.py +97 -0
- src/backend/gradio_overlay_video/templates/component/assets/worker-BAOIWoxA.js +1 -0
- src/backend/gradio_overlay_video/templates/component/index.js +0 -0
- src/backend/gradio_overlay_video/templates/component/style.css +0 -0
- src/backend/gradio_overlay_video/templates/example/assets/worker-BAOIWoxA.js +1 -0
- src/backend/gradio_overlay_video/templates/example/index.js +0 -0
- src/backend/gradio_overlay_video/templates/example/style.css +1 -0
- src/backend/gradio_overlay_video/visualization_processors.py +502 -0
- src/demo/.gradio/cached_examples/9/Output/b558f74ed1913fbba573/balette.mp4 +3 -0
- src/demo/.gradio/cached_examples/9/log.csv +2 -0
- src/demo/__init__.py +0 -0
- src/demo/app.py +81 -0
- src/demo/css.css +157 -0
- src/demo/requirements.txt +1 -0
- src/demo/space.py +206 -0
- src/files/balette.mp4 +3 -0
- src/files/mediapipe_full_kp_balette.json +0 -0
- src/files/mediapipe_heavy_kp_parkour.json +0 -0
- src/files/movenet_thunder_kp_skate.json +0 -0
- src/files/yolov11.json +0 -0
- src/files/yolov8_kp_dance.json +0 -0
- src/frontend/Example.svelte +79 -0
- src/frontend/Index.svelte +41 -0
- src/frontend/gradio.config.js +9 -0
- 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 |
-
|
| 3 |
-
|
| 4 |
-
|
|
|
|
|
|
|
| 5 |
colorTo: green
|
| 6 |
sdk: gradio
|
| 7 |
sdk_version: 5.33.0
|
| 8 |
-
app_file: app.py
|
| 9 |
pinned: false
|
|
|
|
| 10 |
---
|
| 11 |
|
| 12 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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;
|