diff --git a/Inference/model/mobilenetv2-220420-152335-karusel.pkl.epoch470 b/Karussell/Inference/model/mobilenetv2-220420-152335-karusel.pkl.epoch470
similarity index 100%
rename from Inference/model/mobilenetv2-220420-152335-karusel.pkl.epoch470
rename to Karussell/Inference/model/mobilenetv2-220420-152335-karusel.pkl.epoch470
diff --git a/Inference/predict.ipynb b/Karussell/Inference/predict.ipynb
similarity index 100%
rename from Inference/predict.ipynb
rename to Karussell/Inference/predict.ipynb
diff --git a/Inference/test/images/test.png b/Karussell/Inference/test/images/test.png
similarity index 100%
rename from Inference/test/images/test.png
rename to Karussell/Inference/test/images/test.png
diff --git a/Inference/test/images/test.png.predictions.jpeg b/Karussell/Inference/test/images/test.png.predictions.jpeg
similarity index 100%
rename from Inference/test/images/test.png.predictions.jpeg
rename to Karussell/Inference/test/images/test.png.predictions.jpeg
diff --git a/Inference/test/images/test.png.predictions.json b/Karussell/Inference/test/images/test.png.predictions.json
similarity index 100%
rename from Inference/test/images/test.png.predictions.json
rename to Karussell/Inference/test/images/test.png.predictions.json
diff --git a/Inference/test/videos/turn180_1d.mp4 b/Karussell/Inference/test/videos/turn180_1d.mp4
similarity index 100%
rename from Inference/test/videos/turn180_1d.mp4
rename to Karussell/Inference/test/videos/turn180_1d.mp4
diff --git a/Inference/test/videos/turn180_1d.mp4.openpifpaf.json b/Karussell/Inference/test/videos/turn180_1d.mp4.openpifpaf.json
similarity index 100%
rename from Inference/test/videos/turn180_1d.mp4.openpifpaf.json
rename to Karussell/Inference/test/videos/turn180_1d.mp4.openpifpaf.json
diff --git a/Inference/test/videos/turn180_1d.mp4.openpifpaf.mp4 b/Karussell/Inference/test/videos/turn180_1d.mp4.openpifpaf.mp4
similarity index 100%
rename from Inference/test/videos/turn180_1d.mp4.openpifpaf.mp4
rename to Karussell/Inference/test/videos/turn180_1d.mp4.openpifpaf.mp4
diff --git a/Inference/test/videos/turn180_1d_logo.mp4 b/Karussell/Inference/test/videos/turn180_1d_logo.mp4
similarity index 100%
rename from Inference/test/videos/turn180_1d_logo.mp4
rename to Karussell/Inference/test/videos/turn180_1d_logo.mp4
diff --git a/SuperviselyKeypointsGUI/Icon.ico b/Karussell/SuperviselyKeypointsGUI/Icon.ico
similarity index 100%
rename from SuperviselyKeypointsGUI/Icon.ico
rename to Karussell/SuperviselyKeypointsGUI/Icon.ico
diff --git a/SuperviselyKeypointsGUI/SuperviselyAPI_requirements.txt b/Karussell/SuperviselyKeypointsGUI/SuperviselyAPI_requirements.txt
similarity index 100%
rename from SuperviselyKeypointsGUI/SuperviselyAPI_requirements.txt
rename to Karussell/SuperviselyKeypointsGUI/SuperviselyAPI_requirements.txt
diff --git a/SuperviselyKeypointsGUI/SuperviselyAPI_start.ipynb b/Karussell/SuperviselyKeypointsGUI/SuperviselyAPI_start.ipynb
similarity index 100%
rename from SuperviselyKeypointsGUI/SuperviselyAPI_start.ipynb
rename to Karussell/SuperviselyKeypointsGUI/SuperviselyAPI_start.ipynb
diff --git a/SuperviselyKeypointsGUI/SuperviselyKeypointsGUI.py b/Karussell/SuperviselyKeypointsGUI/SuperviselyKeypointsGUI.py
similarity index 100%
rename from SuperviselyKeypointsGUI/SuperviselyKeypointsGUI.py
rename to Karussell/SuperviselyKeypointsGUI/SuperviselyKeypointsGUI.py
diff --git a/SuperviselyKeypointsGUI/karussel_24kps.csv b/Karussell/SuperviselyKeypointsGUI/karussel_24kps.csv
similarity index 100%
rename from SuperviselyKeypointsGUI/karussel_24kps.csv
rename to Karussell/SuperviselyKeypointsGUI/karussel_24kps.csv
diff --git a/SuperviselyKeypointsGUI/start.bat b/Karussell/SuperviselyKeypointsGUI/start.bat
similarity index 100%
rename from SuperviselyKeypointsGUI/start.bat
rename to Karussell/SuperviselyKeypointsGUI/start.bat
diff --git a/Training/Karusel_dataset-COCO/annotations/train.json b/Karussell/Training/Karusel_dataset-COCO/annotations/train.json
similarity index 100%
rename from Training/Karusel_dataset-COCO/annotations/train.json
rename to Karussell/Training/Karusel_dataset-COCO/annotations/train.json
diff --git a/Training/Karusel_dataset-COCO/annotations/val.json b/Karussell/Training/Karusel_dataset-COCO/annotations/val.json
similarity index 100%
rename from Training/Karusel_dataset-COCO/annotations/val.json
rename to Karussell/Training/Karusel_dataset-COCO/annotations/val.json
diff --git a/Training/Karusel_dataset-COCO/images/train/frame_00000_03.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00000_03.png
similarity index 100%
rename from Training/Karusel_dataset-COCO/images/train/frame_00000_03.png
rename to Karussell/Training/Karusel_dataset-COCO/images/train/frame_00000_03.png
diff --git a/Training/Karusel_dataset-COCO/images/train/frame_00000_04.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00000_04.png
similarity index 100%
rename from Training/Karusel_dataset-COCO/images/train/frame_00000_04.png
rename to Karussell/Training/Karusel_dataset-COCO/images/train/frame_00000_04.png
diff --git a/Training/Karusel_dataset-COCO/images/train/frame_00000_05.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00000_05.png
similarity index 100%
rename from Training/Karusel_dataset-COCO/images/train/frame_00000_05.png
rename to Karussell/Training/Karusel_dataset-COCO/images/train/frame_00000_05.png
diff --git a/Training/Karusel_dataset-COCO/images/train/frame_00025_03.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00025_03.png
similarity index 100%
rename from Training/Karusel_dataset-COCO/images/train/frame_00025_03.png
rename to Karussell/Training/Karusel_dataset-COCO/images/train/frame_00025_03.png
diff --git a/Training/Karusel_dataset-COCO/images/train/frame_00025_04.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00025_04.png
similarity index 100%
rename from Training/Karusel_dataset-COCO/images/train/frame_00025_04.png
rename to Karussell/Training/Karusel_dataset-COCO/images/train/frame_00025_04.png
diff --git a/Training/Karusel_dataset-COCO/images/train/frame_00050_01.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00050_01.png
similarity index 100%
rename from Training/Karusel_dataset-COCO/images/train/frame_00050_01.png
rename to Karussell/Training/Karusel_dataset-COCO/images/train/frame_00050_01.png
diff --git a/Training/Karusel_dataset-COCO/images/train/frame_00050_12.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00050_12.png
similarity index 100%
rename from Training/Karusel_dataset-COCO/images/train/frame_00050_12.png
rename to Karussell/Training/Karusel_dataset-COCO/images/train/frame_00050_12.png
diff --git a/Training/Karusel_dataset-COCO/images/train/frame_00075_01.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00075_01.png
similarity index 100%
rename from Training/Karusel_dataset-COCO/images/train/frame_00075_01.png
rename to Karussell/Training/Karusel_dataset-COCO/images/train/frame_00075_01.png
diff --git a/Training/Karusel_dataset-COCO/images/train/frame_00075_03.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00075_03.png
similarity index 100%
rename from Training/Karusel_dataset-COCO/images/train/frame_00075_03.png
rename to Karussell/Training/Karusel_dataset-COCO/images/train/frame_00075_03.png
diff --git a/Training/Karusel_dataset-COCO/images/train/frame_00075_12.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00075_12.png
similarity index 100%
rename from Training/Karusel_dataset-COCO/images/train/frame_00075_12.png
rename to Karussell/Training/Karusel_dataset-COCO/images/train/frame_00075_12.png
diff --git a/Training/Karusel_dataset-COCO/images/train/frame_00100.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00100.png
similarity index 100%
rename from Training/Karusel_dataset-COCO/images/train/frame_00100.png
rename to Karussell/Training/Karusel_dataset-COCO/images/train/frame_00100.png
diff --git a/Training/Karusel_dataset-COCO/images/train/frame_00100_01.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00100_01.png
similarity index 100%
rename from Training/Karusel_dataset-COCO/images/train/frame_00100_01.png
rename to Karussell/Training/Karusel_dataset-COCO/images/train/frame_00100_01.png
diff --git a/Training/Karusel_dataset-COCO/images/train/frame_00100_02.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00100_02.png
similarity index 100%
rename from Training/Karusel_dataset-COCO/images/train/frame_00100_02.png
rename to Karussell/Training/Karusel_dataset-COCO/images/train/frame_00100_02.png
diff --git a/Training/Karusel_dataset-COCO/images/train/frame_00100_03.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00100_03.png
similarity index 100%
rename from Training/Karusel_dataset-COCO/images/train/frame_00100_03.png
rename to Karussell/Training/Karusel_dataset-COCO/images/train/frame_00100_03.png
diff --git a/Training/Karusel_dataset-COCO/images/train/frame_00100_05.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00100_05.png
similarity index 100%
rename from Training/Karusel_dataset-COCO/images/train/frame_00100_05.png
rename to Karussell/Training/Karusel_dataset-COCO/images/train/frame_00100_05.png
diff --git a/Training/Karusel_dataset-COCO/images/train/frame_00100_12.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00100_12.png
similarity index 100%
rename from Training/Karusel_dataset-COCO/images/train/frame_00100_12.png
rename to Karussell/Training/Karusel_dataset-COCO/images/train/frame_00100_12.png
diff --git a/Training/Karusel_dataset-COCO/images/train/frame_00125.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00125.png
similarity index 100%
rename from Training/Karusel_dataset-COCO/images/train/frame_00125.png
rename to Karussell/Training/Karusel_dataset-COCO/images/train/frame_00125.png
diff --git a/Training/Karusel_dataset-COCO/images/train/frame_00125_01.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00125_01.png
similarity index 100%
rename from Training/Karusel_dataset-COCO/images/train/frame_00125_01.png
rename to Karussell/Training/Karusel_dataset-COCO/images/train/frame_00125_01.png
diff --git a/Training/Karusel_dataset-COCO/images/train/frame_00125_02.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00125_02.png
similarity index 100%
rename from Training/Karusel_dataset-COCO/images/train/frame_00125_02.png
rename to Karussell/Training/Karusel_dataset-COCO/images/train/frame_00125_02.png
diff --git a/Training/Karusel_dataset-COCO/images/train/frame_00125_11.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00125_11.png
similarity index 100%
rename from Training/Karusel_dataset-COCO/images/train/frame_00125_11.png
rename to Karussell/Training/Karusel_dataset-COCO/images/train/frame_00125_11.png
diff --git a/Training/Karusel_dataset-COCO/images/train/frame_00125_12.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00125_12.png
similarity index 100%
rename from Training/Karusel_dataset-COCO/images/train/frame_00125_12.png
rename to Karussell/Training/Karusel_dataset-COCO/images/train/frame_00125_12.png
diff --git a/Training/Karusel_dataset-COCO/images/train/frame_00150.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00150.png
similarity index 100%
rename from Training/Karusel_dataset-COCO/images/train/frame_00150.png
rename to Karussell/Training/Karusel_dataset-COCO/images/train/frame_00150.png
diff --git a/Training/Karusel_dataset-COCO/images/train/frame_00150_01.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00150_01.png
similarity index 100%
rename from Training/Karusel_dataset-COCO/images/train/frame_00150_01.png
rename to Karussell/Training/Karusel_dataset-COCO/images/train/frame_00150_01.png
diff --git a/Training/Karusel_dataset-COCO/images/train/frame_00150_02.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00150_02.png
similarity index 100%
rename from Training/Karusel_dataset-COCO/images/train/frame_00150_02.png
rename to Karussell/Training/Karusel_dataset-COCO/images/train/frame_00150_02.png
diff --git a/Training/Karusel_dataset-COCO/images/train/frame_00150_04.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00150_04.png
similarity index 100%
rename from Training/Karusel_dataset-COCO/images/train/frame_00150_04.png
rename to Karussell/Training/Karusel_dataset-COCO/images/train/frame_00150_04.png
diff --git a/Training/Karusel_dataset-COCO/images/train/frame_00150_11.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00150_11.png
similarity index 100%
rename from Training/Karusel_dataset-COCO/images/train/frame_00150_11.png
rename to Karussell/Training/Karusel_dataset-COCO/images/train/frame_00150_11.png
diff --git a/Training/Karusel_dataset-COCO/images/train/frame_00150_12.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00150_12.png
similarity index 100%
rename from Training/Karusel_dataset-COCO/images/train/frame_00150_12.png
rename to Karussell/Training/Karusel_dataset-COCO/images/train/frame_00150_12.png
diff --git a/Training/Karusel_dataset-COCO/images/train/frame_00175.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00175.png
similarity index 100%
rename from Training/Karusel_dataset-COCO/images/train/frame_00175.png
rename to Karussell/Training/Karusel_dataset-COCO/images/train/frame_00175.png
diff --git a/Training/Karusel_dataset-COCO/images/train/frame_00175_01.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00175_01.png
similarity index 100%
rename from Training/Karusel_dataset-COCO/images/train/frame_00175_01.png
rename to Karussell/Training/Karusel_dataset-COCO/images/train/frame_00175_01.png
diff --git a/Training/Karusel_dataset-COCO/images/train/frame_00175_02.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00175_02.png
similarity index 100%
rename from Training/Karusel_dataset-COCO/images/train/frame_00175_02.png
rename to Karussell/Training/Karusel_dataset-COCO/images/train/frame_00175_02.png
diff --git a/Training/Karusel_dataset-COCO/images/train/frame_00175_11.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00175_11.png
similarity index 100%
rename from Training/Karusel_dataset-COCO/images/train/frame_00175_11.png
rename to Karussell/Training/Karusel_dataset-COCO/images/train/frame_00175_11.png
diff --git a/Training/Karusel_dataset-COCO/images/train/frame_00200.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00200.png
similarity index 100%
rename from Training/Karusel_dataset-COCO/images/train/frame_00200.png
rename to Karussell/Training/Karusel_dataset-COCO/images/train/frame_00200.png
diff --git a/Training/Karusel_dataset-COCO/images/train/frame_00200_03.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00200_03.png
similarity index 100%
rename from Training/Karusel_dataset-COCO/images/train/frame_00200_03.png
rename to Karussell/Training/Karusel_dataset-COCO/images/train/frame_00200_03.png
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00200_04.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00200_04.png
new file mode 100644
index 0000000..d7c7a6c
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00200_04.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00200_06.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00200_06.png
new file mode 100644
index 0000000..d555ca6
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00200_06.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00200_07.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00200_07.png
new file mode 100644
index 0000000..951d7bc
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00200_07.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00200_09.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00200_09.png
new file mode 100644
index 0000000..e9d96f8
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00200_09.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00200_12.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00200_12.png
new file mode 100644
index 0000000..acc15f4
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00200_12.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00225.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00225.png
new file mode 100644
index 0000000..659628a
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00225.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00225_03.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00225_03.png
new file mode 100644
index 0000000..0b43106
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00225_03.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00225_05.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00225_05.png
new file mode 100644
index 0000000..8cec632
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00225_05.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00250.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00250.png
new file mode 100644
index 0000000..d8f39fd
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00250.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00250_06.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00250_06.png
new file mode 100644
index 0000000..d139b1a
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00250_06.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00250_07.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00250_07.png
new file mode 100644
index 0000000..a46a145
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00250_07.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00275_06.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00275_06.png
new file mode 100644
index 0000000..038139d
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00275_06.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00275_09.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00275_09.png
new file mode 100644
index 0000000..92aa0c5
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00275_09.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00300_02.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00300_02.png
new file mode 100644
index 0000000..7ce5cd4
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00300_02.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00300_05.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00300_05.png
new file mode 100644
index 0000000..8681df7
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00300_05.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00325_01.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00325_01.png
new file mode 100644
index 0000000..dc877fb
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00325_01.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00325_07.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00325_07.png
new file mode 100644
index 0000000..a37191a
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00325_07.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00350_05.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00350_05.png
new file mode 100644
index 0000000..c63ff63
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00350_05.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00350_07.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00350_07.png
new file mode 100644
index 0000000..7238ac6
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00350_07.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00375_01.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00375_01.png
new file mode 100644
index 0000000..6583cc8
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00375_01.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00375_03.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00375_03.png
new file mode 100644
index 0000000..a0d94f4
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00375_03.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00400_02.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00400_02.png
new file mode 100644
index 0000000..1d650f9
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00400_02.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00400_06.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00400_06.png
new file mode 100644
index 0000000..6c9b5a1
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00400_06.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00425_05.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00425_05.png
new file mode 100644
index 0000000..e7cb75e
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00425_05.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00425_06.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00425_06.png
new file mode 100644
index 0000000..03ec9d9
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00425_06.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00450_05.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00450_05.png
new file mode 100644
index 0000000..a852ae1
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00450_05.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00450_06.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00450_06.png
new file mode 100644
index 0000000..50ce817
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00450_06.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00475_05.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00475_05.png
new file mode 100644
index 0000000..20f644f
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00475_05.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00500_03.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00500_03.png
new file mode 100644
index 0000000..3a12f3e
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00500_03.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00525_02.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00525_02.png
new file mode 100644
index 0000000..1e8a68c
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00525_02.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00525_03.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00525_03.png
new file mode 100644
index 0000000..cfeaed0
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00525_03.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00525_04.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00525_04.png
new file mode 100644
index 0000000..93980b3
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00525_04.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00550_02.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00550_02.png
new file mode 100644
index 0000000..0398040
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00550_02.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00550_03.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00550_03.png
new file mode 100644
index 0000000..1166efb
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00550_03.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00575.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00575.png
new file mode 100644
index 0000000..9e74f8f
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00575.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00575_02.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00575_02.png
new file mode 100644
index 0000000..f3df126
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00575_02.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00575_03.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00575_03.png
new file mode 100644
index 0000000..c99a0a3
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00575_03.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00575_04.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00575_04.png
new file mode 100644
index 0000000..c379363
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00575_04.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00600_02.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00600_02.png
new file mode 100644
index 0000000..258848d
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00600_02.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00600_03.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00600_03.png
new file mode 100644
index 0000000..2cc569f
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00600_03.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00625_01.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00625_01.png
new file mode 100644
index 0000000..a70c2cc
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00625_01.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00625_02.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00625_02.png
new file mode 100644
index 0000000..b478620
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00625_02.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00875_01.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00875_01.png
new file mode 100644
index 0000000..e8c794b
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00875_01.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00900_01.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00900_01.png
new file mode 100644
index 0000000..0f349ea
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00900_01.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00925.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00925.png
new file mode 100644
index 0000000..f96538c
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00925.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00925_01.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00925_01.png
new file mode 100644
index 0000000..3ef457b
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00925_01.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00975.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00975.png
new file mode 100644
index 0000000..64ba6ac
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_00975.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01000.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01000.png
new file mode 100644
index 0000000..916f39d
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01000.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01025.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01025.png
new file mode 100644
index 0000000..2836f46
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01025.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01050.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01050.png
new file mode 100644
index 0000000..dc3b044
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01050.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01100.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01100.png
new file mode 100644
index 0000000..0530835
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01100.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01150.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01150.png
new file mode 100644
index 0000000..2b10822
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01150.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01175.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01175.png
new file mode 100644
index 0000000..546d0c9
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01175.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01200.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01200.png
new file mode 100644
index 0000000..545af15
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01200.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01225.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01225.png
new file mode 100644
index 0000000..557c4eb
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01225.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01250.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01250.png
new file mode 100644
index 0000000..ce8a927
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01250.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01275.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01275.png
new file mode 100644
index 0000000..1b7713f
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01275.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01300.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01300.png
new file mode 100644
index 0000000..8018d23
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01300.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01325.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01325.png
new file mode 100644
index 0000000..7f24178
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01325.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01350.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01350.png
new file mode 100644
index 0000000..c670f0b
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01350.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01400.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01400.png
new file mode 100644
index 0000000..bc5fced
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01400.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01425.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01425.png
new file mode 100644
index 0000000..eb8b892
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01425.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01450.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01450.png
new file mode 100644
index 0000000..aa1eab2
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01450.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01475.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01475.png
new file mode 100644
index 0000000..c18b0b2
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01475.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01500.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01500.png
new file mode 100644
index 0000000..0593edd
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01500.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01525.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01525.png
new file mode 100644
index 0000000..23e469c
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01525.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01550.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01550.png
new file mode 100644
index 0000000..0c5a3d3
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01550.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01575.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01575.png
new file mode 100644
index 0000000..73f72ed
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01575.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01625.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01625.png
new file mode 100644
index 0000000..5779049
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01625.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01650.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01650.png
new file mode 100644
index 0000000..3dd3a01
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01650.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01700.png b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01700.png
new file mode 100644
index 0000000..dbe59c3
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/train/frame_01700.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/val/frame_00025_05.png b/Karussell/Training/Karusel_dataset-COCO/images/val/frame_00025_05.png
new file mode 100644
index 0000000..e7bc58a
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/val/frame_00025_05.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/val/frame_00025_12.png b/Karussell/Training/Karusel_dataset-COCO/images/val/frame_00025_12.png
new file mode 100644
index 0000000..77eb0a0
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/val/frame_00025_12.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/val/frame_00075_07.png b/Karussell/Training/Karusel_dataset-COCO/images/val/frame_00075_07.png
new file mode 100644
index 0000000..c67c928
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/val/frame_00075_07.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/val/frame_00075_11.png b/Karussell/Training/Karusel_dataset-COCO/images/val/frame_00075_11.png
new file mode 100644
index 0000000..ee572b0
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/val/frame_00075_11.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/val/frame_00175_12.png b/Karussell/Training/Karusel_dataset-COCO/images/val/frame_00175_12.png
new file mode 100644
index 0000000..36865a7
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/val/frame_00175_12.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/val/frame_00200_11.png b/Karussell/Training/Karusel_dataset-COCO/images/val/frame_00200_11.png
new file mode 100644
index 0000000..d503e50
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/val/frame_00200_11.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/val/frame_00550_04.png b/Karussell/Training/Karusel_dataset-COCO/images/val/frame_00550_04.png
new file mode 100644
index 0000000..92011a8
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/val/frame_00550_04.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/val/frame_01075.png b/Karussell/Training/Karusel_dataset-COCO/images/val/frame_01075.png
new file mode 100644
index 0000000..19485b8
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/val/frame_01075.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/val/frame_01125.png b/Karussell/Training/Karusel_dataset-COCO/images/val/frame_01125.png
new file mode 100644
index 0000000..4d15411
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/val/frame_01125.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/val/frame_01375.png b/Karussell/Training/Karusel_dataset-COCO/images/val/frame_01375.png
new file mode 100644
index 0000000..17d8377
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/val/frame_01375.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/val/frame_01600.png b/Karussell/Training/Karusel_dataset-COCO/images/val/frame_01600.png
new file mode 100644
index 0000000..ac516ac
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/val/frame_01600.png differ
diff --git a/Karussell/Training/Karusel_dataset-COCO/images/val/frame_01675.png b/Karussell/Training/Karusel_dataset-COCO/images/val/frame_01675.png
new file mode 100644
index 0000000..51d897f
Binary files /dev/null and b/Karussell/Training/Karusel_dataset-COCO/images/val/frame_01675.png differ
diff --git a/Karussell/Training/openpifpaf_karussel/__init__.py b/Karussell/Training/openpifpaf_karussel/__init__.py
new file mode 100644
index 0000000..386796c
--- /dev/null
+++ b/Karussell/Training/openpifpaf_karussel/__init__.py
@@ -0,0 +1,16 @@
+import openpifpaf
+
+from . import karusel_kp
+
+
+def register():
+ openpifpaf.DATAMODULES['karusel'] = karusel_kp.karusel_Kp
+ openpifpaf.CHECKPOINT_URLS['shufflenetv2k16-apollo-24'] = \
+ "http://github.com/DuncanZauss/openpifpaf_assets/releases/" \
+ "download/v0.1.0/shufflenetv2k16-201113-135121-apollo.pkl.epoch290"
+ openpifpaf.CHECKPOINT_URLS['shufflenetv2k16-apollo-66'] = \
+ "http://github.com/DuncanZauss/openpifpaf_assets/releases/" \
+ "download/v0.1.0/sk16_apollo_66kp.pkl"
+ openpifpaf.CHECKPOINT_URLS['shufflenetv2k30-apollo-66'] = \
+ "http://github.com/DuncanZauss/openpifpaf_assets/releases/" \
+ "download/v0.1.0/sk30_apollo_66kp.pkl"
diff --git a/Karussell/Training/openpifpaf_karussel/__pycache__/__init__.cpython-38.pyc b/Karussell/Training/openpifpaf_karussel/__pycache__/__init__.cpython-38.pyc
new file mode 100644
index 0000000..2096b53
Binary files /dev/null and b/Karussell/Training/openpifpaf_karussel/__pycache__/__init__.cpython-38.pyc differ
diff --git a/Karussell/Training/openpifpaf_karussel/__pycache__/__init__.cpython-39.pyc b/Karussell/Training/openpifpaf_karussel/__pycache__/__init__.cpython-39.pyc
new file mode 100644
index 0000000..62c62f1
Binary files /dev/null and b/Karussell/Training/openpifpaf_karussel/__pycache__/__init__.cpython-39.pyc differ
diff --git a/Karussell/Training/openpifpaf_karussel/__pycache__/constants.cpython-38.pyc b/Karussell/Training/openpifpaf_karussel/__pycache__/constants.cpython-38.pyc
new file mode 100644
index 0000000..64ea8b3
Binary files /dev/null and b/Karussell/Training/openpifpaf_karussel/__pycache__/constants.cpython-38.pyc differ
diff --git a/Karussell/Training/openpifpaf_karussel/__pycache__/constants.cpython-39.pyc b/Karussell/Training/openpifpaf_karussel/__pycache__/constants.cpython-39.pyc
new file mode 100644
index 0000000..8771417
Binary files /dev/null and b/Karussell/Training/openpifpaf_karussel/__pycache__/constants.cpython-39.pyc differ
diff --git a/Karussell/Training/openpifpaf_karussel/__pycache__/formulaE_kp.cpython-39.pyc b/Karussell/Training/openpifpaf_karussel/__pycache__/formulaE_kp.cpython-39.pyc
new file mode 100644
index 0000000..f7089fc
Binary files /dev/null and b/Karussell/Training/openpifpaf_karussel/__pycache__/formulaE_kp.cpython-39.pyc differ
diff --git a/Karussell/Training/openpifpaf_karussel/__pycache__/karusel_kp.cpython-38.pyc b/Karussell/Training/openpifpaf_karussel/__pycache__/karusel_kp.cpython-38.pyc
new file mode 100644
index 0000000..8267b65
Binary files /dev/null and b/Karussell/Training/openpifpaf_karussel/__pycache__/karusel_kp.cpython-38.pyc differ
diff --git a/Karussell/Training/openpifpaf_karussel/__pycache__/karusel_kp.cpython-39.pyc b/Karussell/Training/openpifpaf_karussel/__pycache__/karusel_kp.cpython-39.pyc
new file mode 100644
index 0000000..023e38d
Binary files /dev/null and b/Karussell/Training/openpifpaf_karussel/__pycache__/karusel_kp.cpython-39.pyc differ
diff --git a/Karussell/Training/openpifpaf_karussel/__pycache__/metrics.cpython-38.pyc b/Karussell/Training/openpifpaf_karussel/__pycache__/metrics.cpython-38.pyc
new file mode 100644
index 0000000..265d110
Binary files /dev/null and b/Karussell/Training/openpifpaf_karussel/__pycache__/metrics.cpython-38.pyc differ
diff --git a/Karussell/Training/openpifpaf_karussel/__pycache__/metrics.cpython-39.pyc b/Karussell/Training/openpifpaf_karussel/__pycache__/metrics.cpython-39.pyc
new file mode 100644
index 0000000..3d77347
Binary files /dev/null and b/Karussell/Training/openpifpaf_karussel/__pycache__/metrics.cpython-39.pyc differ
diff --git a/Karussell/Training/openpifpaf_karussel/constants.py b/Karussell/Training/openpifpaf_karussel/constants.py
new file mode 100644
index 0000000..1fc48b6
--- /dev/null
+++ b/Karussell/Training/openpifpaf_karussel/constants.py
@@ -0,0 +1,267 @@
+import os
+
+import numpy as np
+try:
+ import matplotlib.cm as mplcm
+ from matplotlib.animation import FuncAnimation
+ from mpl_toolkits.mplot3d import Axes3D
+except ImportError:
+ pass
+
+import openpifpaf
+
+CAR_KEYPOINTS_24 = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12',
+ '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24']
+
+CAR_SKELETON_24 = [
+ [1, 2],[2, 3],[3, 4],[4, 5],[5, 6],[6, 7],[7, 8],[8, 9],[9, 10],[10, 11],
+ [11, 12],[12, 13],[13, 14],[14, 15],[15, 16],[16, 17],[17, 18],[18, 19],[19, 20],
+ [20, 21],[21, 22],[22, 23],[23, 24],[24, 1],[24, 3],[1, 5]
+ ]
+
+CAR_CATEGORIES_24 = ['karusel']
+
+
+CAR_SCORE_WEIGHTS_24 = [5,5,5,0.5,2,2,5,1,1,1,1,4,3,2,3,3,3,1,5,5,2,4,0.5,2]
+
+CAR_SIGMAS_24 = [0.05] * len(CAR_KEYPOINTS_24)
+
+CAR_POSE_24 = np.array([[ 129., -137., 0.],
+ [ -41., 33., 0.],
+ [ -65., 46., 0.],
+ [ 22., -134., 0.],
+ [ 70., -253., 0.],
+ [ 69., -329., 0.],
+ [ -37., -224., 0.],
+ [ -88., -199., 0.],
+ [-143., -171., 0.],
+ [-173., -119., 0.],
+ [-219., -30., 0.],
+ [-307., -26., 0.],
+ [-207., 123., 0.],
+ [-138., 258., 0.],
+ [ -43., 240., 0.],
+ [ 10., 242., 0.],
+ [ 62., 229., 0.],
+ [ 146., 174., 0.],
+ [ 213., 138., 0.],
+ [ 230., 59., 0.],
+ [ 302., -11., 0.],
+ [ 288., -93., 0.],
+ [ 172., -65., 0.],
+ [ 103., -14., 0.]])
+
+HFLIP_24 = {
+ '1': '1',
+ '2': '2',
+ '3': '3',
+ '4': '4',
+ '5': '5',
+ '6': '6',
+ '7': '7',
+ '8': '8',
+ '9': '9',
+ '10': '10',
+ '11': '11',
+ '12': '12',
+ '13': '13',
+ '14': '14',
+ '15': '15',
+ '16': '16',
+ '17': '17',
+ '18': '18',
+ '19': '19',
+ '20': '20',
+ '21': '21',
+ '22': '22',
+ '23': '23',
+ '24': '24'
+}
+
+training_weights_local_centrality = [
+ 0.890968488270775,
+ 0.716506138617812,
+ 1.05674590410869,
+ 0.764774195768455,
+ 0.637682585483328,
+ 0.686680807728366,
+ 0.955422595797394,
+ 0.936714585642375,
+ 1.34823795445326,
+ 1.38308992581967,
+ 1.32689945125819,
+ 1.38838655605483,
+ 1.18980184904613,
+ 1.02584355494795,
+ 0.90969156732068,
+ 1.24732068576104,
+ 1.11338768064342,
+ 0.933815217550391,
+ 0.852297518872114,
+ 1.04167641424727,
+ 1.01668968075247,
+ 1.34625964088011,
+ 0.911796331039028,
+ 0.866206536337413,
+ 1.55957820407853,
+ 0.730844382675724,
+ 0.651138644197359,
+ 0.758018559633786,
+ 1.31842501396691,
+ 1.32186116654782,
+ 0.744347016851606,
+ 0.636390683664723,
+ 0.715244950821949,
+ 1.63122349407032,
+ 0.849835699185461,
+ 0.910488007220499,
+ 1.44244151650561,
+ 1.14150437331681,
+ 1.19808610191343,
+ 0.960186788642886,
+ 1.05023623286937,
+ 1.19761709710598,
+ 1.3872216313401,
+ 1.01256700741214,
+ 1.1167909667759,
+ 1.27893496336199,
+ 1.54475684725655,
+ 1.40343733870633,
+ 1.45552060866114,
+ 1.47264222155031,
+ 0.970060423999993,
+ 0.944450314768933,
+ 0.623987071240172,
+ 0.5745237907704,
+ 0.66890646050993,
+ 0.978411632994504,
+ 0.587396395188292,
+ 0.76307999741129,
+ 0.609793563449648,
+ 0.67983566494545,
+ 0.685883538168462,
+ 0.753587600664775,
+ 0.770335133588157,
+ 0.764713638033368,
+ 0.792364155965385,
+ 0.796435233566833
+]
+
+
+def get_constants(num_kps):
+ if num_kps == 24:
+ CAR_POSE_24[:, 2] = 2.0
+ return [CAR_KEYPOINTS_24, CAR_SKELETON_24, HFLIP_24, CAR_SIGMAS_24,
+ CAR_POSE_24, CAR_CATEGORIES_24, CAR_SCORE_WEIGHTS_24]
+ if num_kps == 66:
+ CAR_POSE_66[:, 2] = 2.0
+ return [CAR_KEYPOINTS_66, CAR_SKELETON_66, HFLIP_66, CAR_SIGMAS_66,
+ CAR_POSE_66, CAR_CATEGORIES_66, CAR_SCORE_WEIGHTS_66]
+ # using no if-elif-else construction due to pylint no-else-return error
+ raise Exception("Only poses with 24 or 66 keypoints are available.")
+
+
+def draw_ann(ann, *, keypoint_painter, filename=None, margin=0.5, aspect=None, **kwargs):
+ from openpifpaf import show # pylint: disable=import-outside-toplevel
+
+ bbox = ann.bbox()
+ xlim = bbox[0] - margin, bbox[0] + bbox[2] + margin
+ ylim = bbox[1] - margin, bbox[1] + bbox[3] + margin
+ if aspect == 'equal':
+ fig_w = 5.0
+ else:
+ fig_w = 5.0 / (ylim[1] - ylim[0]) * (xlim[1] - xlim[0])
+
+ with show.canvas(filename, figsize=(fig_w, 5), nomargin=True, **kwargs) as ax:
+ ax.set_axis_off()
+ ax.set_xlim(*xlim)
+ ax.set_ylim(*ylim)
+
+ if aspect is not None:
+ ax.set_aspect(aspect)
+
+ keypoint_painter.annotation(ax, ann)
+
+
+def draw_skeletons(pose, sigmas, skel, kps, scr_weights):
+ from openpifpaf.annotation import Annotation # pylint: disable=import-outside-toplevel
+ from openpifpaf import show # pylint: disable=import-outside-toplevel
+
+ scale = np.sqrt(
+ (np.max(pose[:, 0]) - np.min(pose[:, 0]))
+ * (np.max(pose[:, 1]) - np.min(pose[:, 1]))
+ )
+
+ show.KeypointPainter.show_joint_scales = True
+ keypoint_painter = show.KeypointPainter()
+ ann = Annotation(keypoints=kps, skeleton=skel, score_weights=scr_weights)
+ ann.set(pose, np.array(sigmas) * scale)
+ os.makedirs('docs', exist_ok=True)
+ draw_ann(ann, filename='docs/skeleton_car.png', keypoint_painter=keypoint_painter)
+
+
+def plot3d_red(ax_2D, p3d, skeleton):
+ skeleton = [(bone[0] - 1, bone[1] - 1) for bone in skeleton]
+
+ rot_p90_x = np.array([[1, 0, 0], [0, 0, 1], [0, 1, 0]])
+ p3d = p3d @ rot_p90_x
+
+ fig = ax_2D.get_figure()
+ ax = Axes3D(fig, auto_add_to_figure=False)
+ fig.add_axes(ax)
+ ax.set_axis_off()
+ ax_2D.set_axis_off()
+
+ ax.view_init(azim=-90, elev=20)
+ ax.set_xlabel('X')
+ ax.set_ylabel('Y')
+ ax.set_zlabel('Z')
+ max_range = np.array([p3d[:, 0].max() - p3d[:, 0].min(),
+ p3d[:, 1].max() - p3d[:, 1].min(),
+ p3d[:, 2].max() - p3d[:, 2].min()]).max() / 2.0
+ mid_x = (p3d[:, 0].max() + p3d[:, 0].min()) * 0.5
+ mid_y = (p3d[:, 1].max() + p3d[:, 1].min()) * 0.5
+ mid_z = (p3d[:, 2].max() + p3d[:, 2].min()) * 0.5
+
+ ax.set_xlim(mid_x - max_range, mid_x + max_range)
+ ax.set_ylim(mid_y - max_range, mid_y + max_range)
+ ax.set_zlim(mid_z - max_range, mid_z + max_range) # pylint: disable=no-member
+
+ for ci, bone in enumerate(skeleton):
+ c = mplcm.get_cmap('tab20')((ci % 20 + 0.05) / 20) # Same coloring as Pifpaf preds
+ ax.plot(p3d[bone, 0], p3d[bone, 1], p3d[bone, 2], color=c)
+
+ def animate(i):
+ ax.view_init(elev=10., azim=i)
+ return fig
+
+ return FuncAnimation(fig, animate, frames=360, interval=100)
+
+
+def print_associations():
+ print("\nAssociations of the car skeleton with 24 keypoints")
+ for j1, j2 in CAR_SKELETON_24:
+ print(CAR_KEYPOINTS_24[j1 - 1], '-', CAR_KEYPOINTS_24[j2 - 1])
+ print("\nAssociations of the car skeleton with 66 keypoints")
+ for j1, j2 in CAR_SKELETON_66:
+ print(CAR_KEYPOINTS_66[j1 - 1], '-', CAR_KEYPOINTS_66[j2 - 1])
+
+
+def main():
+# print_associations()
+# =============================================================================
+# draw_skeletons(CAR_POSE_24, sigmas = CAR_SIGMAS_24, skel = CAR_SKELETON_24,
+# kps = CAR_KEYPOINTS_24, scr_weights = CAR_SCORE_WEIGHTS_24)
+# draw_skeletons(CAR_POSE_66, sigmas = CAR_SIGMAS_66, skel = CAR_SKELETON_66,
+# kps = CAR_KEYPOINTS_66, scr_weights = CAR_SCORE_WEIGHTS_66)
+# =============================================================================
+# with openpifpaf.show.Canvas.blank(nomargin=True) as ax_2D:
+# anim_66 = plot3d_red(ax_2D, CAR_POSE_66, CAR_SKELETON_66)
+# anim_66.save('./CAR_66_Pose.gif', fps=30)
+ with openpifpaf.show.Canvas.blank(nomargin=True) as ax_2D:
+ anim_24 = plot3d_red(ax_2D, CAR_POSE_24, CAR_SKELETON_24)
+ anim_24.save('./CAR_24_Pose.gif', fps=30)
+
+
+if __name__ == '__main__':
+ main()
\ No newline at end of file
diff --git a/Karussell/Training/openpifpaf_karussel/karusel_kp.py b/Karussell/Training/openpifpaf_karussel/karusel_kp.py
new file mode 100644
index 0000000..aa637bc
--- /dev/null
+++ b/Karussell/Training/openpifpaf_karussel/karusel_kp.py
@@ -0,0 +1,332 @@
+"""
+Interface for custom data.
+
+This module handles datasets and is the class that you need to inherit from for your custom dataset.
+This class gives you all the handles so that you can train with a new –dataset=mydataset.
+The particular configuration of keypoints and skeleton is specified in the headmeta instances
+"""
+
+
+import argparse
+import torch
+import numpy as np
+try:
+ from pycocotools.coco import COCO
+except ImportError:
+ COCO = None
+
+from openpifpaf.datasets import DataModule
+from openpifpaf import encoder, headmeta, metric, transforms
+from openpifpaf.datasets import collate_images_anns_meta, collate_images_targets_meta
+from openpifpaf.plugins.coco import CocoDataset as CocoLoader
+
+from .constants import get_constants, training_weights_local_centrality
+from .metrics import MeanPixelError
+
+
+class karusel_Kp(DataModule):
+ """
+ DataModule for the karusel Dataset.
+ """
+
+ train_annotations = 'Karusel_dataset-COCO/annotations/train.json'
+ val_annotations = 'Karusel_dataset-COCO/annotations/val.json'
+ eval_annotations = val_annotations
+ train_image_dir = 'Karusel_dataset-COCO/images/train/'
+ val_image_dir = 'Karusel_dataset-COCO/images/val/'
+ eval_image_dir = val_image_dir
+
+ n_images = None
+ square_edge = 513
+ extended_scale = False
+ orientation_invariant = 0.0
+ blur = 0.0
+ augmentation = True
+ rescale_images = 1.0
+ upsample_stride = 1
+ min_kp_anns = 1
+ b_min = 1 # 1 pixel
+
+ eval_annotation_filter = True
+ eval_long_edge = 0 # set to zero to deactivate rescaling
+ eval_orientation_invariant = 0.0
+ eval_extended_scale = False
+
+ def __init__(self):
+ super().__init__()
+ if self.weights is not None:
+ caf_weights = []
+ for bone in self.CAR_SKELETON:
+ caf_weights.append(max(self.weights[bone[0] - 1],
+ self.weights[bone[1] - 1]))
+ w_np = np.array(caf_weights)
+ caf_weights = list(w_np / np.sum(w_np) * len(caf_weights))
+ else:
+ caf_weights = None
+ cif = headmeta.Cif('cif', 'apollo',
+ keypoints=self.CAR_KEYPOINTS,
+ sigmas=self.CAR_SIGMAS,
+ pose=self.CAR_POSE,
+ draw_skeleton=self.CAR_SKELETON,
+ score_weights=self.CAR_SCORE_WEIGHTS,
+ training_weights=self.weights)
+ caf = headmeta.Caf('caf', 'apollo',
+ keypoints=self.CAR_KEYPOINTS,
+ sigmas=self.CAR_SIGMAS,
+ pose=self.CAR_POSE,
+ skeleton=self.CAR_SKELETON,
+ training_weights=caf_weights)
+
+ cif.upsample_stride = self.upsample_stride
+ caf.upsample_stride = self.upsample_stride
+ self.head_metas = [cif, caf]
+
+ @classmethod
+ def cli(cls, parser: argparse.ArgumentParser):
+ group = parser.add_argument_group('data module Apollo')
+
+ group.add_argument('--karusel-train-annotations',
+ default=cls.train_annotations)
+ group.add_argument('--karusel-val-annotations',
+ default=cls.val_annotations)
+ group.add_argument('--karusel-train-image-dir',
+ default=cls.train_image_dir)
+ group.add_argument('--karusel-val-image-dir',
+ default=cls.val_image_dir)
+
+ group.add_argument('--karusel-square-edge',
+ default=cls.square_edge, type=int,
+ help='square edge of input images')
+ assert not cls.extended_scale
+ group.add_argument('--karusel-extended-scale',
+ default=False, action='store_true',
+ help='augment with an extended scale range')
+ group.add_argument('--karusel-orientation-invariant',
+ default=cls.orientation_invariant, type=float,
+ help='augment with random orientations')
+ group.add_argument('--karusel-blur',
+ default=cls.blur, type=float,
+ help='augment with blur')
+ assert cls.augmentation
+ group.add_argument('--karusel-no-augmentation',
+ dest='karusel_augmentation',
+ default=True, action='store_false',
+ help='do not apply data augmentation')
+ group.add_argument('--karusel-rescale-images',
+ default=cls.rescale_images, type=float,
+ help='overall rescale factor for images')
+ group.add_argument('--karusel-upsample',
+ default=cls.upsample_stride, type=int,
+ help='head upsample stride')
+ group.add_argument('--karusel-min-kp-anns',
+ default=cls.min_kp_anns, type=int,
+ help='filter images with fewer keypoint annotations')
+ group.add_argument('--karusel-bmin',
+ default=cls.b_min, type=int,
+ help='b minimum in pixels')
+ group.add_argument('--karusel-apply-local-centrality-weights',
+ dest='karusel_apply_local_centrality',
+ default=False, action='store_true',
+ help='Weigh the CIF and CAF head during training.')
+
+ # evaluation
+ assert cls.eval_annotation_filter
+ group.add_argument('--karusel-no-eval-annotation-filter',
+ dest='karusel_eval_annotation_filter',
+ default=True, action='store_false')
+ group.add_argument('--karusel-eval-long-edge', default=cls.eval_long_edge, type=int,
+ help='set to zero to deactivate rescaling')
+ assert not cls.eval_extended_scale
+ group.add_argument('--karusel-eval-extended-scale', default=False, action='store_true')
+ group.add_argument('--karusel-eval-orientation-invariant',
+ default=cls.eval_orientation_invariant, type=float)
+ group.add_argument('--karusel-use-24-kps', default=False, action='store_true',
+ help=('The ApolloCar3D dataset can '
+ 'be trained with 24 or 66 kps. If you want to train a model '
+ 'with 24 kps activate this flag. Change the annotations '
+ 'path to the json files with 24 kps.'))
+
+ @classmethod
+ def configure(cls, args: argparse.Namespace):
+ # extract global information
+ cls.debug = args.debug
+ cls.pin_memory = args.pin_memory
+
+ # Apollo specific
+ cls.train_annotations = args.karusel_train_annotations
+ cls.val_annotations = args.karusel_val_annotations
+ cls.eval_annotations = cls.val_annotations
+ cls.train_image_dir = args.karusel_train_image_dir
+ cls.val_image_dir = args.karusel_val_image_dir
+ cls.eval_image_dir = cls.val_image_dir
+
+ cls.square_edge = args.karusel_square_edge
+ cls.extended_scale = args.karusel_extended_scale
+ cls.orientation_invariant = args.karusel_orientation_invariant
+ cls.blur = args.karusel_blur
+ cls.augmentation = args.karusel_augmentation # loaded by the dest name
+ cls.rescale_images = args.karusel_rescale_images
+ cls.upsample_stride = args.karusel_upsample
+ cls.min_kp_anns = args.karusel_min_kp_anns
+ cls.b_min = args.karusel_bmin
+ if args.karusel_use_24_kps:
+ (cls.CAR_KEYPOINTS, cls.CAR_SKELETON, cls.HFLIP, cls.CAR_SIGMAS, cls.CAR_POSE,
+ cls.CAR_CATEGORIES, cls.CAR_SCORE_WEIGHTS) = get_constants(24)
+ else:
+ (cls.CAR_KEYPOINTS, cls.CAR_SKELETON, cls.HFLIP, cls.CAR_SIGMAS, cls.CAR_POSE,
+ cls.CAR_CATEGORIES, cls.CAR_SCORE_WEIGHTS) = get_constants(66)
+ # evaluation
+ cls.eval_annotation_filter = args.karusel_eval_annotation_filter
+ cls.eval_long_edge = args.karusel_eval_long_edge
+ cls.eval_orientation_invariant = args.karusel_eval_orientation_invariant
+ cls.eval_extended_scale = args.karusel_eval_extended_scale
+ if args.karusel_apply_local_centrality:
+ if args.karusel_use_24_kps:
+ raise Exception("Applying local centrality weights only works with 66 kps.")
+ cls.weights = training_weights_local_centrality
+ else:
+ cls.weights = None
+
+ def _preprocess(self):
+ encoders = (encoder.Cif(self.head_metas[0], bmin=self.b_min),
+ encoder.Caf(self.head_metas[1], bmin=self.b_min))
+
+ if not self.augmentation:
+ return transforms.Compose([
+ transforms.NormalizeAnnotations(),
+ transforms.RescaleAbsolute(self.square_edge),
+ transforms.CenterPad(self.square_edge),
+ transforms.EVAL_TRANSFORM,
+ transforms.Encoders(encoders),
+ ])
+
+ if self.extended_scale:
+ rescale_t = transforms.RescaleRelative(
+ scale_range=(0.2 * self.rescale_images,
+ 2.0 * self.rescale_images),
+ power_law=True, stretch_range=(0.75, 1.33))
+ else:
+ rescale_t = transforms.RescaleRelative(
+ scale_range=(0.33 * self.rescale_images,
+ 1.33 * self.rescale_images),
+ power_law=True, stretch_range=(0.75, 1.33))
+
+ return transforms.Compose([
+ transforms.NormalizeAnnotations(),
+ # transforms.AnnotationJitter(),
+ transforms.RandomApply(transforms.HFlip(self.CAR_KEYPOINTS, self.HFLIP), 0.5),
+ rescale_t,
+ transforms.RandomApply(transforms.Blur(), self.blur),
+ transforms.RandomChoice(
+ [transforms.RotateBy90(),
+ transforms.RotateUniform(30.0)],
+ [self.orientation_invariant, 0.2],
+ ),
+ transforms.Crop(self.square_edge, use_area_of_interest=True),
+ transforms.CenterPad(self.square_edge),
+ transforms.MinSize(min_side=32.0),
+ transforms.TRAIN_TRANSFORM,
+ transforms.Encoders(encoders),
+ ])
+
+ def train_loader(self):
+ train_data = CocoLoader(
+ image_dir=self.train_image_dir,
+ ann_file=self.train_annotations,
+ preprocess=self._preprocess(),
+ annotation_filter=True,
+ min_kp_anns=self.min_kp_anns,
+ category_ids=[1],
+ )
+ return torch.utils.data.DataLoader(
+ train_data, batch_size=self.batch_size, shuffle=not self.debug,
+ pin_memory=self.pin_memory, num_workers=self.loader_workers, drop_last=True,
+ collate_fn=collate_images_targets_meta)
+
+ def val_loader(self):
+ val_data = CocoLoader(
+ image_dir=self.val_image_dir,
+ ann_file=self.val_annotations,
+ preprocess=self._preprocess(),
+ annotation_filter=True,
+ min_kp_anns=self.min_kp_anns,
+ category_ids=[1],
+ )
+ return torch.utils.data.DataLoader(
+ val_data, batch_size=self.batch_size, shuffle=False,
+ pin_memory=self.pin_memory, num_workers=self.loader_workers, drop_last=True,
+ collate_fn=collate_images_targets_meta)
+
+ @classmethod
+ def common_eval_preprocess(cls):
+ rescale_t = None
+ if cls.eval_extended_scale:
+ assert cls.eval_long_edge
+ rescale_t = [
+ transforms.DeterministicEqualChoice([
+ transforms.RescaleAbsolute(cls.eval_long_edge),
+ transforms.RescaleAbsolute((cls.eval_long_edge - 1) // 2 + 1),
+ ], salt=1)
+ ]
+ elif cls.eval_long_edge:
+ rescale_t = transforms.RescaleAbsolute(cls.eval_long_edge)
+
+ if cls.batch_size == 1:
+ padding_t = transforms.CenterPadTight(16)
+ else:
+ assert cls.eval_long_edge
+ padding_t = transforms.CenterPad(cls.eval_long_edge)
+
+ orientation_t = None
+ if cls.eval_orientation_invariant:
+ orientation_t = transforms.DeterministicEqualChoice([
+ None,
+ transforms.RotateBy90(fixed_angle=90),
+ transforms.RotateBy90(fixed_angle=180),
+ transforms.RotateBy90(fixed_angle=270),
+ ], salt=3)
+
+ return [
+ transforms.NormalizeAnnotations(),
+ rescale_t,
+ padding_t,
+ orientation_t,
+ ]
+
+ def _eval_preprocess(self):
+ return transforms.Compose([
+ *self.common_eval_preprocess(),
+ transforms.ToAnnotations([
+ transforms.ToKpAnnotations(
+ self.CAR_CATEGORIES,
+ keypoints_by_category={1: self.head_metas[0].keypoints},
+ skeleton_by_category={1: self.head_metas[1].skeleton},
+ ),
+ transforms.ToCrowdAnnotations(self.CAR_CATEGORIES),
+ ]),
+ transforms.EVAL_TRANSFORM,
+ ])
+
+ def eval_loader(self):
+ eval_data = CocoLoader(
+ image_dir=self.eval_image_dir,
+ ann_file=self.eval_annotations,
+ preprocess=self._eval_preprocess(),
+ annotation_filter=self.eval_annotation_filter,
+ min_kp_anns=self.min_kp_anns if self.eval_annotation_filter else 0,
+ category_ids=[1] if self.eval_annotation_filter else [],
+ )
+ return torch.utils.data.DataLoader(
+ eval_data, batch_size=self.batch_size, shuffle=False,
+ pin_memory=self.pin_memory, num_workers=self.loader_workers, drop_last=False,
+ collate_fn=collate_images_anns_meta)
+
+# TODO: make sure that 24kp flag is activated when evaluating a 24kp model
+ def metrics(self):
+ return [metric.Coco(
+ COCO(self.eval_annotations),
+ max_per_image=20,
+ category_ids=[1],
+ iou_type='keypoints',
+ keypoint_oks_sigmas=self.CAR_SIGMAS
+ ), MeanPixelError()]
diff --git a/Karussell/Training/openpifpaf_karussel/metrics.py b/Karussell/Training/openpifpaf_karussel/metrics.py
new file mode 100644
index 0000000..e797b85
--- /dev/null
+++ b/Karussell/Training/openpifpaf_karussel/metrics.py
@@ -0,0 +1,131 @@
+import logging
+
+import numpy as np
+
+from openpifpaf.metric.base import Base
+from openpifpaf.annotation import Annotation
+
+try:
+ import scipy
+except ImportError:
+ scipy = None
+
+LOG = logging.getLogger(__name__)
+
+
+class MeanPixelError(Base):
+ """
+ Calculate mean pixel error and detection rate for a given image
+ and category in an "all-vs-all setting"
+ """
+ predictions = []
+ image_ids = []
+ errors = [] # mean pixel errors
+ detections = [] # detection rate
+ errors_scaled = [] # mean pixel errors
+ detections_scaled = [] # detection rate
+ px_ref = 368 # CPM crop size in pixels
+
+ def accumulate(self, predictions, image_meta, *, ground_truth=None):
+ errors = []
+ detections = []
+ errors_scaled = []
+ detections_scaled = []
+
+ # Filter ground-truth
+ for annotation in ground_truth:
+ if not isinstance(annotation, Annotation):
+ continue
+ indices_gt = np.nonzero(annotation.data[:, 2] > 1.0)
+ if indices_gt[0].size <= 3:
+ continue
+ gts = annotation.data[indices_gt, 0:2].squeeze()
+ width = float(annotation.fixed_bbox[2])
+ height = float(annotation.fixed_bbox[3])
+ scale = np.array([self.px_ref / width, self.px_ref / height]).reshape(1, 2)
+
+ # Evaluate each keypoint
+ for idx, gt in zip(indices_gt[0], gts):
+ preds = np.array([p.data[idx] for p in predictions]).reshape(-1, 3)[:, 0:2]
+ if preds.size <= 0:
+ continue
+ i = np.argmin(np.linalg.norm(preds - gt, axis=1))
+ dist = preds[i:i + 1] - gt
+ dist_scaled = dist * scale
+ d = float(np.linalg.norm(dist, axis=1))
+ d_scaled = float(np.linalg.norm(dist_scaled, axis=1))
+
+ # Prediction correct if error less than 10 pixels
+ if d < 10:
+ errors.append(d)
+ detections.append(1)
+ else:
+ detections.append(0)
+ if d_scaled < 10:
+ errors_scaled.append(d)
+ detections_scaled.append(1)
+ else:
+ detections_scaled.append(0)
+
+ # Stats for a single image
+ mpe = average(errors)
+ mpe_scaled = average(errors_scaled)
+ det_rate = 100 * average(detections)
+ det_rate_scaled = 100 * average(detections_scaled)
+ LOG.info('Mean Pixel Error (scaled): %s (%s) Det. Rate (scaled): %s (%s)',
+ str(mpe)[:4], str(mpe_scaled)[:4], str(det_rate)[:4], str(det_rate_scaled)[:4])
+
+ # Accumulate stats
+ self.errors.extend(errors)
+ self.detections.extend(detections)
+ self.errors_scaled.extend(errors_scaled)
+ self.detections_scaled.extend(detections_scaled)
+
+ def write_predictions(self, filename, *, additional_data=None):
+ raise NotImplementedError
+
+ def stats(self):
+ mpe = average(self.errors)
+ mpe_scaled = average(self.errors_scaled)
+ det_rate = 100 * average(self.detections)
+ det_rate_scaled = 100 * average(self.detections_scaled)
+ LOG.info('Final Results: \nMean Pixel Error [scaled] : %f [%f] '
+ '\nDetection Rate [scaled]: %f [%f]',
+ mpe, mpe_scaled, det_rate, det_rate_scaled)
+ data = {
+ 'stats': [mpe, mpe_scaled, det_rate, det_rate_scaled],
+ 'text_labels': ['Mean Pixel Error',
+ 'Mean Pixel Error Scaled',
+ 'Detection Rate [%]',
+ 'Detection Rate Scaled[%]'],
+ }
+ return data
+
+
+def hungarian_matching(gts, predictions, thresh=0.5):
+ cost = np.zeros((len(gts), len(predictions)))
+
+ for i, (dg, vg) in enumerate(gts):
+ for j, pred in enumerate(predictions):
+ p = np.array(pred.data)
+ dp = p[:, 0:2][vg > 1.0]
+ vp = p[:, 2][vg > 1.0]
+
+ dp[vp < thresh] = -100
+ dp[vp < thresh] = -100
+
+ # measure the per-keypoint distance
+ distances = np.clip(np.linalg.norm(dp - dg, axis=1), 0, 10)
+ cost[i, j] = float(np.mean(distances))
+
+ assert np.max(cost) < 11
+ row, cols = scipy.optimize.linear_sum_assignment(cost)
+ return row, cols, cost
+
+
+def average(my_list, *, empty_value=0.0):
+ """calculate mean of a list"""
+ if not my_list:
+ return empty_value
+
+ return sum(my_list) / float(len(my_list))
diff --git a/Karussell/Training/training.ipynb b/Karussell/Training/training.ipynb
new file mode 100644
index 0000000..3d30c86
--- /dev/null
+++ b/Karussell/Training/training.ipynb
@@ -0,0 +1,84 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "id": "39a59328",
+ "metadata": {
+ "collapsed": true
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "INFO:__main__:neural network device: cuda (CUDA available: True, count: 1)\n",
+ "INFO:openpifpaf.network.factory:filtering for dataset heads and extending existing heads\n",
+ "INFO:openpifpaf.network.losses.multi_head:multihead loss: ['apollo.cif.c', 'apollo.cif.vec', 'apollo.cif.scales', 'apollo.caf.c', 'apollo.caf.vec', 'apollo.caf.scales'], [1.0, 1.0, 1.0, 1.0, 1.0, 1.0]\n",
+ "INFO:__main__:Single GPU training\n",
+ "INFO:openpifpaf.logger:{'type': 'process', 'argv': ['C:\\\\Anaconda\\\\lib\\\\site-packages\\\\openpifpaf\\\\train.py', '--dataset', 'karusel', '--checkpoint=mobilenetv2', '--lr=0.00002', '--momentum=0.95', '--b-scale=5.0', '--epochs=151', '--lr-decay', '160', '260', '--lr-decay-epochs=10', '--weight-decay=1e-5', '--weight-decay=1e-5', '--val-interval', '10', '--loader-workers', '3', '--batch-size', '1', '--karusel-use-24-kps', '--karusel-square-edge=769', '--karusel-bmin', '2'], 'args': {'output': 'outputs/mobilenetv2-220516-170827-karusel.pkl', 'disable_cuda': False, 'ddp': False, 'local_rank': None, 'sync_batchnorm': True, 'quiet': False, 'debug': False, 'log_stats': False, 'shufflenetv2k_input_conv2_stride': 0, 'shufflenetv2k_input_conv2_outchannels': None, 'shufflenetv2k_stage4_dilation': 1, 'shufflenetv2k_kernel': 5, 'shufflenetv2k_conv5_as_stage': False, 'shufflenetv2k_instance_norm': False, 'shufflenetv2k_group_norm': False, 'shufflenetv2k_leaky_relu': False, 'squeezenet_pretrained': True, 'swin_drop_path_rate': 0.2, 'swin_input_upsample': False, 'swin_use_fpn': False, 'swin_fpn_out_channels': None, 'swin_fpn_level': 3, 'swin_pretrained': True, 'xcit_out_channels': None, 'xcit_out_maxpool': False, 'xcit_pretrained': True, 'mobilenetv3_pretrained': True, 'mobilenetv2_pretrained': True, 'resnet_pretrained': True, 'resnet_pool0_stride': 0, 'resnet_input_conv_stride': 2, 'resnet_input_conv2_stride': 0, 'resnet_block5_dilation': 1, 'resnet_remove_last_block': False, 'shufflenetv2_pretrained': True, 'cf4_dropout': 0.0, 'cf4_inplace_ops': True, 'checkpoint': 'mobilenetv2', 'basenet': None, 'cross_talk': 0.0, 'download_progress': True, 'head_consolidation': 'filter_and_extend', 'lambdas': None, 'component_lambdas': None, 'auto_tune_mtl': False, 'auto_tune_mtl_variance': False, 'task_sparsity_weight': 0.0, 'soft_clamp': 5.0, 'loss_prescale': 1.0, 'regression_loss': 'laplace', 'bce_total_soft_clamp': None, 'laplace_soft_clamp': 5.0, 'r_smooth': 0.0, 'b_scale': 5.0, 'scale_log': False, 'scale_soft_clamp': 5.0, 'background_weight': 1.0, 'focal_alpha': 0.5, 'focal_gamma': 1.0, 'focal_detach': False, 'focal_clamp': True, 'bce_min': 0.0, 'bce_soft_clamp': 5.0, 'bce_background_clamp': -15.0, 'epochs': 151, 'train_batches': None, 'val_batches': None, 'clip_grad_norm': 0.0, 'clip_grad_value': 0.0, 'log_interval': 11, 'val_interval': 10, 'stride_apply': 1, 'fix_batch_norm': False, 'ema': 0.01, 'profile': None, 'cif_side_length': 4, 'caf_min_size': 3, 'caf_fixed_size': False, 'caf_aspect_ratio': 0.0, 'encoder_suppress_selfhidden': True, 'encoder_suppress_invisible': False, 'encoder_suppress_collision': False, 'momentum': 0.95, 'beta2': 0.999, 'adam_eps': 1e-06, 'nesterov': True, 'weight_decay': 1e-05, 'adam': False, 'amsgrad': False, 'lr': 2e-05, 'lr_decay': [160.0, 260.0], 'lr_decay_factor': 0.1, 'lr_decay_epochs': 10.0, 'lr_warm_up_start_epoch': 0, 'lr_warm_up_epochs': 1, 'lr_warm_up_factor': 0.001, 'lr_warm_restarts': [], 'lr_warm_restart_duration': 0.5, 'dataset': 'karusel', 'loader_workers': 3, 'batch_size': 1, 'dataset_weights': None, 'animal_train_annotations': 'data-animalpose/annotations/animal_keypoints_20_train.json', 'animal_val_annotations': 'data-animalpose/annotations/animal_keypoints_20_val.json', 'animal_train_image_dir': 'data-animalpose/images/train/', 'animal_val_image_dir': 'data-animalpose/images/val/', 'animal_square_edge': 513, 'animal_extended_scale': False, 'animal_orientation_invariant': 0.0, 'animal_blur': 0.0, 'animal_augmentation': True, 'animal_rescale_images': 1.0, 'animal_upsample': 1, 'animal_min_kp_anns': 1, 'animal_bmin': 1, 'animal_eval_test2017': False, 'animal_eval_testdev2017': False, 'animal_eval_annotation_filter': True, 'animal_eval_long_edge': 0, 'animal_eval_extended_scale': False, 'animal_eval_orientation_invariant': 0.0, 'apollo_train_annotations': 'data-apollocar3d/annotations/apollo_keypoints_66_train.json', 'apollo_val_annotations': 'data-apollocar3d/annotations/apollo_keypoints_66_val.json', 'apollo_train_image_dir': 'data-apollocar3d/images/train/', 'apollo_val_image_dir': 'data-apollocar3d/images/val/', 'apollo_square_edge': 513, 'apollo_extended_scale': False, 'apollo_orientation_invariant': 0.0, 'apollo_blur': 0.0, 'apollo_augmentation': True, 'apollo_rescale_images': 1.0, 'apollo_upsample': 1, 'apollo_min_kp_anns': 1, 'apollo_bmin': 1, 'apollo_apply_local_centrality': False, 'apollo_eval_annotation_filter': True, 'apollo_eval_long_edge': 0, 'apollo_eval_extended_scale': False, 'apollo_eval_orientation_invariant': 0.0, 'apollo_use_24_kps': False, 'cifar10_root_dir': 'data-cifar10/', 'cifar10_download': False, 'cocodet_train_annotations': 'data-mscoco/annotations/instances_train2017.json', 'cocodet_val_annotations': 'data-mscoco/annotations/instances_val2017.json', 'cocodet_train_image_dir': 'data-mscoco/images/train2017/', 'cocodet_val_image_dir': 'data-mscoco/images/val2017/', 'cocodet_square_edge': 513, 'cocodet_extended_scale': False, 'cocodet_orientation_invariant': 0.0, 'cocodet_blur': 0.0, 'cocodet_augmentation': True, 'cocodet_rescale_images': 1.0, 'cocodet_upsample': 1, 'cocokp_train_annotations': 'data-mscoco/annotations/person_keypoints_train2017.json', 'cocokp_val_annotations': 'data-mscoco/annotations/person_keypoints_val2017.json', 'cocokp_train_image_dir': 'data-mscoco/images/train2017/', 'cocokp_val_image_dir': 'data-mscoco/images/val2017/', 'cocokp_square_edge': 385, 'cocokp_with_dense': False, 'cocokp_extended_scale': False, 'cocokp_orientation_invariant': 0.0, 'cocokp_blur': 0.0, 'cocokp_augmentation': True, 'cocokp_rescale_images': 1.0, 'cocokp_upsample': 1, 'cocokp_min_kp_anns': 1, 'cocokp_bmin': 0.1, 'cocokp_eval_test2017': False, 'cocokp_eval_testdev2017': False, 'coco_eval_annotation_filter': True, 'coco_eval_long_edge': 641, 'coco_eval_extended_scale': False, 'coco_eval_orientation_invariant': 0.0, 'crowdpose_train_annotations': 'data-crowdpose/json/crowdpose_train.json', 'crowdpose_val_annotations': 'data-crowdpose/json/crowdpose_val.json', 'crowdpose_image_dir': 'data-crowdpose/images/', 'crowdpose_square_edge': 385, 'crowdpose_extended_scale': False, 'crowdpose_orientation_invariant': 0.0, 'crowdpose_augmentation': True, 'crowdpose_rescale_images': 1.0, 'crowdpose_upsample': 1, 'crowdpose_min_kp_anns': 1, 'crowdpose_eval_test': False, 'crowdpose_eval_long_edge': 641, 'crowdpose_eval_extended_scale': False, 'crowdpose_eval_orientation_invariant': 0.0, 'crowdpose_index': None, 'nuscenes_train_annotations': '../../../NuScenes/mscoco_style_annotations/nuimages_v1.0-train.json', 'nuscenes_val_annotations': '../../../NuScenes/mscoco_style_annotations/nuimages_v1.0-val.json', 'nuscenes_train_image_dir': '../../../NuScenes/nuimages-v1.0-all-samples', 'nuscenes_val_image_dir': '../../../NuScenes/nuimages-v1.0-all-samples', 'nuscenes_square_edge': 513, 'nuscenes_extended_scale': False, 'nuscenes_orientation_invariant': 0.0, 'nuscenes_blur': 0.0, 'nuscenes_augmentation': True, 'nuscenes_rescale_images': 1.0, 'nuscenes_upsample': 1, 'karusel_train_annotations': 'Karusel_dataset-COCO/annotations/train.json', 'karusel_val_annotations': 'Karusel_dataset-COCO/annotations/val.json', 'karusel_train_image_dir': 'Karusel_dataset-COCO/images/train/', 'karusel_val_image_dir': 'Karusel_dataset-COCO/images/val/', 'karusel_square_edge': 769, 'karusel_extended_scale': False, 'karusel_orientation_invariant': 0.0, 'karusel_blur': 0.0, 'karusel_augmentation': True, 'karusel_rescale_images': 1.0, 'karusel_upsample': 1, 'karusel_min_kp_anns': 1, 'karusel_bmin': 2, 'karusel_apply_local_centrality': False, 'karusel_eval_annotation_filter': True, 'karusel_eval_long_edge': 0, 'karusel_eval_extended_scale': False, 'karusel_eval_orientation_invariant': 0.0, 'karusel_use_24_kps': True, 'posetrack2018_train_annotations': 'data-posetrack2018/annotations/train/*.json', 'posetrack2018_val_annotations': 'data-posetrack2018/annotations/val/*.json', 'posetrack2018_eval_annotations': 'data-posetrack2018/annotations/val/*.json', 'posetrack2018_data_root': 'data-posetrack2018', 'posetrack_square_edge': 385, 'posetrack_with_dense': False, 'posetrack_augmentation': True, 'posetrack_rescale_images': 1.0, 'posetrack_upsample': 1, 'posetrack_min_kp_anns': 1, 'posetrack_bmin': 0.1, 'posetrack_sample_pairing': 0.0, 'posetrack_image_augmentations': 0.0, 'posetrack_max_shift': 30.0, 'posetrack_eval_long_edge': 801, 'posetrack_eval_extended_scale': False, 'posetrack_eval_orientation_invariant': 0.0, 'posetrack_ablation_without_tcaf': False, 'posetrack2017_eval_annotations': 'data-posetrack2017/annotations/val/*.json', 'posetrack2017_data_root': 'data-posetrack2017', 'cocokpst_max_shift': 30.0, 'wholebody_train_annotations': 'data-mscoco/annotations/person_keypoints_train2017_wholebody_pifpaf_style.json', 'wholebody_val_annotations': 'data-mscoco/annotations/coco_wholebody_val_v1.0.json', 'wholebody_train_image_dir': 'data-mscoco/images/train2017/', 'wholebody_val_image_dir': 'data-mscoco/images/val2017', 'wholebody_square_edge': 385, 'wholebody_extended_scale': False, 'wholebody_orientation_invariant': 0.0, 'wholebody_blur': 0.0, 'wholebody_augmentation': True, 'wholebody_rescale_images': 1.0, 'wholebody_upsample': 1, 'wholebody_min_kp_anns': 1, 'wholebody_bmin': 1.0, 'wholebody_apply_local_centrality': False, 'wholebody_eval_test2017': False, 'wholebody_eval_testdev2017': False, 'wholebody_eval_annotation_filter': True, 'wholebody_eval_long_edge': 641, 'wholebody_eval_extended_scale': False, 'wholebody_eval_orientation_invariant': 0.0, 'save_all': None, 'show': False, 'image_width': None, 'image_height': None, 'image_dpi_factor': 2.0, 'image_min_dpi': 50.0, 'show_file_extension': 'jpeg', 'textbox_alpha': 0.5, 'text_color': 'white', 'font_size': 8, 'monocolor_connections': False, 'line_width': None, 'skeleton_solid_threshold': 0.5, 'show_box': False, 'white_overlay': False, 'show_joint_scales': False, 'show_joint_confidences': False, 'show_decoding_order': False, 'show_frontier_order': False, 'show_only_decoded_connections': False, 'video_fps': 10, 'video_dpi': 100, 'debug_indices': [], 'device': device(type='cuda'), 'pin_memory': True}, 'version': '0.13.3', 'plugin_versions': {'openpifpaf_karussel': 'unknown'}, 'hostname': 'DESKTOP-9FV4E0P'}\n",
+ "loading annotations into memory...\n",
+ "Done (t=0.00s)\n",
+ "creating index...\n",
+ "index created!\n",
+ "INFO:openpifpaf.plugins.coco.dataset:filter for annotations (min kp=1) ...\n",
+ "INFO:openpifpaf.plugins.coco.dataset:... done.\n",
+ "INFO:openpifpaf.plugins.coco.dataset:Images: 104\n",
+ "loading annotations into memory...\n",
+ "Done (t=0.00s)\n",
+ "creating index...\n",
+ "index created!\n",
+ "INFO:openpifpaf.plugins.coco.dataset:filter for annotations (min kp=1) ...\n",
+ "INFO:openpifpaf.plugins.coco.dataset:... done.\n",
+ "INFO:openpifpaf.plugins.coco.dataset:Images: 12\n",
+ "INFO:openpifpaf.optimize:SGD optimizer\n",
+ "INFO:openpifpaf.optimize:training batches per epoch = 104\n",
+ "INFO:openpifpaf.network.trainer:{'type': 'config', 'field_names': ['apollo.cif.c', 'apollo.cif.vec', 'apollo.cif.scales', 'apollo.caf.c', 'apollo.caf.vec', 'apollo.caf.scales']}\n",
+ "INFO:openpifpaf.network.trainer:{'type': 'train', 'epoch': 150, 'batch': 0, 'n_batches': 104, 'time': 3.312, 'data_time': 9.933, 'lr': 2e-05, 'loss': 3996.015, 'head_losses': [381.82, 1338.938, 2.815, 422.177, 1845.92, 4.346]}\n",
+ "INFO:openpifpaf.network.trainer:{'type': 'train', 'epoch': 150, 'batch': 11, 'n_batches': 104, 'time': 0.11, 'data_time': 0.0, 'lr': 2e-05, 'loss': 2537.655, 'head_losses': [108.509, 748.191, 1.287, 225.264, 1452.322, 2.082]}\n",
+ "INFO:openpifpaf.network.trainer:{'type': 'train', 'epoch': 150, 'batch': 22, 'n_batches': 104, 'time': 0.145, 'data_time': 0.0, 'lr': 2e-05, 'loss': 3143.217, 'head_losses': [110.165, 1304.007, 3.605, 168.33, 1549.557, 7.551]}\n",
+ "INFO:openpifpaf.network.trainer:{'type': 'train', 'epoch': 150, 'batch': 33, 'n_batches': 104, 'time': 0.114, 'data_time': 0.838, 'lr': 2e-05, 'loss': 2561.634, 'head_losses': [104.38, 760.872, 0.937, 145.966, 1548.282, 1.197]}\n",
+ "INFO:openpifpaf.network.trainer:{'type': 'train', 'epoch': 150, 'batch': 44, 'n_batches': 104, 'time': 0.158, 'data_time': 0.598, 'lr': 2e-05, 'loss': 3077.632, 'head_losses': [94.998, 1271.543, 1.153, 115.789, 1591.439, 2.709]}\n",
+ "INFO:openpifpaf.network.trainer:{'type': 'train', 'epoch': 150, 'batch': 55, 'n_batches': 104, 'time': 0.147, 'data_time': 0.548, 'lr': 2e-05, 'loss': 3387.694, 'head_losses': [117.256, 1455.369, 14.965, 120.495, 1657.198, 22.411]}\n",
+ "INFO:openpifpaf.network.trainer:{'type': 'train', 'epoch': 150, 'batch': 66, 'n_batches': 104, 'time': 0.136, 'data_time': 0.0, 'lr': 2e-05, 'loss': 2697.875, 'head_losses': [141.474, 840.148, 1.025, 203.103, 1510.888, 1.238]}\n",
+ "INFO:openpifpaf.network.trainer:{'type': 'train', 'epoch': 150, 'batch': 77, 'n_batches': 104, 'time': 0.124, 'data_time': 0.0, 'lr': 2e-05, 'loss': 2917.647, 'head_losses': [117.105, 1214.693, 1.097, 128.015, 1454.447, 2.292]}\n",
+ "INFO:openpifpaf.network.trainer:{'type': 'train', 'epoch': 150, 'batch': 88, 'n_batches': 104, 'time': 0.112, 'data_time': 0.0, 'lr': 2e-05, 'loss': 2877.594, 'head_losses': [117.213, 1145.017, 0.308, 142.698, 1471.487, 0.872]}\n",
+ "INFO:openpifpaf.network.trainer:{'type': 'train', 'epoch': 150, 'batch': 99, 'n_batches': 104, 'time': 0.134, 'data_time': 0.0, 'lr': 2e-05, 'loss': 537.43, 'head_losses': [29.236, 148.922, 0.908, 44.595, 312.376, 1.394]}\n",
+ "INFO:openpifpaf.network.trainer:applying ema\n",
+ "INFO:openpifpaf.network.trainer:{'type': 'train-epoch', 'epoch': 151, 'loss': 2661.64299, 'head_losses': [103.41938, 976.64185, 3.44785, 147.09363, 1425.81744, 5.22282], 'time': 58.1, 'n_clipped_grad': 0, 'max_norm': 0.0}\n",
+ "INFO:openpifpaf.network.trainer:model written: outputs/mobilenetv2-220516-170827-karusel.pkl.epoch151\n",
+ "INFO:openpifpaf.network.trainer:{'type': 'val-epoch', 'epoch': 151, 'loss': 2293.58988, 'head_losses': [75.23923, 780.86423, 1.6363, 120.32408, 1312.80143, 2.72463], 'time': 13.4}\n"
+ ]
+ }
+ ],
+ "source": [
+ "!python -m openpifpaf.train --dataset karusel \\\n",
+ "--checkpoint=mobilenetv2 --lr=0.00002 --momentum=0.95 --b-scale=5.0 \\\n",
+ "--epochs=151 --lr-decay 160 260 --lr-decay-epochs=10 --weight-decay=1e-5 \\\n",
+ "--weight-decay=1e-5 --val-interval 10 --loader-workers 3 \\\n",
+ "--batch-size 1 --karusel-use-24-kps --karusel-square-edge=769 --karusel-bmin 2"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.9.7"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/Karussell/readme.md b/Karussell/readme.md
new file mode 100644
index 0000000..e69de29
diff --git a/Karussell/utils/coca-cola.png b/Karussell/utils/coca-cola.png
new file mode 100644
index 0000000..4a95b1a
Binary files /dev/null and b/Karussell/utils/coca-cola.png differ
diff --git a/Karussell/utils/functions_shield.py b/Karussell/utils/functions_shield.py
new file mode 100644
index 0000000..16d169f
--- /dev/null
+++ b/Karussell/utils/functions_shield.py
@@ -0,0 +1,133 @@
+import cv2
+import numpy as np
+import os
+
+# Read shield with alpha channel
+def readAlpha(path):
+ src = cv2.imread(path, cv2.IMREAD_UNCHANGED)
+ src = cv2.cvtColor(src, cv2.COLOR_BGRA2RGBA)
+ # b, g, r, alpha = cv2.split(src)
+ # dst1 = cv2.merge((b, g, r))
+ # alpha = cv2.cvtColor(alpha, cv2.COLOR_GRAY2BGR)
+ # dst1_64 = dst1.astype(np.float64)
+ # alpha_64 = alpha.astype(np.float64)
+ # alpha_64 *= 1./255.
+ # dst2_64 = np.multiply(dst1_64, alpha_64)
+ # dst2 = dst2_64.astype(np.uint8)
+ return src
+
+# Read shield with alpha channel and points
+def readShield(path, step_board=0):
+ pict = readAlpha(path)
+ h_pict = pict.shape[0]
+ w_pict = pict.shape[1]
+ pts_pict = np.array(
+ [[step_board, step_board], [w_pict - step_board, step_board], [w_pict - step_board, h_pict - step_board],
+ [step_board, h_pict - step_board]])
+ return pict, pts_pict
+
+def ReadShields(shield_album):
+ picts_paths = []
+ f = open(shield_album)
+ for g in f:
+ if g[-1] == '\n':
+ picts_paths.append(g[:-1])
+ else:
+ picts_paths.append(g)
+ f.close()
+ # print(picts_paths)
+ picts = []
+ pts_picts = []
+ for shield_path in picts_paths:
+ pict, pts_pict = readShield(shield_path)
+ picts.append(pict)
+ pts_picts.append(pts_pict)
+ return picts, pts_picts
+
+def ReadShieldsAni(shield_album):
+ picts_paths = []
+ # filelist = os.listdir(shield_album)
+ # for g in filelist:
+ # picts_paths.append(shield_album + "/" + g)
+ # # print(picts_paths)
+ picts = []
+ pts_picts = []
+ for i in range(0,55):
+ str_i = str(i).zfill(4)
+ pict, pts_pict = readShield(shield_album + "/frame_"+str_i+".png")
+ picts.append(pict)
+ pts_picts.append(pts_pict)
+ return picts, pts_picts
+
+# Overaling transformed shield on frame
+def overlaying(pict, img, pts_pict, pts_frame, part=1.0):
+ # Homography
+ # h, status = cv2.findHomography(pts_pict, pts_frame)
+
+
+
+# x1 = int(pts_frame[0][1])
+# if x1 < 0:
+# x1 = 0
+# x2 = int(pts_frame[2][1])
+# y1 = int(pts_frame[0][0])
+# if y1 < 0:
+# y1 = 0
+# y2 = int(pts_frame[2][0])
+
+ (y1, x1), (y2, x2) = pts_frame.min(axis=0), pts_frame.max(axis=0)
+ if (x2 - x1) > 50 and (y2 - y1) > 50:
+ try:
+ area = img[x1:x2, y1:y2]
+ # rows, cols, channels = area.shape
+
+ b, g, r, alpha = cv2.split(pict)
+ pict_rgb = cv2.merge((r, g, b))
+
+ h, status = cv2.findHomography(pts_pict, pts_frame)
+ imgWarp = cv2.warpPerspective(pict_rgb, h, (img.shape[1], img.shape[0]))
+ alphaWarp = cv2.warpPerspective(alpha, h, (img.shape[1], img.shape[0]))
+ pict_area = imgWarp[x1:x2, y1:y2]
+ alpha_area = alphaWarp[x1:x2, y1:y2]
+
+ # pict = cv2.resize(pict, (cols, rows))
+
+ znam = 1./255.
+ alpha_area = cv2.cvtColor(alpha_area, cv2.COLOR_GRAY2BGR)
+ pict_32 = pict_area.astype(np.float32)
+ area_32 = area.astype(np.float32)
+ alpha_32 = alpha_area.astype(np.float32)
+ alpha_32 *= znam
+ if part != 1.:
+ alpha_32 *= part
+ alpha_nega_32 = 1. - alpha_32
+ dst1_32 = np.multiply(pict_32, alpha_32)
+ dst2_32 = np.multiply(area_32, alpha_nega_32)
+ dst_32 = dst1_32 + dst2_32
+ img[x1:x2, y1:y2] = dst_32.astype(np.uint8)
+
+ # Warp transform shield
+ # imgWarp = cv2.warpPerspective(pict_rgb, h, (img.shape[1], img.shape[0]))
+ # alphaWarp = cv2.warpPerspective(alpha, h, (img.shape[1], img.shape[0]))
+
+ # Placing sheild on frame
+ # imgAug = cv2.addWeighted(img, 1.0, imgWarp, 0.5, 0.0)
+ except:
+ pass
+
+ return img
+
+def applistShields(album_paths):
+ picts_paths = []
+ picts_names = []
+ f = open(album_paths)
+ for g in f:
+ if g[-1] == '\n':
+ picts_paths.append(g[:-1])
+ else:
+ picts_paths.append(g)
+ f.close()
+ for path in picts_paths:
+ name = path.split('.')[0].split("/")[1]
+ picts_names.append(name)
+ return picts_paths, picts_names
diff --git a/Karussell/utils/karussel_24kps.csv b/Karussell/utils/karussel_24kps.csv
new file mode 100644
index 0000000..bf437e3
--- /dev/null
+++ b/Karussell/utils/karussel_24kps.csv
@@ -0,0 +1,25 @@
+,x,y,z
+1,-11.728358247427778,-219.4412122023117,0.0
+2,-15.92420132696894,20.938476833288533,0.0
+3,-24.15779771912961,46.96169512870693,0.0
+4,-86.61374177228646,-142.95474716218305,0.0
+5,-134.74977744065188,-261.8997851845144,0.0
+6,-188.2631533958743,-315.8749516397929,0.0
+7,-191.57404333357664,-166.7104853355808,0.0
+8,-210.8939138893729,-113.29941343370568,0.0
+9,-231.00716853514677,-54.9516886489786,0.0
+10,-216.46512728143847,3.293732082401192,0.0
+11,-187.73016312616568,99.26925935365503,0.0
+12,-248.253432074131,163.27655515540138,0.0
+13,-72.81535484187529,200.9923483599607,0.0
+14,70.59797139345626,250.17179384400777,0.0
+15,126.43140175736619,171.23113224430733,0.0
+16,165.9457279162327,135.85291821065778,0.0
+17,194.32083871787557,90.37926554238746,0.0
+18,216.53917157107745,-7.535726594794127,0.0
+19,239.72723685724318,-79.97407022773838,0.0
+20,197.07800219673948,-148.61110675229477,0.0
+21,200.24438188899256,-248.98029544904819,0.0
+22,133.21163830661362,-298.2409418903916,0.0
+23,69.21865584018204,-197.5190565076657,0.0
+24,55.01178651022396,-112.90129912872368,0.0
diff --git a/Karussell/utils/keypoints2pose_video.ipynb b/Karussell/utils/keypoints2pose_video.ipynb
new file mode 100644
index 0000000..0fecc0b
--- /dev/null
+++ b/Karussell/utils/keypoints2pose_video.ipynb
@@ -0,0 +1,8034 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "id": "f9a03d7c",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import json\n",
+ "import os\n",
+ "import pandas as pd\n",
+ "import numpy as np\n",
+ "import plotly.express as px\n",
+ "import cv2\n",
+ "from tqdm.notebook import tqdm \n",
+ "from utils import *"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "id": "7e671b5a",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "path_video_OpenPifPaf_detection = r'..\\Inference\\test\\videos\\turn180_1d.mp4.openpifpaf.json'\n",
+ "\n",
+ "video_json = []\n",
+ "for line in open(path_video_OpenPifPaf_detection, 'r'):\n",
+ " video_json.append(json.loads(line))\n",
+ "\n",
+ "keypoints_3d_path = r'karussel_24kps.csv'\n",
+ "keypoints_3d = pd.read_csv(keypoints_3d_path, index_col=0).astype(float)\n",
+ "\n",
+ "axes_3d = np.float32([[0,0,0],\n",
+ " [1,0,0],\n",
+ " [0,1,0],\n",
+ " [0,0,1]])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "id": "1beeef98",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def pict_points(size=100):\n",
+ " s = size//2\n",
+ " return np.float32([[0,0,0],\n",
+ " [-s,-s, 0],\n",
+ " [s, -s, 0],\n",
+ " [s, s, 0],\n",
+ " [-s, s, 0]])\n",
+ "\n",
+ "from functions_shield import *\n",
+ "logo, pts_pict = readShield(\"coca-cola.png\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "99354896",
+ "metadata": {},
+ "source": [
+ "### video"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "id": "3164afcb",
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "d11eec7ddd3a434082a3c453f81bc877",
+ "version_major": 2,
+ "version_minor": 0
+ },
+ "text/plain": [
+ " 0%| | 0/375 [00:00, ?it/s]"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "name_video = path_video_OpenPifPaf_detection[:-16]\n",
+ "video = cv2.VideoCapture(name_video)\n",
+ "frame_width = int(video.get(3))\n",
+ "frame_height = int(video.get(4))\n",
+ "imageSize = (frame_height, frame_width)\n",
+ "fps = int(video.get(5))\n",
+ "num_frames = int(video.get(7))\n",
+ "out = cv2.VideoWriter(name_video[:-4]+'_'+'logo'+'.mp4', cv2.VideoWriter_fourcc(*'XVID'), fps, imageSize[::-1])\n",
+ "\n",
+ "imgpts_list = []\n",
+ "box_pict = pict_points(425)\n",
+ "poses = []\n",
+ "number = 0\n",
+ "for n, frame in enumerate(tqdm(video_json)):\n",
+ " fl, img = video.read()\n",
+ " num = frame['frame']\n",
+ " anns = frame['predictions']\n",
+ " score = 0\n",
+ " ann = []\n",
+ " for i in anns:\n",
+ " if i['score']>score:\n",
+ " score = i['score']\n",
+ " ann = i\n",
+ " rvec = []\n",
+ " if ann != []:\n",
+ " keypoints_2d, bbox, score = encode(ann)\n",
+ " conf_keypoints_2d = keypoints_2d[keypoints_2d['conf']>0.35]\n",
+ " if len(conf_keypoints_2d)>5:\n",
+ " rvec, tvec, camMatrx, dist = fit((1920, 1080), conf_keypoints_2d, keypoints_3d, focus=1)\n",
+ "\n",
+ " imgpts = cv.projectPoints(box_pict, rvec, tvec, camMatrx, dist)[0][:, 0].astype(int)\n",
+ " imgpts_list.append(imgpts)\n",
+ " \n",
+ " imgpts = imgpts_filt_list[number]\n",
+ " img = overlaying(logo, img, pts_pict, imgpts[1:])\n",
+ " \n",
+ " for p in imgpts[1:]:\n",
+ " img = cv.circle(img, p.astype(int), 5, (0,0,0), -1)\n",
+ "# for p in conf_keypoints_2d[['x', 'y']].values:\n",
+ "# img = cv.circle(img, p.astype(int), 5, (0,0,0), -1)\n",
+ " number += 1\n",
+ " \n",
+ " out.write(img)\n",
+ " \n",
+ "video.release()\n",
+ "out.release()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "id": "ada19ded",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ " \n",
+ " "
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "application/vnd.plotly.v1+json": {
+ "config": {
+ "plotlyServerURL": "https://plot.ly"
+ },
+ "data": [
+ {
+ "hovertemplate": "variable=x0
index=%{x}
value=%{y}",
+ "legendgroup": "x0",
+ "line": {
+ "color": "#636efa",
+ "dash": "solid"
+ },
+ "marker": {
+ "symbol": "circle"
+ },
+ "mode": "lines",
+ "name": "x0",
+ "showlegend": true,
+ "type": "scattergl",
+ "x": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9,
+ 10,
+ 11,
+ 12,
+ 13,
+ 14,
+ 15,
+ 16,
+ 17,
+ 18,
+ 19,
+ 20,
+ 21,
+ 22,
+ 23,
+ 24,
+ 25,
+ 26,
+ 27,
+ 28,
+ 29,
+ 30,
+ 31,
+ 32,
+ 33,
+ 34,
+ 35,
+ 36,
+ 37,
+ 38,
+ 39,
+ 40,
+ 41,
+ 42,
+ 43,
+ 44,
+ 45,
+ 46,
+ 47,
+ 48,
+ 49,
+ 50,
+ 51,
+ 52,
+ 53,
+ 54,
+ 55,
+ 56,
+ 57,
+ 58,
+ 59,
+ 60,
+ 61,
+ 62,
+ 63,
+ 64,
+ 65,
+ 66,
+ 67,
+ 68,
+ 69,
+ 70,
+ 71,
+ 72,
+ 73,
+ 74,
+ 75,
+ 76,
+ 77,
+ 78,
+ 79,
+ 80,
+ 81,
+ 82,
+ 83,
+ 84,
+ 85,
+ 86,
+ 87,
+ 88,
+ 89,
+ 90,
+ 91,
+ 92,
+ 93,
+ 94,
+ 95,
+ 96,
+ 97,
+ 98,
+ 99,
+ 100,
+ 101,
+ 102,
+ 103,
+ 104,
+ 105,
+ 106,
+ 107,
+ 108,
+ 109,
+ 110,
+ 111,
+ 112,
+ 113,
+ 114,
+ 115,
+ 116,
+ 117,
+ 118,
+ 119,
+ 120,
+ 121,
+ 122,
+ 123,
+ 124,
+ 125,
+ 126,
+ 127,
+ 128,
+ 129,
+ 130,
+ 131,
+ 132,
+ 133,
+ 134,
+ 135,
+ 136,
+ 137,
+ 138,
+ 139,
+ 140,
+ 141,
+ 142,
+ 143,
+ 144,
+ 145,
+ 146,
+ 147,
+ 148,
+ 149,
+ 150,
+ 151,
+ 152,
+ 153,
+ 154,
+ 155,
+ 156,
+ 157,
+ 158,
+ 159,
+ 160,
+ 161,
+ 162,
+ 163,
+ 164,
+ 165,
+ 166,
+ 167,
+ 168,
+ 169,
+ 170,
+ 171,
+ 172,
+ 173,
+ 174,
+ 175,
+ 176,
+ 177,
+ 178,
+ 179,
+ 180,
+ 181,
+ 182,
+ 183,
+ 184,
+ 185,
+ 186,
+ 187,
+ 188,
+ 189,
+ 190,
+ 191,
+ 192,
+ 193,
+ 194,
+ 195,
+ 196,
+ 197,
+ 198,
+ 199,
+ 200,
+ 201,
+ 202,
+ 203,
+ 204,
+ 205,
+ 206,
+ 207,
+ 208,
+ 209,
+ 210,
+ 211,
+ 212,
+ 213,
+ 214,
+ 215,
+ 216,
+ 217,
+ 218,
+ 219,
+ 220,
+ 221,
+ 222,
+ 223,
+ 224,
+ 225,
+ 226,
+ 227,
+ 228,
+ 229,
+ 230,
+ 231,
+ 232,
+ 233,
+ 234,
+ 235,
+ 236,
+ 237,
+ 238,
+ 239,
+ 240,
+ 241,
+ 242,
+ 243,
+ 244,
+ 245,
+ 246,
+ 247,
+ 248,
+ 249,
+ 250,
+ 251,
+ 252,
+ 253,
+ 254,
+ 255,
+ 256,
+ 257,
+ 258,
+ 259,
+ 260,
+ 261,
+ 262,
+ 263,
+ 264,
+ 265,
+ 266,
+ 267,
+ 268,
+ 269,
+ 270,
+ 271,
+ 272,
+ 273,
+ 274,
+ 275,
+ 276,
+ 277,
+ 278,
+ 279,
+ 280,
+ 281,
+ 282,
+ 283,
+ 284,
+ 285,
+ 286,
+ 287,
+ 288,
+ 289,
+ 290,
+ 291,
+ 292,
+ 293,
+ 294,
+ 295,
+ 296,
+ 297,
+ 298,
+ 299,
+ 300,
+ 301,
+ 302,
+ 303,
+ 304,
+ 305,
+ 306,
+ 307,
+ 308,
+ 309,
+ 310,
+ 311,
+ 312,
+ 313,
+ 314,
+ 315,
+ 316,
+ 317,
+ 318,
+ 319,
+ 320,
+ 321,
+ 322,
+ 323,
+ 324,
+ 325,
+ 326,
+ 327,
+ 328,
+ 329,
+ 330,
+ 331,
+ 332
+ ],
+ "xaxis": "x",
+ "y": [
+ 1112.7616798049653,
+ 1110.7291916863508,
+ 1108.6951042052044,
+ 1106.6591287797173,
+ 1104.6209768280803,
+ 1102.5803597684844,
+ 1100.5369890191203,
+ 1098.4905759981789,
+ 1096.4408321238514,
+ 1094.387468814328,
+ 1092.3301974878004,
+ 1090.268729562459,
+ 1088.2027764564948,
+ 1086.1320495880987,
+ 1084.0562603754615,
+ 1081.975120236774,
+ 1079.8883405902275,
+ 1077.7956328540124,
+ 1075.69670844632,
+ 1073.591278785341,
+ 1071.4790552892662,
+ 1069.3597493762866,
+ 1067.2330724645929,
+ 1065.0987359723763,
+ 1062.9564513178275,
+ 1060.8059299190136,
+ 1058.688509365887,
+ 1056.5842487937339,
+ 1054.4044032706192,
+ 1052.1454619582455,
+ 1049.8625110420303,
+ 1047.5573625675465,
+ 1045.2376044756304,
+ 1042.905048811856,
+ 1040.5939205869813,
+ 1038.2587601076957,
+ 1035.9337923847577,
+ 1033.6532424289264,
+ 1031.333461686441,
+ 1029.0408616275497,
+ 1026.7237536522846,
+ 1024.3566332192058,
+ 1022.0047792700793,
+ 1019.6417812406793,
+ 1017.299825590495,
+ 1014.9575981334746,
+ 1012.6523817072818,
+ 1010.350630818247,
+ 1008.0831728916805,
+ 1005.9512106728309,
+ 1003.8144238826435,
+ 1001.7031869350345,
+ 999.7446601280853,
+ 997.7712065957295,
+ 995.897981834127,
+ 994.0687671293773,
+ 992.2268907561867,
+ 990.5185621417223,
+ 988.8540170784142,
+ 987.2611384175159,
+ 985.7675825045849,
+ 984.3419556500697,
+ 982.9584135539862,
+ 981.6115200796155,
+ 980.3277990440317,
+ 979.1126865839533,
+ 977.9007905047671,
+ 976.7499150602498,
+ 975.6967768238233,
+ 974.6808534733511,
+ 973.6944438151484,
+ 972.7293936441367,
+ 971.7828716391082,
+ 970.8840064326486,
+ 969.9968742212734,
+ 969.1499241204785,
+ 968.279915739768,
+ 967.4618904164312,
+ 966.5995152776965,
+ 965.752066864369,
+ 964.9195451764487,
+ 964.0959478129752,
+ 963.2750458672913,
+ 962.4561598223072,
+ 961.6059706900506,
+ 960.749756506264,
+ 959.9183446962572,
+ 959.0510996850452,
+ 958.1726199912811,
+ 957.2540034880763,
+ 956.3573580374432,
+ 955.4533285011003,
+ 954.5771591654416,
+ 953.7316813516748,
+ 952.8606763458989,
+ 952.0255724930371,
+ 951.2287481029038,
+ 950.4459444153912,
+ 949.6735373393533,
+ 948.9134521732116,
+ 948.140750639768,
+ 947.4157285554626,
+ 946.7129946317045,
+ 946.0335681441285,
+ 945.4106548278586,
+ 944.7859974177248,
+ 944.2456227773027,
+ 943.7634601009113,
+ 943.2810256176841,
+ 942.8517067203139,
+ 942.4698407663851,
+ 942.0973521482966,
+ 941.7017146480136,
+ 941.3738250015889,
+ 940.9952433802613,
+ 940.65641350869,
+ 940.3296790413181,
+ 939.987157126892,
+ 939.6919749030593,
+ 939.4157965071726,
+ 939.1566966408111,
+ 938.9657976397011,
+ 938.7230741352051,
+ 938.5497972772921,
+ 938.3845387210395,
+ 938.1980565810136,
+ 938.0787560306048,
+ 937.964755713497,
+ 937.7939477676769,
+ 937.6806949193677,
+ 937.5948492603494,
+ 937.5062628824021,
+ 937.4111984415315,
+ 937.3056920880467,
+ 937.191329361824,
+ 937.0694692970434,
+ 936.9678814921101,
+ 936.8819225802437,
+ 936.8069491946628,
+ 936.7116808986655,
+ 936.6560737501454,
+ 936.5822102424784,
+ 936.5442705382947,
+ 936.5109742008918,
+ 936.4510407935668,
+ 936.4510634441364,
+ 936.3943011165638,
+ 936.3673469386661,
+ 936.3389204737407,
+ 936.2777412850838,
+ 936.2704025005135,
+ 936.2592131191007,
+ 936.2721692449472,
+ 936.2784434527437,
+ 936.3062583522883,
+ 936.3250130239682,
+ 936.3631565832787,
+ 936.3579016511172,
+ 936.3909714828236,
+ 936.3998052049917,
+ 936.380891979324,
+ 936.3249450722592,
+ 936.2226777502361,
+ 936.102992140143,
+ 935.9359668394569,
+ 935.8040046206069,
+ 935.6454506329742,
+ 935.4579265667439,
+ 935.2450565130623,
+ 934.984053998849,
+ 934.6787696209469,
+ 934.3330539761984,
+ 933.885931731074,
+ 933.485537611162,
+ 933.0178486487848,
+ 932.5133525107069,
+ 932.0083127589571,
+ 931.4211193910438,
+ 930.8410836031439,
+ 930.2454189221774,
+ 929.5847018051419,
+ 928.9213798725954,
+ 928.258850709987,
+ 927.6271489726885,
+ 926.9974857866592,
+ 926.3792611383096,
+ 925.728600874204,
+ 925.0868649345452,
+ 924.4569978933893,
+ 923.8417178190954,
+ 923.2492921695905,
+ 922.7143989670265,
+ 922.2126661984472,
+ 921.6928582752781,
+ 921.2211601620706,
+ 920.7778432126494,
+ 920.3427257694458,
+ 920.0396837979401,
+ 919.729982558954,
+ 919.5368185008781,
+ 919.4062379667774,
+ 919.3162472535112,
+ 919.3564973158001,
+ 919.4661260729636,
+ 919.6486443632984,
+ 919.9337470836318,
+ 920.3184896599076,
+ 920.7730639424508,
+ 921.3528958752238,
+ 921.9628983667864,
+ 922.6311807740889,
+ 923.358762372766,
+ 924.1670706017179,
+ 925.0182563590396,
+ 925.938843461805,
+ 926.8960791862834,
+ 927.8243448321642,
+ 928.7752157465677,
+ 929.740764230112,
+ 930.7450225372082,
+ 931.7851593466488,
+ 932.8847539014517,
+ 934.0616095493713,
+ 935.2214319689049,
+ 936.3609368274518,
+ 937.529660920863,
+ 938.7180910098793,
+ 939.8900767853213,
+ 941.127341502529,
+ 942.2758612878015,
+ 943.4495458559682,
+ 944.6177942874161,
+ 945.7500056625321,
+ 946.788715486084,
+ 947.7614668507806,
+ 948.6629368727516,
+ 949.5521755871054,
+ 950.4615959590275,
+ 951.3647874242927,
+ 952.2029264534891,
+ 953.0881107158732,
+ 953.9024666469248,
+ 954.7048177760556,
+ 955.4358875624607,
+ 956.165598314686,
+ 956.8990464109056,
+ 957.6413282292931,
+ 958.4299531132089,
+ 959.2586921559958,
+ 960.0207705722678,
+ 960.844934199983,
+ 961.7247276267875,
+ 962.6921108064746,
+ 963.6289836688268,
+ 964.4873949578707,
+ 965.3481392555897,
+ 966.3008675167054,
+ 967.2525312010468,
+ 968.2925547576391,
+ 969.247751930848,
+ 970.2714670772837,
+ 971.3931685880766,
+ 972.5568642550224,
+ 973.7329724341431,
+ 974.9505085051751,
+ 976.1317130624695,
+ 977.4816190626053,
+ 978.9315499783678,
+ 980.3713334389215,
+ 981.9471788714342,
+ 983.6170468186126,
+ 985.3182631542034,
+ 987.0469772813634,
+ 988.8141973769486,
+ 990.5035221634668,
+ 992.2720333415227,
+ 994.0767854310375,
+ 995.7949217421657,
+ 997.6245668077389,
+ 999.3187614667343,
+ 999.9089220592731,
+ 1001.8062470269958,
+ 1003.7018732019939,
+ 1005.5359577792208,
+ 1007.4311309428257,
+ 1009.3808240276065,
+ 1011.3465084145687,
+ 1013.2956578856778,
+ 1015.115835013132,
+ 1016.9565335567004,
+ 1019.050918480481,
+ 1021.0381435591913,
+ 1023.0260028538523,
+ 1024.8126344876378,
+ 1026.7151690863827,
+ 1028.6806949193572,
+ 1030.545335115058,
+ 1033.4795352101899,
+ 1034.946975016301,
+ 1036.6372737773145,
+ 1038.2496545786914,
+ 1039.8294638608947,
+ 1041.250016987806,
+ 1042.4619130669919,
+ 1043.56116786325,
+ 1044.3315137374489,
+ 1045.3600534552224,
+ 1046.1823597362252,
+ 1046.953714780542,
+ 1047.5621868873334,
+ 1047.9969836797804,
+ 1048.247312780942,
+ 1048.3023818138768,
+ 1048.151398401644,
+ 1047.7835701673023,
+ 1047.188104733911,
+ 1046.3542097245283,
+ 1045.2710927622136,
+ 1043.9279614700258,
+ 1042.3140234710236,
+ 1040.4184863882658,
+ 1038.2305578448118,
+ 1035.73944546372,
+ 1032.9343568680495,
+ 1029.8044996808592,
+ 1026.339081525208,
+ 1022.5273100241549,
+ 1018.3583928007585,
+ 1013.821537478078,
+ 1008.9059516791721,
+ 1003.6008430270998,
+ 997.89541914492,
+ 991.7788876556915
+ ],
+ "yaxis": "y"
+ },
+ {
+ "hovertemplate": "variable=y0
index=%{x}
value=%{y}",
+ "legendgroup": "y0",
+ "line": {
+ "color": "#EF553B",
+ "dash": "solid"
+ },
+ "marker": {
+ "symbol": "circle"
+ },
+ "mode": "lines",
+ "name": "y0",
+ "showlegend": true,
+ "type": "scattergl",
+ "x": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9,
+ 10,
+ 11,
+ 12,
+ 13,
+ 14,
+ 15,
+ 16,
+ 17,
+ 18,
+ 19,
+ 20,
+ 21,
+ 22,
+ 23,
+ 24,
+ 25,
+ 26,
+ 27,
+ 28,
+ 29,
+ 30,
+ 31,
+ 32,
+ 33,
+ 34,
+ 35,
+ 36,
+ 37,
+ 38,
+ 39,
+ 40,
+ 41,
+ 42,
+ 43,
+ 44,
+ 45,
+ 46,
+ 47,
+ 48,
+ 49,
+ 50,
+ 51,
+ 52,
+ 53,
+ 54,
+ 55,
+ 56,
+ 57,
+ 58,
+ 59,
+ 60,
+ 61,
+ 62,
+ 63,
+ 64,
+ 65,
+ 66,
+ 67,
+ 68,
+ 69,
+ 70,
+ 71,
+ 72,
+ 73,
+ 74,
+ 75,
+ 76,
+ 77,
+ 78,
+ 79,
+ 80,
+ 81,
+ 82,
+ 83,
+ 84,
+ 85,
+ 86,
+ 87,
+ 88,
+ 89,
+ 90,
+ 91,
+ 92,
+ 93,
+ 94,
+ 95,
+ 96,
+ 97,
+ 98,
+ 99,
+ 100,
+ 101,
+ 102,
+ 103,
+ 104,
+ 105,
+ 106,
+ 107,
+ 108,
+ 109,
+ 110,
+ 111,
+ 112,
+ 113,
+ 114,
+ 115,
+ 116,
+ 117,
+ 118,
+ 119,
+ 120,
+ 121,
+ 122,
+ 123,
+ 124,
+ 125,
+ 126,
+ 127,
+ 128,
+ 129,
+ 130,
+ 131,
+ 132,
+ 133,
+ 134,
+ 135,
+ 136,
+ 137,
+ 138,
+ 139,
+ 140,
+ 141,
+ 142,
+ 143,
+ 144,
+ 145,
+ 146,
+ 147,
+ 148,
+ 149,
+ 150,
+ 151,
+ 152,
+ 153,
+ 154,
+ 155,
+ 156,
+ 157,
+ 158,
+ 159,
+ 160,
+ 161,
+ 162,
+ 163,
+ 164,
+ 165,
+ 166,
+ 167,
+ 168,
+ 169,
+ 170,
+ 171,
+ 172,
+ 173,
+ 174,
+ 175,
+ 176,
+ 177,
+ 178,
+ 179,
+ 180,
+ 181,
+ 182,
+ 183,
+ 184,
+ 185,
+ 186,
+ 187,
+ 188,
+ 189,
+ 190,
+ 191,
+ 192,
+ 193,
+ 194,
+ 195,
+ 196,
+ 197,
+ 198,
+ 199,
+ 200,
+ 201,
+ 202,
+ 203,
+ 204,
+ 205,
+ 206,
+ 207,
+ 208,
+ 209,
+ 210,
+ 211,
+ 212,
+ 213,
+ 214,
+ 215,
+ 216,
+ 217,
+ 218,
+ 219,
+ 220,
+ 221,
+ 222,
+ 223,
+ 224,
+ 225,
+ 226,
+ 227,
+ 228,
+ 229,
+ 230,
+ 231,
+ 232,
+ 233,
+ 234,
+ 235,
+ 236,
+ 237,
+ 238,
+ 239,
+ 240,
+ 241,
+ 242,
+ 243,
+ 244,
+ 245,
+ 246,
+ 247,
+ 248,
+ 249,
+ 250,
+ 251,
+ 252,
+ 253,
+ 254,
+ 255,
+ 256,
+ 257,
+ 258,
+ 259,
+ 260,
+ 261,
+ 262,
+ 263,
+ 264,
+ 265,
+ 266,
+ 267,
+ 268,
+ 269,
+ 270,
+ 271,
+ 272,
+ 273,
+ 274,
+ 275,
+ 276,
+ 277,
+ 278,
+ 279,
+ 280,
+ 281,
+ 282,
+ 283,
+ 284,
+ 285,
+ 286,
+ 287,
+ 288,
+ 289,
+ 290,
+ 291,
+ 292,
+ 293,
+ 294,
+ 295,
+ 296,
+ 297,
+ 298,
+ 299,
+ 300,
+ 301,
+ 302,
+ 303,
+ 304,
+ 305,
+ 306,
+ 307,
+ 308,
+ 309,
+ 310,
+ 311,
+ 312,
+ 313,
+ 314,
+ 315,
+ 316,
+ 317,
+ 318,
+ 319,
+ 320,
+ 321,
+ 322,
+ 323,
+ 324,
+ 325,
+ 326,
+ 327,
+ 328,
+ 329,
+ 330,
+ 331,
+ 332
+ ],
+ "xaxis": "x",
+ "y": [
+ 792.4565645642228,
+ 793.8881382193259,
+ 795.2980486760098,
+ 796.6862422924339,
+ 798.0526654267578,
+ 799.397264437141,
+ 800.7199856817426,
+ 802.0207755187224,
+ 803.2995803062397,
+ 804.556346402454,
+ 805.7910201655247,
+ 807.0035479536115,
+ 808.1938761248736,
+ 809.3619510374704,
+ 810.5077190495615,
+ 811.6311265193063,
+ 812.7321198048644,
+ 813.810645264395,
+ 814.8666492560578,
+ 815.9000781380121,
+ 816.9108782684175,
+ 817.8989960054332,
+ 818.8643777072189,
+ 819.8069697319339,
+ 820.7267184377378,
+ 821.623570182694,
+ 822.4754581076756,
+ 823.3017735395083,
+ 824.1365149832557,
+ 824.9493080250005,
+ 825.7690547916318,
+ 826.5660603863222,
+ 827.3374934878648,
+ 828.0807492807477,
+ 828.7934494551571,
+ 829.4676663117109,
+ 830.1014745519881,
+ 830.693175383264,
+ 831.2945706583549,
+ 831.9048676073232,
+ 832.4649029422119,
+ 833.0072028810552,
+ 833.5056966181727,
+ 833.9935898886885,
+ 834.4721284739337,
+ 834.9372352713697,
+ 835.3262361547418,
+ 835.7269700331989,
+ 836.1098552627623,
+ 836.4399873155835,
+ 836.7093252394321,
+ 837.0072934833333,
+ 837.1822464834015,
+ 837.3451493804091,
+ 837.4362726221588,
+ 837.5408503022875,
+ 837.5736483271578,
+ 837.5677591790455,
+ 837.4652653513258,
+ 837.3263494075898,
+ 837.1468209924503,
+ 836.8963056919905,
+ 836.6094815283628,
+ 836.2890665699266,
+ 835.9382318964347,
+ 835.5872386689553,
+ 835.1165145302431,
+ 834.5834107226823,
+ 833.9598178893226,
+ 833.3357267434303,
+ 832.6570703752228,
+ 831.9881084508305,
+ 831.3023171531794,
+ 830.5412127114027,
+ 829.7644114248504,
+ 828.9462954992351,
+ 828.1205236810739,
+ 827.2355206232472,
+ 826.3578110488513,
+ 825.516183831927,
+ 824.6220072933872,
+ 823.7371627895479,
+ 822.8325216878244,
+ 821.911594826514,
+ 820.9514824796886,
+ 819.9883349565285,
+ 818.9937031415385,
+ 818.0572379894401,
+ 817.065482796797,
+ 816.0494914946158,
+ 815.0079050487169,
+ 813.9717773901064,
+ 812.9457518855651,
+ 811.9346984075702,
+ 810.970350404218,
+ 810.0200684046259,
+ 809.0248023736854,
+ 808.0491517360718,
+ 807.0931164917855,
+ 806.124510181337,
+ 805.1435593104228,
+ 804.1504903847393,
+ 803.1455299099835,
+ 802.1289043918518,
+ 801.100840336041,
+ 800.0615642482474,
+ 799.0055267389042,
+ 797.932954313708,
+ 796.8764864435412,
+ 795.8099390698746,
+ 794.7395410993661,
+ 793.6333325782217,
+ 792.5505900472473,
+ 791.4917665178356,
+ 790.3984914719683,
+ 789.3036308862247,
+ 788.2018618767341,
+ 787.0936374548901,
+ 785.9851865273496,
+ 784.9093750706915,
+ 783.7811954969753,
+ 782.7189743821143,
+ 781.605291172982,
+ 780.4994224103825,
+ 779.4015946000133,
+ 778.2853971776482,
+ 777.1566060385513,
+ 776.0474076422117,
+ 774.9899884481191,
+ 773.9310743164287,
+ 772.8113887063357,
+ 771.7481256652704,
+ 770.6549185711121,
+ 769.5896849304862,
+ 768.5246551449872,
+ 767.4966590408854,
+ 766.5101134792645,
+ 765.5636594259453,
+ 764.5968878116391,
+ 763.6728125211458,
+ 762.7687603342333,
+ 761.8884685948963,
+ 761.035448141432,
+ 760.2396203763639,
+ 759.4984937370289,
+ 758.750526625656,
+ 757.9927744681894,
+ 757.3133026794741,
+ 756.6556660399127,
+ 755.9898298941335,
+ 755.3709936804028,
+ 754.795306801878,
+ 754.232281591794,
+ 753.6836168428756,
+ 753.1241477722285,
+ 752.5873066206738,
+ 752.1005232280713,
+ 751.5997644339877,
+ 751.1444200320763,
+ 750.6757797457728,
+ 750.2527803573383,
+ 749.8220344740795,
+ 749.4153887969408,
+ 749.0586876259065,
+ 748.686312260666,
+ 748.3560669549963,
+ 748.0400688576447,
+ 747.7044327163956,
+ 747.4329203378594,
+ 747.1914199641249,
+ 746.9458198372818,
+ 746.7266076240945,
+ 746.4994450609562,
+ 746.3154544835933,
+ 746.113660558476,
+ 745.9185485514091,
+ 745.781240798119,
+ 745.640988470773,
+ 745.4960927766463,
+ 745.3390790277505,
+ 745.1682484313611,
+ 745.0409522298615,
+ 744.8911187115485,
+ 744.7707762349354,
+ 744.5876690297891,
+ 744.4264649255059,
+ 744.2808217625804,
+ 744.0858003577922,
+ 743.8621486329513,
+ 743.6308410155647,
+ 743.3866678746103,
+ 743.124872590459,
+ 742.8677886247972,
+ 742.5793789212934,
+ 742.2240594350081,
+ 741.8197467665447,
+ 741.3581734579759,
+ 740.863938027955,
+ 740.2708555119298,
+ 739.6310675212617,
+ 738.911708079372,
+ 738.080364221074,
+ 737.131486556801,
+ 736.092165167868,
+ 734.9899431469844,
+ 733.7997689641038,
+ 732.5294570657599,
+ 731.1490860494289,
+ 729.7146481233152,
+ 728.1971279076819,
+ 726.6270130692939,
+ 724.9497836869751,
+ 723.2083852408045,
+ 721.4138032570678,
+ 719.5126503430722,
+ 717.5696391763415,
+ 715.6175224806068,
+ 713.6040453916581,
+ 711.5686425512773,
+ 709.4597386123432,
+ 707.2048970530784,
+ 704.9405649051251,
+ 702.7061768102648,
+ 700.4767944912995,
+ 698.2010691068065,
+ 695.9513012751459,
+ 693.7085551200804,
+ 691.4747559400312,
+ 689.2576049286835,
+ 687.1238533148306,
+ 684.9901923032564,
+ 682.9293755237148,
+ 680.9171442160975,
+ 678.9825137601418,
+ 677.0690389362503,
+ 675.2705610545318,
+ 673.5042243311634,
+ 671.7459965117339,
+ 670.0628553307333,
+ 668.4036784524352,
+ 666.8558517745943,
+ 665.4363858750271,
+ 663.9971460281452,
+ 662.5189698520144,
+ 661.12075018679,
+ 659.7975039071463,
+ 658.5384719924938,
+ 657.1997100726317,
+ 655.9313914244178,
+ 654.7748986386243,
+ 653.574056037433,
+ 652.3873473917107,
+ 651.1607057916747,
+ 649.9841219505912,
+ 648.8769847560909,
+ 647.7408095312842,
+ 646.6595845884768,
+ 645.5994246754552,
+ 644.5530816099273,
+ 643.374345964726,
+ 642.1045776800537,
+ 640.8317289179075,
+ 639.5520623342929,
+ 638.2731658700471,
+ 636.9167138552793,
+ 635.5539876327148,
+ 634.2176266732369,
+ 632.8161679765509,
+ 631.4135314502424,
+ 630.0407710253178,
+ 628.5897528822118,
+ 627.2637885342083,
+ 625.9653899294838,
+ 624.7029377788123,
+ 623.2386237513147,
+ 621.7683752745655,
+ 620.6765272145869,
+ 619.4954359101409,
+ 618.5876690298039,
+ 617.8797934267326,
+ 617.22424063958,
+ 616.3680038052238,
+ 615.7366418264701,
+ 615.3223402567857,
+ 615.11105574298,
+ 614.9342453961999,
+ 614.7627579332903,
+ 614.8430995038808,
+ 615.2801195949361,
+ 615.9695576343025,
+ 616.8775283697665,
+ 617.9106435026121,
+ 618.9686063103765,
+ 620.4159324106278,
+ 622.012684318938,
+ 623.8134952093316,
+ 625.7373439941284,
+ 627.5484835442878,
+ 629.3767695756814,
+ 631.4128292825827,
+ 633.3988312305315,
+ 636.2569707127392,
+ 639.0843280707763,
+ 641.8371424040566,
+ 644.4494326031548,
+ 647.4866927902481,
+ 650.3094973837833,
+ 652.7175473962409,
+ 655.5286813709516,
+ 658.3226742269233,
+ 661.0870174097697,
+ 663.809202365029,
+ 666.4767205382393,
+ 669.0770633749386,
+ 671.597722320665,
+ 674.0261888209563,
+ 676.349954321351,
+ 678.556510267387,
+ 680.6333481046022,
+ 682.5679592785348,
+ 684.3478352347228,
+ 685.9604674187042,
+ 687.3933472760173,
+ 688.6339662521999,
+ 689.6698157927902,
+ 690.4883873433264,
+ 691.0771723493463,
+ 691.423662256388,
+ 691.5153485099895,
+ 691.3397225556891,
+ 690.8842758390248,
+ 690.1364998055345,
+ 689.0838859007564
+ ],
+ "yaxis": "y"
+ },
+ {
+ "hovertemplate": "variable=x1
index=%{x}
value=%{y}",
+ "legendgroup": "x1",
+ "line": {
+ "color": "#00cc96",
+ "dash": "solid"
+ },
+ "marker": {
+ "symbol": "circle"
+ },
+ "mode": "lines",
+ "name": "x1",
+ "showlegend": true,
+ "type": "scattergl",
+ "x": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9,
+ 10,
+ 11,
+ 12,
+ 13,
+ 14,
+ 15,
+ 16,
+ 17,
+ 18,
+ 19,
+ 20,
+ 21,
+ 22,
+ 23,
+ 24,
+ 25,
+ 26,
+ 27,
+ 28,
+ 29,
+ 30,
+ 31,
+ 32,
+ 33,
+ 34,
+ 35,
+ 36,
+ 37,
+ 38,
+ 39,
+ 40,
+ 41,
+ 42,
+ 43,
+ 44,
+ 45,
+ 46,
+ 47,
+ 48,
+ 49,
+ 50,
+ 51,
+ 52,
+ 53,
+ 54,
+ 55,
+ 56,
+ 57,
+ 58,
+ 59,
+ 60,
+ 61,
+ 62,
+ 63,
+ 64,
+ 65,
+ 66,
+ 67,
+ 68,
+ 69,
+ 70,
+ 71,
+ 72,
+ 73,
+ 74,
+ 75,
+ 76,
+ 77,
+ 78,
+ 79,
+ 80,
+ 81,
+ 82,
+ 83,
+ 84,
+ 85,
+ 86,
+ 87,
+ 88,
+ 89,
+ 90,
+ 91,
+ 92,
+ 93,
+ 94,
+ 95,
+ 96,
+ 97,
+ 98,
+ 99,
+ 100,
+ 101,
+ 102,
+ 103,
+ 104,
+ 105,
+ 106,
+ 107,
+ 108,
+ 109,
+ 110,
+ 111,
+ 112,
+ 113,
+ 114,
+ 115,
+ 116,
+ 117,
+ 118,
+ 119,
+ 120,
+ 121,
+ 122,
+ 123,
+ 124,
+ 125,
+ 126,
+ 127,
+ 128,
+ 129,
+ 130,
+ 131,
+ 132,
+ 133,
+ 134,
+ 135,
+ 136,
+ 137,
+ 138,
+ 139,
+ 140,
+ 141,
+ 142,
+ 143,
+ 144,
+ 145,
+ 146,
+ 147,
+ 148,
+ 149,
+ 150,
+ 151,
+ 152,
+ 153,
+ 154,
+ 155,
+ 156,
+ 157,
+ 158,
+ 159,
+ 160,
+ 161,
+ 162,
+ 163,
+ 164,
+ 165,
+ 166,
+ 167,
+ 168,
+ 169,
+ 170,
+ 171,
+ 172,
+ 173,
+ 174,
+ 175,
+ 176,
+ 177,
+ 178,
+ 179,
+ 180,
+ 181,
+ 182,
+ 183,
+ 184,
+ 185,
+ 186,
+ 187,
+ 188,
+ 189,
+ 190,
+ 191,
+ 192,
+ 193,
+ 194,
+ 195,
+ 196,
+ 197,
+ 198,
+ 199,
+ 200,
+ 201,
+ 202,
+ 203,
+ 204,
+ 205,
+ 206,
+ 207,
+ 208,
+ 209,
+ 210,
+ 211,
+ 212,
+ 213,
+ 214,
+ 215,
+ 216,
+ 217,
+ 218,
+ 219,
+ 220,
+ 221,
+ 222,
+ 223,
+ 224,
+ 225,
+ 226,
+ 227,
+ 228,
+ 229,
+ 230,
+ 231,
+ 232,
+ 233,
+ 234,
+ 235,
+ 236,
+ 237,
+ 238,
+ 239,
+ 240,
+ 241,
+ 242,
+ 243,
+ 244,
+ 245,
+ 246,
+ 247,
+ 248,
+ 249,
+ 250,
+ 251,
+ 252,
+ 253,
+ 254,
+ 255,
+ 256,
+ 257,
+ 258,
+ 259,
+ 260,
+ 261,
+ 262,
+ 263,
+ 264,
+ 265,
+ 266,
+ 267,
+ 268,
+ 269,
+ 270,
+ 271,
+ 272,
+ 273,
+ 274,
+ 275,
+ 276,
+ 277,
+ 278,
+ 279,
+ 280,
+ 281,
+ 282,
+ 283,
+ 284,
+ 285,
+ 286,
+ 287,
+ 288,
+ 289,
+ 290,
+ 291,
+ 292,
+ 293,
+ 294,
+ 295,
+ 296,
+ 297,
+ 298,
+ 299,
+ 300,
+ 301,
+ 302,
+ 303,
+ 304,
+ 305,
+ 306,
+ 307,
+ 308,
+ 309,
+ 310,
+ 311,
+ 312,
+ 313,
+ 314,
+ 315,
+ 316,
+ 317,
+ 318,
+ 319,
+ 320,
+ 321,
+ 322,
+ 323,
+ 324,
+ 325,
+ 326,
+ 327,
+ 328,
+ 329,
+ 330,
+ 331,
+ 332
+ ],
+ "xaxis": "x",
+ "y": [
+ 978.3584399733129,
+ 976.4120916613707,
+ 974.4761920378542,
+ 972.550171753914,
+ 970.6334614607014,
+ 968.7254918093671,
+ 966.8256934510623,
+ 964.9334970369379,
+ 963.0483332181446,
+ 961.1696326458338,
+ 959.2968259711561,
+ 957.4293438452627,
+ 955.5666169193044,
+ 953.7080758444322,
+ 951.8531512717971,
+ 950.0012738525501,
+ 948.1518742378421,
+ 946.304383078824,
+ 944.4582310266469,
+ 942.6128487324617,
+ 940.7676668474193,
+ 938.9221160226707,
+ 937.075626909367,
+ 935.2276301586589,
+ 933.3775564216976,
+ 931.5248363495255,
+ 929.5865138507148,
+ 927.6654284354169,
+ 925.7335839995295,
+ 923.7953974041369,
+ 921.8228725451371,
+ 919.885025708289,
+ 917.932999614833,
+ 916.0033975853424,
+ 914.0298081495682,
+ 912.0692427913498,
+ 910.0721647148364,
+ 908.1333212529235,
+ 906.1705361388782,
+ 904.2841060951627,
+ 902.4031801398752,
+ 900.6278284897815,
+ 898.8487847968328,
+ 896.9272237195719,
+ 894.9913474822847,
+ 893.04727173878,
+ 891.0948832362093,
+ 889.1660286755174,
+ 887.2599152867658,
+ 885.5375886202505,
+ 883.9039389339611,
+ 882.0786880789022,
+ 880.4730344967148,
+ 878.9585494574163,
+ 877.4809395455272,
+ 876.0711454392055,
+ 874.6741942058823,
+ 873.4115835012232,
+ 872.1746132414213,
+ 870.9986409657186,
+ 869.933656481359,
+ 868.9173254206329,
+ 867.919273369624,
+ 866.9941335023565,
+ 866.1048494868636,
+ 865.3111508753436,
+ 864.4956171146696,
+ 863.770345874098,
+ 863.102697682746,
+ 862.4655824592982,
+ 861.8314571110459,
+ 861.2253731680348,
+ 860.6128791138092,
+ 860.0121180546687,
+ 859.4789689459687,
+ 858.9245736029259,
+ 858.4365444289921,
+ 857.9577566874806,
+ 857.4781308748913,
+ 856.9929103715958,
+ 856.5026614418354,
+ 856.0341344083805,
+ 855.6138530883054,
+ 855.2092912635754,
+ 854.7934721057237,
+ 854.359826949548,
+ 853.9870212234842,
+ 853.5883485468663,
+ 853.1947495978527,
+ 852.804525583719,
+ 852.4215271013071,
+ 852.0817912069493,
+ 851.7298919566833,
+ 851.4280504653698,
+ 851.1412489523118,
+ 850.8666560963015,
+ 850.6127658609623,
+ 850.4087068788788,
+ 850.2511948174506,
+ 850.0778953089678,
+ 849.9174839746228,
+ 849.745135790066,
+ 849.5946227546631,
+ 849.4670773968974,
+ 849.3043557044468,
+ 849.2247842532248,
+ 849.1373530543302,
+ 849.1335251080574,
+ 849.0687897799638,
+ 849.1253935535487,
+ 849.2174228180847,
+ 849.3062357017288,
+ 849.4175632516167,
+ 849.5826859044514,
+ 849.7414210966415,
+ 849.9188203582328,
+ 850.1130716436527,
+ 850.3545493668174,
+ 850.5821649413492,
+ 850.7934268045849,
+ 851.1034904526857,
+ 851.4241772179578,
+ 851.7851819972278,
+ 852.1305125822919,
+ 852.4627737886611,
+ 852.8373915602982,
+ 853.2507418060568,
+ 853.6992004347912,
+ 854.1791433553557,
+ 854.6278964414959,
+ 855.1062085210446,
+ 855.6157783867266,
+ 856.1258918660806,
+ 856.6322453508706,
+ 857.1569457970869,
+ 857.7278760559827,
+ 858.2550454142921,
+ 858.760334322308,
+ 859.2711726198912,
+ 859.7883530769794,
+ 860.2802554983255,
+ 860.8331332532009,
+ 861.3831796868686,
+ 861.9047770050411,
+ 862.4311309428426,
+ 862.9248454097612,
+ 863.4397608098836,
+ 863.9500328432251,
+ 864.4240413145383,
+ 864.8832136627227,
+ 865.3489773266789,
+ 865.8163491810808,
+ 866.2863485015638,
+ 866.7335839995364,
+ 867.1593014563305,
+ 867.6770708282302,
+ 868.1327549886867,
+ 868.5815533759661,
+ 869.0198418989223,
+ 869.4766359372923,
+ 869.8690797072533,
+ 870.2530521641604,
+ 870.6198328386943,
+ 870.9667036624955,
+ 871.2911730729011,
+ 871.6176130828674,
+ 871.8851616117129,
+ 872.1776937188952,
+ 872.375976805715,
+ 872.5168406984417,
+ 872.6371152233461,
+ 872.6766178168364,
+ 872.7196765497634,
+ 872.6796982943104,
+ 872.6261523476296,
+ 872.5430474075405,
+ 872.43525334652,
+ 872.3018641417814,
+ 872.0886996306939,
+ 871.8858637793721,
+ 871.665586989411,
+ 871.4116514529323,
+ 871.1608869962064,
+ 870.9443475502393,
+ 870.7609005865481,
+ 870.5239529773157,
+ 870.2703345488123,
+ 870.0632856915335,
+ 869.8215361615331,
+ 869.587238668951,
+ 869.3166323132011,
+ 869.110013816746,
+ 868.9380280413039,
+ 868.771093342896,
+ 868.735463996818,
+ 868.7216471493244,
+ 868.7377970054933,
+ 868.8182518289321,
+ 868.9704863076292,
+ 869.1751115539541,
+ 869.4655598087277,
+ 869.8102108767021,
+ 870.2626786562665,
+ 870.7376158009358,
+ 871.358558517645,
+ 872.0663435184377,
+ 872.7691680444744,
+ 873.578110489377,
+ 874.4595121066275,
+ 875.3794876440121,
+ 876.3627488730318,
+ 877.439556954755,
+ 878.522072980033,
+ 879.6074656276579,
+ 880.7779111643629,
+ 881.9650728214784,
+ 883.1325737841277,
+ 884.3348207206379,
+ 885.582029037927,
+ 886.85777707299,
+ 888.1363337786909,
+ 889.4450157420422,
+ 890.7196765497612,
+ 891.9814038822035,
+ 893.3043330538721,
+ 894.5708170059432,
+ 895.8190445988673,
+ 897.1020634667915,
+ 898.3759088540029,
+ 899.6938549003459,
+ 900.8792045118885,
+ 902.0496047474542,
+ 903.2103784909137,
+ 904.387709800796,
+ 905.5374074156908,
+ 906.615280074188,
+ 907.6475118348168,
+ 908.5861514416026,
+ 909.4627058369456,
+ 910.3084554575487,
+ 911.1870937053004,
+ 912.1569910982196,
+ 913.1002740717863,
+ 913.9314820266663,
+ 914.774037916947,
+ 915.5420281319007,
+ 916.3528732246546,
+ 917.2063466895121,
+ 918.0169879271392,
+ 918.9028970077525,
+ 919.8057034133334,
+ 920.6464019569017,
+ 921.4902715802226,
+ 922.3053523295035,
+ 923.1833337107352,
+ 924.0658452058991,
+ 924.8412421571325,
+ 925.7246370245132,
+ 926.5659697840321,
+ 927.5042016805642,
+ 928.4161362657187,
+ 929.2547283063084,
+ 930.1969014019617,
+ 931.125008493855,
+ 932.1098779133207,
+ 933.1728238464107,
+ 934.0843280707419,
+ 935.1507395409902,
+ 936.2219982331462,
+ 937.2601417924568,
+ 938.3657160976503,
+ 939.5065346892378,
+ 940.5973634735815,
+ 941.8095766607432,
+ 942.9877913428422,
+ 944.1211352464413,
+ 945.3490226278087,
+ 946.5604883461713,
+ 947.6978414006007,
+ 948.8627601983083,
+ 949.9535889826521,
+ 951.1428344921765,
+ 952.2822487484449,
+ 953.4864209833763,
+ 954.6497315906381,
+ 955.6992004347794,
+ 956.6854968401339,
+ 957.6861537066538,
+ 958.6996987473117,
+ 959.6931527326792,
+ 960.7141271601859,
+ 961.6874900902637,
+ 962.4797390653252,
+ 963.2790323675518,
+ 964.1776484177453,
+ 964.9540193434738,
+ 965.8214682098127,
+ 966.2778998390683,
+ 967.0252553850601,
+ 967.5714512218854,
+ 968.1720990281775,
+ 968.436431176131,
+ 968.625925841922,
+ 968.6861990077919,
+ 968.825726516909,
+ 968.6459262949332,
+ 968.079707354527,
+ 967.2023148881067,
+ 966.4011732995083,
+ 965.36179065724,
+ 964.0689699004903,
+ 962.5075139683352,
+ 960.6622257998505,
+ 958.5179083341125,
+ 956.0593645101968,
+ 953.2713972671796,
+ 950.1388095441368,
+ 946.6464042801446,
+ 942.7789844142785,
+ 938.5213528856149,
+ 933.8583126332295,
+ 928.7746665961984,
+ 923.2552177135975,
+ 917.2847689245028,
+ 910.8481231679903,
+ 903.930083383136,
+ 896.5154525090157,
+ 888.5890334847055,
+ 880.1356292492815,
+ 871.1400427418193,
+ 861.5870769013952,
+ 851.4615346670851,
+ 840.7482189779648
+ ],
+ "yaxis": "y"
+ },
+ {
+ "hovertemplate": "variable=y1
index=%{x}
value=%{y}",
+ "legendgroup": "y1",
+ "line": {
+ "color": "#ab63fa",
+ "dash": "solid"
+ },
+ "marker": {
+ "symbol": "circle"
+ },
+ "mode": "lines",
+ "name": "y1",
+ "showlegend": true,
+ "type": "scattergl",
+ "x": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9,
+ 10,
+ 11,
+ 12,
+ 13,
+ 14,
+ 15,
+ 16,
+ 17,
+ 18,
+ 19,
+ 20,
+ 21,
+ 22,
+ 23,
+ 24,
+ 25,
+ 26,
+ 27,
+ 28,
+ 29,
+ 30,
+ 31,
+ 32,
+ 33,
+ 34,
+ 35,
+ 36,
+ 37,
+ 38,
+ 39,
+ 40,
+ 41,
+ 42,
+ 43,
+ 44,
+ 45,
+ 46,
+ 47,
+ 48,
+ 49,
+ 50,
+ 51,
+ 52,
+ 53,
+ 54,
+ 55,
+ 56,
+ 57,
+ 58,
+ 59,
+ 60,
+ 61,
+ 62,
+ 63,
+ 64,
+ 65,
+ 66,
+ 67,
+ 68,
+ 69,
+ 70,
+ 71,
+ 72,
+ 73,
+ 74,
+ 75,
+ 76,
+ 77,
+ 78,
+ 79,
+ 80,
+ 81,
+ 82,
+ 83,
+ 84,
+ 85,
+ 86,
+ 87,
+ 88,
+ 89,
+ 90,
+ 91,
+ 92,
+ 93,
+ 94,
+ 95,
+ 96,
+ 97,
+ 98,
+ 99,
+ 100,
+ 101,
+ 102,
+ 103,
+ 104,
+ 105,
+ 106,
+ 107,
+ 108,
+ 109,
+ 110,
+ 111,
+ 112,
+ 113,
+ 114,
+ 115,
+ 116,
+ 117,
+ 118,
+ 119,
+ 120,
+ 121,
+ 122,
+ 123,
+ 124,
+ 125,
+ 126,
+ 127,
+ 128,
+ 129,
+ 130,
+ 131,
+ 132,
+ 133,
+ 134,
+ 135,
+ 136,
+ 137,
+ 138,
+ 139,
+ 140,
+ 141,
+ 142,
+ 143,
+ 144,
+ 145,
+ 146,
+ 147,
+ 148,
+ 149,
+ 150,
+ 151,
+ 152,
+ 153,
+ 154,
+ 155,
+ 156,
+ 157,
+ 158,
+ 159,
+ 160,
+ 161,
+ 162,
+ 163,
+ 164,
+ 165,
+ 166,
+ 167,
+ 168,
+ 169,
+ 170,
+ 171,
+ 172,
+ 173,
+ 174,
+ 175,
+ 176,
+ 177,
+ 178,
+ 179,
+ 180,
+ 181,
+ 182,
+ 183,
+ 184,
+ 185,
+ 186,
+ 187,
+ 188,
+ 189,
+ 190,
+ 191,
+ 192,
+ 193,
+ 194,
+ 195,
+ 196,
+ 197,
+ 198,
+ 199,
+ 200,
+ 201,
+ 202,
+ 203,
+ 204,
+ 205,
+ 206,
+ 207,
+ 208,
+ 209,
+ 210,
+ 211,
+ 212,
+ 213,
+ 214,
+ 215,
+ 216,
+ 217,
+ 218,
+ 219,
+ 220,
+ 221,
+ 222,
+ 223,
+ 224,
+ 225,
+ 226,
+ 227,
+ 228,
+ 229,
+ 230,
+ 231,
+ 232,
+ 233,
+ 234,
+ 235,
+ 236,
+ 237,
+ 238,
+ 239,
+ 240,
+ 241,
+ 242,
+ 243,
+ 244,
+ 245,
+ 246,
+ 247,
+ 248,
+ 249,
+ 250,
+ 251,
+ 252,
+ 253,
+ 254,
+ 255,
+ 256,
+ 257,
+ 258,
+ 259,
+ 260,
+ 261,
+ 262,
+ 263,
+ 264,
+ 265,
+ 266,
+ 267,
+ 268,
+ 269,
+ 270,
+ 271,
+ 272,
+ 273,
+ 274,
+ 275,
+ 276,
+ 277,
+ 278,
+ 279,
+ 280,
+ 281,
+ 282,
+ 283,
+ 284,
+ 285,
+ 286,
+ 287,
+ 288,
+ 289,
+ 290,
+ 291,
+ 292,
+ 293,
+ 294,
+ 295,
+ 296,
+ 297,
+ 298,
+ 299,
+ 300,
+ 301,
+ 302,
+ 303,
+ 304,
+ 305,
+ 306,
+ 307,
+ 308,
+ 309,
+ 310,
+ 311,
+ 312,
+ 313,
+ 314,
+ 315,
+ 316,
+ 317,
+ 318,
+ 319,
+ 320,
+ 321,
+ 322,
+ 323,
+ 324,
+ 325,
+ 326,
+ 327,
+ 328,
+ 329,
+ 330,
+ 331,
+ 332
+ ],
+ "xaxis": "x",
+ "y": [
+ 750.360738780273,
+ 752.2714192208091,
+ 754.0859316150267,
+ 755.8070858241704,
+ 757.4376917094853,
+ 758.9805591322164,
+ 760.4384979536085,
+ 761.8143180349066,
+ 763.1108292373557,
+ 764.3308414222005,
+ 765.4771644506862,
+ 766.5526081840576,
+ 767.5599824835597,
+ 768.5020972104373,
+ 769.3817622259356,
+ 770.2017873912993,
+ 770.9649825677733,
+ 771.6741576166027,
+ 772.3321223990323,
+ 772.9416867763072,
+ 773.5056606096721,
+ 774.0268537603721,
+ 774.5080760896521,
+ 774.9521374587571,
+ 775.3618477289319,
+ 775.7400167613312,
+ 776.1498561687922,
+ 776.5293891140457,
+ 776.9160116876033,
+ 777.262112392036,
+ 777.5678044801921,
+ 777.8658406758022,
+ 778.1627896440688,
+ 778.4598971663228,
+ 778.7854991052117,
+ 779.0180978050688,
+ 779.2779451402293,
+ 779.5412353619785,
+ 779.8321139775755,
+ 780.116355976262,
+ 780.3335522887492,
+ 780.5413939159657,
+ 780.7331989398621,
+ 780.9085143490447,
+ 781.0731160387771,
+ 781.2274570204528,
+ 781.3724433168583,
+ 781.4712451017231,
+ 781.5138961243964,
+ 781.4964325351871,
+ 781.4151169901012,
+ 781.3579016511354,
+ 781.2364945977481,
+ 781.0485175201246,
+ 780.8184556840694,
+ 780.5121973316718,
+ 780.1340460711677,
+ 779.7742191215199,
+ 779.3409137238891,
+ 778.7749665903191,
+ 778.2265509976669,
+ 777.6105461051437,
+ 776.9219687874245,
+ 776.1826994948017,
+ 775.3942105143042,
+ 774.5317900744301,
+ 773.6566400144062,
+ 772.7125416203315,
+ 771.7025527191109,
+ 770.6890076784533,
+ 769.6758703480496,
+ 768.6087340595719,
+ 767.4924686854979,
+ 766.3645835691874,
+ 765.1449409951767,
+ 763.897913882445,
+ 762.6232757252956,
+ 761.3210265237283,
+ 759.9114815736729,
+ 758.5507033000996,
+ 757.1858705745566,
+ 755.8234388093977,
+ 754.4967269925959,
+ 753.20709415833,
+ 751.9239393869879,
+ 750.6168882646523,
+ 749.3203923077791,
+ 748.0691295385205,
+ 746.8600421299725,
+ 745.5724251964067,
+ 744.2946839112134,
+ 743.0563999183713,
+ 741.8019207682208,
+ 740.4755940111029,
+ 739.1718272213684,
+ 737.8937914787696,
+ 736.6124714035699,
+ 735.3579016511408,
+ 734.0688803822561,
+ 732.8020793222095,
+ 731.5287095969611,
+ 730.2790323675788,
+ 729.0187093704556,
+ 727.74581530717,
+ 726.4908378444869,
+ 725.1930281545734,
+ 723.856236834272,
+ 722.6288251148674,
+ 721.3266212144396,
+ 720.0336134452941,
+ 718.7807424855896,
+ 717.4813019546604,
+ 716.1664590363611,
+ 714.8349679493605,
+ 713.4798070170632,
+ 712.0730933882156,
+ 710.6781807061619,
+ 709.20813608454,
+ 707.7260866609969,
+ 706.2627466079948,
+ 704.7309565334746,
+ 703.1612041042011,
+ 701.5837504812429,
+ 700.0288568256675,
+ 698.4945978390541,
+ 696.9584135540196,
+ 695.4301569683666,
+ 693.8548551495261,
+ 692.2685451538299,
+ 690.7985005322078,
+ 689.3306983169823,
+ 687.895626174918,
+ 686.4704976329353,
+ 685.0855738521025,
+ 683.679652993193,
+ 682.2559061359598,
+ 680.8761013838703,
+ 679.516319735362,
+ 678.1790527530976,
+ 676.8283766335934,
+ 675.551790527453,
+ 674.2922829508375,
+ 673.019252984134,
+ 671.7931096966305,
+ 670.6476250876926,
+ 669.5577476272747,
+ 668.4660128201444,
+ 667.4059661599711,
+ 666.378513669541,
+ 665.4376090057888,
+ 664.4660581212842,
+ 663.5555505220182,
+ 662.647262678579,
+ 661.7942422251148,
+ 660.9638496907424,
+ 660.1556320640694,
+ 659.3689098280054,
+ 658.6409658202136,
+ 657.8794310176133,
+ 657.1626310900954,
+ 656.4299304626746,
+ 655.6792905840816,
+ 654.94063285684,
+ 654.2436521777759,
+ 653.5532175133441,
+ 652.8073342543803,
+ 652.126254275219,
+ 651.42089288538,
+ 650.7788624883156,
+ 650.1699019229575,
+ 649.5579741329736,
+ 648.9982785566301,
+ 648.4339169629359,
+ 647.9200887901575,
+ 647.4149810866987,
+ 646.8767809009643,
+ 646.3606876712195,
+ 645.8364402363966,
+ 645.3594645404579,
+ 644.8733153638061,
+ 644.4014586966111,
+ 643.929398174289,
+ 643.4220027632945,
+ 642.9089673604541,
+ 642.3287503679967,
+ 641.7643208225938,
+ 641.2134136672789,
+ 640.6418038912932,
+ 640.1011800946047,
+ 639.525810324055,
+ 638.9358762372128,
+ 638.2929624679316,
+ 637.6179301908699,
+ 636.9587306620018,
+ 636.1662098801041,
+ 635.3271874786909,
+ 634.4849713469555,
+ 633.5714512219242,
+ 632.6162087475761,
+ 631.5846791546072,
+ 630.41033771992,
+ 629.2095857210073,
+ 627.9492174227449,
+ 626.5967066070981,
+ 625.1199800674258,
+ 623.5728782078143,
+ 621.8975967744864,
+ 620.1280210196563,
+ 618.2718521370091,
+ 616.3581055062816,
+ 614.3250130240059,
+ 612.2082719879692,
+ 610.0173956374291,
+ 607.7889872929595,
+ 605.4688667919293,
+ 603.0887675824343,
+ 600.6866520192282,
+ 598.2154748691231,
+ 595.6874674397367,
+ 593.1417246143047,
+ 590.5529683570853,
+ 587.928560103218,
+ 585.3027248634621,
+ 582.6568665201249,
+ 579.9726154612113,
+ 577.2258261794611,
+ 574.5368638020576,
+ 571.822985798026,
+ 569.1519626717949,
+ 566.4415049037822,
+ 563.8985707489885,
+ 561.2857142856487,
+ 558.6926997213328,
+ 556.1504677341986,
+ 553.6371378739528,
+ 551.1901062311074,
+ 548.7823959771947,
+ 546.4138938593668,
+ 544.0580760605494,
+ 541.6884187636687,
+ 539.3638587509847,
+ 536.9988221703148,
+ 534.6844322634091,
+ 532.3881628122326,
+ 530.0983487734098,
+ 527.8739269292006,
+ 525.6885999682279,
+ 523.4665564338333,
+ 521.2556343291426,
+ 518.9440757434444,
+ 516.5965933542625,
+ 514.3251715780051,
+ 512.0329112776589,
+ 509.62868921147424,
+ 507.23026569112295,
+ 504.7784774286484,
+ 502.27298466550565,
+ 499.798908242484,
+ 497.3237219415489,
+ 494.7942648757039,
+ 492.21042379210087,
+ 489.6251330720396,
+ 486.95836825290473,
+ 484.3334390359352,
+ 481.65876916798834,
+ 478.9131577158607,
+ 476.08072663021926,
+ 473.2039683797495,
+ 470.29828535182173,
+ 467.46431402744327,
+ 464.56671725288464,
+ 461.732089061986,
+ 458.909873383262,
+ 456.0814740990204,
+ 453.31907857477336,
+ 450.6622347051502,
+ 448.0115291399056,
+ 445.4380167160683,
+ 442.97411039882485,
+ 440.54544836797504,
+ 438.3071870257025,
+ 436.0222202087874,
+ 433.81770821531103,
+ 431.65453351146743,
+ 429.51908310489,
+ 427.59439624901574,
+ 425.8690344061656,
+ 424.2991460734743,
+ 422.6599696481873,
+ 421.20288115241186,
+ 419.8988652064109,
+ 418.71845341905464,
+ 417.8295091621066,
+ 417.04627511377043,
+ 416.4717887154376,
+ 415.9140637386545,
+ 415.5933316722429,
+ 415.81748170961646,
+ 415.5860834899512,
+ 415.4230899906647,
+ 415.37781150191086,
+ 415.2278647307495,
+ 415.139754014765,
+ 415.0797300051612,
+ 415.0371469341969,
+ 414.92144782436435,
+ 414.7861333212046,
+ 414.7852499489878,
+ 414.7743327229294,
+ 414.72082793123684,
+ 414.6143738450063,
+ 414.4446087352856,
+ 414.2011708731225,
+ 413.8736985295648,
+ 413.4518299756604,
+ 412.9252034824571,
+ 412.2834573210027,
+ 411.51622976234495,
+ 410.61315907753175,
+ 409.56388353761093,
+ 408.3580414136302,
+ 406.9852709766375,
+ 405.43521049768054,
+ 403.6974982478072,
+ 401.7617724980653,
+ 399.6176715195026,
+ 397.25483358316694,
+ 394.6628969601062,
+ 391.8314999213681,
+ 388.7502807380005,
+ 385.40887768105125,
+ 381.7969290215681,
+ 377.9040730305989
+ ],
+ "yaxis": "y"
+ },
+ {
+ "hovertemplate": "variable=x2
index=%{x}
value=%{y}",
+ "legendgroup": "x2",
+ "line": {
+ "color": "#FFA15A",
+ "dash": "solid"
+ },
+ "marker": {
+ "symbol": "circle"
+ },
+ "mode": "lines",
+ "name": "x2",
+ "showlegend": true,
+ "type": "scattergl",
+ "x": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9,
+ 10,
+ 11,
+ 12,
+ 13,
+ 14,
+ 15,
+ 16,
+ 17,
+ 18,
+ 19,
+ 20,
+ 21,
+ 22,
+ 23,
+ 24,
+ 25,
+ 26,
+ 27,
+ 28,
+ 29,
+ 30,
+ 31,
+ 32,
+ 33,
+ 34,
+ 35,
+ 36,
+ 37,
+ 38,
+ 39,
+ 40,
+ 41,
+ 42,
+ 43,
+ 44,
+ 45,
+ 46,
+ 47,
+ 48,
+ 49,
+ 50,
+ 51,
+ 52,
+ 53,
+ 54,
+ 55,
+ 56,
+ 57,
+ 58,
+ 59,
+ 60,
+ 61,
+ 62,
+ 63,
+ 64,
+ 65,
+ 66,
+ 67,
+ 68,
+ 69,
+ 70,
+ 71,
+ 72,
+ 73,
+ 74,
+ 75,
+ 76,
+ 77,
+ 78,
+ 79,
+ 80,
+ 81,
+ 82,
+ 83,
+ 84,
+ 85,
+ 86,
+ 87,
+ 88,
+ 89,
+ 90,
+ 91,
+ 92,
+ 93,
+ 94,
+ 95,
+ 96,
+ 97,
+ 98,
+ 99,
+ 100,
+ 101,
+ 102,
+ 103,
+ 104,
+ 105,
+ 106,
+ 107,
+ 108,
+ 109,
+ 110,
+ 111,
+ 112,
+ 113,
+ 114,
+ 115,
+ 116,
+ 117,
+ 118,
+ 119,
+ 120,
+ 121,
+ 122,
+ 123,
+ 124,
+ 125,
+ 126,
+ 127,
+ 128,
+ 129,
+ 130,
+ 131,
+ 132,
+ 133,
+ 134,
+ 135,
+ 136,
+ 137,
+ 138,
+ 139,
+ 140,
+ 141,
+ 142,
+ 143,
+ 144,
+ 145,
+ 146,
+ 147,
+ 148,
+ 149,
+ 150,
+ 151,
+ 152,
+ 153,
+ 154,
+ 155,
+ 156,
+ 157,
+ 158,
+ 159,
+ 160,
+ 161,
+ 162,
+ 163,
+ 164,
+ 165,
+ 166,
+ 167,
+ 168,
+ 169,
+ 170,
+ 171,
+ 172,
+ 173,
+ 174,
+ 175,
+ 176,
+ 177,
+ 178,
+ 179,
+ 180,
+ 181,
+ 182,
+ 183,
+ 184,
+ 185,
+ 186,
+ 187,
+ 188,
+ 189,
+ 190,
+ 191,
+ 192,
+ 193,
+ 194,
+ 195,
+ 196,
+ 197,
+ 198,
+ 199,
+ 200,
+ 201,
+ 202,
+ 203,
+ 204,
+ 205,
+ 206,
+ 207,
+ 208,
+ 209,
+ 210,
+ 211,
+ 212,
+ 213,
+ 214,
+ 215,
+ 216,
+ 217,
+ 218,
+ 219,
+ 220,
+ 221,
+ 222,
+ 223,
+ 224,
+ 225,
+ 226,
+ 227,
+ 228,
+ 229,
+ 230,
+ 231,
+ 232,
+ 233,
+ 234,
+ 235,
+ 236,
+ 237,
+ 238,
+ 239,
+ 240,
+ 241,
+ 242,
+ 243,
+ 244,
+ 245,
+ 246,
+ 247,
+ 248,
+ 249,
+ 250,
+ 251,
+ 252,
+ 253,
+ 254,
+ 255,
+ 256,
+ 257,
+ 258,
+ 259,
+ 260,
+ 261,
+ 262,
+ 263,
+ 264,
+ 265,
+ 266,
+ 267,
+ 268,
+ 269,
+ 270,
+ 271,
+ 272,
+ 273,
+ 274,
+ 275,
+ 276,
+ 277,
+ 278,
+ 279,
+ 280,
+ 281,
+ 282,
+ 283,
+ 284,
+ 285,
+ 286,
+ 287,
+ 288,
+ 289,
+ 290,
+ 291,
+ 292,
+ 293,
+ 294,
+ 295,
+ 296,
+ 297,
+ 298,
+ 299,
+ 300,
+ 301,
+ 302,
+ 303,
+ 304,
+ 305,
+ 306,
+ 307,
+ 308,
+ 309,
+ 310,
+ 311,
+ 312,
+ 313,
+ 314,
+ 315,
+ 316,
+ 317,
+ 318,
+ 319,
+ 320,
+ 321,
+ 322,
+ 323,
+ 324,
+ 325,
+ 326,
+ 327,
+ 328,
+ 329,
+ 330,
+ 331,
+ 332
+ ],
+ "xaxis": "x",
+ "y": [
+ 1207.725019051324,
+ 1206.636130162435,
+ 1205.514103451412,
+ 1204.3597770635433,
+ 1203.1739891441182,
+ 1201.957577838425,
+ 1200.7113812917528,
+ 1199.4362376493903,
+ 1198.132985056626,
+ 1196.8024616587488,
+ 1195.4455056010474,
+ 1194.0629550288108,
+ 1192.6556480873276,
+ 1191.2244229218863,
+ 1189.7701176777762,
+ 1188.2935705002856,
+ 1186.7956195347033,
+ 1185.2771029263183,
+ 1183.7388588204192,
+ 1182.1817253622946,
+ 1180.6065406972336,
+ 1179.0141429705247,
+ 1177.405370327457,
+ 1175.7810609133187,
+ 1174.1420528733988,
+ 1172.4891843528494,
+ 1170.8218759200427,
+ 1169.110489478674,
+ 1167.4204172233572,
+ 1165.6991777841854,
+ 1164.006387460509,
+ 1162.2837889871575,
+ 1160.5377245236364,
+ 1158.8009467936765,
+ 1157.0680196605595,
+ 1155.253595777799,
+ 1153.4221613172226,
+ 1151.5789259098524,
+ 1149.7879227161222,
+ 1147.8980724363878,
+ 1145.9669528187294,
+ 1144.0574644950987,
+ 1142.1410450971507,
+ 1140.5130354027071,
+ 1139.003963849558,
+ 1137.5662189402733,
+ 1136.1785997416507,
+ 1134.8785023442015,
+ 1133.6649074722907,
+ 1132.2448526579124,
+ 1130.8603365873332,
+ 1129.8375274636837,
+ 1128.5633649684976,
+ 1127.3322159050986,
+ 1126.1718498718928,
+ 1125.0509864321775,
+ 1123.9438945388163,
+ 1122.8892160636528,
+ 1121.8605404424613,
+ 1120.8900541347307,
+ 1120.0363541641766,
+ 1119.2343880947296,
+ 1118.4246528798894,
+ 1117.6650660262803,
+ 1117.007542639567,
+ 1116.3594871909727,
+ 1115.7575030010703,
+ 1115.2113298148147,
+ 1114.654103150564,
+ 1114.1306031845402,
+ 1113.6378853426863,
+ 1113.1403655800646,
+ 1112.6934698406367,
+ 1112.2078869282263,
+ 1111.7650003396288,
+ 1111.3014564314994,
+ 1110.8124985842096,
+ 1110.331106027187,
+ 1109.8900314841624,
+ 1109.4305646785722,
+ 1109.0116423926768,
+ 1108.5683254432556,
+ 1108.1266846359895,
+ 1107.7449772360483,
+ 1107.3311739788962,
+ 1106.878479693635,
+ 1106.5035221634532,
+ 1106.092957937763,
+ 1105.736777729831,
+ 1105.3156356881086,
+ 1104.9190695144694,
+ 1104.5509298057557,
+ 1104.182654193624,
+ 1103.7854538040344,
+ 1103.3949126819252,
+ 1103.0406124712752,
+ 1102.6930847809535,
+ 1102.3874606445065,
+ 1102.1264581302933,
+ 1101.8479693763013,
+ 1101.607533579341,
+ 1101.3483657612705,
+ 1101.1313280027707,
+ 1100.958232349415,
+ 1100.771840811668,
+ 1100.6267865635539,
+ 1100.4596027088799,
+ 1100.3626582707268,
+ 1100.3104487076564,
+ 1100.3041065481516,
+ 1100.3447643206944,
+ 1100.395365693319,
+ 1100.365353688517,
+ 1100.4376543068774,
+ 1100.494620489577,
+ 1100.557113411274,
+ 1100.619130671008,
+ 1100.718408117836,
+ 1100.8602686356278,
+ 1100.95857210796,
+ 1101.071236041458,
+ 1101.2501755417863,
+ 1101.4294321500902,
+ 1101.6342839021113,
+ 1101.8367346937491,
+ 1102.0351989851258,
+ 1102.2545018005917,
+ 1102.4928310945734,
+ 1102.7541507167618,
+ 1102.9833744817395,
+ 1103.2697003328346,
+ 1103.5520396836691,
+ 1103.8547645471997,
+ 1104.1223357266147,
+ 1104.3844481187414,
+ 1104.6647942194456,
+ 1104.9337923847495,
+ 1105.1882715349,
+ 1105.4572470496341,
+ 1105.7106842735805,
+ 1106.0306462206233,
+ 1106.3282747059798,
+ 1106.6325851093864,
+ 1106.8869057055492,
+ 1107.237898933029,
+ 1107.6233436769642,
+ 1107.9812453281909,
+ 1108.3142087022195,
+ 1108.6836621439736,
+ 1109.0540216085142,
+ 1109.4487530860106,
+ 1109.8324990372214,
+ 1110.2080907833538,
+ 1110.5783596456154,
+ 1110.966998119873,
+ 1111.3979252076892,
+ 1111.804049921726,
+ 1112.2097442749389,
+ 1112.586332646136,
+ 1112.931776484049,
+ 1113.2440372374067,
+ 1113.5477134248626,
+ 1113.802804140394,
+ 1114.0723232688001,
+ 1114.3282747059789,
+ 1114.5637500281832,
+ 1114.745430247441,
+ 1114.9256834808095,
+ 1115.0774196469742,
+ 1115.2004122402377,
+ 1115.2738000859422,
+ 1115.3091349746144,
+ 1115.274003941069,
+ 1115.1948175495315,
+ 1115.0713492943046,
+ 1114.9091485649562,
+ 1114.7404018209756,
+ 1114.5326960971768,
+ 1114.2860313935596,
+ 1113.9795465354655,
+ 1113.6836168428335,
+ 1113.371605245742,
+ 1113.0435117441905,
+ 1112.6993363381794,
+ 1112.3772678881578,
+ 1112.0300346552417,
+ 1111.5835013249286,
+ 1111.198826700362,
+ 1110.8486941945293,
+ 1110.538200185605,
+ 1110.2458039818407,
+ 1109.9439624905272,
+ 1109.6695055379348,
+ 1109.4323993747148,
+ 1109.3014337809302,
+ 1109.1094249019068,
+ 1108.9242564949213,
+ 1108.7864957302384,
+ 1108.7420326619922,
+ 1108.771704908249,
+ 1108.8501211804185,
+ 1108.9836236380052,
+ 1109.284423203114,
+ 1109.6935830934854,
+ 1110.1901288816118,
+ 1110.7734943032522,
+ 1111.4368841875075,
+ 1112.1464132821643,
+ 1112.9589798182124,
+ 1113.8455684159155,
+ 1114.8091236493296,
+ 1115.8521370811175,
+ 1116.9442342973623,
+ 1118.054361367058,
+ 1119.2744343018921,
+ 1120.5398536771893,
+ 1121.8443905862925,
+ 1123.1336383608739,
+ 1124.51765611892,
+ 1125.9291263673967,
+ 1127.4181521663954,
+ 1129.0079730003893,
+ 1130.6951912839288,
+ 1132.3849464312705,
+ 1134.1322113749836,
+ 1135.9002695416461,
+ 1137.6901402068934,
+ 1139.4699766697804,
+ 1141.2871639220396,
+ 1143.1298104145985,
+ 1144.9707128132936,
+ 1146.7879906678315,
+ 1148.633219325332,
+ 1150.4130104870794,
+ 1152.1303087271301,
+ 1153.8462026318616,
+ 1155.5090036013057,
+ 1157.3080930484052,
+ 1159.0998663615037,
+ 1160.9322747965757,
+ 1162.7407189289454,
+ 1164.5571587124057,
+ 1166.3806881241703,
+ 1168.1890869554006,
+ 1170.0451425851998,
+ 1171.8342657816477,
+ 1173.6618496453818,
+ 1175.6004213004585,
+ 1177.6519060452995,
+ 1179.6051326189477,
+ 1181.7936533102427,
+ 1184.0886090283789,
+ 1186.5229790027834,
+ 1188.9410405670315,
+ 1191.1881809326112,
+ 1193.5055607147128,
+ 1195.980679063939,
+ 1198.5711567644528,
+ 1201.378898729163,
+ 1204.1635144622483,
+ 1206.9691952251192,
+ 1209.8922738905471,
+ 1212.851480214586,
+ 1215.9948356699754,
+ 1219.2341615890216,
+ 1222.4446533328887,
+ 1225.8633038119478,
+ 1229.473578110346,
+ 1233.2229948581767,
+ 1237.159392058566,
+ 1241.2600058890032,
+ 1245.4221613172117,
+ 1249.607329724197,
+ 1253.9683118528967,
+ 1258.016829373112,
+ 1262.0310992319985,
+ 1266.3689551290738,
+ 1270.8732247614544,
+ 1275.4369294886278,
+ 1280.0651883393373,
+ 1282.460780538481,
+ 1287.3149561709974,
+ 1292.1691997552227,
+ 1296.8774151168386,
+ 1301.566309542533,
+ 1306.4360461164074,
+ 1311.241930734405,
+ 1316.189902375891,
+ 1320.8543568369205,
+ 1325.7344447211299,
+ 1330.773652857214,
+ 1335.8158282179238,
+ 1340.6331513736006,
+ 1345.4362046703905,
+ 1350.3267797683536,
+ 1355.218872454484,
+ 1360.177444562572,
+ 1366.946725859996,
+ 1371.374617771477,
+ 1375.9770323222021,
+ 1380.9384131009285,
+ 1385.4190355385822,
+ 1389.7903236764785,
+ 1393.999479036735,
+ 1398.506036376652,
+ 1402.4550499443426,
+ 1406.905547124346,
+ 1411.1115767059898,
+ 1415.1551626746489,
+ 1419.0510943322658,
+ 1422.7886749087636,
+ 1426.3572076339,
+ 1429.7459957374335,
+ 1432.9443424491226,
+ 1435.9415509987252,
+ 1438.726924616,
+ 1441.2897665307048,
+ 1443.6193799725984,
+ 1445.7050681714386,
+ 1447.536134356984,
+ 1449.1018817589925,
+ 1450.3916136072228,
+ 1451.394633131433,
+ 1452.1002435613814,
+ 1452.4977481268265,
+ 1452.576450057526,
+ 1452.325652583239,
+ 1451.734658933723,
+ 1450.7927723387365,
+ 1449.489296028038,
+ 1447.813533231386,
+ 1445.754787178538,
+ 1443.3023610992527
+ ],
+ "yaxis": "y"
+ },
+ {
+ "hovertemplate": "variable=y2
index=%{x}
value=%{y}",
+ "legendgroup": "y2",
+ "line": {
+ "color": "#19d3f3",
+ "dash": "solid"
+ },
+ "marker": {
+ "symbol": "circle"
+ },
+ "mode": "lines",
+ "name": "y2",
+ "showlegend": true,
+ "type": "scattergl",
+ "x": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9,
+ 10,
+ 11,
+ 12,
+ 13,
+ 14,
+ 15,
+ 16,
+ 17,
+ 18,
+ 19,
+ 20,
+ 21,
+ 22,
+ 23,
+ 24,
+ 25,
+ 26,
+ 27,
+ 28,
+ 29,
+ 30,
+ 31,
+ 32,
+ 33,
+ 34,
+ 35,
+ 36,
+ 37,
+ 38,
+ 39,
+ 40,
+ 41,
+ 42,
+ 43,
+ 44,
+ 45,
+ 46,
+ 47,
+ 48,
+ 49,
+ 50,
+ 51,
+ 52,
+ 53,
+ 54,
+ 55,
+ 56,
+ 57,
+ 58,
+ 59,
+ 60,
+ 61,
+ 62,
+ 63,
+ 64,
+ 65,
+ 66,
+ 67,
+ 68,
+ 69,
+ 70,
+ 71,
+ 72,
+ 73,
+ 74,
+ 75,
+ 76,
+ 77,
+ 78,
+ 79,
+ 80,
+ 81,
+ 82,
+ 83,
+ 84,
+ 85,
+ 86,
+ 87,
+ 88,
+ 89,
+ 90,
+ 91,
+ 92,
+ 93,
+ 94,
+ 95,
+ 96,
+ 97,
+ 98,
+ 99,
+ 100,
+ 101,
+ 102,
+ 103,
+ 104,
+ 105,
+ 106,
+ 107,
+ 108,
+ 109,
+ 110,
+ 111,
+ 112,
+ 113,
+ 114,
+ 115,
+ 116,
+ 117,
+ 118,
+ 119,
+ 120,
+ 121,
+ 122,
+ 123,
+ 124,
+ 125,
+ 126,
+ 127,
+ 128,
+ 129,
+ 130,
+ 131,
+ 132,
+ 133,
+ 134,
+ 135,
+ 136,
+ 137,
+ 138,
+ 139,
+ 140,
+ 141,
+ 142,
+ 143,
+ 144,
+ 145,
+ 146,
+ 147,
+ 148,
+ 149,
+ 150,
+ 151,
+ 152,
+ 153,
+ 154,
+ 155,
+ 156,
+ 157,
+ 158,
+ 159,
+ 160,
+ 161,
+ 162,
+ 163,
+ 164,
+ 165,
+ 166,
+ 167,
+ 168,
+ 169,
+ 170,
+ 171,
+ 172,
+ 173,
+ 174,
+ 175,
+ 176,
+ 177,
+ 178,
+ 179,
+ 180,
+ 181,
+ 182,
+ 183,
+ 184,
+ 185,
+ 186,
+ 187,
+ 188,
+ 189,
+ 190,
+ 191,
+ 192,
+ 193,
+ 194,
+ 195,
+ 196,
+ 197,
+ 198,
+ 199,
+ 200,
+ 201,
+ 202,
+ 203,
+ 204,
+ 205,
+ 206,
+ 207,
+ 208,
+ 209,
+ 210,
+ 211,
+ 212,
+ 213,
+ 214,
+ 215,
+ 216,
+ 217,
+ 218,
+ 219,
+ 220,
+ 221,
+ 222,
+ 223,
+ 224,
+ 225,
+ 226,
+ 227,
+ 228,
+ 229,
+ 230,
+ 231,
+ 232,
+ 233,
+ 234,
+ 235,
+ 236,
+ 237,
+ 238,
+ 239,
+ 240,
+ 241,
+ 242,
+ 243,
+ 244,
+ 245,
+ 246,
+ 247,
+ 248,
+ 249,
+ 250,
+ 251,
+ 252,
+ 253,
+ 254,
+ 255,
+ 256,
+ 257,
+ 258,
+ 259,
+ 260,
+ 261,
+ 262,
+ 263,
+ 264,
+ 265,
+ 266,
+ 267,
+ 268,
+ 269,
+ 270,
+ 271,
+ 272,
+ 273,
+ 274,
+ 275,
+ 276,
+ 277,
+ 278,
+ 279,
+ 280,
+ 281,
+ 282,
+ 283,
+ 284,
+ 285,
+ 286,
+ 287,
+ 288,
+ 289,
+ 290,
+ 291,
+ 292,
+ 293,
+ 294,
+ 295,
+ 296,
+ 297,
+ 298,
+ 299,
+ 300,
+ 301,
+ 302,
+ 303,
+ 304,
+ 305,
+ 306,
+ 307,
+ 308,
+ 309,
+ 310,
+ 311,
+ 312,
+ 313,
+ 314,
+ 315,
+ 316,
+ 317,
+ 318,
+ 319,
+ 320,
+ 321,
+ 322,
+ 323,
+ 324,
+ 325,
+ 326,
+ 327,
+ 328,
+ 329,
+ 330,
+ 331,
+ 332
+ ],
+ "xaxis": "x",
+ "y": [
+ 744.2818836936489,
+ 745.2163079326236,
+ 746.1588219871085,
+ 747.1086325902725,
+ 748.0649464752846,
+ 749.0269703753138,
+ 749.9939110235292,
+ 750.9649751530998,
+ 751.9393694971944,
+ 752.9163007889822,
+ 753.894975761632,
+ 754.8746011483131,
+ 755.8543836821942,
+ 756.8335300964444,
+ 757.8112471242328,
+ 758.7867414987282,
+ 759.7592199530998,
+ 760.7278892205164,
+ 761.6919560341472,
+ 762.6506271271611,
+ 763.6031092327271,
+ 764.5486090840141,
+ 765.4863334141912,
+ 766.4154889564275,
+ 767.3352824438917,
+ 768.2449206096637,
+ 769.1215656072854,
+ 769.9591383722403,
+ 770.7920904209842,
+ 771.6493238804056,
+ 772.5220050283364,
+ 773.4133049445289,
+ 774.2411606150991,
+ 775.0888808352627,
+ 775.8954902714897,
+ 776.685700695282,
+ 777.4254003487282,
+ 778.1453034042897,
+ 778.9029876100474,
+ 779.6061971957686,
+ 780.2483634962509,
+ 780.8611067067425,
+ 781.4762735281881,
+ 782.0555618472894,
+ 782.6199460915527,
+ 783.1375795600346,
+ 783.6034791274086,
+ 784.0071122787823,
+ 784.4620489704399,
+ 784.8849804071656,
+ 785.2139119797946,
+ 785.59063625441,
+ 785.8952411152221,
+ 786.1527780922772,
+ 786.3621146570919,
+ 786.5167953973124,
+ 786.6223697025061,
+ 786.6906158688973,
+ 786.6898004483895,
+ 786.5617794286608,
+ 786.4843824321264,
+ 786.3089084689565,
+ 786.0962196198317,
+ 785.7895309066107,
+ 785.4767944912898,
+ 785.1285419827393,
+ 784.6891209312998,
+ 784.1619289224208,
+ 783.577000611474,
+ 782.9970101247133,
+ 782.3996240004524,
+ 781.6981358580256,
+ 781.0418129515045,
+ 780.3179913473914,
+ 779.5321071824047,
+ 778.7752836982941,
+ 778.0212235836825,
+ 777.1850325034768,
+ 776.332102652291,
+ 775.5280527304357,
+ 774.682892024644,
+ 773.7923169266803,
+ 772.890212688759,
+ 772.0164669640542,
+ 771.1141815215755,
+ 770.2445582005488,
+ 769.3511517813776,
+ 768.4956171146807,
+ 767.6543749574406,
+ 766.798296677072,
+ 765.957303676098,
+ 765.1082697228942,
+ 764.3195315861303,
+ 763.5360030803885,
+ 762.7825092300183,
+ 761.9984144600348,
+ 761.2467326552375,
+ 760.4992412058276,
+ 759.754354571929,
+ 759.0047113184011,
+ 758.2220888354458,
+ 757.4695010078619,
+ 756.6805363654012,
+ 755.8800199324131,
+ 755.0395025934021,
+ 754.189358762285,
+ 753.321773992528,
+ 752.4937597679705,
+ 751.650456408891,
+ 750.7636413054911,
+ 749.9287413077564,
+ 749.0262973112899,
+ 748.1135473056273,
+ 747.2210922103818,
+ 746.2940723458324,
+ 745.3630886315921,
+ 744.393916056902,
+ 743.4493420008646,
+ 742.5066932432484,
+ 741.5432965638221,
+ 740.6161634464243,
+ 739.6644318103737,
+ 738.7508890347732,
+ 737.7613988990963,
+ 736.817345806161,
+ 735.8956035243427,
+ 734.9672699267528,
+ 734.056490520651,
+ 733.1665496386379,
+ 732.3331445785007,
+ 731.4949602481651,
+ 730.6495050849676,
+ 729.7998369158133,
+ 728.9812000270956,
+ 728.1431516001779,
+ 727.3471199799826,
+ 726.5630705111384,
+ 725.7931549977635,
+ 725.0392987382786,
+ 724.329837595331,
+ 723.6074203265368,
+ 722.9057056784136,
+ 722.2847629617042,
+ 721.6867879226321,
+ 721.139436906754,
+ 720.5789032593328,
+ 720.0648032797184,
+ 719.5977032321523,
+ 719.1457564156899,
+ 718.682665518954,
+ 718.208317289096,
+ 717.8136084621691,
+ 717.4125121745975,
+ 717.0575097962876,
+ 716.7153955921156,
+ 716.417563251632,
+ 716.1363564292806,
+ 715.8647534484656,
+ 715.5688690569734,
+ 715.3058279914907,
+ 715.047067883674,
+ 714.7962128246692,
+ 714.5242474347397,
+ 714.2931663230497,
+ 714.014451063361,
+ 713.8084667828563,
+ 713.5862420439041,
+ 713.4030895376187,
+ 713.2019977801609,
+ 713.0968764863603,
+ 712.9983012071922,
+ 712.9023080929653,
+ 712.8579809281371,
+ 712.8289428978308,
+ 712.8436431175412,
+ 712.8717071733522,
+ 712.9093977212694,
+ 712.9263403473765,
+ 712.9452082719047,
+ 712.9620376451636,
+ 712.9995016873842,
+ 713.0156741941228,
+ 713.0334548913073,
+ 713.022695870718,
+ 713.0389363291655,
+ 713.0791184397456,
+ 713.108224421761,
+ 713.1181000701336,
+ 713.1065935807453,
+ 713.0984167250973,
+ 713.0539083557119,
+ 713.0250968311021,
+ 713.0056399917625,
+ 712.925049264906,
+ 712.8045255837352,
+ 712.5800357878168,
+ 712.3322838568558,
+ 712.0245532174304,
+ 711.647217377434,
+ 711.2177399260761,
+ 710.7334027949973,
+ 710.1655303630058,
+ 709.4859000203027,
+ 708.7255656978946,
+ 707.8778454777312,
+ 706.8832363133107,
+ 705.8327481935347,
+ 704.7208317288357,
+ 703.4835670116282,
+ 702.2344107453483,
+ 700.7718408117146,
+ 699.2805952568892,
+ 697.6510679742782,
+ 695.9832159277994,
+ 694.2271625630574,
+ 692.3980837617258,
+ 690.5113819111745,
+ 688.6301841490509,
+ 686.7268341297984,
+ 684.8389544496245,
+ 682.9076083262698,
+ 680.9389114135425,
+ 678.8384334865228,
+ 676.7090760831845,
+ 674.583138915865,
+ 672.4398740627541,
+ 670.3175836371503,
+ 668.2223832928619,
+ 666.2196652245027,
+ 664.198351038451,
+ 662.2566989059003,
+ 660.3104940088473,
+ 658.3401209539652,
+ 656.4436114067503,
+ 654.6810346779457,
+ 653.0159006998265,
+ 651.3056241363711,
+ 649.6222791002435,
+ 647.9995243379615,
+ 646.4976556659645,
+ 645.0002718067606,
+ 643.5676685767896,
+ 642.195315862119,
+ 640.819633513708,
+ 639.4946884413396,
+ 638.2421345896104,
+ 637.0039411990468,
+ 635.8075381095093,
+ 634.5356180207191,
+ 633.3061677500451,
+ 632.0751092889249,
+ 630.8096899136278,
+ 629.6480780990906,
+ 628.3863734172181,
+ 627.2597567328087,
+ 626.0736370018976,
+ 624.9189109605375,
+ 623.7361888150758,
+ 622.5399895806653,
+ 621.158372783003,
+ 619.7399261590706,
+ 618.5280074293147,
+ 617.215474869121,
+ 615.8397245690011,
+ 614.3580149040032,
+ 612.8126118371162,
+ 611.1179188655882,
+ 609.5830030124548,
+ 607.8300980768958,
+ 606.1347255882779,
+ 604.619651634168,
+ 602.8147409906657,
+ 601.0172597340122,
+ 599.3410949284676,
+ 597.5842487937875,
+ 595.7260640104403,
+ 594.5070103512409,
+ 592.5234546648157,
+ 591.0390948831673,
+ 589.7718634622972,
+ 589.1045550294904,
+ 587.7178645042238,
+ 586.5966613059634,
+ 585.7918412647394,
+ 585.3110149719583,
+ 584.5211669572808,
+ 583.673197580851,
+ 583.2969716187681,
+ 583.2512854197603,
+ 583.3747536749868,
+ 583.735962309384,
+ 584.2589866134452,
+ 584.9649142675255,
+ 585.8308681962668,
+ 586.8663842894964,
+ 587.9689007677857,
+ 589.3075494347995,
+ 589.8516840697855,
+ 590.7216244987873,
+ 591.8566445445413,
+ 592.9094656729926,
+ 595.0420168066534,
+ 597.0352895874635,
+ 598.7771863461667,
+ 600.3806881242363,
+ 602.7869260911209,
+ 604.534326938252,
+ 605.6564814604382,
+ 607.259829563175,
+ 608.7835517274157,
+ 610.2125433821327,
+ 611.5316999562282,
+ 612.7259168786043,
+ 613.780089578163,
+ 614.6791134838066,
+ 615.407884024437,
+ 615.9512966289562,
+ 616.2942467262666,
+ 616.42162974527,
+ 616.3183411148686,
+ 615.9692762639646,
+ 615.3593306214599,
+ 614.4733996162566,
+ 613.2963786772569,
+ 611.8131632333628,
+ 610.0086487134765,
+ 607.8677305465,
+ 605.3753041613354,
+ 602.5162649868847,
+ 599.2755084520502,
+ 595.6379299857339,
+ 591.5884250168377,
+ 587.1118889742639
+ ],
+ "yaxis": "y"
+ },
+ {
+ "hovertemplate": "variable=x3
index=%{x}
value=%{y}",
+ "legendgroup": "x3",
+ "line": {
+ "color": "#FF6692",
+ "dash": "solid"
+ },
+ "marker": {
+ "symbol": "circle"
+ },
+ "mode": "lines",
+ "name": "x3",
+ "showlegend": true,
+ "type": "scattergl",
+ "x": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9,
+ 10,
+ 11,
+ 12,
+ 13,
+ 14,
+ 15,
+ 16,
+ 17,
+ 18,
+ 19,
+ 20,
+ 21,
+ 22,
+ 23,
+ 24,
+ 25,
+ 26,
+ 27,
+ 28,
+ 29,
+ 30,
+ 31,
+ 32,
+ 33,
+ 34,
+ 35,
+ 36,
+ 37,
+ 38,
+ 39,
+ 40,
+ 41,
+ 42,
+ 43,
+ 44,
+ 45,
+ 46,
+ 47,
+ 48,
+ 49,
+ 50,
+ 51,
+ 52,
+ 53,
+ 54,
+ 55,
+ 56,
+ 57,
+ 58,
+ 59,
+ 60,
+ 61,
+ 62,
+ 63,
+ 64,
+ 65,
+ 66,
+ 67,
+ 68,
+ 69,
+ 70,
+ 71,
+ 72,
+ 73,
+ 74,
+ 75,
+ 76,
+ 77,
+ 78,
+ 79,
+ 80,
+ 81,
+ 82,
+ 83,
+ 84,
+ 85,
+ 86,
+ 87,
+ 88,
+ 89,
+ 90,
+ 91,
+ 92,
+ 93,
+ 94,
+ 95,
+ 96,
+ 97,
+ 98,
+ 99,
+ 100,
+ 101,
+ 102,
+ 103,
+ 104,
+ 105,
+ 106,
+ 107,
+ 108,
+ 109,
+ 110,
+ 111,
+ 112,
+ 113,
+ 114,
+ 115,
+ 116,
+ 117,
+ 118,
+ 119,
+ 120,
+ 121,
+ 122,
+ 123,
+ 124,
+ 125,
+ 126,
+ 127,
+ 128,
+ 129,
+ 130,
+ 131,
+ 132,
+ 133,
+ 134,
+ 135,
+ 136,
+ 137,
+ 138,
+ 139,
+ 140,
+ 141,
+ 142,
+ 143,
+ 144,
+ 145,
+ 146,
+ 147,
+ 148,
+ 149,
+ 150,
+ 151,
+ 152,
+ 153,
+ 154,
+ 155,
+ 156,
+ 157,
+ 158,
+ 159,
+ 160,
+ 161,
+ 162,
+ 163,
+ 164,
+ 165,
+ 166,
+ 167,
+ 168,
+ 169,
+ 170,
+ 171,
+ 172,
+ 173,
+ 174,
+ 175,
+ 176,
+ 177,
+ 178,
+ 179,
+ 180,
+ 181,
+ 182,
+ 183,
+ 184,
+ 185,
+ 186,
+ 187,
+ 188,
+ 189,
+ 190,
+ 191,
+ 192,
+ 193,
+ 194,
+ 195,
+ 196,
+ 197,
+ 198,
+ 199,
+ 200,
+ 201,
+ 202,
+ 203,
+ 204,
+ 205,
+ 206,
+ 207,
+ 208,
+ 209,
+ 210,
+ 211,
+ 212,
+ 213,
+ 214,
+ 215,
+ 216,
+ 217,
+ 218,
+ 219,
+ 220,
+ 221,
+ 222,
+ 223,
+ 224,
+ 225,
+ 226,
+ 227,
+ 228,
+ 229,
+ 230,
+ 231,
+ 232,
+ 233,
+ 234,
+ 235,
+ 236,
+ 237,
+ 238,
+ 239,
+ 240,
+ 241,
+ 242,
+ 243,
+ 244,
+ 245,
+ 246,
+ 247,
+ 248,
+ 249,
+ 250,
+ 251,
+ 252,
+ 253,
+ 254,
+ 255,
+ 256,
+ 257,
+ 258,
+ 259,
+ 260,
+ 261,
+ 262,
+ 263,
+ 264,
+ 265,
+ 266,
+ 267,
+ 268,
+ 269,
+ 270,
+ 271,
+ 272,
+ 273,
+ 274,
+ 275,
+ 276,
+ 277,
+ 278,
+ 279,
+ 280,
+ 281,
+ 282,
+ 283,
+ 284,
+ 285,
+ 286,
+ 287,
+ 288,
+ 289,
+ 290,
+ 291,
+ 292,
+ 293,
+ 294,
+ 295,
+ 296,
+ 297,
+ 298,
+ 299,
+ 300,
+ 301,
+ 302,
+ 303,
+ 304,
+ 305,
+ 306,
+ 307,
+ 308,
+ 309,
+ 310,
+ 311,
+ 312,
+ 313,
+ 314,
+ 315,
+ 316,
+ 317,
+ 318,
+ 319,
+ 320,
+ 321,
+ 322,
+ 323,
+ 324,
+ 325,
+ 326,
+ 327,
+ 328,
+ 329,
+ 330,
+ 331,
+ 332
+ ],
+ "xaxis": "x",
+ "y": [
+ 1267.9088572051958,
+ 1263.8267205479203,
+ 1259.8862073324744,
+ 1256.0823598331456,
+ 1252.4102203242214,
+ 1248.8648310799897,
+ 1245.4412343747376,
+ 1242.134472482753,
+ 1238.939587678323,
+ 1235.8516222357357,
+ 1232.8656184292784,
+ 1229.9766185332385,
+ 1227.179664821904,
+ 1224.469799569562,
+ 1221.8420650505004,
+ 1219.2915035390065,
+ 1216.813157309368,
+ 1214.4020686358724,
+ 1212.0532797928074,
+ 1209.7618330544603,
+ 1207.5227706951189,
+ 1205.3311349890705,
+ 1203.181968210603,
+ 1201.0703126340036,
+ 1198.9912105335602,
+ 1196.9397041834204,
+ 1194.83861469102,
+ 1192.7564384242874,
+ 1190.6611021765807,
+ 1188.428843235269,
+ 1186.235792430041,
+ 1184.0371922352467,
+ 1181.7998369157604,
+ 1179.5875331263203,
+ 1177.508278783074,
+ 1175.4081406145992,
+ 1173.4048789325682,
+ 1171.4453328499844,
+ 1169.53539151496,
+ 1167.5570681101267,
+ 1165.5952569705769,
+ 1163.4660128200867,
+ 1161.4411198440284,
+ 1158.8018075153236,
+ 1156.053047634013,
+ 1153.2256676254062,
+ 1150.3826813743024,
+ 1147.3662144101586,
+ 1144.2976511357926,
+ 1141.8991370131625,
+ 1139.4956850663464,
+ 1136.499898072304,
+ 1134.1928469499685,
+ 1131.8191805022573,
+ 1129.5775895262448,
+ 1127.3508799744998,
+ 1125.1335024574553,
+ 1123.0106910687493,
+ 1120.9704410064605,
+ 1118.9683345034823,
+ 1117.0742938683602,
+ 1115.2345919498575,
+ 1113.4485492308834,
+ 1111.6504337582794,
+ 1109.9625359576498,
+ 1108.335998550234,
+ 1106.6453600306756,
+ 1105.0766042264672,
+ 1103.5855172256295,
+ 1102.1636050645388,
+ 1100.823008448534,
+ 1099.463543908001,
+ 1098.2321003871966,
+ 1096.9923214567568,
+ 1095.7079435546527,
+ 1094.5779972365028,
+ 1093.3240163988849,
+ 1092.1003873246138,
+ 1090.848399737126,
+ 1089.5679403835736,
+ 1088.3499060000088,
+ 1087.134906792779,
+ 1085.8193617068202,
+ 1084.573172665166,
+ 1083.271444426701,
+ 1081.9717547395053,
+ 1080.6251330719706,
+ 1079.229654125675,
+ 1077.8628508005718,
+ 1076.4044712223256,
+ 1074.9755600352096,
+ 1073.5144623886038,
+ 1072.083172891673,
+ 1070.6315884843254,
+ 1069.0885184261138,
+ 1067.6655643388185,
+ 1066.2682053952412,
+ 1064.840109628633,
+ 1063.4101791658818,
+ 1061.9920043487857,
+ 1060.5931731181804,
+ 1059.2152710139424,
+ 1057.9187071053602,
+ 1056.672653967124,
+ 1055.5435230694818,
+ 1054.356202858379,
+ 1053.2623388977004,
+ 1052.2575143263625,
+ 1051.305125823792,
+ 1050.330381208965,
+ 1049.402772429604,
+ 1048.4912455547033,
+ 1047.5381095833338,
+ 1046.6033205733904,
+ 1045.6553715824732,
+ 1044.7007180229364,
+ 1043.7455888014367,
+ 1042.769349249012,
+ 1041.90142472071,
+ 1041.056354617197,
+ 1040.148451833442,
+ 1039.3099956962706,
+ 1038.4164307231115,
+ 1037.5844979500023,
+ 1036.8663389883045,
+ 1036.036852476719,
+ 1035.271602980694,
+ 1034.418718430648,
+ 1033.540759699986,
+ 1032.7531087905656,
+ 1031.9944506103125,
+ 1031.2358830323378,
+ 1030.4749144939794,
+ 1029.6821898569547,
+ 1028.807039796931,
+ 1027.9368502116629,
+ 1027.1530045979457,
+ 1026.4250152890147,
+ 1025.7226211238017,
+ 1024.9773720807882,
+ 1024.27665405773,
+ 1023.5633423179398,
+ 1022.8599968288008,
+ 1022.162540487774,
+ 1021.499309157506,
+ 1020.9694670319766,
+ 1020.3396452919599,
+ 1019.7183175155664,
+ 1019.1606831410621,
+ 1018.5776574779666,
+ 1018.0686312259566,
+ 1017.550522095512,
+ 1017.1113955014782,
+ 1016.6302067995824,
+ 1016.2425196492505,
+ 1015.741828806876,
+ 1015.3398491470875,
+ 1014.9479489907986,
+ 1014.4983578335812,
+ 1014.0409522298303,
+ 1013.534145733647,
+ 1013.0160366032023,
+ 1012.4450383925974,
+ 1011.8235294116467,
+ 1011.1272509002421,
+ 1010.4382658722689,
+ 1009.7800403178961,
+ 1009.0377584995085,
+ 1008.364991279413,
+ 1007.5619153320531,
+ 1006.7765521301687,
+ 1005.9593648779094,
+ 1004.9959908490524,
+ 1004.1196856099759,
+ 1003.2045346439292,
+ 1002.1778975740071,
+ 1001.1727105935546,
+ 1000.0537498016909,
+ 999.0544972704897,
+ 997.9278579355106,
+ 996.7743550249127,
+ 995.6445446101807,
+ 994.5092980587302,
+ 993.3718997031617,
+ 992.2680468412623,
+ 991.2185779971211,
+ 990.1530952002286,
+ 988.9683345034974,
+ 987.9024213457816,
+ 986.8604951413375,
+ 985.8979818341281,
+ 984.9848467687813,
+ 984.0701941152671,
+ 983.0818138575039,
+ 982.096876486329,
+ 981.1536841150411,
+ 980.2576728803587,
+ 979.4462388727934,
+ 978.6442275022075,
+ 977.9678135403965,
+ 977.3293845839081,
+ 976.7760764682092,
+ 976.2897460870001,
+ 975.9581190965814,
+ 975.6917710479281,
+ 975.5129221498782,
+ 975.5081655302492,
+ 975.5130354027265,
+ 975.6722689074492,
+ 975.9210401140449,
+ 976.2056218712762,
+ 976.5837051800713,
+ 977.0627873789886,
+ 977.623502230967,
+ 978.2369476091183,
+ 978.9119572356103,
+ 979.5596729256598,
+ 980.2557022807981,
+ 980.915377471629,
+ 981.6300482455988,
+ 982.4790595482331,
+ 983.3381956555058,
+ 984.4253097464252,
+ 985.4985390381419,
+ 986.5306801964919,
+ 987.5886203536868,
+ 988.706607171055,
+ 989.797481256538,
+ 991.0040544518537,
+ 992.0182790096013,
+ 993.2506738543316,
+ 994.4580171690158,
+ 995.5682348409902,
+ 996.4726267864476,
+ 997.3028834174016,
+ 998.03372669811,
+ 998.7894856054463,
+ 999.6505243605711,
+ 1000.5913384220446,
+ 1001.4097261544958,
+ 1002.2659629888523,
+ 1002.8654782666613,
+ 1003.5021631292858,
+ 1004.0834220479475,
+ 1004.7430972387782,
+ 1005.4383338239783,
+ 1006.1205010304835,
+ 1006.799565108945,
+ 1007.6981358579992,
+ 1008.2863258509774,
+ 1009.0293777887335,
+ 1010.0133411854131,
+ 1011.112528029962,
+ 1012.2190310085118,
+ 1013.0970803414525,
+ 1013.906679652875,
+ 1015.1027882850069,
+ 1016.1918276743475,
+ 1017.5666266505416,
+ 1018.6024372011769,
+ 1019.7986137850177,
+ 1021.345466488363,
+ 1022.8026682369868,
+ 1024.318580262174,
+ 1025.9054565221118,
+ 1027.2727808103175,
+ 1029.267661781574,
+ 1031.294751862889,
+ 1033.2557702325007,
+ 1035.570749054218,
+ 1037.994427959742,
+ 1040.4318331104814,
+ 1042.9966477155683,
+ 1045.5698883325695,
+ 1047.9275861286687,
+ 1050.4835217104485,
+ 1053.0684953225345,
+ 1055.5774536228355,
+ 1058.4030215858693,
+ 1060.8616503203816,
+ 1060.6736052910492,
+ 1063.609028516943,
+ 1066.6058347866206,
+ 1069.373077532775,
+ 1072.3017508889097,
+ 1075.4800335227176,
+ 1078.7761217693367,
+ 1082.0491290854704,
+ 1084.9117533804708,
+ 1087.8850030577,
+ 1091.4678475162375,
+ 1094.944143695086,
+ 1098.5519037802517,
+ 1101.7646379305154,
+ 1105.044757525523,
+ 1108.5989037122988,
+ 1111.9442569479327,
+ 1119.2493148201372,
+ 1121.626605358994,
+ 1124.8028267909626,
+ 1127.8019207681757,
+ 1131.0626061744133,
+ 1134.009286733429,
+ 1136.7452263923112,
+ 1139.2036512716966,
+ 1141.1781920313965,
+ 1144.388774377542,
+ 1147.609979840859,
+ 1150.489841916447,
+ 1153.3181603523522,
+ 1156.0924610063341,
+ 1158.8102697360184,
+ 1161.469112399031,
+ 1164.0665148529977,
+ 1166.600002955544,
+ 1169.0671025642957,
+ 1171.4653395368787,
+ 1173.7922397309185,
+ 1176.0453290040412,
+ 1178.2221332138722,
+ 1180.3201782180374,
+ 1182.3369898741626,
+ 1184.2700940398734,
+ 1186.1170165727958,
+ 1187.8752833305552,
+ 1189.5424201707774,
+ 1191.1159529510885,
+ 1192.593407529114,
+ 1193.9723097624797,
+ 1195.250185508811,
+ 1196.4245606257343,
+ 1197.4929609708747,
+ 1198.4529124018586
+ ],
+ "yaxis": "y"
+ },
+ {
+ "hovertemplate": "variable=y3
index=%{x}
value=%{y}",
+ "legendgroup": "y3",
+ "line": {
+ "color": "#B6E880",
+ "dash": "solid"
+ },
+ "marker": {
+ "symbol": "circle"
+ },
+ "mode": "lines",
+ "name": "y3",
+ "showlegend": true,
+ "type": "scattergl",
+ "x": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9,
+ 10,
+ 11,
+ 12,
+ 13,
+ 14,
+ 15,
+ 16,
+ 17,
+ 18,
+ 19,
+ 20,
+ 21,
+ 22,
+ 23,
+ 24,
+ 25,
+ 26,
+ 27,
+ 28,
+ 29,
+ 30,
+ 31,
+ 32,
+ 33,
+ 34,
+ 35,
+ 36,
+ 37,
+ 38,
+ 39,
+ 40,
+ 41,
+ 42,
+ 43,
+ 44,
+ 45,
+ 46,
+ 47,
+ 48,
+ 49,
+ 50,
+ 51,
+ 52,
+ 53,
+ 54,
+ 55,
+ 56,
+ 57,
+ 58,
+ 59,
+ 60,
+ 61,
+ 62,
+ 63,
+ 64,
+ 65,
+ 66,
+ 67,
+ 68,
+ 69,
+ 70,
+ 71,
+ 72,
+ 73,
+ 74,
+ 75,
+ 76,
+ 77,
+ 78,
+ 79,
+ 80,
+ 81,
+ 82,
+ 83,
+ 84,
+ 85,
+ 86,
+ 87,
+ 88,
+ 89,
+ 90,
+ 91,
+ 92,
+ 93,
+ 94,
+ 95,
+ 96,
+ 97,
+ 98,
+ 99,
+ 100,
+ 101,
+ 102,
+ 103,
+ 104,
+ 105,
+ 106,
+ 107,
+ 108,
+ 109,
+ 110,
+ 111,
+ 112,
+ 113,
+ 114,
+ 115,
+ 116,
+ 117,
+ 118,
+ 119,
+ 120,
+ 121,
+ 122,
+ 123,
+ 124,
+ 125,
+ 126,
+ 127,
+ 128,
+ 129,
+ 130,
+ 131,
+ 132,
+ 133,
+ 134,
+ 135,
+ 136,
+ 137,
+ 138,
+ 139,
+ 140,
+ 141,
+ 142,
+ 143,
+ 144,
+ 145,
+ 146,
+ 147,
+ 148,
+ 149,
+ 150,
+ 151,
+ 152,
+ 153,
+ 154,
+ 155,
+ 156,
+ 157,
+ 158,
+ 159,
+ 160,
+ 161,
+ 162,
+ 163,
+ 164,
+ 165,
+ 166,
+ 167,
+ 168,
+ 169,
+ 170,
+ 171,
+ 172,
+ 173,
+ 174,
+ 175,
+ 176,
+ 177,
+ 178,
+ 179,
+ 180,
+ 181,
+ 182,
+ 183,
+ 184,
+ 185,
+ 186,
+ 187,
+ 188,
+ 189,
+ 190,
+ 191,
+ 192,
+ 193,
+ 194,
+ 195,
+ 196,
+ 197,
+ 198,
+ 199,
+ 200,
+ 201,
+ 202,
+ 203,
+ 204,
+ 205,
+ 206,
+ 207,
+ 208,
+ 209,
+ 210,
+ 211,
+ 212,
+ 213,
+ 214,
+ 215,
+ 216,
+ 217,
+ 218,
+ 219,
+ 220,
+ 221,
+ 222,
+ 223,
+ 224,
+ 225,
+ 226,
+ 227,
+ 228,
+ 229,
+ 230,
+ 231,
+ 232,
+ 233,
+ 234,
+ 235,
+ 236,
+ 237,
+ 238,
+ 239,
+ 240,
+ 241,
+ 242,
+ 243,
+ 244,
+ 245,
+ 246,
+ 247,
+ 248,
+ 249,
+ 250,
+ 251,
+ 252,
+ 253,
+ 254,
+ 255,
+ 256,
+ 257,
+ 258,
+ 259,
+ 260,
+ 261,
+ 262,
+ 263,
+ 264,
+ 265,
+ 266,
+ 267,
+ 268,
+ 269,
+ 270,
+ 271,
+ 272,
+ 273,
+ 274,
+ 275,
+ 276,
+ 277,
+ 278,
+ 279,
+ 280,
+ 281,
+ 282,
+ 283,
+ 284,
+ 285,
+ 286,
+ 287,
+ 288,
+ 289,
+ 290,
+ 291,
+ 292,
+ 293,
+ 294,
+ 295,
+ 296,
+ 297,
+ 298,
+ 299,
+ 300,
+ 301,
+ 302,
+ 303,
+ 304,
+ 305,
+ 306,
+ 307,
+ 308,
+ 309,
+ 310,
+ 311,
+ 312,
+ 313,
+ 314,
+ 315,
+ 316,
+ 317,
+ 318,
+ 319,
+ 320,
+ 321,
+ 322,
+ 323,
+ 324,
+ 325,
+ 326,
+ 327,
+ 328,
+ 329,
+ 330,
+ 331,
+ 332
+ ],
+ "xaxis": "x",
+ "y": [
+ 841.3242234807167,
+ 841.585854906388,
+ 841.9580935163941,
+ 842.4362073776458,
+ 843.0154645570535,
+ 843.6911331215282,
+ 844.4584811379804,
+ 845.3127766733207,
+ 846.24928779446,
+ 847.2632825683089,
+ 848.3500290617781,
+ 849.5047953417782,
+ 850.7228494752198,
+ 851.999459529014,
+ 853.3298935700711,
+ 854.709419665302,
+ 856.1333058816172,
+ 857.5968202859275,
+ 859.0952309451436,
+ 860.6238059261761,
+ 862.1778132959358,
+ 863.7525211213334,
+ 865.3431974692794,
+ 866.9451104066846,
+ 868.5535280004598,
+ 870.1637183174141,
+ 871.5872613195204,
+ 873.0043489092732,
+ 874.4449024891957,
+ 875.92751817698,
+ 877.4827968922394,
+ 878.9857301410105,
+ 880.4234070985858,
+ 881.8799293301198,
+ 883.2893383767571,
+ 884.6713628846733,
+ 885.9926838658959,
+ 887.2142064371883,
+ 888.4204851750984,
+ 889.6698905976447,
+ 890.8654103149656,
+ 892.045686198904,
+ 893.1965389928514,
+ 894.1512605040973,
+ 895.031710797422,
+ 895.805929919033,
+ 896.4628190897955,
+ 897.1151554960561,
+ 897.6786110669635,
+ 898.4673492037277,
+ 899.169335658687,
+ 899.6949421276896,
+ 900.245803981865,
+ 900.8115925614479,
+ 901.2740945433726,
+ 901.8427597453024,
+ 902.34191034894,
+ 902.7732451470101,
+ 903.1120523680116,
+ 903.4783573805826,
+ 903.724478470528,
+ 903.9062945932036,
+ 904.0324129650807,
+ 904.1973544133579,
+ 904.3726698225405,
+ 904.5305895942229,
+ 904.5199211759121,
+ 904.5164556387538,
+ 904.374776325519,
+ 904.1852137080192,
+ 903.9526376587315,
+ 903.7678316608608,
+ 903.571972184995,
+ 903.2627239574023,
+ 902.9795012343508,
+ 902.702801875362,
+ 902.4462162222326,
+ 902.1001381683698,
+ 901.870846451683,
+ 901.6325398082711,
+ 901.3189200207332,
+ 900.9875648371506,
+ 900.5784049467794,
+ 900.1552470043572,
+ 899.5843393960309,
+ 898.9940882012133,
+ 898.3568370743477,
+ 897.7630297400932,
+ 897.07336519503,
+ 896.4433395998865,
+ 895.6956895964887,
+ 894.9210854151938,
+ 894.2426102515434,
+ 893.633740288464,
+ 893.0570794354436,
+ 892.4756846133638,
+ 891.8701669345944,
+ 891.2211375115045,
+ 890.6155292304561,
+ 890.0226279189883,
+ 889.4119459103358,
+ 888.7529955377341,
+ 888.0150626287216,
+ 887.2908559649239,
+ 886.5285736935249,
+ 885.7885116309642,
+ 885.0872273436644,
+ 884.2437201294581,
+ 883.4477111598327,
+ 882.6473985819714,
+ 881.81761761298,
+ 880.9920269993762,
+ 880.177648417755,
+ 879.4671906497422,
+ 878.6854288884341,
+ 877.9459330901146,
+ 877.238623751285,
+ 876.5651996646693,
+ 875.8743119888442,
+ 875.2591225168292,
+ 874.6685089128971,
+ 874.1370359463521,
+ 873.6022559966364,
+ 873.0339079026819,
+ 872.4336904572133,
+ 871.8561235814062,
+ 871.2434030214843,
+ 870.6877845476798,
+ 870.1902874356274,
+ 869.601644431256,
+ 868.9164193978465,
+ 868.2521461413743,
+ 867.5758454324115,
+ 866.9133615709424,
+ 866.2372647171065,
+ 865.6761874560134,
+ 865.1232417494291,
+ 864.6369113682202,
+ 864.1253935535469,
+ 863.6851344310301,
+ 863.2090194567387,
+ 862.8196788148215,
+ 862.4685949850633,
+ 862.1545221861325,
+ 861.837799270551,
+ 861.4516750095258,
+ 861.1056422568023,
+ 860.8559197262807,
+ 860.6202178983798,
+ 860.3426578177437,
+ 860.158916396647,
+ 859.9689234183236,
+ 859.775396951133,
+ 859.5866044530017,
+ 859.3839498062372,
+ 859.2340709867851,
+ 859.1063670750317,
+ 858.9260458899538,
+ 858.8121135245549,
+ 858.6915671928147,
+ 858.6241364469314,
+ 858.5838637340728,
+ 858.5769779608956,
+ 858.6361185982826,
+ 858.7233232914805,
+ 858.8918661803342,
+ 859.0238737003233,
+ 859.1397540147133,
+ 859.2918752405619,
+ 859.5059684250054,
+ 859.6898910506598,
+ 859.9015606241494,
+ 860.1340687217279,
+ 860.3480939544627,
+ 860.548053183437,
+ 860.7971867991475,
+ 861.1092210468088,
+ 861.4450610431848,
+ 861.7183401661546,
+ 862.0344741669246,
+ 862.2746834581884,
+ 862.5674873722068,
+ 862.8797934267038,
+ 863.1995968197593,
+ 863.5151192551485,
+ 863.8205848376078,
+ 864.1104441775702,
+ 864.3793743911651,
+ 864.56322906511,
+ 864.7423724205656,
+ 864.9119345850538,
+ 865.1265487325996,
+ 865.3178780945331,
+ 865.4828648439499,
+ 865.6397653399972,
+ 865.769326598463,
+ 865.7579786630624,
+ 865.7223493169845,
+ 865.5586309994686,
+ 865.3783551155301,
+ 865.1225848829088,
+ 864.6413735304436,
+ 864.0469319802385,
+ 863.4250605901732,
+ 862.7443656706959,
+ 861.9590477699508,
+ 861.1092210468089,
+ 860.1914879158207,
+ 859.2237649775889,
+ 858.2037871751472,
+ 857.1415207591472,
+ 855.9827855669571,
+ 854.7118168020928,
+ 853.4043126683641,
+ 852.0125484154933,
+ 850.5687105029697,
+ 849.0994360007165,
+ 847.6109538153896,
+ 846.0566717251951,
+ 844.4224104735247,
+ 842.6138530883068,
+ 840.8041631746057,
+ 839.0368524767418,
+ 837.2850574190965,
+ 835.5543273912363,
+ 833.9740877482096,
+ 832.3261455524635,
+ 830.6751002286737,
+ 828.9994110850921,
+ 827.5721080884218,
+ 825.958979818246,
+ 824.5678044801864,
+ 823.2376271262261,
+ 822.0316881468609,
+ 820.8893519671061,
+ 819.8676300708006,
+ 818.8845726969078,
+ 817.901515323015,
+ 817.0233980383653,
+ 816.2632449205145,
+ 815.707762350128,
+ 815.4740537723571,
+ 815.1398219664273,
+ 814.7289632833314,
+ 814.4349362385512,
+ 814.2447167545315,
+ 814.106638881873,
+ 813.9022401412445,
+ 813.8539944278649,
+ 814.0731160387734,
+ 814.302339803751,
+ 814.5161611813586,
+ 814.7643208225735,
+ 815.1964257400122,
+ 815.703005730499,
+ 816.2123264399148,
+ 816.9261364922376,
+ 817.6601508526986,
+ 818.4864662845315,
+ 819.075381095739,
+ 819.5369317537378,
+ 820.053477994876,
+ 820.5858116830682,
+ 821.1437858161173,
+ 821.6033885251255,
+ 822.0749960360542,
+ 822.7246596750949,
+ 823.3261682030343,
+ 823.9112550679688,
+ 824.6494824343869,
+ 825.3412534824289,
+ 826.1687920450237,
+ 827.0454823437846,
+ 828.0109855261893,
+ 828.5007134928477,
+ 828.7906860856583,
+ 829.9379374390298,
+ 830.8094181067686,
+ 832.2242179889854,
+ 834.1012253957213,
+ 835.4376996080478,
+ 836.8555799677385,
+ 838.6803551608344,
+ 840.8842782394997,
+ 843.4926498900462,
+ 845.9542911503237,
+ 848.1966069445656,
+ 850.87478765081,
+ 854.3380597521032,
+ 858.2179890823252,
+ 862.3845840221874,
+ 866.7335839995363,
+ 870.7782056217698,
+ 875.5235679176309,
+ 880.3587623727709,
+ 885.6214183785689,
+ 890.9272237195727,
+ 899.7355999002325,
+ 903.9037577294014,
+ 908.4719019682284,
+ 913.0485854718181,
+ 919.4350268408177,
+ 925.7256336495782,
+ 931.894516296976,
+ 937.9485605561887,
+ 944.8270855510914,
+ 951.5634782213663,
+ 957.4096355522223,
+ 963.8699676096852,
+ 970.37352059353,
+ 976.91299803908,
+ 983.4811034815473,
+ 990.0705404561435,
+ 996.6740124980807,
+ 1003.2842231425707,
+ 1009.8938759248254,
+ 1016.4956743800565,
+ 1023.0823220434759,
+ 1029.6465224502956,
+ 1036.1809791357275,
+ 1042.6783956349832,
+ 1049.1314754832747,
+ 1055.5329222158139,
+ 1061.8754393678125,
+ 1068.1517304744825,
+ 1074.3544990710357,
+ 1080.476448692684,
+ 1086.5102828746394,
+ 1092.4487051521135,
+ 1098.2844190603182,
+ 1104.0101281344655,
+ 1109.6185359097672,
+ 1115.1023459214352
+ ],
+ "yaxis": "y"
+ },
+ {
+ "hovertemplate": "variable=x4
index=%{x}
value=%{y}",
+ "legendgroup": "x4",
+ "line": {
+ "color": "#FF97FF",
+ "dash": "solid"
+ },
+ "marker": {
+ "symbol": "circle"
+ },
+ "mode": "lines",
+ "name": "x4",
+ "showlegend": true,
+ "type": "scattergl",
+ "x": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9,
+ 10,
+ 11,
+ 12,
+ 13,
+ 14,
+ 15,
+ 16,
+ 17,
+ 18,
+ 19,
+ 20,
+ 21,
+ 22,
+ 23,
+ 24,
+ 25,
+ 26,
+ 27,
+ 28,
+ 29,
+ 30,
+ 31,
+ 32,
+ 33,
+ 34,
+ 35,
+ 36,
+ 37,
+ 38,
+ 39,
+ 40,
+ 41,
+ 42,
+ 43,
+ 44,
+ 45,
+ 46,
+ 47,
+ 48,
+ 49,
+ 50,
+ 51,
+ 52,
+ 53,
+ 54,
+ 55,
+ 56,
+ 57,
+ 58,
+ 59,
+ 60,
+ 61,
+ 62,
+ 63,
+ 64,
+ 65,
+ 66,
+ 67,
+ 68,
+ 69,
+ 70,
+ 71,
+ 72,
+ 73,
+ 74,
+ 75,
+ 76,
+ 77,
+ 78,
+ 79,
+ 80,
+ 81,
+ 82,
+ 83,
+ 84,
+ 85,
+ 86,
+ 87,
+ 88,
+ 89,
+ 90,
+ 91,
+ 92,
+ 93,
+ 94,
+ 95,
+ 96,
+ 97,
+ 98,
+ 99,
+ 100,
+ 101,
+ 102,
+ 103,
+ 104,
+ 105,
+ 106,
+ 107,
+ 108,
+ 109,
+ 110,
+ 111,
+ 112,
+ 113,
+ 114,
+ 115,
+ 116,
+ 117,
+ 118,
+ 119,
+ 120,
+ 121,
+ 122,
+ 123,
+ 124,
+ 125,
+ 126,
+ 127,
+ 128,
+ 129,
+ 130,
+ 131,
+ 132,
+ 133,
+ 134,
+ 135,
+ 136,
+ 137,
+ 138,
+ 139,
+ 140,
+ 141,
+ 142,
+ 143,
+ 144,
+ 145,
+ 146,
+ 147,
+ 148,
+ 149,
+ 150,
+ 151,
+ 152,
+ 153,
+ 154,
+ 155,
+ 156,
+ 157,
+ 158,
+ 159,
+ 160,
+ 161,
+ 162,
+ 163,
+ 164,
+ 165,
+ 166,
+ 167,
+ 168,
+ 169,
+ 170,
+ 171,
+ 172,
+ 173,
+ 174,
+ 175,
+ 176,
+ 177,
+ 178,
+ 179,
+ 180,
+ 181,
+ 182,
+ 183,
+ 184,
+ 185,
+ 186,
+ 187,
+ 188,
+ 189,
+ 190,
+ 191,
+ 192,
+ 193,
+ 194,
+ 195,
+ 196,
+ 197,
+ 198,
+ 199,
+ 200,
+ 201,
+ 202,
+ 203,
+ 204,
+ 205,
+ 206,
+ 207,
+ 208,
+ 209,
+ 210,
+ 211,
+ 212,
+ 213,
+ 214,
+ 215,
+ 216,
+ 217,
+ 218,
+ 219,
+ 220,
+ 221,
+ 222,
+ 223,
+ 224,
+ 225,
+ 226,
+ 227,
+ 228,
+ 229,
+ 230,
+ 231,
+ 232,
+ 233,
+ 234,
+ 235,
+ 236,
+ 237,
+ 238,
+ 239,
+ 240,
+ 241,
+ 242,
+ 243,
+ 244,
+ 245,
+ 246,
+ 247,
+ 248,
+ 249,
+ 250,
+ 251,
+ 252,
+ 253,
+ 254,
+ 255,
+ 256,
+ 257,
+ 258,
+ 259,
+ 260,
+ 261,
+ 262,
+ 263,
+ 264,
+ 265,
+ 266,
+ 267,
+ 268,
+ 269,
+ 270,
+ 271,
+ 272,
+ 273,
+ 274,
+ 275,
+ 276,
+ 277,
+ 278,
+ 279,
+ 280,
+ 281,
+ 282,
+ 283,
+ 284,
+ 285,
+ 286,
+ 287,
+ 288,
+ 289,
+ 290,
+ 291,
+ 292,
+ 293,
+ 294,
+ 295,
+ 296,
+ 297,
+ 298,
+ 299,
+ 300,
+ 301,
+ 302,
+ 303,
+ 304,
+ 305,
+ 306,
+ 307,
+ 308,
+ 309,
+ 310,
+ 311,
+ 312,
+ 313,
+ 314,
+ 315,
+ 316,
+ 317,
+ 318,
+ 319,
+ 320,
+ 321,
+ 322,
+ 323,
+ 324,
+ 325,
+ 326,
+ 327,
+ 328,
+ 329,
+ 330,
+ 331,
+ 332
+ ],
+ "xaxis": "x",
+ "y": [
+ 998.4600902447743,
+ 997.5646331553105,
+ 996.5265071743909,
+ 995.3500273194268,
+ 994.0395086078298,
+ 992.5992660570117,
+ 991.033614684384,
+ 989.3468695073582,
+ 987.5433455433458,
+ 985.6273578097586,
+ 983.603221324008,
+ 981.4752511035056,
+ 979.2477621656631,
+ 976.9250695278919,
+ 974.5114882076037,
+ 972.01133322221,
+ 969.4289195891225,
+ 966.7685623257527,
+ 964.0345764495122,
+ 961.2312769778125,
+ 958.3629789280652,
+ 955.4339973176819,
+ 952.4486471640743,
+ 949.4112434846537,
+ 946.326101296832,
+ 943.1975356179107,
+ 940.32084531915,
+ 937.4711771499958,
+ 934.4325126275836,
+ 931.2565403518811,
+ 927.9736347368051,
+ 924.6405807604982,
+ 921.2553398716902,
+ 917.7628258849638,
+ 914.3022039003214,
+ 910.8361684295298,
+ 907.3959999092917,
+ 903.9601576478593,
+ 900.3892273889638,
+ 896.9029649594642,
+ 893.4056943531087,
+ 889.7899612674221,
+ 886.1567419419566,
+ 882.9306892567317,
+ 879.7331083375719,
+ 876.6015085278373,
+ 873.5787220547577,
+ 870.6043398490458,
+ 867.7793381502534,
+ 864.735826405933,
+ 861.6763686605713,
+ 859.1139097147292,
+ 856.4456952591358,
+ 853.708464517783,
+ 851.0461618608715,
+ 848.4899544722562,
+ 845.9202699946916,
+ 843.5058778227288,
+ 841.1853496114445,
+ 838.950304650064,
+ 836.7712745474572,
+ 834.6565267615505,
+ 832.6671498787223,
+ 830.7079435546835,
+ 828.8126797888001,
+ 827.0795034994165,
+ 825.1911934584193,
+ 823.4039049581136,
+ 821.7988855918768,
+ 820.2633581733623,
+ 818.8172778544426,
+ 817.3680491063398,
+ 815.9402704477064,
+ 814.6226868104783,
+ 813.2620670908925,
+ 812.0907608325401,
+ 810.8369838500493,
+ 809.6826655189433,
+ 808.4081632652118,
+ 807.158327481842,
+ 805.9330449159855,
+ 804.7319758090977,
+ 803.5163650364868,
+ 802.2736415319908,
+ 801.028970078504,
+ 799.7864277785653,
+ 798.5174522638312,
+ 797.1548392941154,
+ 795.8076287117692,
+ 794.4458991142701,
+ 793.0719155585836,
+ 791.68771659598,
+ 790.3599402024039,
+ 789.0964008243886,
+ 787.7546263787615,
+ 786.4807130398412,
+ 785.2171963123956,
+ 783.9978481957907,
+ 782.7592017938338,
+ 781.5403519897615,
+ 780.3211171260047,
+ 779.1607737433687,
+ 778.0329112776277,
+ 776.8784796936736,
+ 775.8530884050829,
+ 774.8441867312058,
+ 773.9367822599837,
+ 773.0713719449142,
+ 772.2148633037219,
+ 771.3869849825824,
+ 770.5481890868657,
+ 769.7823506760296,
+ 769.0878842101982,
+ 768.3719676548968,
+ 767.6061518946306,
+ 766.9175972274807,
+ 766.1650773516059,
+ 765.436884187548,
+ 764.7944460802296,
+ 764.2345919498982,
+ 763.6362771522813,
+ 763.0815647012632,
+ 762.4869192959313,
+ 761.9776891887941,
+ 761.5173843121266,
+ 761.0486534235449,
+ 760.5993793743025,
+ 760.1381684748485,
+ 759.6273981289743,
+ 759.2059163287072,
+ 758.8150127974833,
+ 758.4226143286619,
+ 758.0288341750911,
+ 757.6011461187366,
+ 757.1389838953567,
+ 756.6737411945029,
+ 756.2632222699518,
+ 755.8739948808831,
+ 755.5316768215839,
+ 755.170649391744,
+ 754.7898933157288,
+ 754.4205757773929,
+ 754.0880880653269,
+ 753.7589979387102,
+ 753.399873156722,
+ 753.1009309383252,
+ 752.7166413734426,
+ 752.3902693151854,
+ 752.0559695575466,
+ 751.6536727897831,
+ 751.3381956555331,
+ 751.0230582798281,
+ 750.7341049626523,
+ 750.4117194046553,
+ 750.1732089061165,
+ 749.8737230740477,
+ 749.6041586445024,
+ 749.2993499285633,
+ 749.0386418717557,
+ 748.7570952908592,
+ 748.4488210377617,
+ 748.1345670342735,
+ 747.7762576727933,
+ 747.3624544156414,
+ 746.8608575504802,
+ 746.4218668598644,
+ 745.9548121134376,
+ 745.4931255520206,
+ 744.9850053227968,
+ 744.3786495729497,
+ 743.7549887878812,
+ 743.0562187138139,
+ 742.3424086614912,
+ 741.6738544473528,
+ 740.9135201249447,
+ 740.1161521211396,
+ 739.2623615483068,
+ 738.3649459783053,
+ 737.5163876870643,
+ 736.6058347866589,
+ 735.6667195179101,
+ 734.6731975808334,
+ 733.7170717342685,
+ 732.7989082424568,
+ 731.9194998753366,
+ 731.0590047338837,
+ 730.229993884261,
+ 729.3535753923361,
+ 728.494914947026,
+ 727.6274887312566,
+ 726.7567328817472,
+ 725.952456454195,
+ 725.193005504004,
+ 724.4240866156939,
+ 723.6821898569904,
+ 723.0033522842257,
+ 722.3909714828485,
+ 721.9072685677203,
+ 721.4375410540733,
+ 721.0377811501118,
+ 720.7162563137623,
+ 720.4810074972545,
+ 720.2483861468274,
+ 720.1376248611813,
+ 720.1174432036125,
+ 720.156334231722,
+ 720.3138009920109,
+ 720.5636594259504,
+ 720.8737230740512,
+ 721.2912636751973,
+ 721.7188158281339,
+ 722.2411606151053,
+ 722.8134272576111,
+ 723.4229314366412,
+ 724.0567623274881,
+ 724.7133343902756,
+ 725.3051484743995,
+ 726.0159460009572,
+ 726.6549865228262,
+ 727.3642891117862,
+ 728.0292645359182,
+ 728.6471947268625,
+ 729.3538698497416,
+ 729.9905094112265,
+ 730.6016670818418,
+ 731.211035357454,
+ 731.8043443791757,
+ 732.405739654267,
+ 733.0398197013801,
+ 733.5222994857465,
+ 734.0549276313443,
+ 734.5393327141319,
+ 734.947971641401,
+ 735.2533013204425,
+ 735.5016874673539,
+ 735.5949851637911,
+ 735.7032095856352,
+ 735.7020317560127,
+ 735.6558245939027,
+ 735.4314027496932,
+ 735.2909239166506,
+ 735.0521416112758,
+ 734.8338354208751,
+ 734.46044078,
+ 734.0361050079553,
+ 733.6536501392153,
+ 733.3037894402189,
+ 732.8658180252379,
+ 732.422818183792,
+ 731.967088722196,
+ 731.4116967540881,
+ 730.852635393695,
+ 730.2360642369304,
+ 729.6588824208078,
+ 729.0626061744603,
+ 728.4158418083365,
+ 727.7788851388763,
+ 727.041337289548,
+ 726.2488618087898,
+ 725.4147092798537,
+ 724.5672155653868,
+ 723.7615801036552,
+ 722.9679947449836,
+ 722.0390042808734,
+ 721.180774196387,
+ 720.2935740333029,
+ 719.493238804872,
+ 718.6987247728442,
+ 717.7588393847268,
+ 716.8493737116652,
+ 715.8573240616167,
+ 714.9380733424612,
+ 714.0383474143541,
+ 713.0671362883945,
+ 712.2435389249208,
+ 711.561349067846,
+ 710.6108405625572,
+ 709.5297062220287,
+ 708.4644952319726,
+ 707.1015878048507,
+ 706.1595732631852,
+ 704.8580035787079,
+ 703.5328093500731,
+ 702.266846361104,
+ 701.0526399238123,
+ 699.7599719132121,
+ 698.5541008855557,
+ 697.1352465513694,
+ 695.8143106298311,
+ 694.2984212552135,
+ 692.981992797038,
+ 691.5453124645278,
+ 690.1945683933146,
+ 688.5705905002707,
+ 687.0811796415878,
+ 685.6526761647254,
+ 684.0363088630879,
+ 681.4472581484631,
+ 680.0494461934924,
+ 678.6275340324016,
+ 676.8043443791822,
+ 675.0615868988316,
+ 673.2061654849834,
+ 671.1238533148326,
+ 668.6929262270166,
+ 665.990577362943,
+ 663.0840336133681,
+ 659.9189109605336,
+ 656.932528134621,
+ 653.7169648604481,
+ 650.2558668363329,
+ 646.5328797605156,
+ 642.531649331237,
+ 638.2358212467375,
+ 633.629041205258,
+ 628.6949549050388,
+ 623.4172080443207,
+ 617.779446321344,
+ 611.7653154343496,
+ 605.3584610815781,
+ 598.5425289612698,
+ 591.3011647716656,
+ 583.618014211006,
+ 575.4767229775314,
+ 566.8609367694826,
+ 557.7543012851002,
+ 548.1404622226248,
+ 538.0030652802968,
+ 527.3257561563569,
+ 516.0921805490458,
+ 504.28598415660406,
+ 491.89081267727204,
+ 478.89031180929067
+ ],
+ "yaxis": "y"
+ },
+ {
+ "hovertemplate": "variable=y4
index=%{x}
value=%{y}",
+ "legendgroup": "y4",
+ "line": {
+ "color": "#FECB52",
+ "dash": "solid"
+ },
+ "marker": {
+ "symbol": "circle"
+ },
+ "mode": "lines",
+ "name": "y4",
+ "showlegend": true,
+ "type": "scattergl",
+ "x": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9,
+ 10,
+ 11,
+ 12,
+ 13,
+ 14,
+ 15,
+ 16,
+ 17,
+ 18,
+ 19,
+ 20,
+ 21,
+ 22,
+ 23,
+ 24,
+ 25,
+ 26,
+ 27,
+ 28,
+ 29,
+ 30,
+ 31,
+ 32,
+ 33,
+ 34,
+ 35,
+ 36,
+ 37,
+ 38,
+ 39,
+ 40,
+ 41,
+ 42,
+ 43,
+ 44,
+ 45,
+ 46,
+ 47,
+ 48,
+ 49,
+ 50,
+ 51,
+ 52,
+ 53,
+ 54,
+ 55,
+ 56,
+ 57,
+ 58,
+ 59,
+ 60,
+ 61,
+ 62,
+ 63,
+ 64,
+ 65,
+ 66,
+ 67,
+ 68,
+ 69,
+ 70,
+ 71,
+ 72,
+ 73,
+ 74,
+ 75,
+ 76,
+ 77,
+ 78,
+ 79,
+ 80,
+ 81,
+ 82,
+ 83,
+ 84,
+ 85,
+ 86,
+ 87,
+ 88,
+ 89,
+ 90,
+ 91,
+ 92,
+ 93,
+ 94,
+ 95,
+ 96,
+ 97,
+ 98,
+ 99,
+ 100,
+ 101,
+ 102,
+ 103,
+ 104,
+ 105,
+ 106,
+ 107,
+ 108,
+ 109,
+ 110,
+ 111,
+ 112,
+ 113,
+ 114,
+ 115,
+ 116,
+ 117,
+ 118,
+ 119,
+ 120,
+ 121,
+ 122,
+ 123,
+ 124,
+ 125,
+ 126,
+ 127,
+ 128,
+ 129,
+ 130,
+ 131,
+ 132,
+ 133,
+ 134,
+ 135,
+ 136,
+ 137,
+ 138,
+ 139,
+ 140,
+ 141,
+ 142,
+ 143,
+ 144,
+ 145,
+ 146,
+ 147,
+ 148,
+ 149,
+ 150,
+ 151,
+ 152,
+ 153,
+ 154,
+ 155,
+ 156,
+ 157,
+ 158,
+ 159,
+ 160,
+ 161,
+ 162,
+ 163,
+ 164,
+ 165,
+ 166,
+ 167,
+ 168,
+ 169,
+ 170,
+ 171,
+ 172,
+ 173,
+ 174,
+ 175,
+ 176,
+ 177,
+ 178,
+ 179,
+ 180,
+ 181,
+ 182,
+ 183,
+ 184,
+ 185,
+ 186,
+ 187,
+ 188,
+ 189,
+ 190,
+ 191,
+ 192,
+ 193,
+ 194,
+ 195,
+ 196,
+ 197,
+ 198,
+ 199,
+ 200,
+ 201,
+ 202,
+ 203,
+ 204,
+ 205,
+ 206,
+ 207,
+ 208,
+ 209,
+ 210,
+ 211,
+ 212,
+ 213,
+ 214,
+ 215,
+ 216,
+ 217,
+ 218,
+ 219,
+ 220,
+ 221,
+ 222,
+ 223,
+ 224,
+ 225,
+ 226,
+ 227,
+ 228,
+ 229,
+ 230,
+ 231,
+ 232,
+ 233,
+ 234,
+ 235,
+ 236,
+ 237,
+ 238,
+ 239,
+ 240,
+ 241,
+ 242,
+ 243,
+ 244,
+ 245,
+ 246,
+ 247,
+ 248,
+ 249,
+ 250,
+ 251,
+ 252,
+ 253,
+ 254,
+ 255,
+ 256,
+ 257,
+ 258,
+ 259,
+ 260,
+ 261,
+ 262,
+ 263,
+ 264,
+ 265,
+ 266,
+ 267,
+ 268,
+ 269,
+ 270,
+ 271,
+ 272,
+ 273,
+ 274,
+ 275,
+ 276,
+ 277,
+ 278,
+ 279,
+ 280,
+ 281,
+ 282,
+ 283,
+ 284,
+ 285,
+ 286,
+ 287,
+ 288,
+ 289,
+ 290,
+ 291,
+ 292,
+ 293,
+ 294,
+ 295,
+ 296,
+ 297,
+ 298,
+ 299,
+ 300,
+ 301,
+ 302,
+ 303,
+ 304,
+ 305,
+ 306,
+ 307,
+ 308,
+ 309,
+ 310,
+ 311,
+ 312,
+ 313,
+ 314,
+ 315,
+ 316,
+ 317,
+ 318,
+ 319,
+ 320,
+ 321,
+ 322,
+ 323,
+ 324,
+ 325,
+ 326,
+ 327,
+ 328,
+ 329,
+ 330,
+ 331,
+ 332
+ ],
+ "xaxis": "x",
+ "y": [
+ 850.5801499441902,
+ 851.5544425155971,
+ 852.5505004646595,
+ 853.5666948411362,
+ 854.6013966947852,
+ 855.652977075365,
+ 856.7198070326342,
+ 857.8002576163509,
+ 858.8926998762737,
+ 859.9955048621609,
+ 861.107043623771,
+ 862.2256872108624,
+ 863.3498066731934,
+ 864.4777730605223,
+ 865.6079574226077,
+ 866.7387308092079,
+ 867.8684642700814,
+ 868.9955288549864,
+ 870.1182956136815,
+ 871.235135595925,
+ 872.3444198514753,
+ 873.4445194300908,
+ 874.5338053815299,
+ 875.610648755551,
+ 876.6734206019125,
+ 877.7204919702705,
+ 878.610138394878,
+ 879.5626174997274,
+ 880.5204647895868,
+ 881.4266687806171,
+ 882.3805069196462,
+ 883.2608213095529,
+ 884.1442388275035,
+ 885.0279281522899,
+ 885.9361480440199,
+ 886.7699608144111,
+ 887.5924936011104,
+ 888.3700876576011,
+ 889.1225848829059,
+ 889.9675190830012,
+ 890.7551699924213,
+ 891.5189698519878,
+ 892.2395297740698,
+ 892.6916577950893,
+ 893.0830143377063,
+ 893.3819792066729,
+ 893.5837957823596,
+ 893.742983985943,
+ 893.7433690456272,
+ 894.0231035809508,
+ 894.2498584338352,
+ 894.125234999556,
+ 894.1779655257287,
+ 894.2002763368456,
+ 894.1007044326122,
+ 894.0885863778431,
+ 893.9821287004324,
+ 893.8357380687081,
+ 893.624362952624,
+ 893.4355025027837,
+ 893.1213617521439,
+ 892.7434822984758,
+ 892.3045822101386,
+ 891.9199302361412,
+ 891.5021404787291,
+ 891.0823801217562,
+ 890.5419828307643,
+ 890.0306688712183,
+ 889.377177285905,
+ 888.6668554213102,
+ 887.9320029897715,
+ 887.2968357153147,
+ 886.6125393552613,
+ 885.8104373823969,
+ 884.9779156944765,
+ 884.1286778861456,
+ 883.2711046681794,
+ 882.4082538674818,
+ 881.5112233571647,
+ 880.6312487258027,
+ 879.7136967993717,
+ 878.828036875025,
+ 877.9414029761823,
+ 877.0213821376584,
+ 876.014926725305,
+ 874.9011755644634,
+ 873.771138644035,
+ 872.6894153886952,
+ 871.5117216696983,
+ 870.3295204873386,
+ 869.0515753470186,
+ 867.763346848072,
+ 866.5238850256073,
+ 865.307232326792,
+ 864.087884210187,
+ 862.8614238147082,
+ 861.6027996103096,
+ 860.3726471719759,
+ 859.0815420506824,
+ 857.8551722574822,
+ 856.6045663547437,
+ 855.3264400098662,
+ 853.9966477155904,
+ 852.682280459254,
+ 851.4124668734426,
+ 850.1311014971034,
+ 848.8411289042929,
+ 847.4806677386947,
+ 846.1703096331886,
+ 844.853949126722,
+ 843.5287548980873,
+ 842.1976715213405,
+ 840.9018324309875,
+ 839.6710457767034,
+ 838.3792837888894,
+ 837.056354617221,
+ 835.7851140455207,
+ 834.5041337288659,
+ 833.2168112527058,
+ 832.0122313075202,
+ 830.6964597158649,
+ 829.4822306280034,
+ 828.1580556750037,
+ 826.8658406757966,
+ 825.5439307797628,
+ 824.2543205960668,
+ 822.9469070646167,
+ 821.630410654732,
+ 820.3075494347727,
+ 818.9808149674009,
+ 817.5343722393665,
+ 816.1789168496636,
+ 814.824571337874,
+ 813.4611429476502,
+ 812.0839883122114,
+ 810.7322023147935,
+ 809.4772928038196,
+ 808.2615687783605,
+ 807.05397630741,
+ 805.861423814715,
+ 804.749643253434,
+ 803.6607171169417,
+ 802.5480531834439,
+ 801.4709279937455,
+ 800.450202722505,
+ 799.4001902646918,
+ 798.3792611383245,
+ 797.4189222858024,
+ 796.459217649231,
+ 795.5844752994609,
+ 794.7611497428232,
+ 793.9499195903851,
+ 793.1494258079665,
+ 792.4229087860635,
+ 791.662461210807,
+ 790.8718204261916,
+ 790.1397313641515,
+ 789.4368388864059,
+ 788.7926113840841,
+ 788.1241930733638,
+ 787.5194228633932,
+ 786.9156266279181,
+ 786.3735531947711,
+ 785.8949013566773,
+ 785.4374051506478,
+ 784.990985073183,
+ 784.5626628008778,
+ 784.0886316789952,
+ 783.7024168156914,
+ 783.2809350154241,
+ 782.8453872113971,
+ 782.4873496567525,
+ 782.0626514755934,
+ 781.6568665201017,
+ 781.2374685722434,
+ 780.824979048132,
+ 780.4931935037255,
+ 780.1452128020111,
+ 779.8404267366413,
+ 779.5414392171052,
+ 779.1902194839291,
+ 778.884799202609,
+ 778.5940111892907,
+ 778.3020000452102,
+ 777.939862737457,
+ 777.5889827628257,
+ 777.2188724545515,
+ 776.8259077214885,
+ 776.3685021177376,
+ 775.8965321976943,
+ 775.4336904572247,
+ 774.9128859089902,
+ 774.3529411763803,
+ 773.8170966498906,
+ 773.1865727422143,
+ 772.5614623206872,
+ 771.8771659606339,
+ 771.134363179144,
+ 770.3284106094371,
+ 769.4551178961253,
+ 768.4783347300288,
+ 767.3355002377416,
+ 766.1085641802997,
+ 764.8475163649473,
+ 763.4318784116529,
+ 761.9889238713464,
+ 760.4696822124189,
+ 758.8522729845771,
+ 757.1949534529911,
+ 755.4385603297042,
+ 753.7337199029674,
+ 751.9047543544842,
+ 750.0179619016544,
+ 748.0544066682405,
+ 746.0220163536242,
+ 743.9440304422789,
+ 741.8707784999928,
+ 739.6994495910709,
+ 737.4511087452989,
+ 735.1028562367485,
+ 732.5365693446337,
+ 729.9604294547156,
+ 727.547962581174,
+ 725.1788035968258,
+ 722.809418106781,
+ 720.5085958911026,
+ 718.1684296359216,
+ 715.7662461210064,
+ 713.3701556093304,
+ 711.1013159980143,
+ 708.7805386304638,
+ 706.5729461595135,
+ 704.4878253187246,
+ 702.4643140274159,
+ 700.441550204906,
+ 698.4612335499422,
+ 696.5856984302342,
+ 694.7594056489709,
+ 692.9381412941726,
+ 691.136061971878,
+ 689.5531042604916,
+ 688.1308070397167,
+ 686.6040680422311,
+ 684.9981426532078,
+ 683.5025255384375,
+ 682.0855965026726,
+ 680.757231194285,
+ 679.260934562425,
+ 678.0409975310088,
+ 676.9179143354665,
+ 675.767922263166,
+ 674.622868015052,
+ 673.3867358263274,
+ 672.3523975627203,
+ 671.2324401457913,
+ 670.1481347255101,
+ 669.2089741556221,
+ 668.2565177013422,
+ 667.3796235474542,
+ 666.3987632788187,
+ 665.3011166730067,
+ 663.9925932636431,
+ 662.7462230174315,
+ 661.5337833245734,
+ 660.3323744591405,
+ 659.1508301433013,
+ 658.1664363857983,
+ 656.8927495525746,
+ 655.8409250491884,
+ 654.8297356677756,
+ 653.4877347164518,
+ 652.6534915852372,
+ 651.8935876236526,
+ 651.0576230491438,
+ 649.9365784048709,
+ 648.8248657952989,
+ 647.8565539422561,
+ 647.4404856281379,
+ 647.1404335318277,
+ 646.9999093976458,
+ 646.3138915942982,
+ 645.9862284535702,
+ 645.8442999840693,
+ 645.8857278759806,
+ 646.0213141859764,
+ 646.455299100697,
+ 646.9690366711968,
+ 647.5571813630356,
+ 648.5641803890611,
+ 649.9424449024135,
+ 651.443067793079,
+ 653.0399782553769,
+ 654.5372262111626,
+ 656.6003533488101,
+ 658.830279281447,
+ 661.3580149039975,
+ 663.8892160637066,
+ 667.286008743042,
+ 670.0979637137091,
+ 673.0780538629762,
+ 676.0354481414419,
+ 679.656572062708,
+ 683.411606151815,
+ 687.2642641961644,
+ 690.9351514189775,
+ 694.5756868784439,
+ 698.5863099956148,
+ 702.4537362113838,
+ 706.5970526381816,
+ 710.8014229139487,
+ 715.0582430682321,
+ 719.3589091304963,
+ 723.6948171302064,
+ 728.0573630968272,
+ 732.4379430598235,
+ 736.8279530486602,
+ 741.2187890928021,
+ 745.601847221714,
+ 749.9685234648609,
+ 754.3102138517074,
+ 758.6183144117186,
+ 762.8842211743591,
+ 767.099330169094,
+ 771.2550374253879,
+ 775.3427389727058,
+ 779.3538308405124,
+ 783.2797090582726,
+ 787.1117696554513,
+ 790.8414086615135,
+ 794.4600221059236,
+ 797.9590060181469,
+ 801.3297564276479,
+ 804.5636693638916
+ ],
+ "yaxis": "y"
+ }
+ ],
+ "layout": {
+ "legend": {
+ "title": {
+ "text": "variable"
+ },
+ "tracegroupgap": 0
+ },
+ "margin": {
+ "t": 60
+ },
+ "template": {
+ "data": {
+ "bar": [
+ {
+ "error_x": {
+ "color": "#2a3f5f"
+ },
+ "error_y": {
+ "color": "#2a3f5f"
+ },
+ "marker": {
+ "line": {
+ "color": "#E5ECF6",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "bar"
+ }
+ ],
+ "barpolar": [
+ {
+ "marker": {
+ "line": {
+ "color": "#E5ECF6",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "barpolar"
+ }
+ ],
+ "carpet": [
+ {
+ "aaxis": {
+ "endlinecolor": "#2a3f5f",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "minorgridcolor": "white",
+ "startlinecolor": "#2a3f5f"
+ },
+ "baxis": {
+ "endlinecolor": "#2a3f5f",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "minorgridcolor": "white",
+ "startlinecolor": "#2a3f5f"
+ },
+ "type": "carpet"
+ }
+ ],
+ "choropleth": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "type": "choropleth"
+ }
+ ],
+ "contour": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1,
+ "#f0f921"
+ ]
+ ],
+ "type": "contour"
+ }
+ ],
+ "contourcarpet": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "type": "contourcarpet"
+ }
+ ],
+ "heatmap": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1,
+ "#f0f921"
+ ]
+ ],
+ "type": "heatmap"
+ }
+ ],
+ "heatmapgl": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1,
+ "#f0f921"
+ ]
+ ],
+ "type": "heatmapgl"
+ }
+ ],
+ "histogram": [
+ {
+ "marker": {
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "histogram"
+ }
+ ],
+ "histogram2d": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1,
+ "#f0f921"
+ ]
+ ],
+ "type": "histogram2d"
+ }
+ ],
+ "histogram2dcontour": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1,
+ "#f0f921"
+ ]
+ ],
+ "type": "histogram2dcontour"
+ }
+ ],
+ "mesh3d": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "type": "mesh3d"
+ }
+ ],
+ "parcoords": [
+ {
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "parcoords"
+ }
+ ],
+ "pie": [
+ {
+ "automargin": true,
+ "type": "pie"
+ }
+ ],
+ "scatter": [
+ {
+ "fillpattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ },
+ "type": "scatter"
+ }
+ ],
+ "scatter3d": [
+ {
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatter3d"
+ }
+ ],
+ "scattercarpet": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scattercarpet"
+ }
+ ],
+ "scattergeo": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scattergeo"
+ }
+ ],
+ "scattergl": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scattergl"
+ }
+ ],
+ "scattermapbox": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scattermapbox"
+ }
+ ],
+ "scatterpolar": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatterpolar"
+ }
+ ],
+ "scatterpolargl": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatterpolargl"
+ }
+ ],
+ "scatterternary": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatterternary"
+ }
+ ],
+ "surface": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1,
+ "#f0f921"
+ ]
+ ],
+ "type": "surface"
+ }
+ ],
+ "table": [
+ {
+ "cells": {
+ "fill": {
+ "color": "#EBF0F8"
+ },
+ "line": {
+ "color": "white"
+ }
+ },
+ "header": {
+ "fill": {
+ "color": "#C8D4E3"
+ },
+ "line": {
+ "color": "white"
+ }
+ },
+ "type": "table"
+ }
+ ]
+ },
+ "layout": {
+ "annotationdefaults": {
+ "arrowcolor": "#2a3f5f",
+ "arrowhead": 0,
+ "arrowwidth": 1
+ },
+ "autotypenumbers": "strict",
+ "coloraxis": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "colorscale": {
+ "diverging": [
+ [
+ 0,
+ "#8e0152"
+ ],
+ [
+ 0.1,
+ "#c51b7d"
+ ],
+ [
+ 0.2,
+ "#de77ae"
+ ],
+ [
+ 0.3,
+ "#f1b6da"
+ ],
+ [
+ 0.4,
+ "#fde0ef"
+ ],
+ [
+ 0.5,
+ "#f7f7f7"
+ ],
+ [
+ 0.6,
+ "#e6f5d0"
+ ],
+ [
+ 0.7,
+ "#b8e186"
+ ],
+ [
+ 0.8,
+ "#7fbc41"
+ ],
+ [
+ 0.9,
+ "#4d9221"
+ ],
+ [
+ 1,
+ "#276419"
+ ]
+ ],
+ "sequential": [
+ [
+ 0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1,
+ "#f0f921"
+ ]
+ ],
+ "sequentialminus": [
+ [
+ 0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1,
+ "#f0f921"
+ ]
+ ]
+ },
+ "colorway": [
+ "#636efa",
+ "#EF553B",
+ "#00cc96",
+ "#ab63fa",
+ "#FFA15A",
+ "#19d3f3",
+ "#FF6692",
+ "#B6E880",
+ "#FF97FF",
+ "#FECB52"
+ ],
+ "font": {
+ "color": "#2a3f5f"
+ },
+ "geo": {
+ "bgcolor": "white",
+ "lakecolor": "white",
+ "landcolor": "#E5ECF6",
+ "showlakes": true,
+ "showland": true,
+ "subunitcolor": "white"
+ },
+ "hoverlabel": {
+ "align": "left"
+ },
+ "hovermode": "closest",
+ "mapbox": {
+ "style": "light"
+ },
+ "paper_bgcolor": "white",
+ "plot_bgcolor": "#E5ECF6",
+ "polar": {
+ "angularaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ },
+ "bgcolor": "#E5ECF6",
+ "radialaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ }
+ },
+ "scene": {
+ "xaxis": {
+ "backgroundcolor": "#E5ECF6",
+ "gridcolor": "white",
+ "gridwidth": 2,
+ "linecolor": "white",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "white"
+ },
+ "yaxis": {
+ "backgroundcolor": "#E5ECF6",
+ "gridcolor": "white",
+ "gridwidth": 2,
+ "linecolor": "white",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "white"
+ },
+ "zaxis": {
+ "backgroundcolor": "#E5ECF6",
+ "gridcolor": "white",
+ "gridwidth": 2,
+ "linecolor": "white",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "white"
+ }
+ },
+ "shapedefaults": {
+ "line": {
+ "color": "#2a3f5f"
+ }
+ },
+ "ternary": {
+ "aaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ },
+ "baxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ },
+ "bgcolor": "#E5ECF6",
+ "caxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ }
+ },
+ "title": {
+ "x": 0.05
+ },
+ "xaxis": {
+ "automargin": true,
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "white",
+ "zerolinewidth": 2
+ },
+ "yaxis": {
+ "automargin": true,
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "white",
+ "zerolinewidth": 2
+ }
+ }
+ },
+ "xaxis": {
+ "anchor": "y",
+ "domain": [
+ 0,
+ 1
+ ],
+ "title": {
+ "text": "index"
+ }
+ },
+ "yaxis": {
+ "anchor": "x",
+ "domain": [
+ 0,
+ 1
+ ],
+ "title": {
+ "text": "value"
+ }
+ }
+ }
+ },
+ "text/html": [
+ "
"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "from scipy.signal import savgol_filter\n",
+ "def filt(df, window_length=101, polyorder=2):\n",
+ " df = df.copy()\n",
+ " for column in df.columns:\n",
+ " df[column] = savgol_filter(df[column].values, window_length, polyorder)\n",
+ " return df\n",
+ "\n",
+ "df = pd.DataFrame(np.array(imgpts_list).reshape(-1, 10),\n",
+ " columns=['x0', 'y0', 'x1', 'y1', 'x2', 'y2', 'x3', 'y3', 'x4', 'y4'])\n",
+ "df[df==0] = None\n",
+ "df_filt = filt(df.dropna(), 51, 3)\n",
+ "imgpts_filt_list = df_filt.astype(int).values.reshape(-1, 5, 2)\n",
+ "\n",
+ "px.line(df-df_filt)\n",
+ "\n",
+ "px.line(df)\n",
+ "\n",
+ "px.line(df_filt)"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.9.7"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/Karussell/utils/utils.py b/Karussell/utils/utils.py
new file mode 100644
index 0000000..d3952c7
--- /dev/null
+++ b/Karussell/utils/utils.py
@@ -0,0 +1,111 @@
+import cv2 as cv
+import pandas as pd
+import math
+import numpy as np
+from tqdm.notebook import tqdm
+
+
+def encode(ann):
+ keypoints_2d = pd.DataFrame(np.array(ann['keypoints']).reshape(-1, 3),
+ columns=['x','y','conf'], index=range(1, 25))
+ bbox = np.array(ann['bbox'])
+ score = ann['score']
+ return keypoints_2d, bbox, score
+
+
+def fit(imageSize, keypoints_2d, keypoints_3d, focus=1):
+
+ objectPoints = keypoints_3d.loc[keypoints_2d.index].values
+ imagePoints = keypoints_2d[['x', 'y']].values.astype('float')
+
+ n = len(imagePoints)
+ fx = fy = focus*np.hypot(*imageSize)
+ cx = imageSize[0]/2
+ cy = imageSize[1]/2
+ distCoeffs = np.zeros(4, np.float32)
+ if n < 6:
+ raise ValueError('Number of keypoints must be > 5')
+
+ cameraMatrix = np.float32([[fx,0, cx],
+ [0, fy,cy],
+ [0, 0, 1]])
+
+ _, rvecs, tvecs = cv.solvePnP(objectPoints, imagePoints, cameraMatrix, distCoeffs, flags=cv.SOLVEPNP_ITERATIVE )
+ return rvecs, tvecs, cameraMatrix, distCoeffs
+
+
+def rvec2euler(rvec):
+ rvec_matrix = cv.Rodrigues(rvec)[0]
+ proj_matrix = np.hstack((rvec_matrix, np.zeros_like(rvec)))
+ euler_angles = cv.decomposeProjectionMatrix(proj_matrix)[6]
+ return euler_angles.flatten()
+
+# Checks if a matrix is a valid rotation matrix.
+def isRotationMatrix(R) :
+ Rt = np.transpose(R)
+ shouldBeIdentity = np.dot(Rt, R)
+ I = np.identity(3, dtype = R.dtype)
+ n = np.linalg.norm(I - shouldBeIdentity)
+ return n < 1e-6
+
+# Calculates rotation matrix to euler angles
+# The result is the same as MATLAB except the order
+# of the euler angles ( x and z are swapped ).
+def rotationMatrixToEulerAngles(R) :
+
+ assert(isRotationMatrix(R))
+
+ sy = math.sqrt(R[0,0] * R[0,0] + R[1,0] * R[1,0])
+
+ singular = sy < 1e-6
+
+ if not singular :
+ x = math.atan2(R[2,1] , R[2,2])
+ y = math.atan2(-R[2,0], sy)
+ z = math.atan2(R[1,0], R[0,0])
+ else :
+ x = math.atan2(-R[1,2], R[1,1])
+ y = math.atan2(-R[2,0], sy)
+ z = 0
+
+ return np.array([x, y, z])
+
+def rvec2euler_Fridman(rvec):
+ R = cv.Rodrigues(rvec)[0]
+ euler_angles = np.rad2deg(rotationMatrixToEulerAngles(R))
+ return euler_angles
+
+
+def pose_estimation(img_json, keypoints_3d, ImageSize=(1920, 1080), treshhold=0.01, focus=1, fridman=False):
+ poses = []
+ for i, ann in enumerate(img_json):
+ keypoints_2d, bbox, score = encode(ann)
+
+ conf_keypoints_2d = keypoints_2d[keypoints_2d['conf']>treshhold]
+ if len(conf_keypoints_2d)>5:
+ rvec, tvec, camMatrx, dist = fit(ImageSize, conf_keypoints_2d, keypoints_3d, focus=focus)
+ if not fridman:
+ euler_angles = rvec2euler(rvec)
+ else:
+ euler_angles = rvec2euler_Fridman(rvec) #alternative
+
+ pose = {'Euler angles':[-euler_angles[2], -euler_angles[0]+90, -euler_angles[1]],
+ 'xyz coords':[tvec[2][0],tvec[0][0],-tvec[1][0]]}
+ poses.append(pose)
+ return poses
+
+
+def image_pose_estimation(img_json, img_name, *args, **kvargs):
+ poses = pose_estimation(img_json, *args, **kvargs)
+ UE4_json = {'data':{'filename':img_name, 'poses':poses}}
+ return UE4_json
+
+
+def video_pose_estimation(video_json, video_name, *args, **kvargs):
+ video_poses = []
+ for frame in tqdm(video_json):
+ num = frame['frame']
+ frame_poses = pose_estimation(frame['predictions'], *args, **kvargs)
+ video_poses.append({'frame':num, 'poses':frame_poses})
+ UE4_json_video = {'filename':video_name, 'data':video_poses}
+ return UE4_json_video
\ No newline at end of file