Files
ORB-SLAM3_Linux/Examples/Monocular/jupyter notebook/playground.ipynb
Ivan bbabd50d1e v1
2022-06-25 19:31:12 +03:00

1562 lines
194 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "c1261718",
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"import pandas as pd\n",
"from IPython.display import display\n",
"from datetime import datetime, timedelta"
]
},
{
"cell_type": "markdown",
"id": "a2c7019e",
"metadata": {},
"source": [
"# Импорт"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "f7f35a46",
"metadata": {},
"outputs": [],
"source": [
"table = pd.read_csv(\"../results/lost_lot.txt\", sep=\" \")"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "31554771",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>x</th>\n",
" <th>y</th>\n",
" <th>z</th>\n",
" <th>cnt</th>\n",
" <th>mapId</th>\n",
" <th>zero</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0.000000</td>\n",
" <td>-54.1000</td>\n",
" <td>0.00000</td>\n",
" <td>0</td>\n",
" <td>5</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>0.000000</td>\n",
" <td>-54.1000</td>\n",
" <td>0.00000</td>\n",
" <td>1</td>\n",
" <td>5</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>0.000000</td>\n",
" <td>-54.1000</td>\n",
" <td>0.00000</td>\n",
" <td>2</td>\n",
" <td>5</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>0.000000</td>\n",
" <td>-54.1000</td>\n",
" <td>0.00000</td>\n",
" <td>3</td>\n",
" <td>5</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>0.000000</td>\n",
" <td>-54.1000</td>\n",
" <td>0.00000</td>\n",
" <td>4</td>\n",
" <td>5</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2486</th>\n",
" <td>0.260989</td>\n",
" <td>-31.4493</td>\n",
" <td>2.96099</td>\n",
" <td>2486</td>\n",
" <td>8</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2487</th>\n",
" <td>0.261818</td>\n",
" <td>-31.4486</td>\n",
" <td>2.95545</td>\n",
" <td>2487</td>\n",
" <td>8</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2488</th>\n",
" <td>0.261483</td>\n",
" <td>-31.4487</td>\n",
" <td>2.95513</td>\n",
" <td>2488</td>\n",
" <td>8</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2489</th>\n",
" <td>0.263058</td>\n",
" <td>-31.4472</td>\n",
" <td>2.95169</td>\n",
" <td>2489</td>\n",
" <td>8</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2490</th>\n",
" <td>0.263255</td>\n",
" <td>-31.4492</td>\n",
" <td>2.95761</td>\n",
" <td>2490</td>\n",
" <td>8</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>2491 rows × 6 columns</p>\n",
"</div>"
],
"text/plain": [
" x y z cnt mapId zero\n",
"0 0.000000 -54.1000 0.00000 0 5 0\n",
"1 0.000000 -54.1000 0.00000 1 5 0\n",
"2 0.000000 -54.1000 0.00000 2 5 0\n",
"3 0.000000 -54.1000 0.00000 3 5 0\n",
"4 0.000000 -54.1000 0.00000 4 5 0\n",
"... ... ... ... ... ... ...\n",
"2486 0.260989 -31.4493 2.96099 2486 8 0\n",
"2487 0.261818 -31.4486 2.95545 2487 8 0\n",
"2488 0.261483 -31.4487 2.95513 2488 8 0\n",
"2489 0.263058 -31.4472 2.95169 2489 8 0\n",
"2490 0.263255 -31.4492 2.95761 2490 8 0\n",
"\n",
"[2491 rows x 6 columns]"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"table"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "e6758882",
"metadata": {},
"outputs": [],
"source": [
"x = table[\"y\"].values\n",
"x = -x\n",
"# v = np.vstack([ np.vstack([table[\"v1\"].values, table[\"v2\"].values]), table[\"v3\"].values ])\n",
"# v = v.T"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "b68c60ea",
"metadata": {},
"outputs": [],
"source": [
"def plot_x(x, name):\n",
" fig = plt.figure(figsize=(15,5))\n",
" ax = fig.add_subplot(1,1,1)\n",
" ax.set_aspect(\"equal\")\n",
" ax.grid()\n",
" ax.plot(x)\n",
" fig.savefig(fname=name, dpi=300, format=\"png\", bbox_inches='tight', pad_inches=0.0)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "c2be84f7",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 1080x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plot_x(x, \"lol.png\")"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "78b9f075",
"metadata": {},
"outputs": [],
"source": [
"ground_truth = pd.read_csv(\"../working_data/camera1-2020-10-14---19-38-42---093390448.txt\", sep=\" \")"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "bf3224e5",
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>date</th>\n",
" <th>time</th>\n",
" <th>c2</th>\n",
" <th>x</th>\n",
" <th>y</th>\n",
" <th>z</th>\n",
" <th>name</th>\n",
" <th>xc</th>\n",
" <th>yc</th>\n",
" <th>zc</th>\n",
" <th>namez</th>\n",
" <th>numberz</th>\n",
" <th>namef</th>\n",
" <th>numberf</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>2020-10-14</td>\n",
" <td>17:38:25.098326</td>\n",
" <td>C255</td>\n",
" <td>-54.098907</td>\n",
" <td>-7.159363</td>\n",
" <td>0.0</td>\n",
" <td>COORDS</td>\n",
" <td>(0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0)</td>\n",
" <td>ZOOM</td>\n",
" <td>1365</td>\n",
" <td>FOCUS</td>\n",
" <td>4095</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2020-10-14</td>\n",
" <td>17:38:25.118190</td>\n",
" <td>C255</td>\n",
" <td>-54.098907</td>\n",
" <td>-7.159363</td>\n",
" <td>0.0</td>\n",
" <td>COORDS</td>\n",
" <td>(0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0)</td>\n",
" <td>ZOOM</td>\n",
" <td>1365</td>\n",
" <td>FOCUS</td>\n",
" <td>4095</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2020-10-14</td>\n",
" <td>17:38:25.138118</td>\n",
" <td>C255</td>\n",
" <td>-54.098907</td>\n",
" <td>-7.159363</td>\n",
" <td>0.0</td>\n",
" <td>COORDS</td>\n",
" <td>(0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0)</td>\n",
" <td>ZOOM</td>\n",
" <td>1365</td>\n",
" <td>FOCUS</td>\n",
" <td>4095</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>2020-10-14</td>\n",
" <td>17:38:25.158897</td>\n",
" <td>C255</td>\n",
" <td>-54.098907</td>\n",
" <td>-7.159363</td>\n",
" <td>0.0</td>\n",
" <td>COORDS</td>\n",
" <td>(0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0)</td>\n",
" <td>ZOOM</td>\n",
" <td>1365</td>\n",
" <td>FOCUS</td>\n",
" <td>4095</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>2020-10-14</td>\n",
" <td>17:38:25.177813</td>\n",
" <td>C255</td>\n",
" <td>-54.098907</td>\n",
" <td>-7.159363</td>\n",
" <td>0.0</td>\n",
" <td>COORDS</td>\n",
" <td>(0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0)</td>\n",
" <td>ZOOM</td>\n",
" <td>1365</td>\n",
" <td>FOCUS</td>\n",
" <td>4095</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>37699</th>\n",
" <td>2020-10-14</td>\n",
" <td>17:50:59.079517</td>\n",
" <td>C255</td>\n",
" <td>39.291199</td>\n",
" <td>-2.818695</td>\n",
" <td>0.0</td>\n",
" <td>COORDS</td>\n",
" <td>(0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0)</td>\n",
" <td>ZOOM</td>\n",
" <td>1365</td>\n",
" <td>FOCUS</td>\n",
" <td>4095</td>\n",
" </tr>\n",
" <tr>\n",
" <th>37700</th>\n",
" <td>2020-10-14</td>\n",
" <td>17:50:59.103463</td>\n",
" <td>C255</td>\n",
" <td>39.291199</td>\n",
" <td>-2.818695</td>\n",
" <td>0.0</td>\n",
" <td>COORDS</td>\n",
" <td>(0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0)</td>\n",
" <td>ZOOM</td>\n",
" <td>1365</td>\n",
" <td>FOCUS</td>\n",
" <td>4095</td>\n",
" </tr>\n",
" <tr>\n",
" <th>37701</th>\n",
" <td>2020-10-14</td>\n",
" <td>17:50:59.120408</td>\n",
" <td>C255</td>\n",
" <td>39.291199</td>\n",
" <td>-2.818695</td>\n",
" <td>0.0</td>\n",
" <td>COORDS</td>\n",
" <td>(0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0)</td>\n",
" <td>ZOOM</td>\n",
" <td>1365</td>\n",
" <td>FOCUS</td>\n",
" <td>4095</td>\n",
" </tr>\n",
" <tr>\n",
" <th>37702</th>\n",
" <td>2020-10-14</td>\n",
" <td>17:50:59.143372</td>\n",
" <td>C255</td>\n",
" <td>39.291199</td>\n",
" <td>-2.818695</td>\n",
" <td>0.0</td>\n",
" <td>COORDS</td>\n",
" <td>(0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0)</td>\n",
" <td>ZOOM</td>\n",
" <td>1365</td>\n",
" <td>FOCUS</td>\n",
" <td>4095</td>\n",
" </tr>\n",
" <tr>\n",
" <th>37703</th>\n",
" <td>2020-10-14</td>\n",
" <td>17:50:59.160309</td>\n",
" <td>C255</td>\n",
" <td>39.291199</td>\n",
" <td>-2.818695</td>\n",
" <td>0.0</td>\n",
" <td>COORDS</td>\n",
" <td>(0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0)</td>\n",
" <td>ZOOM</td>\n",
" <td>1365</td>\n",
" <td>FOCUS</td>\n",
" <td>4095</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>37704 rows × 14 columns</p>\n",
"</div>"
],
"text/plain": [
" date time c2 x y z name \\\n",
"0 2020-10-14 17:38:25.098326 C255 -54.098907 -7.159363 0.0 COORDS \n",
"1 2020-10-14 17:38:25.118190 C255 -54.098907 -7.159363 0.0 COORDS \n",
"2 2020-10-14 17:38:25.138118 C255 -54.098907 -7.159363 0.0 COORDS \n",
"3 2020-10-14 17:38:25.158897 C255 -54.098907 -7.159363 0.0 COORDS \n",
"4 2020-10-14 17:38:25.177813 C255 -54.098907 -7.159363 0.0 COORDS \n",
"... ... ... ... ... ... ... ... \n",
"37699 2020-10-14 17:50:59.079517 C255 39.291199 -2.818695 0.0 COORDS \n",
"37700 2020-10-14 17:50:59.103463 C255 39.291199 -2.818695 0.0 COORDS \n",
"37701 2020-10-14 17:50:59.120408 C255 39.291199 -2.818695 0.0 COORDS \n",
"37702 2020-10-14 17:50:59.143372 C255 39.291199 -2.818695 0.0 COORDS \n",
"37703 2020-10-14 17:50:59.160309 C255 39.291199 -2.818695 0.0 COORDS \n",
"\n",
" xc yc zc namez numberz namef numberf \n",
"0 (0.0 0.0 0.0) ZOOM 1365 FOCUS 4095 \n",
"1 (0.0 0.0 0.0) ZOOM 1365 FOCUS 4095 \n",
"2 (0.0 0.0 0.0) ZOOM 1365 FOCUS 4095 \n",
"3 (0.0 0.0 0.0) ZOOM 1365 FOCUS 4095 \n",
"4 (0.0 0.0 0.0) ZOOM 1365 FOCUS 4095 \n",
"... ... ... ... ... ... ... ... \n",
"37699 (0.0 0.0 0.0) ZOOM 1365 FOCUS 4095 \n",
"37700 (0.0 0.0 0.0) ZOOM 1365 FOCUS 4095 \n",
"37701 (0.0 0.0 0.0) ZOOM 1365 FOCUS 4095 \n",
"37702 (0.0 0.0 0.0) ZOOM 1365 FOCUS 4095 \n",
"37703 (0.0 0.0 0.0) ZOOM 1365 FOCUS 4095 \n",
"\n",
"[37704 rows x 14 columns]"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ground_truth"
]
},
{
"cell_type": "markdown",
"id": "a9fc22bf",
"metadata": {},
"source": [
"# Обработка"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "096f42fd",
"metadata": {},
"outputs": [],
"source": [
"true_x = ground_truth[\"x\"].values"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "9b4fc811",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"17.835578"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Time difference between video start and inertial start. \n",
"video_start = datetime(2020, 10, 14, 17, 38, 25, 98326)\n",
"inertial_start = datetime(2020, 10, 14, 17, 38, 42, 933904)\n",
"delta = inertial_start - video_start\n",
"delta.total_seconds()"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "211eb76c",
"metadata": {},
"outputs": [],
"source": [
"# Let's create the timestamps \n",
"time_x = table['cnt'].values / 30\n",
"time_x = time_x[351:]\n",
"\n",
"# We could write ground_truth.index.values[:5000], but it's the same as np.arange(0, 5000) which is much faster.\n",
"time_true_x = np.arange(0, 6000) / 50"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "657c7996",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([11.7 , 11.73333333, 11.76666667, ..., 82.93333333,\n",
" 82.96666667, 83. ])"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"time_x"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "829b1cd5",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([0.0000e+00, 2.0000e-02, 4.0000e-02, ..., 1.1994e+02, 1.1996e+02,\n",
" 1.1998e+02])"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"time_true_x"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "4aa5e965",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"6000"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"time_true_x.shape[0]"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "1ba08e13",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(36862,)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"(5108,)"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# If inertial data starts with 17.835578 seconds earlier, we need to start estimating from 17th second.\n",
"time_true_x = time_true_x - 17.835578\n",
"new_idxs = np.where(time_true_x >= 0)\n",
"time_true_x = time_true_x[new_idxs]\n",
"\n",
"# We have to skew not only the time, but also the \"true_x\" values. \n",
"fps_diff = 6000 - time_true_x.shape[0]\n",
"true_x = true_x[fps_diff - 50:]\n",
"\n",
"display(true_x.shape)\n",
"display(time_true_x.shape)"
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "38dd8be1",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"30.784421999999996"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"n = np.where(time_true_x <= 30.8)[0][-1]\n",
"time_true_x[n]"
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "05599d28",
"metadata": {},
"outputs": [],
"source": [
"true_x_indexes = []\n",
"for time in time_x:\n",
" # Take the last element which is smaller than current time\n",
" nearest_el_idx = np.where(time_true_x <= time)[0][-1]\n",
" true_x_indexes.append(nearest_el_idx)\n"
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "1c1f84b6",
"metadata": {},
"outputs": [],
"source": [
"true_values = true_x[true_x_indexes]"
]
},
{
"cell_type": "code",
"execution_count": 19,
"id": "7ac96655",
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"array([54.1 , 54.1 , 54.1 , ..., 31.4487, 31.4472, 31.4492])"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"array([-55.52749634, -55.52749634, -55.52749634, ..., -60.05496216,\n",
" -60.05496216, -60.05496216])"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"-109.62749633789063"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# x values and true_values are a bit skewed. We need to correct the initial angle of these both graphs. \n",
"display(x)\n",
"display(true_values)\n",
"display(true_values[0] - x[0])"
]
},
{
"cell_type": "code",
"execution_count": 20,
"id": "9b153d1f",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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ooEHgXOBnsCDJSceItXkdX7fjwGecx+Tu1hrPwNwn0uMAjq4t5lmjAnQeYc4rAD4q7W2PdALGO/ufzoeexAVdRXTE8iw1m601h4DEoFhDmcSOVPDgDfcr98ArijV/qYtthiIMsY0dCCf+Dlr7ffA/hOaz7TfXgx8Za3db609AHxF2SfYIlWinH5cnmFAorU2z1q7Ccig+JxD5x3iGGvtTmvtMvfrQ8AaoDE6HnsUFXUV0xjYVur9dnebiKeywJfGmGRjzFh3W31r7U73611Affdr9W/xZGfab9WfxVNNcN+a9lqpbyvUj8WjGWOaA12Bn9Dx2KOoqBPxD32ttd0oviVivDGmf+mFtngYXA2FK15F/Va82HSgJdAF2Ak842gakdNgjKkJfADcZa3NLr1Mx2PnqairmB1Ak1LvY91tIh7JWrvD/TMTSKL4Vp7dJbdVun9muldX/xZPdqb9Vv1ZPI61dre1ttBaWwS8TPExGdSPxUMZY4IoLujettZ+6G7W8diDqKirmJ+BeGNMnDEmmOKHmj9yOJNImYwx4caYiJLXwEVAKsV9tmTkqZuAue7XHwE3ukev6gVklbq9QsRpZ9pv5wEXGWNqu29xu8jdJuKYE55THk7xMRmK+/EoY0wNY0wcxQNNLEHnHeIgY4wBXgXWWGufLbVIx2MPEuh0AG9krS0wxkyguCMGAK9Za1c7HEukPPWBpOJjMoHAO9baL4wxPwOzjDE3A1uAq93rfwZcSvED+keAMdUfWQSMMe8CA4C6xpjtFI+aNoUz6LfW2v3GmEcpPikGeMRae7qDVoictXL68QBjTBeKb1fbDIwDsNauNsbMAtIoHnFwvLW20L0fnXeIU/oANwApxpgV7rb70fHYo5jiW2BFRERERETEG+n2SxERERERES+mok5ERERERMSLqagTERERERHxYirqREREREREvJiKOhERERERES+mok5ERERERMSLqagTERERERHxYirqREREREREvNj/B55f6zAs0vLFAAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 1080x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plot_x(true_values, \"true values\")"
]
},
{
"cell_type": "code",
"execution_count": 21,
"id": "ecab03a5",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA3UAAABWCAYAAABo3r8lAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAAAhVUlEQVR4nO3dd3xUVf7/8deZmRBK6IFAAiQ06T1URSNrA1kRFZbVxfb1q+vCqmtby7quu6vrFvSr7rqKyg/FwtoQVlEsSBPpvUgLvUgvSUiZzPn9MZOQQICUmdyZyfv5ePBg5tYP8eR6P/d+zjnGWouIiIiIiIhEJpfTAYiIiIiIiEj5KakTERERERGJYErqREREREREIpiSOhERERERkQimpE5ERERERCSCKakTERERERGJYB6nTmyMuQp4AXADr1trnz3btvHx8TYlJaWyQiu1zMxMatWq5XQYIhWidizRQO1YooHasUQDtePQWbp06UFrbaOS1jmS1Blj3MC/gMuBXcBiY8w0a+26krZPSUlhyZIllRliqcyaNYu0tDSnwxCpELVjiQZqxxIN1I4lGqgdh44xZvvZ1jlVftkH2GytTbfW5gKTgWEOxSIiImEix5vPZc/NZvrqvU6HUqWkH8hgx6Esp8MQEZFyciqpSwJ2Fvm+K7BMRESqqOy8fG58bSGb92fwyuwtTodTZRzLymPQuNlc/8p8p0MREZFycqxP3fkYY+4E7gRISEhg1qxZzgZUgoyMjLCMKxpN2ZRL89ouUpuEbZONWGrHEi6mb81l6fY8AJq4M8vULtWOy2/SuhwAjmfl6GfoMLVjiQZqx85w6g55N9C8yPdmgWWFrLXjgfEAqampNhxrc1UzXDmemb6eqVvSiXEbHhx1WVCPnZ2Xz6Kth1m39zj5PovLGIwBE9SznJspw8kMptj2JvClYFE1j4tLLmhE8wY1S31MtWMJB0cyc7ln1rf0TqnPxh8zaJqYSFpa51Lvr3Z8ftZalu04wpHMPHK8PrLz8lm16yjf7PB30ejSrD5paQMcjrJqUzuWaKB27AynkrrFQFtjTEv8ydwo4EaHYpEwtiD9EOPnpAPQt2XDoB77RHYeo8YvYO2e40E9rtNiPS4+/tUAOiXWdToUkVLx5vu49uXvOJ7t5fdDO3HbxEV4fdbpsIIuI8fL0axcfD7wuP2PYizgO8+/1Zaw2mLPuc3pu+R6fTw5bQ0L0g+fcax+rRqQ77Pk5Uffz1xEpKpwJKmz1nqNMWOBGfinNJhgrV3rRCwSvnw+yx//u466NWJoWrc6Llfw3p/5fJZfvbOMtXuO86dhnRjWI4lqbn8XU5+1WFu2N2jlVdLN2lm3xf+k/dTnIivw3+Rt/DGDO95czAPvr2T6PQOD+jMTCZUXZ25m+6EsbrswhS7N6uJ2GbxRlGDsPJzFAx+sZNHWMxOqymQMPDakPf1aNaR6jJtYj4u4WA8N42K5feJi9p/IdjQ+EREpP8c6KFlrpwPTnTq/hL/HP1nNur3H+dv1XXl/yU68+b6gHXv83HTmbjrItd0TGd0/JWjHdVqflg14YmhHHvpwFQ9+sJJ/jOimxE7C2r5j2Uz8biuXXNCIJ3/aCQCPyxU1b+qycr2MfPV79h7L5vYLW9KuSRwel4u8wPXMFaj3Pv231Jz2VKmk3+LTHzyd8f20vTon1aFN49olxumJskRaRKSq0agTEpZmrN3He4t2clGbeIb3TOLj5buCdsNxJDOX577cyIDWDRk3sntQjhlObujVjBlrf+Tj5bsZ3KUpl3dMcDokkRLlen2MGv89J3K8PDG0Q+Fyj9vg9QXvIY6TXp2dzt5j2Uy4NZVB7cP3d9H/M1dSJyISqZya0kDkrHK8+Yz7cgOJdavz/27rTYzbRYzbRV4QbvJ8Psuv31tOns/H41d3wB2Fb7GMMbx8U0+a1q3OU/9de97+OiJOGfflBrYdyuLXl7Yp9gbJ44qOBGP5jiO88M0mBrVvzKXtGjsdzjl5XK6gVkOIiEjlUlInYefe91aw8ccMHhnSgZhAP7dglQa9vXA78zYfZFTvFlE9kEg1j4tHBrdn15GT/OXz9YV98UTCxe6jJ3ln4Q6GdGnC/Ve0K7YuGhKMYyfzGPvucjwuw8NXtTujnDLceNxGA6WIiEQwJXUSVqat3MMXa/fRO6U+Q7s0LVzucZ/qg1JehzJy+PNn60luWLNYqVe0Gto1kYFt43lt7la+WLPP6XBECuV48xn5yvfkePP5zWUXnLHe4zbkR/ibutfnprP76Ene+p8+tG9Sx+lwzsvjivyfuYhIVaakTsJGZo6X57/aSNvGcbx9R99iA3zEBKG/xyuzt5Dr9fHyTT2pWS36u5O6XYbXbk4lLtbDHz9dR643st98SPR4/qtN7D56ktH9UmibcObAHZFefrly51FemrmZQe0bM6B1vNPhlIrH7YqafowiIlVR9N/ZSkSw1nLXpKVsPZjJG7ekEutxF1tf0XKsGWv38drcrfy0W2JUl12ernqMm3Eju3HXpKW8u3A7t17Y0umQpIrbciCDN+alc3WXpmd9Y+5xuyJ2JMYDJ3K4++2lADw6uL3D0ZRejEvllyJSfou3HeazVXtZt/c4ew5kUW3JLP+KIqP7GuMfk7egGt1gio3aW1CmXmwbc2okX1N0pGBjihy38FRB9eLPe9Csfs0gHzV0lNRJWHh97lbmbT7I0K5N+UmHM0eIq0h/jx+PZ/PQByupHuPigcvPLPWKdpd1SKB/q4b84b/raFynOkOKlLWKVKZcr49bJizCZQwPXnn2fmZuV+SOfvna3HT2HMvmo7sHlPgWMly5XS6VX4pImXnzfTz133VMWrAdj8vQvXk9GtV00axpXay1FF5VrH8+XfDPs2tP/16wmQ1sfMZyW2ybostDJdz7Qp9OSZ047lhWHq/M3kL/Vg15cVSPEreJcZW/NOjZz3/geLaXGfddTEp8rYqEGpHcLsO4kd0Y8OxM/vL5etLaNaoS5acSfl6auYldR05y64AUWp7jdzHGbcjJi7ykbtWuo4yfk87Qrk3plVzf6XDKJMZtKtxvWUSqDmst327Yz+NT1rD3WDbDuify9PAuxMV6mDVrFmlpJd/PSejozk4cZa3lN++v4HBWLr8d3P6sE2V73OUb/fLTVXuYsnw3o/sl065J5Dw1D7bEejWYcGsqt09cwkdLd0XVhOsSGQ6cyOHfs7YwuHMT/nBNp3Nu63a58PryKymy4DialcsvJ/nLLh+6st15tg4/mqdOxFk7DmXx3FcbWLvnOD5rqV09xv8WKlBm6DLFyxcLSheLfnaZ4uWMoZCX72PfsWz2HMsm1+sjuWFNHh3cnv8d2Oqs93BSOZTUiaPe+n47M3/Yz2UdGtO9eb2zbhdTjtEvdx7O4rGPV1OvZgz3/KRtBSONfGkXNKZni3o8MXUt8XGxDFYZplQSay0PfLASC9xfihLomAgsv/y/rzex73g2r9+cSnLDyKsIKCi/tNZGXMmRSCTL9fp4aeYmxs9Jp5rbRb/WDfHm+/D6LC5jsJwqMfRZW6x00Vrw+cDiKyxJLNgmVL/GHpehc1JdruzUhAsSanNN98TC6afEWUrqxDGZOV7GfbmBfq0aMH506jm3Lc9oeK/O2UJmbj4z7htIo9qxFQk1KrhchhdG9WDg377lmc/XM/CCRsTF6hIgoffGvK3M2XiAX/RrUap+Zu4gzUtZWdbsPsbE+dsY3iOJyzqe2Sc4EsQEnrB7fZYYt5I6kcpgreX+91fw6aq9DGjdkL9e35XmDSJnYA4JL0qtxTFPTF3D8WwvD1zR7ryv7Ms6Gt6qXUd5e8EOhvdIok3jqlt2ebrmDWoy8bbe7Dx8kncXbnc6HKkCdh89yV8+/4ELEuL47VWlGw0yxu2KmFLAjBwvN09YhMdlImq0y9O5A4lcJCXTIpFu5+GTfLpqLz9Lbc47d/RVQicVosf04oipK3bz8bLdXNYhgd4pDc67fYzbkFfKcqzMHC/3TV5BrWruiOzbEmpp7RrTJ6UBz0z/gRYNalLd6YAkqv1jxgZ81vL6zb2pXT2mVPu4I2gi7KemreVoVi7PXteVxnUi97cpxuV/xusve3Wfe2MRCYpdR7IAGNYjUWXPUmFK6spp68FM/r74JEtyNlCrSAlbSXNlFJ2P4/RlFNuuyPoStjMlbVfS3BxF5vkAqBHj5opOCaW+oQq1zBwvj09ZQ0rDmowb0a1U+3hcLqyF0W8sPO+Fb92e4xzOzOGNW3qTEME3WaH0/KjuXPjsTP4wbR1P9tEL+3DxzsLtzFj7Iy4Dvx7Uhl7J53/gEc4+WrqLKct3c+uAFFo0LP0TaI/bsOfoSW6esKjU+1TLzuH7rPXkeH14fT5cxvj7owSGwS7og+Kzp4bMPqNvSsEQ24G+KUX39RUMp11k+0OZuSzaepjR/ZIZ2bt5mX424cYTeFN316SleNQ/ptLEelz8+drOlfL/qjW7j/HcVxvx+iyt4mtxx8CWlTYHV3ZePr/9aBVHsvIq5XyRYv/xbACaR9BcaBK+lNSV0+HMHI7nwsuzNhMJD5STZ9bki3svpkY155/A/n3GBjJyvLx5e2/q1ixdonlR24bM2VSfE9ne827brH4N7r/8Ai5t37iioUatpHo1ePeOvtz4+kK+2BrDYKcDEgD+s3gnWw9mgoXnv9rE23f0dTqkcttyIINHP15NiwY1GXNpmzLte3mHBNIPZHL8ZOluAE/m5rNpv5e5e7ZRze0ixuPCWku+zz/oR8GEtadGhju1rGDkuIKR5ShYdvqIcv7dAvucGoFuVO/m/O4sk6hHkj4tG9A7pT5ZuflAZI08GslW7DzKlv0ZfH3/JSEfOXD2xgPM/GE/XZLqMnHjAT5dtZeZD15CnUp44Lv9UBZTV+whpWFN6tWsFvLzRYrqMW6u7tKUxHo1nA5FooCSunLqldyAP11YgwEXXYzPnpokEU5Nplh8GUWW2RKWccaGFTlO0X0XbT3M2HeXM+LV+fznzv7F3ixWtq/X/cjE+du4umvTMr2F6JXcgI/uHhDCyKqeAW3iGdS+MVN/2M+Fi3dG/JuGaODNt/Rt2YAuSfV4/uuNfLZqL0O6NIm4spzMHC8PvL8Si+WDX/Yv80BFg7s0LfPorP55kdLKtI+c0imxLh/8UtfYynbPe8uZtnIPT09fzxNDO4b0XAUjSE8dcyHvL9nJIx+v5s63lvDazakhr+QpGM320SEduLJTk5CeS6SqUlJXQdU84V+mMrRrIuv3Hudf325h/Jx0flOKIcVD4WhWLr/5zwri42J5bEjkP9mOBn+7oSupf/6a309bw6AOjYmP0yihTvJZ/xDWo/snM3Xlbsa8uwyPy1C7uqdwwvjTywltYakgUOx7ke2KlQ6eeYxgyw5MHP77oR1VAi1yDs//rDsW/wixm/ZncF1S6Kby8L+59o+EPKpPC/J8lienruHy5+Yw8fbetG9SJ6TnBv9I1iISGkrqqogHr2jHip1HeWX2Fm4ZkEKDWpVf/vDvWVs4kePl7Tv6kqRSg7AQHxfLHwdU588Lc3nog5U8OqQD8XGxxLgNbpcp7Ad6+oui4n09i29TvD9p8f6dxfaLsLdPlSHfZ3G7DA1qVWPa2Iv4bNUe0g9mkpnj5WSu/2bv9LLBglLBkkoKTZFyQUpcfqqUMJjcLsOFbeK5sE18kI8sEl3cLsNzI7uR3KAm//x2M+t3Grr0zKB1o7ign8vrs4UD4gCM7pdMs/o1uG/yCq5/eT6PXd2BG/u0CMm1uWA0W7eSOpGQUVJXRRhjeHRwB4a+NI8/fbqOcSO6hbx+v6j5Ww7y6px0hnZtSrdzTDIula9FHTe/HtSGcV9t5NsNBxyL42xJodsYUlPq88zwLqTER96kzmVRkNQBxMV6+FnvFg5HJCKhFuN28eCV7ejRoh5j3l7CFc/P4dnrujAiNbgl8UWvLwUubdeYj+7uz/++tZTHp6xh6bYj/O2GrkEfLOfUm7rwr24SiVRK6qqQzkl1+XmfFry3aAetG9Vi7KC2lXLegxk53PPecmrEuLnfodJPObdf/6Qt1/VqxvzNB8nM8eL12cInq6f307QlVOtZe+a6wm6ipelreo7+oUdP5vL2gh385v0VfHBX/6gemS/fnnnTJSJVw086JPDUgBr8a63hoQ9XsfPISX6V1prqMcEZ4Mybb0ssf2zTuDZf338JT0xdw7sLd7B69zEm3No7qHOmFcx/qOubSOgoqati/jSsE4u3HebV2emMSG1eKf1dJn63jYMZuUwdcyGtQlBSIsGRVK9G0J8MB0uHpnV4fMoaPlu9l2Hdk5wOJ2TyfRa3ylJFqqyEWi4+v/cixr67jBe/2cSCLYeYeHvvwj61FZHv8xVOMn86t8vw9LWd6ZTov9aOGr+A125OpWNicPrZFb6pO8v5RaTioveRt5TI43bx75t6ciLHy6uz00N+vhU7j/LPbzdzRccElV1KuY3o1Zz2TWpz7+QVzN3kXIloqPl8tlLLokUk/NSK9TDh1t48NqQ9i7Yd5uoX57Fh34kKH9frK/lNXQFjDDf1Teaju/tzPDuPIS/O5bkvNxRWYlTs3P4+wXpTJxI6SuqqoLYJtbmhVzMmfLeVV2ZvCdl5jmTmMuadZQA8fFX7kJ1Hol81j4tXftELgKc/W0+ONzrn0TrfTZeIVA3GGO68uDUvjOrO1oOZXPPPeczbdLBCxyypT11JeiU34Jv7L2Fg23henLmZhz9cRVbu+eeIPd+5AVUiiISQkroq6g/XdCKpXg1emb2F/cezQ3KOCd9tZffRk3x0d3/aNFbZpVRMSnwtnv9ZN37Yd4KpK/Y4HU5I+Kze1InIKcO6JzHrwTQa1qrGL95YyDPT1+Pzle/Nmf+hUelu+xrXqc6bt/Xh5v7JfLB0Fze+tpBjWXnlOm/BuUFv6kRCSUldFRUX6+G1m1M5fjKPV+cEvwxz/d7jvDRzM5d3TCjTJOMi5zKsWxJtG8fx8IerWJB+yOlwgk596kTkdCnxtZh+70AuuaAR4+ek8/BH5XtzVto3dQVcLsMfh3Xm7zd0Zc3uYwx5cS7zN5fvbaFPfepEQk5JXRXWMbEOw7on8ca8rUz8bmvQjns8O4873lwCwOOaZFyCyOUy/PPGngA8OXUt3vzQTdTrBG8Zb7pEpGqoV7MaE2/rza0DUvhw6S4GvzCXnYezynSM8pZ3j0htzuu3pHIkK5dfvLGQ/yzeUeZjeDX5uEjIKamr4p4a1on4uFj+8eVGDpzICcox/zlzM3uOneSln/eI+nnFpPK1a1Kb50Z2Y8OPJ5i8eKfT4QSVT0mdiJyFMYY/XNOJcSO6cfBEDje8Mp8Za/eVev98n6/c15e0do357reD6JhYh99+tJox7y4r0wAqhX3qNE+dSMhU6LfLGDPCGLPWGOMzxqSetu5RY8xmY8wGY8yVRZZfFVi22RjzSEXOLxVXp3oMb9/RhxxvPi/N3FTh46UfyOCNeVsZ3LkJP+2WGIQIRc40vEcSHZvW4a9f/MDqXcecDidoNE+diJzP9b2a8db/9CUv33LXpKW8OX9bqfbz5lfs+lK/VjU+/OUAhvdI4rNVe/l9Gaol9KZOJPQq+shkDXAdMKfoQmNMR2AU0Am4CnjZGOM2xriBfwGDgY7AzwPbioPaN6nDT7sl8tb323l/SfnffGTlehn56gJ81vL41frPKqFjjGHcyG6cyPYy9r1l5R44INz4fBpIQETOr1dyfeY8fCkDWjfkyWlr+eWkpeftZ5fvsxXu01Y9xs24Ed246+JWTFqwnUHjZrN5f8Z598vXlAYiIVehpM5au95au6GEVcOAydbaHGvtVmAz0CfwZ7O1Nt1amwtMDmwrDnvqmk7UrRHDE5+sYd+x8o2G+ZfpP3AwI4cnru5IUr0aQY5QpLgOTevwzPAubD+UxaQF250OJyi8Pp8GShGRUokLzGc3ul8yX6zdx42vLeRoVu5Zt/f32a14+aPLZXh0SAeeva4LB07k8LNXv2fqit3nLMfUmzqR0DPBmFTSGDMLeNBauyTw/Z/AAmvt24HvbwCfBza/ylp7R2D5aKCvtXZsCce8E7gTICEhodfkyZMrHGewZWRkEBcXPUP1bz+ez1PfZ9OtkZt7esRiynBzue1YPn9emE3vJm7u6lo9hFFKsEVyO7bW8vTCbHZn+HgotTqt6rmdDqncrLXcNiOLYa1jGN62mtPhRJxIbsciBcrbjuftzmPCmlxiXHBPj+p0ij/zWvj3xSfJyYff9QveQ9ddJ3w8vzSbQ9mW4W1iGNam5GvX19vzeHt9Li8Oqkmdakrsop2ux6Fz6aWXLrXWppa0znO+nY0xXwNNSlj1uLV2akWDOxtr7XhgPEBqaqpNS0sL1anKbdasWYRjXBVxpOZG/u/rTTy1BDom1sbtcuEy/glDjTG4Xf7yCZcxuF2GfJ/lZF4+Hy/bTe1YD8/fcglN6iqpiySR3o6bdTzB4Bfm8sLKfBY+lkb1mMhM7PJ9FmZMp3WrlqSltXU6nIgT6e1YBMrfjtOAITuOcMuERbywIpdnhnfh+p5JxR7OvrLxe2pZSEvrH7R4AUYMzudXby9jyg/7yanRkL9c15W6NWKKbZM+byusX8clF11E3ZoxZzmSRAtdj51x3qTOWntZOY67G2he5HuzwDLOsVzCwD2D2tKodixTl+9h448Z5PssPhv44/PfeOZbiy/wt8dlqOZ20b9VQ+67rK0SOql0bRNq89fru/LAByt54ZtN/Paq9k6HVC5e9TkRkQro2aI+M+67mNsnLubBD1Yyf/NB/j6iW+E1xZtvqeYJ/uiTsR43L/+iJ3/9fAMTvttK+oFMXrs5leYNahZuUzD6pQa/FAmd8yZ15TQNeNcY8xyQCLQFFgEGaGuMaYk/mRsF3BiiGKQcXC7DTX2TualvstOhiJTa9b2aMWPtPiZ+t42ruzSlc1Jdp0Mqs0BOh0t96kSknBLr1WDa2It4bMpqPly6i0OZufz+px1p3SgOr89SI0QPjWI9bn7/0470TqnPvZNXMPBv3/Knazszup//XiLfFvSpU1YnEioVndJguDFmF9Af+MwYMwPAWrsWeB9YB3wBjLHW5ltrvcBYYAawHng/sK2ISIU8fnUH3C7D0JfmcTAjOHMuVqZTNz1K6kSk/Kp5XPz9hq48dGU7Zm88wHUvz2fJtsP+0S9DfH0Z3KUpX9w3kLaN43jikzX8+r3l7D+eXWSeOl3fREKlQm/qrLVTgClnWfc08HQJy6cD0ytyXhGR0yU3rMWfr+3Mff9ZwV2TlnLXxa3OGOynpNuJ01+MlfSizJS05+n7lXjsU0vdxtAzuR41q5V82T1VnqSbHhGpGGMMYy5tw5WdErhlwmJueOV7AAa1bxzyc7dqFMdn9wzk4Q9X8smKPazYeYTeyQ0APbQSCaVQlV+KiFS6a3skkZnr5XefrOHOSUudDucMiXWr88mYC2lc58y+p4VPsnXPIyJB0qZxbabfM5CnPl3Lx8t2k1AntlLOW83j4v9G9eCyjgk8/OEqPl7uHz5BD61EQkdJnYhElZv6JnNlpyYlzrdY0gwuljMXlrxdyUqaFqakbQ+eyOFX7yzjtomLee/OftSpXnwEuMKkzq0+JyISPHVrxvDcyO48OrgDcbGVe9s3tGsinRPrct2/55Pn9VXquUWqGiV1IhJ14uNiiY+rnCfSZfHkNZ144pM1PPLRKl6+qVexdT5b8KZOT7JFJPga1XbmmpgSX4ulv7uMHCV1IiGlR8IiIpVkdL9kru2eyPTV+5i98UCxdd7CgQSciExEJHSMMRE7h6hIpNDtg4hIJXr2+q40qVOdse8uY/mOI4XLfYVJnS7LIiIiUja6exARqUTVY9z866YenMj28qt3lnE0KxeAhVsPA4RkcmARERGJbupTJyJSyXolN+D1m1O5+52l/OzVBfRp2YD3Fu0gLtbDJW0bOR2eiIiIRBg9EhYRccBlHRMYN7I7+09kM2nBdga2jWfGby6mbs2Y8+8sIiIiUoTe1ImIOOSabokM7tyEk3n5Z0xxICIiIlJaSupERBwU43YRoyEvRUREpAJMSRPnhhtjzAFgu9NxlCAeOOh0ECIVpHYs0UDtWKKB2rFEA7Xj0Em21pbY+T4ikrpwZYxZYq1NdToOkYpQO5ZooHYs0UDtWKKB2rEzVPMjIiIiIiISwZTUiYiIiIiIRDAldRUz3ukARIJA7ViigdqxRAO1Y4kGascOUJ86ERERERGRCKY3dSIiIiIiIhFMSV05GWOuMsZsMMZsNsY84nQ8IudijNlmjFltjFlhjFkSWNbAGPOVMWZT4O/6geXGGPNioG2vMsb0dDZ6qaqMMROMMfuNMWuKLCtzuzXG3BLYfpMx5hYn/i1SdZ2lHf/BGLM7cE1eYYwZUmTdo4F2vMEYc2WR5brvEEcYY5obY741xqwzxqw1xtwbWK7rcRhRUlcOxhg38C9gMNAR+LkxpqOzUYmc16XW2u5Fhhl+BPjGWtsW+CbwHfztum3gz53Avys9UhG/icBVpy0rU7s1xjQAngT6An2AJwtuPEQqyUTObMcAzweuyd2ttdMBAvcSo4BOgX1eNsa4dd8hDvMCD1hrOwL9gDGB9qfrcRhRUlc+fYDN1tp0a20uMBkY5nBMImU1DHgz8PlN4Noiy9+yfguAesaYpg7EJ1WctXYOcPi0xWVtt1cCX1lrD1trjwBfUfINtkhInKUdn80wYLK1NsdauxXYjP+eQ/cd4hhr7V5r7bLA5xPAeiAJXY/DipK68kkCdhb5viuwTCRcWeBLY8xSY8ydgWUJ1tq9gc/7gITAZ7VvCWdlbbdqzxKuxgZK0yYUeVuhdixhzRiTAvQAFqLrcVhRUidSNVxkre2JvyRijDHm4qIrrX8YXA2FKxFF7VYi2L+B1kB3YC8wztFoRErBGBMHfATcZ609XnSdrsfOU1JXPruB5kW+NwssEwlL1trdgb/3A1Pwl/L8WFBWGfh7f2BztW8JZ2Vtt2rPEnastT9aa/OttT7gNfzXZFA7ljBljInBn9C9Y639OLBY1+MwoqSufBYDbY0xLY0x1fB3ap7mcEwiJTLG1DLG1C74DFwBrMHfZgtGnroFmBr4PA24OTB6VT/gWJHyChGnlbXdzgCuMMbUD5S4XRFYJuKY0/opD8d/TQZ/Ox5ljIk1xrTEP9DEInTfIQ4yxhjgDWC9tfa5Iqt0PQ4jHqcDiETWWq8xZiz+hugGJlhr1zoclsjZJABT/NdkPMC71tovjDGLgfeNMf8DbAdGBrafDgzB30E/C7it8kMWAWPMe0AaEG+M2YV/1LRnKUO7tdYeNsb8Cf9NMcAfrbWlHbRCpMLO0o7TjDHd8ZerbQPuArDWrjXGvA+swz/i4BhrbX7gOLrvEKdcCIwGVhtjVgSWPYaux2HF+EtgRUREREREJBKp/FJERERERCSCKakTERERERGJYErqREREREREIpiSOhERERERkQimpE5ERERERCSCKakTERERERGJYErqREREREREIpiSOhERERERkQj2/wHFyFyLavVv+gAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 1080x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plot_x(-x[351:], \"estimated values\")"
]
},
{
"cell_type": "markdown",
"id": "50c3d3a5",
"metadata": {},
"source": [
"# Обработаем ошибки двух видов в оценке ORB_SLAM3:\n",
"1. \"Потеря\" оси поворота\n",
"2. Абсолютные значения измерения градусов. Необходимо использовать данные векторов для определения направления. "
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "d0169c07",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 1080x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plot_x(x, \"non_processed.png\")"
]
},
{
"cell_type": "code",
"execution_count": 378,
"id": "1fdff1a1",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Found the loss!, it's index is: 262 It's value is -0.23901899999999998 Diff is 59.363440999999995 Last el is: 59.124421999999996\n",
"Found the loss!, it's index is: 613 It's value is 54.307081 Diff is -65.23194000000001 Last el is: -10.924859000000012\n",
"Found the loss!, it's index is: 948 It's value is -6.737921000000014 Diff is 60.698122 Last el is: 53.960200999999984\n",
"Found the loss!, it's index is: 1350 It's value is 32.04612299999998 Diff is 15.20409 Last el is: 47.25021299999998\n",
"Found the loss!, it's index is: 1443 It's value is 68.75605299999998 Diff is -96.60524000000001 Last el is: -27.84918700000003\n",
"Found the loss!, it's index is: 1686 It's value is -62.86792700000003 Diff is 18.065399999999997 Last el is: -44.80252700000003\n"
]
},
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x7f95625fadf0>"
]
},
"execution_count": 378,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 1080x720 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# ----------- PROCESS THE AXIS LOSS ----------------\n",
"fig = plt.figure(figsize=(15, 10))\n",
"ax1 = fig.add_subplot(3, 1, 1)\n",
"\n",
"skew = 0 # to what value skew the elements. \n",
"\n",
"# x_copy = np.copy(x)\n",
"x_copy = np.copy(values[:1966])\n",
"\n",
"# Process points in the cycle to easily refactor it to C++ code afterwards. \n",
"for i in range(1, len(x_copy)):\n",
" x_copy[i] += skew\n",
" diff = (x_copy[i-1] - x_copy[i])\n",
" if abs(diff) > 10: \n",
" print(\"Found the loss!, it's index is:\", i, f\"It's value is {x_copy[i]}\", f\"Diff is {diff}\", f\"Last el is: {x_copy[i-1]}\")\n",
" \n",
" # --- Метод восстановления потерянных кадров по скорости, но он не всегда хорошо отрабатывает. ---\n",
"# lost_frames = table[\"frame\"][i-1] - table[\"frame\"][i-2]\n",
"# if lost_frames > 1:\n",
"# print(f\"Found lost frames! The difference is {lost_frames} \\n\")\n",
"# speed = x_copy[i-2] - x_copy[i-3]\n",
"# lost_degr = speed * lost_frames\n",
"# diff += lost_degr\n",
" # ----------------------------- Метод восстановления потерянных кадров. --------------------------\n",
" \n",
" x_copy[i] += diff\n",
" skew += diff\n",
" accum.append(x[i])\n",
"\n",
"ax1.set_aspect('equal')\n",
"ax1.grid()\n",
"ax1.plot(x_copy - 55, label=\"Processed data\")\n",
"# ax1.plot(x, label=\"Non processed data\", color='green', lw=4)\n",
"ax1.plot(true_values, label=\"True values\", color='yellow')\n",
"# ax1.plot(values, label=\"Processed points of mirror\", color=\"black\")\n",
"ax1.legend()\n",
"\n",
"\n",
"# Точки \"потерь\": 261, 612, 947, 1349 (исследовать точку), 1442, 1685\n",
"# Точки оцененны довольно правильно. \n",
"\n",
"# Важное замечение: мы обработали значения углов, при этом значения направлений вращения осей, мы \n",
"# мы никак не трогали.\n",
"\n",
"# ----------- PROCESS THE AXIS LOSS ----------------"
]
},
{
"cell_type": "code",
"execution_count": 379,
"id": "29828ad3",
"metadata": {},
"outputs": [],
"source": [
"fig.savefig(fname=\"v2.png\", dpi=300, format=\"png\", bbox_inches='tight', pad_inches=0.0)"
]
},
{
"cell_type": "code",
"execution_count": 366,
"id": "187d52b0",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"-0.242259"
]
},
"execution_count": 366,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Если нашли потерю оси \"loss\", то кроме простого восстановления, учтём количество потерянных кадров, и к\n",
"# последнему количеству градусов добавим еще потерянные градусы с учетом последней скорости.\n",
"x[261]"
]
},
{
"cell_type": "code",
"execution_count": 367,
"id": "fca978c4",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([44.631222, 47.540522, 48.614122, 50.517022, 50.463622, 52.605922,\n",
" 54.224922, 56.913522, 57.963822, 59.124422])"
]
},
"execution_count": 367,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x_copy[252:262]"
]
},
{
"cell_type": "code",
"execution_count": 368,
"id": "4dc24395",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(1966,)"
]
},
"execution_count": 368,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x.shape"
]
},
{
"cell_type": "code",
"execution_count": 369,
"id": "a4e7b7a8",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(1966,)"
]
},
"execution_count": 369,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x_copy.shape"
]
},
{
"cell_type": "code",
"execution_count": 20,
"id": "9db9e018",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Found inverse val. It's index is: 2 It's value is -0.262416 Last element is -0.111895\n",
"Accumulated elements. Array's length: 5\n",
"Mode 1 is: [-1. -1. -1.]; Mode 2 is: [-1. -1. -1.];\n",
"Found inverse val. It's index is: 8 It's value is -0.329805 Last element is -0.314004\n",
"Accumulated elements. Array's length: 5\n",
"Mode 1 is: [-1. -1. -1.]; Mode 2 is: [-1. -1. -1.];\n",
"Found inverse val. It's index is: 14 It's value is -0.330989 Last element is -0.330989\n",
"Accumulated elements. Array's length: 5\n",
"Mode 1 is: [-1. -1. -1.]; Mode 2 is: [-1. -1. -1.];\n",
"Found inverse val. It's index is: 20 It's value is -0.333345 Last element is -0.332169\n",
"Accumulated elements. Array's length: 5\n",
"Mode 1 is: [-1. -1. -1.]; Mode 2 is: [-1. -1. -1.];\n",
"Found inverse val. It's index is: 27 It's value is -0.334516 Last element is -0.332169\n",
"Accumulated elements. Array's length: 5\n",
"Mode 1 is: [-1. -1. -1.]; Mode 2 is: [-1. -1. -1.];\n",
"Found inverse val. It's index is: 33 It's value is -0.333345 Last element is -0.325025\n",
"Accumulated elements. Array's length: 5\n",
"Mode 1 is: [-1. -1. -1.]; Mode 2 is: [-1. -1. -1.];\n",
"Found inverse val. It's index is: 40 It's value is -0.333345 Last element is -0.333345\n",
"Accumulated elements. Array's length: 5\n",
"Mode 1 is: [-1. -1. -1.]; Mode 2 is: [-1. -1. -1.];\n",
"Found inverse val. It's index is: 47 It's value is -0.332169 Last element is -0.328616\n",
"Accumulated elements. Array's length: 5\n",
"Mode 1 is: [-1. -1. -1.]; Mode 2 is: [-1. -1. -1.];\n",
"Found inverse val. It's index is: 53 It's value is -0.333345 Last element is -0.329805\n",
"Accumulated elements. Array's length: 5\n",
"Mode 1 is: [-1. -1. -1.]; Mode 2 is: [-1. -1. -1.];\n",
"Found inverse val. It's index is: 59 It's value is -0.325025 Last element is -0.325025\n",
"Accumulated elements. Array's length: 5\n",
"Mode 1 is: [-1. -1. -1.]; Mode 2 is: [-1. -1. -1.];\n",
"Found inverse val. It's index is: 65 It's value is -0.327423 Last element is -0.326226\n",
"Accumulated elements. Array's length: 5\n",
"Mode 1 is: [-1. -1. -1.]; Mode 2 is: [-1. -1. -1.];\n",
"Found inverse val. It's index is: 71 It's value is -0.333345 Last element is -0.332169\n",
"Accumulated elements. Array's length: 5\n",
"Mode 1 is: [-1. -1. -1.]; Mode 2 is: [-1. -1. -1.];\n",
"Found inverse val. It's index is: 78 It's value is -0.336848 Last element is -0.333345\n",
"Accumulated elements. Array's length: 5\n",
"Mode 1 is: [-1. -1. -1.]; Mode 2 is: [-1. -1. -1.];\n",
"Found inverse val. It's index is: 84 It's value is -0.326226 Last element is -0.325025\n",
"Accumulated elements. Array's length: 5\n",
"Mode 1 is: [-1. -1. -1.]; Mode 2 is: [-1. -1. -1.];\n",
"Found inverse val. It's index is: 90 It's value is -0.323819 Last element is -0.323819\n",
"Accumulated elements. Array's length: 5\n",
"Mode 1 is: [-1. -1. -1.]; Mode 2 is: [-1. -1. -1.];\n",
"Found inverse val. It's index is: 96 It's value is -0.328616 Last element is -0.327423\n",
"Accumulated elements. Array's length: 5\n",
"Mode 1 is: [-1. -1. -1.]; Mode 2 is: [-1. -1. -1.];\n",
"Found inverse val. It's index is: 102 It's value is -0.333345 Last element is -0.329805\n",
"Accumulated elements. Array's length: 5\n",
"Mode 1 is: [-1. -1. -1.]; Mode 2 is: [-1. -1. -1.];\n",
"Found inverse val. It's index is: 108 It's value is -0.326226 Last element is -0.321393\n",
"Accumulated elements. Array's length: 5\n",
"Mode 1 is: [-1. -1. -1.]; Mode 2 is: [-1. -1. -1.];\n",
"Found inverse val. It's index is: 114 It's value is -0.323819 Last element is -0.323819\n",
"Accumulated elements. Array's length: 5\n",
"Mode 1 is: [-1. -1. -1.]; Mode 2 is: [-1. -1. -1.];\n",
"Found inverse val. It's index is: 120 It's value is -3.2299 Last element is -1.30882\n",
"Accumulated elements. Array's length: 5\n",
"Mode 1 is: [-1. -1. -1.]; Mode 2 is: [-1. -1. -1.];\n",
"Found inverse val. It's index is: 222 It's value is -2.50708 Last element is -0.481278\n",
"Accumulated elements. Array's length: 5\n",
"Mode 1 is: [-1. -1. -1.]; Mode 2 is: [-1. 1. 1.];\n",
"Mirror the values. \n",
"\n",
"Found inverse val. It's index is: 263 It's value is -3.48907 Last element is -1.10347\n",
"Accumulated elements. Array's length: 5\n",
"Mode 1 is: [-1. 1. 1.]; Mode 2 is: [-1. 1. 1.];\n",
"Found inverse val. It's index is: 456 It's value is -0.794182 Last element is -0.685786\n",
"Accumulated elements. Array's length: 5\n",
"Mode 1 is: [-1. 1. 1.]; Mode 2 is: [-1. -1. 1.];\n",
"Mirror the values. \n",
"\n",
"Found inverse val. It's index is: 790 It's value is -3.21215 Last element is -1.00473\n",
"Accumulated elements. Array's length: 5\n",
"Mode 1 is: [ 1. 1. -1.]; Mode 2 is: [1. 1. 1.];\n",
"Mirror the values. \n",
"\n",
"Found inverse val. It's index is: 950 It's value is -0.302581 Last element is -0.299984\n",
"Accumulated elements. Array's length: 5\n",
"Mode 1 is: [-1. 1. 1.]; Mode 2 is: [-1. 1. 1.];\n",
"Found inverse val. It's index is: 956 It's value is -0.365803 Last element is -0.356047\n",
"Accumulated elements. Array's length: 5\n",
"Mode 1 is: [-1. 1. 1.]; Mode 2 is: [-1. 1. 1.];\n",
"Found inverse val. It's index is: 963 It's value is -0.353842 Last element is -0.346015\n",
"Accumulated elements. Array's length: 5\n",
"Mode 1 is: [-1. 1. 1.]; Mode 2 is: [-1. 1. 1.];\n",
"Found inverse val. It's index is: 970 It's value is -0.329805 Last element is -0.318949\n",
"Accumulated elements. Array's length: 5\n",
"Mode 1 is: [-1. 1. 1.]; Mode 2 is: [-1. 1. 1.];\n",
"Found inverse val. It's index is: 976 It's value is -0.330989 Last element is -0.328616\n",
"Accumulated elements. Array's length: 5\n",
"Mode 1 is: [-1. 1. 1.]; Mode 2 is: [-1. 1. 1.];\n",
"Found inverse val. It's index is: 984 It's value is -0.312755 Last element is -0.311502\n",
"Accumulated elements. Array's length: 5\n",
"Mode 1 is: [-1. 1. 1.]; Mode 2 is: [-1. 1. 1.];\n",
"Found inverse val. It's index is: 991 It's value is -0.338007 Last element is -0.311502\n",
"Accumulated elements. Array's length: 5\n",
"Mode 1 is: [-1. 1. 1.]; Mode 2 is: [-1. 1. 1.];\n",
"Found inverse val. It's index is: 998 It's value is -0.336848 Last element is -0.335684\n",
"Accumulated elements. Array's length: 5\n",
"Mode 1 is: [-1. 1. 1.]; Mode 2 is: [-1. 1. 1.];\n",
"Found inverse val. It's index is: 1005 It's value is -0.321393 Last element is -0.316486\n",
"Accumulated elements. Array's length: 5\n",
"Mode 1 is: [-1. 1. 1.]; Mode 2 is: [-1. 1. 1.];\n",
"Found inverse val. It's index is: 1011 It's value is -0.323819 Last element is -0.321393\n",
"Accumulated elements. Array's length: 5\n",
"Mode 1 is: [-1. 1. 1.]; Mode 2 is: [-1. 1. 1.];\n",
"Found inverse val. It's index is: 1019 It's value is -0.332169 Last element is -0.323819\n",
"Accumulated elements. Array's length: 5\n",
"Mode 1 is: [-1. 1. 1.]; Mode 2 is: [-1. 1. 1.];\n",
"Found inverse val. It's index is: 1028 It's value is -0.303872 Last element is -0.303872\n",
"Accumulated elements. Array's length: 5\n",
"Mode 1 is: [-1. 1. 1.]; Mode 2 is: [-1. 1. 1.];\n",
"Found inverse val. It's index is: 1035 It's value is -0.65664 Last element is -0.299984\n",
"Accumulated elements. Array's length: 5\n",
"Mode 1 is: [-1. 1. 1.]; Mode 2 is: [-1. 1. 1.];\n",
"Found inverse val. It's index is: 1041 It's value is -3.65587 Last element is -3.44253\n",
"Accumulated elements. Array's length: 5\n",
"Mode 1 is: [-1. 1. 1.]; Mode 2 is: [-1. 1. 1.];\n",
"Found inverse val. It's index is: 1048 It's value is -3.66357 Last element is -3.65469\n",
"Accumulated elements. Array's length: 5\n",
"Mode 1 is: [-1. 1. 1.]; Mode 2 is: [-1. 1. 1.];\n",
"Found inverse val. It's index is: 1339 It's value is -0.695418 Last element is -0.406341\n",
"Accumulated elements. Array's length: 5\n",
"Mode 1 is: [-1. 1. 1.]; Mode 2 is: [-1. -1. -1.];\n",
"Mirror the values. \n",
"\n",
"Found inverse val. It's index is: 1444 It's value is -2.80811 Last element is -2.78853\n",
"Accumulated elements. Array's length: 5\n",
"Mode 1 is: [-1. -1. -1.]; Mode 2 is: [-1. -1. -1.];\n"
]
},
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x7f26e203e790>"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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1to/t7OPrumSFKy1XwKrt9m8q9fwY4FPrLWr4x8ePwGOq/DgRXZBcW3dWvuxtTYS/3YqsPv23iPe3mtYa6daN+p0DFt+P0Q8V8I1vSQl3auob0YS3vbaeny2zum4pGaJdE2XRLedfsWUuldX0if5NQb+LvL9QrbfQS6SNOIjS9rhRo8AXBafajlq0zRM9DsgycsCHxtjvjfGDIpvy7bWLok/Xwpkx5+rnUtV0JetP0Tqmi5Vza5ew9XepSoYCBQd3d3MGPODMeYLY8zh8W2Nce17E7V1SRa7cq+ia7oku8OBZdba34ps0zVdkto2/Yopda+upI+IJCRjTBbwJjDEWpsDPA7sBRwILAEe8C46kXJxmLW2PXA8cGl8qv1m8VFTqsEqVYIxJg04CXg9vknXdKnSdA2XVGCMGQZEgJfim5YAe1hr2wFXAS8bY2p4FZ9IGeleRVJNP7YeoKVruiS1YvoVN0uFe3UlfZLfIqBJke93j28TSVrGmCDuwvyStXYcgLV2mbU2aq2NAU+zpdyPfgckKVlrF8UflwNv4dr0sk1l2+KPy+O7q51LsjsemG6tXQa6pkuVtavXcLV3SVrGmHOBE4Ez4h0nxMtdrYo//x6Yj1vrZBFbl4BTW5eEV4p7FV3TJWkZYwLAqcCrm7bpmi7JrLh+RVLsXl1Jn+T3LdDCGNMsPoq2LzDe45hESi1eR/ZZ4Gdr7YNFthddv+QU4Kf48/FAX2NMyBjTDGgBTKuseEVKwxiTGV9QEGNMJnAMrk2PB86J73YO8E78+XjgbOMcjFtccwkiyWOrkYO6pksVtavX8I+AY4wxteNlg46JbxNJaMaY44BrgZOstflFttc3xvjjz5vjruEL4u09xxhzcPxe/2y2/H6IJKRS3Kuob0aSWQ/gF2vt5rJtuqZLsiqpX5EUu1cPeB2AlI21NmKMuQzX6PzAKGvtbI/DEimLLsBZwCxjzIz4thuAfsaYA3HTL/8ALgSw1s42xrwGzMGVl7jUWhut5JhFdlU28Ja7FyEAvGytnWCM+RZ4zRhzHvAnbiFNgA+AnriFYvOBAZUfskjpxBObRxO/bsfdq2u6JDNjzCtAN6CeMWYhcDNwN7twDbfWrjbG3I7rKAS4zVq7swuJi1SKEtr6UCAEfBK/l5lqrb0I6ArcZowJAzHgoiJt+hJgNJCBWwOo6DpAIp4qoZ1329V7FfXNSKIrrq1ba5/ln2tvgq7pkrxK6ldMqXt1E5+JLSIiIiIiIiIiIiIiIklM5d1ERERERERERERERESqACV9REREREREREREREREqgAlfURERERERERERERERKoAJX1ERERERERERERERESqACV9REREREREREREREREqgAlfURERERERERERERERKoAJX1ERERERERERERERESqACV9REREREREREREREREqoD/B/2RiSZBn+jcAAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 2160x720 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# TODO: После первого отражения, вся траектория изменяется. Соотвественно, далее смена вектора вращения происходит\n",
"# TODO: уже не в нуле. Исправить это.\n",
"\n",
"# TODO: Также, до сих пор не все изменения вектора вращения распознаются верно. Почему-то только 2 значеия обработались\n",
"# TODO: Поисследовать это поведение.\n",
"\n",
"# Реализация пункта 2 из Notion:\n",
"# 1. Анализируем raw данные, а затем записываем уже с учетом всего точки.\n",
"# 2. mirror_point должен изменяться в соотвествии с новыми точками отражения\n",
"\n",
"# TODO: Добавить обработку скачков. Скачки имеют по сути такие же свойства, которые я выбрал для определения точек \n",
"# TODO: точек отражения. Единственное, у скачков еще есть большой гэп. \n",
"\n",
"# ------------ PROCESS THE AXIS VECTOR INFORMATION ---------------\n",
"# На каждом шаге будем проверять текущее значение угла. Также, будем сохранять массив из 5 последних векторов. \n",
"# И брать наиболее встречающийся вектор. \n",
"# Если очередное значение угла где-то близко к нулю (допустим дельта = 2), то возьмём то сохраним следующие \n",
"# 5 векторов после найденного значения и возьмём наиболее встречающийся вектор. Если он отличается от вектора \n",
"# направления до 0, то мы нашли смену направления, и необходимо поменять знак всех оставшихся точек. \n",
"# ------------ PROCESS THE AXIS VECTOR INFORMATION ---------------\n",
"\n",
"def find_mode(arr):\n",
" \"\"\"\n",
" PLEASE GIVE ONLY NUMPY ARRAY.\n",
" \"\"\"\n",
" m, n = arr.shape\n",
" for i in range(m):\n",
" for j in range(n):\n",
" arr[i][j] = 1 if arr[i][j] > 0 else -1\n",
"\n",
" res_mode = stats.mode(arr)\n",
" return res_mode.mode.squeeze()\n",
"\n",
"from scipy import stats\n",
"\n",
"fig = plt.figure(figsize=(30, 10))\n",
"ax1 = fig.add_subplot(3, 1, 1)\n",
"\n",
"skew = 0 # we need this parameter \n",
"accum = [] # accumulate the values and iteratively plot them. \n",
"accum2 = []\n",
"# counter = 0\n",
"counter2 = 0\n",
"# Мода - наиболее часто встречающийся элемент. \n",
"moda_vec = []\n",
"moda_vec2 = []\n",
"\n",
"zero_flag = False\n",
"mirror_flag = False\n",
"mirror_point = 0.0\n",
"last_el = 0.0\n",
"# Здесь сохраняем все значения. \n",
"values = np.array([])\n",
"\n",
"x_copy = np.copy(x)\n",
"# Исправленные значения сохраняем в values.\n",
"values = np.append(values, x_copy[0])\n",
"values = np.append(values, x_copy[1])\n",
"\n",
"# Process points in the cycle to easily refactor it to C++ code afterwards. \n",
"# Представляем, что это цикл \"на лету\"\n",
"for i in range(1, len(v)):\n",
" \n",
" # Сохраняем последние 5 значений векторов.\n",
" if not zero_flag:\n",
" if len(accum) == 5:\n",
" accum.pop(0)\n",
" accum.append(v[i])\n",
" else:\n",
" accum.append(v[i])\n",
" \n",
" # Найдем элемент, который начал расти, а не убывать около нуля\n",
" if not zero_flag:\n",
" if -5 < x_copy[i] < 5:\n",
" # Если нынешний элемент уже не меньше предыдущего, то начался рост в обратную сторону. Ставим True\n",
" if not abs(x_copy[i]) < abs(last_el) and abs(last_el - x_copy[i-2]) < 10:\n",
" print(\"Found inverse val.\", f\"It's index is: {i}\", f\"It's value is {x_copy[i]}\",\n",
" f\"Last element is {last_el}\")\n",
" zero_flag = True\n",
" \n",
" # Если нашли элемент, который начал рост в другую сторону, начнём накапливать значения векторов.\n",
" if zero_flag:\n",
" # Если набрали 5 \n",
" if counter2 == 5:\n",
" # Имеем массивы векторов. Найдём их моды и сравним. \n",
" mode1 = find_mode(np.array(accum))\n",
" mode2 = find_mode(np.array(accum2))\n",
" print(\"Accumulated elements. Array's length: \", len(accum2))\n",
" print(\"Mode 1 is:\", f'{mode1};', f\"Mode 2 is: {mode2};\")\n",
" \n",
" # Если градусы около нуля, а значения векторов поменялись, то отражаем\n",
" if not all(mode1 == mode2):\n",
" # Если мы нашли ту самую точку, то отразим точки, которые мы накопили, и прибавим к ним точку отражения\n",
" # а также изменим точку отражения, и изменим флаг mirror_flag = True\n",
" print(\"Mirror the values. \\n\")\n",
" mirror_point += values[i - 5]\n",
" if mirror_flag:\n",
" mirror_flag = False\n",
" else:\n",
" mirror_flag = True\n",
" values[i - 5:i] = -values[i - 5:i] + mirror_point\n",
" else:\n",
" # Иначе ничего не делаем.\n",
" pass\n",
"\n",
" \n",
" accum2 = []\n",
" zero_flag = False\n",
" counter2 = 0\n",
" else:\n",
" accum2.append(v[i])\n",
" counter2 += 1\n",
" \n",
" last_el = x_copy[i]\n",
" values = np.append(values, x_copy[i])\n",
" values[i] = (-values[i] + mirror_point) if mirror_flag else values[i]\n",
"\n",
"ax1.set_aspect('equal')\n",
"ax1.grid()\n",
"ax1.plot(values, label=\"Processed data\", lw=5)\n",
"ax1.plot(x, label=\"Non processed data\", color='green')\n",
"ax1.plot(true_values, label=\"True values\", color='yellow')\n",
"ax1.legend()"
]
},
{
"cell_type": "code",
"execution_count": 47,
"id": "de7e5817",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"-0.481278"
]
},
"execution_count": 47,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x_copy[221]"
]
},
{
"cell_type": "code",
"execution_count": 48,
"id": "f9dbf536",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"-2.50708"
]
},
"execution_count": 48,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x_copy[222]"
]
},
{
"cell_type": "code",
"execution_count": 55,
"id": "381e3ee4",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"59.6057"
]
},
"execution_count": 55,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x_copy[260]"
]
},
{
"cell_type": "code",
"execution_count": 49,
"id": "bf4c5629",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 49,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"not abs(x_copy[222]) < abs(x_copy[221])"
]
},
{
"cell_type": "code",
"execution_count": 52,
"id": "60b6f47c",
"metadata": {
"pycharm": {
"name": "#%%\n"
}
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA3UAAABiCAYAAAD3NfqeAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAAApwElEQVR4nO3dd3xT5f7A8c+TpIMOoKWDUWihzLIpssECKkO54GAKjp/KRQXhusd1j6viBRdXAcWBIuBAhiCCggIyy1BaWkCgbJC9KU2e3x9JSzpS2tL0JOn3/YJX0yfnnDw9T874nmcprTVCCCGEEEIIIbyTyegMCCGEEEIIIYQoOQnqhBBCCCGEEMKLSVAnhBBCCCGEEF5MgjohhBBCCCGE8GIS1AkhhBBCCCGEF5OgTgghhBBCCCG8mMXoDBRFRESEjouLMzob+Zw9e5bg4GCjs1GuSRkYT8rAeFIGxpMyMJ6UgbFk/xtPysB47i6D5OTkI1rryILe84qgLi4ujnXr1hmdjXyWLl1KUlKS0dko16QMjCdlYDwpA+NJGRhPysBYsv+NJ2VgPHeXgVIqw9V70vxS+IyxC9No/coio7MhhBBCCCFEmfKKmjohimLCkr+MzoIQQgghhBBlTmrqhBBCCCGEEMKLSVAnhBBCCCGEEF5MgjohhBBCCCGE8GIS1AmfY7Npo7MghBBCCCFEmZGgTvgcq5agTgghhBBClB8S1AmfY5WaOiGEEEIIUY5IUCd8ziWrzegsCCGEEEIIUWYkqBM+R2rqhBBCCCFEeSJBnfA5WRLUCSGEEEKIckSCOuFzsqwS1AkhhBBCiPJDgjrhc7Js0qdOCCGEEEKUHxLUCZ8jfeqEEEIIIUR5IkGd8DnSp04IIYQQQpQnEtQJnyN96oQQQgghRHkiQZ3wOdKnTgghhBBClCcS1AmfI33qhBBCCCFEeSJBnfA50qdOCCGEEEKUJxLUCZ8jfeqEEEIIIUR5YlhQp5TqqZRKV0ptV0o9aVQ+hO8wKftP6VMnhBBCCCHKE0OCOqWUGZgA9AISgMFKqQQj8iJ8h0nZozrpUyeEEEIIIcoTo2rq2gDbtdY7tNaZwHSgr0F5ET5CZdfUSfNLIYQQQghRjlgM+twawB6n3/cCbQ3KS4kkZxznkaXnCF27BLNJYTGZ7D/NCpNSOU0BPYFSlzOjgPbxVRjZrS4BFrNxmXLhkxU7sWm4p1PtYq9r/zs1GUfPln7GfEyW1cbYn9JpWqMSNzWrbnR2hAFOnMtk7h8HiI8MpkN8hNHZKTO//3WEdxZv40JW6TbTPn3qPONTVhRrnbqRITzWowFVKwWWal6EMVL2n+SdxduoGR7EYz0aEOjnedfYTXtOUCXEn5iwIKOzIoQoZUrrsq/VUErdBvTUWt/r+H0Y0FZrPdJpmeHAcIDo6OjE6dOnl3k+C7PvjI3ZW89hMluwabBqLv+0gcYza4syrbDthI0ecRYGNwwwOju5rD2YxYSNFwF4/JpAEqpc+YJ45swZQkJCAHhuxXl2n7bhb4bXOlUgooKMA+TKF6kXWbw7C4Cn2gTSILzkNx/OZSCMUdwy0Frz/O8X2H3aRgULjO0SRIi/Bz2JcqNpW+zf/YQqZkrzL7ZaszCbi/6c1KY1acdshPorrqlqJtRfYVFgMSmqVFA0jzRj8aSng17AyHPRxsNZTP7zIhezIEtDgzATD7cOJMDsWWV414/2h56jWwXQMqp0n+vLtcB4UgbGc3cZdO3aNVlr3bqg94yqqdsH1HT6PcaRlkNrPQmYBNC6dWudlJRUZpkrqhpLl+KJ+bqSx77exNfJe2kQX5uHr69vdHYAOHjyAqPG/QpAeLA/b669wHcPdKBVrbBC11vqVAZhKSvYe+YEmVaYeyCET+++JlctpbDbc+wcS35ayvUJ0aTsO8n8A4Hc168DphLeQC71kuNg15Gz3PXJGl7s24Rr60canZ1SVdwymLpyF7tPp9A/MYZZG/ax+lwkL9/QxH0Z9CBLTm6m4t/7mffoDaW63ZIcByu2H2HCku0s232cC5dy1xy2qxPOp3e38cjaHk9l1Lnof0u38/b6dKJCA5h9X1tWbD/K83NSeHGNjfdvb3XF61iZ+vEHAN5Zf5F/XRfLP6+tU2rfMW+5FvgyKQPjGVkGRlVlrAXqKaVqK6X8gUHAHIPyUu683K8J1SsF8v4v2zh48oLR2QHgpXkpZFptzHqgAx/faX8AMX7RVopTk6y15tr6kdzTqTa/bv2bhSkH3ZVdr2WzaUZ8kUyAxcSzNyZwf1I8m/acYMyMjT4/wMzOo2fZdfQcd05Zw5qdx4zOjmE+X7mLZ2enkBgbxmu3NKVX02pMXZXBV2t2G521MpFl0x5TA9axbgTT7mvHlpd6su3VXqS+1IMNz17PyK51WbXjGFNW7DQ6i6IQWVYb/5m/hTd/TKdbwyjmj+5M3ahQ7uwQx4dDE/n7zEWGfbTaY66zANEVA2hbO5xG1SoyfvFW+k1YweHTnpM/IUTJGRLUaa2zgJHAQmALMFNrnWJEXsqjQD8zU+9ti8Vk4uV5qUZnh7W7jrFg80GGtoulZa0wWtYK47EeDVi27QjLth0p8nZsWmNSiqd7NyIqNIBnZ6ew84j0r3P2xsI0Uvaf4u6OcdSqEsTQdrF0bxjFnE37WZp+2OjsuZXNKWgduzCNLGv5m/rij70neG52CtUqBfJy3yb4mU08d1MCUaEBPPXdn2w5cMroLLqd1aYxe0hQl00phZ/ZRJC/hbBgfx7t0YD2darw7s/bWLXjqNHZEwU4ee4SAyetYuJvO+hSP5IJQ1oREXK5S0PPJlV5d1BLzmZaSTvoOceVTUOdyBDmP9SJF//RmLSDp2nz6s+8+/O2XOdIIYT3MazTkdZ6vta6vtY6Xmv9qlH5KK/iI0O4vV0tfkw5aGitxdEzFxkyeRWVK/gx+rp6Oen3dKpNeLA/D8/cWOSBT6w2+82R2aR4b3BL/j59keGfr3NX1r1Oyv6TTPx1B10bRDLmOnuzW6UUHwxNJCo0gBfmpvh0oJPluGHpnxjD2l3H+X7jfoNzVLZsNs2z32/G32Ji4b+6kFC9IgCRoQF8PaI9AP+asbFYtePe6JJVYzF5fn/bsf2bYdNw32frOJeZZXR2hJPth89w0/vL2LjnBM/elMCUO1tTwT9/E8Z60fZ+NSfPXyrrLLpks2lMyn7uv7NDHBOGtCLAYmLcoq0M+WgVZy7Kd00Ib+X5VzbhNqO61SMyJIABE1ey/fBpQ/Lw7+83c8mqebRHAyoG+uWkB/qZeXdQS46cyWTMjI1F2pbWGrPjG922ThVGdavLtsNnmPdH+bp5d+Wthen4m02MH9gCP/PlQ9/fYuKFfzRmz7HzfLYyw8Aculd289K7O9amblQIj369iZ/KURPdsT+ls2nvSR67IfexBhBbJZgnezUk7eBpPlmxy5gMlhGrzeZxNXUFiQkL4u2BLTh9MYv3ftludHaEwy9ph+j7/nIOnLjA2wNbcE+n2ljMBd9KVaxgP85OXfCcQMmmc9dU39isGlte6smga2qyascxOr3xS7k6LwrhSySoK8fCg/0ZN6A5AP/9aWuZf/6fe0+yYPNBRnaty+1tY/O936leBKO712PD7hPM3XTlwCy7+WW2B5LqUjcqhHGLtnI+01qqefc2H/76F0vS/2Zkt7pUDvLP936PxlXpUj+Sl+elFmlfe6Psmjp/i4lP7roGk4IX56b6dO1ktlU7jjLx179oExfOHR3yH2sAd3eMo3VsGC/NS2WOj34HwNGnzsNGJHSlV5Oq9G5alc9/38WhU9LvyUhaaz77fRf/nJpMtcoVWDC6M32aFz4dTKXsoM6DauqsttzXSQCTSfH6rc2YOCwRi8nE8KnJvPpDKoflO1cq3l68lR7jf2PbIWMenovyQ4K6cq5D3Qge7BrPgs0Hy7Q/zYVLVkZ8kUxYkB93dYxzudyobnWpExHMhCXbuXCp8MDMpsl1sargb+bxHg3Y8fdZer+77Irr+6rN+04yftFWwoP9uaN9wTf0ZpNi3IDmhAZYeOundE5d8JybkNJitdmDN4tJUTM8iHcGtWTfifN8+OtfBufMvbTWjF+0lajQQCbdkehyfsoAi5l3BrcE7IMUnfXRZlhWDxoo5UqUUjzUvR42DQMmruT42Uyjs1QuWW2aMTM28vycFGKrBPPlvW2pFx16xfUCLGYC/Uye1fwyz3XSWY/GVVn+RFc614tg8rKd3Py/39kl/dJLTGvN+79s4+3F20g/dJqNe04YnSXh44ya0kB4kLs71ubzlRnc/clavn+wY5lMhPvSvFT2nTjPM70b5epcnpfFbOLhG+ozctoGBk9exbcjXA+9b9OavNeqGxpX5dZWMXy7fi+zNuxjcJtapflneIV3ft5GoJ+ZBaM7F1hLly0iJIAJt7fijilrGP75Oga0rklIwJVPESmHs7iUeihnzq/sMnAuC5X9bu4fuaacyLe+IyX3di6/MClFg+hQwoJd/03Osqz2mrrspkd9mldnxto9TPptB/1a1vDZyXhnb9zP6p3HeLJXw0LLH6BG5Qp8fGdr7vlsHd9t2MewdgU/BPBmWTaN2Qv61GVrWLUiz9zYiH9/v5nPVu7K6Q8rysbhUxcY8UUy63ef4M72sTxzYwL+lqJ/f6oEBzB1ZQbdG0bRtk4VN+a0aGxO3RQKEuhn5pO7ruHtxdv4aPkObvtwJaO61eWO9rEyRVAxHDubySMzN7Ik/W/axIWzZtcxn+qvuOfYOd76KZ3ftv5NxQp+1I8OLdK8n3m/QsppLeW4rmP/h1LK3v/T8dr+VvZP+7JK4fivHMvB8bOXuJh1NQ/xL+fplX5NyuSeuLRIUCeICAngzVubcf+X63lt/hbedTytd5eVfx1l2urdXJ8QXWgtXbabmlXn1/S/+Tp5LzPX7WGQi8BMu3gCOfa2ZqQdPMUbP6ZxW2JMrv5kvu7HzQdYlHqIB5Liia545RNTl/qR/PvGRkz8bQcPz9xU9A9ab8yANP5mE8/1SWBoEYKP7D51zk3vXurbmJ5vL6Pbf39l43PXE+TvW6fE3UfPMWbGRqpWDOS+znWKtE63hlG0qFmZZ7/fTO0qwXSqF+HmXJatLKvNa2rqsg1tF8ui1EO8/8t2hrSpRVQRjmVx9bYcOMWQyas4fu4SY66rx+ju9Yod2LxxazPu+mQNQz9ezXuDW9KzSTU35bZoCmp+mZfFbOLRHg3o1iiKl+el8vycFPYcO8fTvRuVeD7T8uTomYvc/tFq0g6eZli7WJ65sRENn/2RMx7Ut/JqpOw/ye0frebsxSyuaxTNiXOX2HPsXLG34zwml0ajNWjsDx5wvNZaY9NO72t7mnasb3N6nZ0eHGDO12+8JHkCuORl3TN86w5GlFivptUY0rYW01bvZmi7WNrUDnfL59hsmv/+lE5ooIX3BrcscoD12i1NST90mjd+TKNfyxoFTpZqdYzqlZfJpBjVrR4jvkjm0xW7uK9L0W5uvd2eY+d44Mv1hAf75xpZ9Eru7VyHuzvWZtvh0zm1W4VZt24diYn2uQXtp9S8J2vHT0fi5d+dt5J7vYKWybv++UtWXpqbyotzU0ioXvGKE/xm96kzO93Q1IkMYfR19Ri7MJ23F2/j6d6NCt2GN9FaM2bGBiwmxfiBLYo8OIhSirf6N+e6cb/y+DebWPJYkssmm97Im/rUOXuuTwLd//srr/+Yxn/7N5daEzfSWjNn034enrmJkAAL80Z1okmNSiXaVqd6Eax8qjt3TlnDA1+ud9zkF6+2rzTZtC5yYNaqVhjfjOjAo19v4qPlO/lm/V6+vLctjauXbF+UByv/OsqIL5I5l5nFh0Nb5QTxgX4mTnt5TV1mlo0Plv7F+MVbCQvy4/sHO8p3wcNIUCdyPNO7ET/8cYA3fkxjxvB2Lkf0uhrjF29lXcZxXurbuMDAzBU/s4knezVkyOTVjPgimYnD8vcNKuxidV2jKDrWrcKr87cQGmhxWdvnS0Z9tQGLycR7g1sW+6bcbFI0rFqxSMse2WamaYwxJ/bmMZVJGruE8Yu28tndbQq9Wcmuqcsb3Nx/bTwbdh9nyvKdHtNEqjRMX7uH9btP8EKfBNrHF+9vqhsVwodDExnxRTL/mZ/G830SAHwikPCmPnXO4iND+L+OtZmyYidhQf48e1OC0VnySVab5oU5KUxdlWFvjnxX6yKfC12JDA1g2n1teeybP/hsZQZ7j5/ng6GJhgR2Np37wdaVmE32hzwNqoby+oI0bvtgJWP7N+OmZoUPElMe/ZRykAe+XE/lIH8m39GapAZROe+FBPhx2lFTl5llY+2uY5zLtNprpSj4IWd2us71WuerTXKWeiCL06U40JVNa05dyGJDxnF+2/Y3R85k0iG+Cq/0a0KdyJBS+xxROiSoEzmCAyw8c2MjHv/mD4ZMXs1Mx9xVpWVJ2mHeX7Kd2CpBDGhds9jrd4iP4K4OcXz6+y6mrszg3jzNyVw1vwR7c5LxA1rQ+c0lvPFjGk1qVCrxk1dPp7Vm6qoMNu45wXM3JdCxrm81n3MWHuzPA13r8vqCNB75ehPjB7ZwuWx2TV3eOcpMJsWLfZtw2we/M3DSKmpHBBPkb87X9j+nFrGAWkh7ev4rbd7mJQWn51/fxfXd5bLnz5+nwtolOdu9ZLVx4OQFWtWqzMBrSvYAo2eTqvRPjOHT33cxbc1usqw2gvwt9v3i1Owlr7y7oaClCropyZdU4DJX3pZJKRpVr8ibtzajQdX8g1lkeeDk40X1aI/6/Lj5AFNXZXBbYgyNql1dsCFyO342kwe+XM/KHUe5pVUN3ri1Wak118++0Z+wZDtjF6bT+91lvDuoZc58kWXFVYuWwphNihHXxpPUIJKhH61h5LQNLNh8kHEDmvtULX5JZWbZePWHVD5bmUHDqqFMu68d4Xn6eocEmPlqzW427TlB+qHTOQ8Z3WLThlLfZHiwPx3rRvCP5tW5PiG61LcvSocEdSKX/okxLN92hDmb9rNi+5FSCwisNs1bP6VTKzyIeaM6FauWztnzfRJY+ddR3l68jX4ta+R6zz6lget1oyoGMn90Z/q+v4Kb3ltOWJCfyyelrp6EuToNu35yVvAbxd++i+0UkGa1ak5fzKJVrcoMaev7NZLDO9fhl7TDzNqwj2HtY102w7Rl19QV0PSuRuUKzHqgIx8t28Guo2ddls/lQE8VkEaujuJ5B3zJt2whA8nk35brAWUADh+6SHR05VzLxkcGM7RdbIGTIhfVqzc35Zq4cDbsOUGlCn5czLLmPDzJ7qxe0HOUvDV6BR6WBa2XJ7HAbRe0KafEc5lWvlqzm0GTVrL8iW4E5xnsx2rT+Jfw/GO0IH8Ls0d2osubS5j82w7GFfIQQxTP/hPnGTJ5FRnHzjHi2nie6NnALTXTD3atS0xYBR7/5g8GTVrJ1Hva0rxm5VL/nIJknwNL2i+uYdWKLH0siRfnpPB18l62HzrDa7c0JTG28KbvvkxrzePfbOL7jfvp16I6z/dpXODgXZlZ9r5ZfhYT93WuQ9MalagVHpQz0AcUfq1wHjjM1XkXYM2atbRpc02p/G3ZQgP9iAwJkP6UXkCCOpGLUopXb25CcsZx3lyYzvfxVUrlwvbp77tI2X+K125uSmgJO7Bm52/8wBb0fncZ4xdt5Xqna0neeeoKEh8ZwrxRnViSfphth89gteYfMfPyZ7nMRbGWd7UZ18tf/fZjwuy1oSUNnr2JyaSYODSR68f/xotzUpg9slOBy12uqSt4R1atFMi/vbRJ29KlS0lKKv0BjvwtJgZcU5MB1xS/Zt1INyRUZfDkVby+II2X+jbOdQ7LstowF2FUV08VGRrAkLa1+Hj5TupEBjOyW9H7y4qCrfzrKMM/X0em1cbn/9eGzvUi3fp5fVvUoFG1itz6we/0nbCCf11Xn4e613V78+bspn7FaX6ZV0iAhbH9m9M0phLPz0mh/4e/M35gC/q2qHHllX3QziNn+X7jfga0juHN25q7XO65Po3Zd+I8/9cxzq3lvDfERN2oK0+3IXyT917ZhNuEBvpxX+favDA3lSe+/YM3bm12VSehP/ee5OV5qcRHBjO4zdXfHCZUr8jgNrX4cvVuztX1IynJnm7TRevzExcRzN0Rta86H8JzhAX782DXeF6cm8qMtbsLbHKYPU+dtza9E0XXPr4K/RNjmLoqg4iQgFwDBWXZNH5eOFCKs0dvaMAXqzJ466et3JoYQ7VKFYzOkteau2k/o6dvIDzYn4nDEulQRs3V60eHMm9UJx76agPjF2/l1IVLPOPm0SWt+upq6pzd0T6Obg2jGP55MqOnb+TX9L/pFubGJoUeSGvN/5ba5zm9o31cocv2bFK1DHIkyrvyM7a7KJY7O8TROjaMmev2Mu+PAyXejtWmGfnVekIDLLw7uGWpPaH6942NiK0SxMJdl/j79EXA3rRE7tfLr2HtYmlaoxJPfPsn63Ydy/d+QaNfCt/1XJ8Egv3NTFmxkwMnz+ekW724T122Cv5mFo7pgr/FxMvzUo3Ojle6mGXlhTkpjPpqA/WjQ1n88LVlFtBli60SzLf3d6BP8+p8vHwnt3zwO0fPXHTb5zmea12xRUtRxYQF8dXwdvRPjOG7DfsYu+5CzvXY11ltmld+2MI3yXupVimQetEyaIgwngR1okBKKb64ty11IoJ5bvZmzmWWbCjeT1bsJOPoOf5za9NSHfo2OMDChCGtuGCFSb/Zn5TZJ1X17ps1UXIWs4kPhrYC4LnZKWTlmV8me4AA6RdQPoQG+vHN/R04feESn6zYlZOeZdP5BsvxRnERwQxrF8vClENs2H3c6Ox4lQuXrDz45QY+/X0XfZpXZ+aI9lQOyt8PqixYzCbeGdiCp3s3ZOOeE/T/cGWuhxClKaf5ZSl+/StV8GNs/+a8N7glu0/ZaPvaYr5cnVF6H+CBzlzM4t7P1vLx8p0MaVuL5U90kwFjhEeQ5pfCpUA/M6/c3IQhk1fT5c0l3N2xNuHB/lhMqsAat7wpWw+dZuJvO+hUN4JebphwtUmNSjSPNPP5ygx6NqmGrZDRL0X5EBMWxBu3NuWJb/9kYcohbmx2+XvnKzfzougaVavIjc2qM+m3HdQMD2JYu1h7nzofCezvT4rnhz8OcPP/fmfpo0nERQQbnSWPt2nPCUZ8kcyBkxd4undDhneJNzpLmEyK4V3iqR8dyvCpyXR6Ywlv9W/GzS1jSvVzcppfuuE62ad5dfZu38KkFCvPzNrMpSwbA6+pdVUDNXmik+cuMWjyKrYcOOXWAXWEKAkJ6kShOsRHMH5gc8b+mM7YhenFXr99Hft8Ju66iRqW4M9Tyy8ycOJKsmyuBz0R5Ue/ljX4aNlOxszYQESIf868c77Q7E4U3yt9mzB3035enpdKz8ZVHcG9b3wPIkICeLlfE+77fB2frNjJi32bGJ0lj7Yk/TAPTdtAgJ+JcQOac0ur0g2arlZSgyjmjuzEPZ+t5V8zNnHmQhZD28WWWtCQM/qlmy6UjaqYWfbEtdzz6VpemJvKmwvTmfnP9j4zfVD6wdOMmbGRrYdO8+HQROknJzyOBHXiim5uGUO/FjU4ciaTLJuNLGvR5p2qWMHi9iYt4YEmxg1owYPT1gNSUycgwGJmwu2tuGH8b4xdmM4393cAIMvqOzfzougqBfkxb1Qn+ry/nJfnpdonH/fygVKcXZ8QzcDWNflsZQaJceHc1LSaNDHO46+/z/D6gjQWpR6iVngQU+9pQ2wVz6zVbFA1lIVjunDHlDU8OzuFn9MOM2FIq3xTc5RE9tRo7ny4FRJgYeo9bRm7MI3Jy3Zyx5Q1fHB7K1rHhWM2KS5mWTl+9hImZe/mkesnCmWyt/oxKZVrXk7nCbhxTMJt05ffc56YO9drLgezzuk2p/XIScu/DatNk3bwNEvTDzP/z4P4mRXvDGohAZ3wSBLUiSJRShEZGmB0Ngp0Y7NqzNoQxeIthzl5/pLR2REeoH50KA92jWfCkr+YvXEffVvUwGqzFThHnfB9TWpUYmjbWGas20Nmlg2zjzXDfbxnA5ZvP8JDX21g3E/p1AwPwmrTZNk0Wttvfm2OnxaTIjTQful3fhhX0MT2Oe/lWk7nTytk0EObtufDVthCpeTUyfO8k7oiV772Hj/PkTMXCfY381C3utzZIY4qIZ55LcsWHGBh+vB2vL4gjY+X7+SuT9YwbkALaoYHXdV2rTk1daWRS9f8LSaeuTGBfi1rcNcnaxk4aRVmkyLQYuJCls29E2+7SaCfiTvaxzLmuvr5JhYXwlNIUCd8wuju9Vm85TAxYTK0t7Ab3b0+8/88yOPf/EG9qFCfanYnim9Ut7os2HyAI2cySd1/0ujslKoqIQEsfvhavlydweIthzhzMQuLSWFSCovZlDNZvEkpLlltHDubebkP9BUmtr+cdqXlXE+kGehnKpNWFJcsipA8NVpd6kfQIDqUW1rFeOyDyYL4mU08e1MC9aJCeG52CteP/5WJw1pzbf2Sz6GnS3FKg6JoXL0SC0Z3ZnHqIfYeP8/5S1b8LSZqVK6AUuTUtNlsjlo3Rx6za9LyTrqdTSnlqM1zvM6ZkFvlrJOdZnK8UM7rmS4vk709U571lLq8fJ3IYGqFB+Nv8a2HQcL3SFAnfELTmEqsfro7lYNKPrG58C3+FhNvD2xB3wkr6P3uMm5uWUOa55ZjURUD+XpEB7q+tdQnBxSp4G/m3s51uLdzHaOzYpilS5eSlNTW6GyUqkFtapFQvSL/nJrM8M/X8erNTbm1VY0S9bNz50AprkSEBDCoTf55Q4UQpU8eOwifEV0xUIYVFrk0r1mZ/on2wRBmbdgnNXXlXO2IYFY+1Y3/3NLU6KwIUWTNYioz+8GO1IkM4dGvN/HI15vyTdlSFFaZq1MInyZBnRDCp715WzO6N4wC4PSFks23KHxHtUoVCPKXRirCu0RVDGTWAx24LTGG79bvY/jUZPYcO1esbWR3a5SBdITwTRLUCSF8mlKKkd3qAnD6ogR1QgjvFOhnZuxtzXjk+vr8knaYfhNWkFKM/qFlNVCKEMIYEtQJIXxey1phvNy3MaMcwZ0QQngjpRSjutfjW8dULQMnrmL6mt1FWje7T53M1ymEb5KgTghRLgxrH8cjNzQwOhtCCHHVEmPDmD68HWHBfjz53Z+MX7T1iutoAwZKEUKUHQnqhBBCCCG8TL3oUH55JIneTavyzs/buOfTtRw4ed7l8tljq0hQJ4RvkqBOCCGEEMIL+ZlNvD2wJQ8kxfNz2mH6f7iSjKNnC1w2Z/RLufMTwifJoS2EEEII4aX8LSYe79mQmf9sz7GzmfR6Zxnz/zyQbzmbNL8UwqdJUCeEEEII4eXa1A5n1gMdCQ/258Fp6/lydUau9yWoE8K3SVAnhBBCCOEDGlQN5YeHOtMmLpxnZm3m3s/WcT7TCjg3v5SgTghfJEGdEEIIIYSPqFTBj6n3tGVou1os3nKIYR+v5tSFS9hk8nEhfNpVBXVKqf5KqRSllE0p1TrPe08ppbYrpdKVUj2c0ns60rYrpZ68ms8XQgghhBC5+VtMvNKvKa/f0pR1Gcfp9PovrNh+BJDJx4XwVVdbU7cZuAX4zTlRKZUADAIaAz2B/ymlzEopMzAB6AUkAIMdywohhBBCiFI0qE0tvhnRHrNJMc4xl51Z+tQJ4ZOuKqjTWm/RWqcX8FZfYLrW+qLWeiewHWjj+L9da71Da50JTHcsK4QQQgghSlnruHAWjumS87tF5jQQwidZ3LTdGsAqp9/3OtIA9uRJb+umPAghhBBClHtRFQPZ9PwNzN20n+Y1KxmdHSGEGyjtGOLW5QJKLQaqFvDWM1rr2Y5llgKPaq3XOX5/H1iltf7C8fvHwALHej211vc60ocBbbXWIwv43OHAcIDo6OjE6dOnF/+vc7MzZ84QEhJidDbKNSkD40kZGE/KwHhSBsaTMjCW7H/jSRkYz91l0LVr12StdeuC3rtiTZ3W+roSfOY+oKbT7zGONApJz/u5k4BJAK1bt9ZJSUklyIZ7LV26FE/MV3kiZWA8KQPjSRkYT8rAeFIGxpL9bzwpA+MZWQbuan45B5imlBoHVAfqAWsABdRTStXGHswNAoZcaWPJyclHlFIZV1rOABHAEaMzUc5JGRhPysB4UgbGkzIwnpSBsWT/G0/KwHjuLoNYV29cVVCnlLoZeA+IBH5QSm3UWvfQWqcopWYCqUAW8KDW2upYZySwEDADU7TWKVf6HK115NXk012UUutcVYGKsiFlYDwpA+NJGRhPysB4UgbGkv1vPCkD4xlZBlcV1GmtZwGzXLz3KvBqAenzgflX87lCCCGEEEIIIexkXFshhBBCCCGE8GIS1F2dSUZnQEgZeAApA+NJGRhPysB4UgbGkv1vPCkD4xlWBlec0kAIIYQQQgghhOeSmjohhBBCCCGE8GIS1JWQUqqnUipdKbVdKfWk0fnxVUqpmkqpJUqpVKVUilJqtCP9BaXUPqXURsf/3k7rPOUol3SlVA/jcu8blFK7lFJ/OvbzOkdauFJqkVJqm+NnmCNdKaXedez/P5RSrYzNvfdTSjVw+p5vVEqdUkqNkWPAvZRSU5RSh5VSm53Siv29V0rd6Vh+m1LqTiP+Fm/logzGKqXSHPt5llKqsiM9Til13ul4+NBpnUTHOWy7o5yUAX+OV3JRBsU+98g9U8m5KIMZTvt/l1JqoyNdjoNSVsh9qOddD7TW8r+Y/7FPx/AXUAfwBzYBCUbnyxf/A9WAVo7XocBWIAF4AXi0gOUTHOURANR2lJPZ6L/Dm/8Du4CIPGlvAk86Xj8JvOF43RtYgH1OynbAaqPz70v/Heeeg9jnqZFjwL37ugvQCtjslFas7z0QDuxw/AxzvA4z+m/zlv8uyuAGwOJ4/YZTGcQ5L5dnO2sc5aIc5dTL6L/NW/67KINinXvknqn0yyDP+/8FnnO8luOg9Pe/q/tQj7seSE1dybQBtmutd2itM4HpQF+D8+STtNYHtNbrHa9PA1uAGoWs0heYrrW+qLXeCWzHXl6idPUFPnO8/gzo55T+ubZbBVRWSlUzIH++qjvwl9Y6o5Bl5BgoBVrr34BjeZKL+73vASzSWh/TWh8HFgE93Z55H1FQGWitf9JaZzl+XQXEFLYNRzlU1Fqv0vY7q8+5XG7iClwcB664OvfIPdNVKKwMHLVtA4CvCtuGHAclV8h9qMddDySoK5kawB6n3/dSeKAhSoFSKg5oCax2JI10VG1Pya72RsrGHTTwk1IqWSk13JEWrbU+4Hh9EIh2vJb9716DyH3xlmOgbBX3ey9l4V7/h/2JeLbaSqkNSqlflVKdHWk1sO/3bFIGpaM45x45DtynM3BIa73NKU2OAzfJcx/qcdcDCeqEV1BKhQDfAmO01qeAD4B4oAVwAHvzA+EenbTWrYBewINKqS7Obzqe+skwum6mlPIH/gF87UiSY8BA8r03llLqGSAL+NKRdACopbVuCTwMTFNKVTQqfz5Ozj2eYzC5H/TJceAmBdyH5vCU64EEdSWzD6jp9HuMI024gVLKD/uB9KXW+jsArfUhrbVVa20DJnO5eZmUTSnTWu9z/DwMzMK+rw9lN6t0/DzsWFz2v/v0AtZrrQ+BHAMGKe73XsrCDZRSdwE3Abc7bqZwNPk76nidjL0PV33s+9u5iaaUwVUqwblHjgM3UEpZgFuAGdlpchy4R0H3oXjg9UCCupJZC9RTStV2PD0fBMwxOE8+ydFe/GNgi9Z6nFO6cz+tm4HsUaHmAIOUUgFKqdpAPeydg0UJKKWClVKh2a+xD1KwGft+zh656U5gtuP1HOAOx+hP7YCTTs0TxNXJ9URWjgFDFPd7vxC4QSkV5miidoMjTZSQUqon8DjwD631Oaf0SKWU2fG6Dvbv/Q5HOZxSSrVzXE/u4HK5iRIowblH7pnc4zogTWud06xSjoPS5+o+FA+8HlhKc2PlhdY6Syk1EnthmIEpWusUg7PlqzoCw4A/lWPIXuBpYLBSqgX26u5dwD8BtNYpSqmZQCr2pjkPaq2tZZxnXxINzLKf07AA07TWPyql1gIzlVL3ABnYO2oDzMc+8tN24Bxwd9ln2fc4AurrcXzPHd6UY8B9lFJfAUlAhFJqL/A88DrF+N5rrY8ppV7GflML8JLWuqiDTpR7LsrgKeyjKy5ynJdWaa1HYB8h8CWl1CXABoxw2tcPAJ8CFbD3wXPuhycK4aIMkop77pF7ppIrqAy01h+Tv481yHHgDq7uQz3ueqAcLReEEEIIIYQQQnghaX4phBBCCCGEEF5MgjohhBBCCCGE8GIS1AkhhBBCCCGEF5OgTgghhBBCCCG8mAR1QgghhBBCCOHFJKgTQgghhBBCCC8mQZ0QQgghhBBCeDEJ6oQQQgghhBDCi/0/U/p+DT7WTOYAAAAASUVORK5CYII=\n",
"text/plain": [
"<Figure size 1080x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plot_x(x_copy)"
]
},
{
"cell_type": "code",
"execution_count": 30,
"id": "340d7fb5",
"metadata": {},
"outputs": [],
"source": [
"fig.savefig(fname=\"processed_data.pdf\", dpi=250, format=\"pdf\")"
]
},
{
"cell_type": "code",
"execution_count": 31,
"id": "19925435",
"metadata": {},
"outputs": [
{
"ename": "KeyboardInterrupt",
"evalue": "",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m/tmp/ipykernel_524362/2733077647.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 17\u001b[0m \u001b[0mcount\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcap\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcv\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mCAP_PROP_POS_FRAMES\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 18\u001b[0m \u001b[0;31m# I need a high precision, so I use np.array for these purposes\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 19\u001b[0;31m \u001b[0mcurr_time\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0marray\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcount\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdtype\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfloat128\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m/\u001b[0m \u001b[0mfps\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 20\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 21\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mKeyboardInterrupt\u001b[0m: "
]
}
],
"source": [
"# PLOTTING ON THE FLY\n",
"# Let's read the video and draw the graph for each frame.\n",
"import cv2 as cv\n",
"video_path = \"../working_data/camera1-2020-10-14---19-38-42---093390448_scaled.mp4\"\n",
"cap = cv.VideoCapture(video_path)\n",
"fps = 30\n",
"plt.ioff\n",
"\n",
"if not cap.isOpened():\n",
" print(\"Error opening video stream or file\")\n",
"\n",
"# At each frame take the number of the current frame, compute it's\n",
"time\n",
"while cap.isOpened():\n",
" # ret stands for \"return\": True of False (Success or not)\n",
" ret, frame = cap.read()\n",
" count = cap.get(cv.CAP_PROP_POS_FRAMES)\n",
" # I need a high precision, so I use np.array for these purposes\n",
" curr_time = np.array(count, dtype=np.float128) / fps\n",
"\n",
"\n",
"\n",
"cap.release()\n",
"cv.destroyAllWindows()"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "6aacce6c",
"metadata": {
"pycharm": {
"name": "#%%\n"
}
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"id": "ee8e544b",
"metadata": {
"pycharm": {
"name": "#%%\n"
}
},
"outputs": [],
"source": []
}
],
"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.8.10"
}
},
"nbformat": 4,
"nbformat_minor": 5
}