This repository has been archived on 2022-06-08. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
ORB_SLAM3_linux/Examples/Monocular/jupyter notebook/playground-Copy1.ipynb
Ivan c63e1ff208 v1
2022-06-08 17:41:00 +03:00

1404 lines
152 KiB
Plaintext
Raw Permalink 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": 186,
"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": 187,
"id": "f7f35a46",
"metadata": {},
"outputs": [],
"source": [
"table = pd.read_csv(\"../results/test_processing_camera1-2020-10-14---19-38-42---093390448_scaled.txt\", sep=\" \")"
]
},
{
"cell_type": "code",
"execution_count": 188,
"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>angle</th>\n",
" <th>v1</th>\n",
" <th>v2</th>\n",
" <th>v3</th>\n",
" <th>frame</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>-0.079121</td>\n",
" <td>-0.000958</td>\n",
" <td>-0.002339</td>\n",
" <td>-0.001163</td>\n",
" <td>352</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>-0.111895</td>\n",
" <td>-0.001148</td>\n",
" <td>-0.003487</td>\n",
" <td>-0.001454</td>\n",
" <td>353</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>-0.260921</td>\n",
" <td>-0.001304</td>\n",
" <td>-0.008950</td>\n",
" <td>-0.000867</td>\n",
" <td>354</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>-0.262416</td>\n",
" <td>-0.001228</td>\n",
" <td>-0.008998</td>\n",
" <td>-0.001081</td>\n",
" <td>355</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>-0.310243</td>\n",
" <td>-0.001224</td>\n",
" <td>-0.010282</td>\n",
" <td>-0.003158</td>\n",
" <td>356</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2060</th>\n",
" <td>-86.251800</td>\n",
" <td>-0.006454</td>\n",
" <td>0.081062</td>\n",
" <td>-0.024614</td>\n",
" <td>2486</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2061</th>\n",
" <td>-86.253100</td>\n",
" <td>-0.006412</td>\n",
" <td>0.081016</td>\n",
" <td>-0.024610</td>\n",
" <td>2487</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2062</th>\n",
" <td>-86.253200</td>\n",
" <td>-0.006455</td>\n",
" <td>0.081021</td>\n",
" <td>-0.024571</td>\n",
" <td>2488</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2063</th>\n",
" <td>-86.252800</td>\n",
" <td>-0.006516</td>\n",
" <td>0.080946</td>\n",
" <td>-0.024864</td>\n",
" <td>2489</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2064</th>\n",
" <td>-86.249900</td>\n",
" <td>-0.006489</td>\n",
" <td>0.081006</td>\n",
" <td>-0.025010</td>\n",
" <td>2490</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>2065 rows × 5 columns</p>\n",
"</div>"
],
"text/plain": [
" angle v1 v2 v3 frame\n",
"0 -0.079121 -0.000958 -0.002339 -0.001163 352\n",
"1 -0.111895 -0.001148 -0.003487 -0.001454 353\n",
"2 -0.260921 -0.001304 -0.008950 -0.000867 354\n",
"3 -0.262416 -0.001228 -0.008998 -0.001081 355\n",
"4 -0.310243 -0.001224 -0.010282 -0.003158 356\n",
"... ... ... ... ... ...\n",
"2060 -86.251800 -0.006454 0.081062 -0.024614 2486\n",
"2061 -86.253100 -0.006412 0.081016 -0.024610 2487\n",
"2062 -86.253200 -0.006455 0.081021 -0.024571 2488\n",
"2063 -86.252800 -0.006516 0.080946 -0.024864 2489\n",
"2064 -86.249900 -0.006489 0.081006 -0.025010 2490\n",
"\n",
"[2065 rows x 5 columns]"
]
},
"execution_count": 188,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"table"
]
},
{
"cell_type": "code",
"execution_count": 189,
"id": "e6758882",
"metadata": {},
"outputs": [],
"source": [
"x = table[\"angle\"].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": 190,
"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": 191,
"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": "markdown",
"id": "57b67919",
"metadata": {},
"source": [
"ground_truth = pd.read_csv(\"../working_data/camera1-2020-10-14---19-38-42---093390448.txt\", sep=\" \")"
]
},
{
"cell_type": "code",
"execution_count": 192,
"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": 192,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ground_truth"
]
},
{
"cell_type": "markdown",
"id": "a9fc22bf",
"metadata": {},
"source": [
"# Обработка"
]
},
{
"cell_type": "code",
"execution_count": 193,
"id": "096f42fd",
"metadata": {},
"outputs": [],
"source": [
"true_x = ground_truth[\"x\"].values"
]
},
{
"cell_type": "code",
"execution_count": 194,
"id": "9b4fc811",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"17.835578"
]
},
"execution_count": 194,
"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": 195,
"id": "211eb76c",
"metadata": {},
"outputs": [],
"source": [
"# Let's create the timestamps \n",
"time_x = table['frame'].values / 30\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": 196,
"id": "657c7996",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([11.73333333, 11.76666667, 11.8 , ..., 82.93333333,\n",
" 82.96666667, 83. ])"
]
},
"execution_count": 196,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"time_x"
]
},
{
"cell_type": "code",
"execution_count": 197,
"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": 198,
"id": "38dd8be1",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"30.784421999999996"
]
},
"execution_count": 198,
"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": 199,
"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": 200,
"id": "1c1f84b6",
"metadata": {},
"outputs": [],
"source": [
"true_values = true_x[true_x_indexes]"
]
},
{
"cell_type": "code",
"execution_count": 201,
"id": "7ac96655",
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"array([-7.91214e-02, -1.11895e-01, -2.60921e-01, ..., -8.62532e+01,\n",
" -8.62528e+01, -8.62499e+01])"
]
},
"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": [
"-55.448374937890634"
]
},
"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": "markdown",
"id": "50c3d3a5",
"metadata": {},
"source": [
"# Обработаем ошибки двух видов в оценке ORB_SLAM3:\n",
"1. \"Потеря\" оси поворота\n",
"2. Абсолютные значения измерения градусов. Необходимо использовать данные векторов для определения направления. "
]
},
{
"cell_type": "code",
"execution_count": 202,
"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": 203,
"id": "cd7005b1",
"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(true_values+54, \"true.png\")"
]
},
{
"cell_type": "code",
"execution_count": 47,
"id": "1fdff1a1",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x7f3f9a121b80>"
]
},
"execution_count": 47,
"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[:1305])\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": null,
"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": 46,
"id": "9db9e018",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Found inverse val. It's index is: 2 It's value is -0.260921 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.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: 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.335684 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: 26 It's value is -0.334516 Last element is -0.334516\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: 34 It's value is -0.321393 Last element is -0.320173\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: 41 It's value is -0.336848 Last element is -0.320173\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.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: 60 It's value is -0.327423 Last element is -0.322608\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: 66 It's value is -0.328616 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: 72 It's value is -0.328616 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: 81 It's value is -0.325025 Last element is -0.322608\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: 87 It's value is -0.321393 Last element is -0.31772\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: 93 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: 99 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: 105 It's value is -0.318949 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: 112 It's value is -0.322608 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: 118 It's value is -0.911624 Last element is -0.349391\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 -1.99507 Last element is -0.605811\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: 233 It's value is 1.61561 Last element is 0.565517\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 0x7f3f9a0676a0>"
]
},
"execution_count": 46,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\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
}