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:00score:\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