{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Populating the interactive namespace from numpy and matplotlib\n" ] }, { "data": { "text/plain": [ "'0.25.3'" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%pylab inline\n", "import skimage\n", "from skimage.io import imread\n", "import cv2\n", "from pathlib import Path\n", "import pandas as pd\n", "import seaborn as sns\n", "pd.__version__" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Vyhodnocení" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "df_algorithm = pd.DataFrame(dict(\n", "# filename=[\"zverinec02-006.mp4\"]*8,\n", " filename=[\"zverinec02-004.mp4\"]*8,\n", " frame_id=[1, 3, 30, 50, 70,100, 203, 280],\n", " animal_id=[0, 1, 1, 1, 1, 0, 0, 0],\n", " x_px=[450, 460, 470, 500, 520, 455, 460, 500],\n", " y_px=[430, 440, 390, 385, 380, 425, 410, 400],\n", "))" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "sns.lineplot(data=df_algorithm, x=\"x_px\", y=\"y_px\",hue=\"animal_id\", sort=False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Interpolace záznamů\n", "\n", "Naše anotace nejsou v každém framu, tak je potřeba je interpolovat." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "562\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
filenameframe_idanimal_idx_pxy_px
0zverinec02-004.mp400450.000000430.000000
1zverinec02-004.mp410450.000000430.000000
2zverinec02-004.mp420450.461680430.067749
3zverinec02-004.mp430450.684340430.098489
4zverinec02-004.mp440450.901618430.127154
..................
557zverinec02-004.mp42761520.000000380.000000
558zverinec02-004.mp42771520.000000380.000000
559zverinec02-004.mp42781520.000000380.000000
560zverinec02-004.mp42791520.000000380.000000
561zverinec02-004.mp42801520.000000380.000000
\n", "

562 rows × 5 columns

\n", "
" ], "text/plain": [ " filename frame_id animal_id x_px y_px\n", "0 zverinec02-004.mp4 0 0 450.000000 430.000000\n", "1 zverinec02-004.mp4 1 0 450.000000 430.000000\n", "2 zverinec02-004.mp4 2 0 450.461680 430.067749\n", "3 zverinec02-004.mp4 3 0 450.684340 430.098489\n", "4 zverinec02-004.mp4 4 0 450.901618 430.127154\n", ".. ... ... ... ... ...\n", "557 zverinec02-004.mp4 276 1 520.000000 380.000000\n", "558 zverinec02-004.mp4 277 1 520.000000 380.000000\n", "559 zverinec02-004.mp4 278 1 520.000000 380.000000\n", "560 zverinec02-004.mp4 279 1 520.000000 380.000000\n", "561 zverinec02-004.mp4 280 1 520.000000 380.000000\n", "\n", "[562 rows x 5 columns]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from typing import Optional\n", "\n", "def interpolate_px(df_algorithm:pd.DataFrame, n_frames:Optional[int]=None, n_animals:Optional[int]=None, order:int=3) -> pd.DataFrame:\n", " if n_frames:\n", " l = n_frames\n", " else:\n", " l = np.max(df_algorithm.frame_id) + 1\n", " if not n_animals:\n", " n_animals = np.max(df_algorithm.animal_id)\n", " df_interpolated = pd.DataFrame()\n", "\n", " for fn_i in df_algorithm.filename.unique():\n", " for animal_id_i in range(0, n_animals+1):\n", " df_append = pd.DataFrame(dict(\n", " filename=[fn_i] * l,\n", " frame_id=list(range(l)),\n", " animal_id=[animal_id_i] * l,\n", " x_px=[np.nan] * l,\n", " y_px=[np.nan] * l,\n", " ))\n", "\n", " one_to_append = df_algorithm[\n", " (df_algorithm.animal_id==animal_id_i) & (df_algorithm.filename==fn_i)\n", " ].append(df_append).sort_values(\n", " by=[\"frame_id\", \"y_px\"]\n", " ).reset_index(drop=True).drop_duplicates( \n", " \"frame_id\" \n", " ).interpolate( # this is not putting data in front or to the back\n", " method='polynomial', order=order,\n", " # limit_area=None,limit_direction=\"forward\"\n", " ).interpolate( # this will fill the data\n", " limit_area=None,limit_direction=\"backward\"\n", " ).interpolate(\n", " limit_area=None,limit_direction=\"forward\"\n", " )\n", "\n", " df_interpolated = df_interpolated.append(\n", " one_to_append, sort=False\n", " )\n", " df_interpolated = df_interpolated.sort_values(by=[\"filename\" , \"animal_id\", \"frame_id\", ]).reset_index(drop=True)\n", " return df_interpolated\n", "\n", "df_interpolated = interpolate_px(df_algorithm)\n", "sns.lineplot(data=df_interpolated, x=\"x_px\", y=\"y_px\",hue=\"animal_id\", sort=False)\n", "\n", "print(len(df_interpolated))\n", "\n", "df_interpolated\n", "# one_to_append" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array(['zverinec01-001.mp4', 'zverinec01-002.mp4', 'zverinec01-003.mp4',\n", " 'zverinec01-004.mp4', 'zverinec01-005.mp4', 'zverinec01-006.mp4',\n", " 'zverinec01-007.mp4', 'zverinec01-008.mp4', 'zverinec01-009.mp4',\n", " 'zverinec01-010.mp4', 'zverinec01-011.mp4', 'zverinec01-021.mp4',\n", " 'zverinec01-022.mp4', 'zverinec01-023.mp4', 'zverinec01-024.mp4',\n", " 'zverinec01-025.mp4', 'zverinec01-026.mp4', 'zverinec01-027.mp4',\n", " 'zverinec01-028.mp4', 'zverinec01-029.mp4', 'zverinec01-030.mp4',\n", " 'zverinec02-001.mp4', 'zverinec02-002.mp4', 'zverinec02-003.mp4',\n", " 'zverinec02-004.mp4', 'zverinec02-009.mp4', 'zverinec02-010.mp4',\n", " 'zverinec02-011.mp4', 'zverinec02-012.mp4'], dtype=object)" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_anns = pd.read_excel(\"G:/Můj disk/data/medical/orig/zverinec-top-view/annotations/annotations.xlsx\")\n", "df_anns.sort_values(\"filename\").filename.unique()" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "# import contextlib\n", "# with contextlib.redirect_stdout(None):\n", "# import pixiedust" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "pixiedust": { "displayParams": {} } }, "outputs": [ { "data": { "text/html": [ "
Hey, there's something awesome here! To see it, open this notebook outside GitHub, in a viewer like Jupyter
" ], "text/plain": [ "" ] }, "metadata": { "pixieapp_metadata": null }, "output_type": "display_data" } ], "source": [ "# %%pixie_debugger\n", "# fn_un = df_algorithm.filename.unique()\n", "# fn_un" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Návrh porovnání dvou vzdáleností" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "pixiedust": { "displayParams": {} } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
filenameanimal_iddist_maxdist_stddist_mean
0zverinec02-004.mp40228.09390050.80234290.113597
1zverinec02-004.mp41233.74062724.954252138.020388
\n", "
" ], "text/plain": [ " filename animal_id dist_max dist_std dist_mean\n", "0 zverinec02-004.mp4 0 228.093900 50.802342 90.113597\n", "1 zverinec02-004.mp4 1 233.740627 24.954252 138.020388" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# %%pixie_debugger\n", "# fn_i = 0\n", "\n", "def dist_eval(df_gt, df_algorighm):\n", " df_anns = df_gt\n", " fns = []\n", " dst_max = []\n", " dst_std = []\n", " dst_mean = []\n", " anim_ids = []\n", " debug_per = []\n", " for fn in df_algorithm.filename.unique():\n", " df_anns_sel = df_anns[df_anns.filename==fn]\n", " n_frames = maximum(np.max(df_anns_sel.frame_id), np.max(df_algorithm.frame_id)) + 1\n", " n_animals= maximum(np.max(df_anns_sel.animal_id), np.max(df_algorithm.animal_id)) + 1\n", "\n", " anim_i = 0\n", " anim_j = 0\n", "\n", " df_an_s_fn = interpolate_px(df_anns[(df_anns.filename == fn)], n_frames=n_frames, n_animals=n_animals)\n", " df_al_s_fn = interpolate_px(df_algorithm[(df_algorithm.filename == fn)], n_frames=n_frames, n_animals=n_animals)\n", " for anim_i in range(n_animals):\n", " dist_mean = None\n", " dist_min = 0\n", " dist_std = 0\n", " for anim_j in range(n_animals):\n", "\n", " df_an_s = df_an_s_fn[(df_an_s_fn.animal_id==anim_j)]\n", " df_al_s = df_al_s_fn[(df_al_s_fn.animal_id==anim_i)]\n", "\n", " per_fram_dist = ((df_an_s.x_px - df_al_s.x_px)**2 + (df_an_s.y_px - df_al_s.y_px)**2)**0.5\n", " debug_per.append(per_fram_dist)\n", "\n", " mn = np.mean(per_fram_dist)\n", "# print(f\"mn={mn} , {type(mn)} {mn is nan}\")\n", "\n", " if mn is not np.nan:\n", " if dist_mean is None:\n", " dist_mean = np.mean(per_fram_dist)\n", " dist_std = np.std(per_fram_dist)\n", " dist_max = np.max(per_fram_dist)\n", " # print(f\"dist_mean={dist_mean} in init\")\n", " else:\n", " if mn < dist_mean:\n", " dist_mean = np.mean(per_fram_dist)\n", " dist_std = np.std(per_fram_dist)\n", " dist_max = np.max(per_fram_dist)\n", " # print(f\"dist_mean={dist_mean} in else\")\n", " fns.append(fn)\n", " dst_max.append(dist_max)\n", " dst_std.append(dist_std)\n", " dst_mean.append(dist_mean)\n", " # print(f\"dist_mean={dist_mean}\")\n", " anim_ids.append(anim_i)\n", "\n", " df = pd.DataFrame(dict(filename=fns, animal_id=anim_ids, dist_max=dst_max, dist_std=dst_std, dist_mean=dst_mean))\n", " return df\n", "\n", "dist_eval(df_anns, df_algorithm)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## vyhodnocení neznámého algoritmu" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "df_alg = pd.read_excel()\n", "\n", "dist_eval(df_anns, df_alg)" ] } ], "metadata": { "@webio": { "lastCommId": null, "lastKernelId": null }, "kernelspec": { "display_name": "Python 3", "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.3" }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": true, "sideBar": true, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": {}, "toc_section_display": true, "toc_window_display": true } }, "nbformat": 4, "nbformat_minor": 2 }