knuckletouch/python/Step_05_CNN_PreprocessData....

967 lines
43 KiB
Plaintext

{
"cells": [
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"%matplotlib inline\n",
"\n",
"from scipy.odr import *\n",
"from scipy.stats import *\n",
"import numpy as np\n",
"import pandas as pd\n",
"import os\n",
"import time\n",
"import matplotlib.pyplot as plt\n",
"import ast\n",
"from multiprocessing import Pool, cpu_count\n",
"\n",
"import scipy\n",
"\n",
"from IPython import display\n",
"from matplotlib.patches import Rectangle\n",
"\n",
"from sklearn.metrics import mean_squared_error\n",
"import json\n",
"\n",
"import scipy.stats as st\n",
"from sklearn.metrics import r2_score\n",
"\n",
"\n",
"from matplotlib import cm\n",
"from mpl_toolkits.mplot3d import axes3d\n",
"import matplotlib.pyplot as plt\n",
"\n",
"import copy\n",
"\n",
"from sklearn.model_selection import LeaveOneOut, LeavePOut\n",
"\n",
"from multiprocessing import Pool\n",
"import cv2"
]
},
{
"cell_type": "code",
"execution_count": 10,
"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>userID</th>\n",
" <th>Timestamp</th>\n",
" <th>Current_Task</th>\n",
" <th>Task_amount</th>\n",
" <th>TaskID</th>\n",
" <th>VersionID</th>\n",
" <th>RepetitionID</th>\n",
" <th>Actual_Data</th>\n",
" <th>Is_Pause</th>\n",
" <th>Image</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>7919</th>\n",
" <td>17</td>\n",
" <td>1547138928692</td>\n",
" <td>1</td>\n",
" <td>680</td>\n",
" <td>6</td>\n",
" <td>2</td>\n",
" <td>0</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7920</th>\n",
" <td>17</td>\n",
" <td>1547138928735</td>\n",
" <td>1</td>\n",
" <td>680</td>\n",
" <td>6</td>\n",
" <td>2</td>\n",
" <td>0</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7921</th>\n",
" <td>17</td>\n",
" <td>1547138928773</td>\n",
" <td>1</td>\n",
" <td>680</td>\n",
" <td>6</td>\n",
" <td>2</td>\n",
" <td>0</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7922</th>\n",
" <td>17</td>\n",
" <td>1547138928813</td>\n",
" <td>1</td>\n",
" <td>680</td>\n",
" <td>6</td>\n",
" <td>2</td>\n",
" <td>0</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7923</th>\n",
" <td>17</td>\n",
" <td>1547138928861</td>\n",
" <td>1</td>\n",
" <td>680</td>\n",
" <td>6</td>\n",
" <td>2</td>\n",
" <td>0</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" userID Timestamp Current_Task Task_amount TaskID VersionID \\\n",
"7919 17 1547138928692 1 680 6 2 \n",
"7920 17 1547138928735 1 680 6 2 \n",
"7921 17 1547138928773 1 680 6 2 \n",
"7922 17 1547138928813 1 680 6 2 \n",
"7923 17 1547138928861 1 680 6 2 \n",
"\n",
" RepetitionID Actual_Data Is_Pause \\\n",
"7919 0 True False \n",
"7920 0 True False \n",
"7921 0 True False \n",
"7922 0 True False \n",
"7923 0 True False \n",
"\n",
" Image \n",
"7919 [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n",
"7920 [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n",
"7921 [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n",
"7922 [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n",
"7923 [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... "
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dfAll = pd.read_pickle(\"DataStudyCollection/AllData.pkl\")\n",
"df = dfAll[(dfAll.Actual_Data == True) & (dfAll.Is_Pause == False)]\n",
"df.head()"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 39 s, sys: 5.78 s, total: 44.8 s\n",
"Wall time: 43.3 s\n"
]
}
],
"source": [
"%%time\n",
"def is_max(df):\n",
" df_temp = df.copy(deep=True)\n",
" max_version = df_temp.RepetitionID.max()\n",
" df_temp[\"IsMax\"] = np.where(df_temp.RepetitionID == max_version, True, False)\n",
" df_temp[\"MaxRepetition\"] = [max_version] * len(df_temp)\n",
" return df_temp\n",
"\n",
"df_grp = df.groupby([df.userID, df.TaskID, df.VersionID])\n",
"pool = Pool(cpu_count() - 1)\n",
"result_lst = pool.map(is_max, [grp for name, grp in df_grp])\n",
"df = pd.concat(result_lst)\n",
"pool.close()"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [],
"source": [
"df.Image = df.Image.apply(lambda x: x.reshape(27, 15))\n",
"df.Image = df.Image.apply(lambda x: x.clip(min=0, max=255))\n",
"df.Image = df.Image.apply(lambda x: x.astype(np.uint8))\n",
"df[\"ImageSum\"] = df.Image.apply(lambda x: np.sum(x))"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [],
"source": [
"df.to_pickle(\"DataStudyCollection/dfFiltered.pkl\")"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"recorded actual: 1010014, used data: 851455\n"
]
}
],
"source": [
"print(\"recorded actual: %s, used data: %s\" % (len(dfAll), len(df)))"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [],
"source": [
"df = pd.read_pickle(\"DataStudyCollection/dfFiltered.pkl\")"
]
},
{
"cell_type": "code",
"execution_count": 16,
"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>userID</th>\n",
" <th>Timestamp</th>\n",
" <th>Current_Task</th>\n",
" <th>Task_amount</th>\n",
" <th>TaskID</th>\n",
" <th>VersionID</th>\n",
" <th>RepetitionID</th>\n",
" <th>Actual_Data</th>\n",
" <th>Is_Pause</th>\n",
" <th>Image</th>\n",
" <th>IsMax</th>\n",
" <th>MaxRepetition</th>\n",
" <th>ImageSum</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>291980</th>\n",
" <td>1</td>\n",
" <td>1,54515E+12</td>\n",
" <td>33</td>\n",
" <td>680</td>\n",
" <td>0</td>\n",
" <td>2</td>\n",
" <td>0</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>[[0, 2, 0, 0, 0, 0, 1, 2, 2, 3, 2, 1, 1, 1, 0]...</td>\n",
" <td>True</td>\n",
" <td>0</td>\n",
" <td>307</td>\n",
" </tr>\n",
" <tr>\n",
" <th>291981</th>\n",
" <td>1</td>\n",
" <td>1,54515E+12</td>\n",
" <td>33</td>\n",
" <td>680</td>\n",
" <td>0</td>\n",
" <td>2</td>\n",
" <td>0</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>[[0, 2, 0, 0, 0, 0, 1, 2, 2, 3, 2, 1, 1, 1, 0]...</td>\n",
" <td>True</td>\n",
" <td>0</td>\n",
" <td>222</td>\n",
" </tr>\n",
" <tr>\n",
" <th>291982</th>\n",
" <td>1</td>\n",
" <td>1,54515E+12</td>\n",
" <td>33</td>\n",
" <td>680</td>\n",
" <td>0</td>\n",
" <td>2</td>\n",
" <td>0</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>[[0, 2, 0, 0, 0, 0, 1, 2, 2, 3, 2, 1, 1, 1, 0]...</td>\n",
" <td>True</td>\n",
" <td>0</td>\n",
" <td>521</td>\n",
" </tr>\n",
" <tr>\n",
" <th>291983</th>\n",
" <td>1</td>\n",
" <td>1,54515E+12</td>\n",
" <td>33</td>\n",
" <td>680</td>\n",
" <td>0</td>\n",
" <td>2</td>\n",
" <td>0</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>[[0, 2, 0, 0, 0, 0, 1, 2, 2, 3, 2, 1, 1, 1, 0]...</td>\n",
" <td>True</td>\n",
" <td>0</td>\n",
" <td>318</td>\n",
" </tr>\n",
" <tr>\n",
" <th>291984</th>\n",
" <td>1</td>\n",
" <td>1,54515E+12</td>\n",
" <td>33</td>\n",
" <td>680</td>\n",
" <td>0</td>\n",
" <td>2</td>\n",
" <td>0</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>[[0, 2, 0, 0, 0, 0, 1, 2, 2, 3, 2, 1, 1, 1, 0]...</td>\n",
" <td>True</td>\n",
" <td>0</td>\n",
" <td>373</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" userID Timestamp Current_Task Task_amount TaskID VersionID \\\n",
"291980 1 1,54515E+12 33 680 0 2 \n",
"291981 1 1,54515E+12 33 680 0 2 \n",
"291982 1 1,54515E+12 33 680 0 2 \n",
"291983 1 1,54515E+12 33 680 0 2 \n",
"291984 1 1,54515E+12 33 680 0 2 \n",
"\n",
" RepetitionID Actual_Data Is_Pause \\\n",
"291980 0 True False \n",
"291981 0 True False \n",
"291982 0 True False \n",
"291983 0 True False \n",
"291984 0 True False \n",
"\n",
" Image IsMax \\\n",
"291980 [[0, 2, 0, 0, 0, 0, 1, 2, 2, 3, 2, 1, 1, 1, 0]... True \n",
"291981 [[0, 2, 0, 0, 0, 0, 1, 2, 2, 3, 2, 1, 1, 1, 0]... True \n",
"291982 [[0, 2, 0, 0, 0, 0, 1, 2, 2, 3, 2, 1, 1, 1, 0]... True \n",
"291983 [[0, 2, 0, 0, 0, 0, 1, 2, 2, 3, 2, 1, 1, 1, 0]... True \n",
"291984 [[0, 2, 0, 0, 0, 0, 1, 2, 2, 3, 2, 1, 1, 1, 0]... True \n",
"\n",
" MaxRepetition ImageSum \n",
"291980 0 307 \n",
"291981 0 222 \n",
"291982 0 521 \n",
"291983 0 318 \n",
"291984 0 373 "
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.head()"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [],
"source": [
"#Label if knuckle or finger\n",
"def f(row):\n",
" if row['TaskID'] < 17:\n",
" #val = \"Knuckle\"\n",
" val = 0\n",
" elif row['TaskID'] >= 17:\n",
" #val = \"Finger\"\n",
" val = 1\n",
" return val\n",
"df['InputMethod'] = df.apply(f, axis=1)\n",
"\n",
"def f(row):\n",
" if row['TaskID'] < 17:\n",
" val = \"Knuckle\"\n",
" elif row['TaskID'] >= 17:\n",
" val = \"Finger\"\n",
" return val\n",
"df['Input'] = df.apply(f, axis=1)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [],
"source": [
"#Svens new Blob detection\n",
"def detect_blobs(image, task):\n",
" #image = e.Image\n",
" large = np.ones((29,17), dtype=np.uint8)\n",
" large[1:28,1:16] = np.copy(image)\n",
" temp, thresh = cv2.threshold(cv2.bitwise_not(large), 200, 255, cv2.THRESH_BINARY)\n",
" contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)\n",
" contours = [a for a in contours if cv2.contourArea(a) > 8 and cv2.contourArea(a) < 255]\n",
" lstBlob = []\n",
" lstMin = []\n",
" lstMax = []\n",
" count = 0\n",
" contours.sort(key=lambda a: cv2.contourArea(a))\n",
" if len(contours) > 0:\n",
" # if two finger or knuckle\n",
" cont_count = 2 if task in [1, 6, 7, 18, 23, 24] and len(contours) > 1 else 1\n",
" for i in range(1, cont_count + 1):\n",
" max_contour = contours[-1 * i]\n",
" xmax, ymax = np.max(max_contour.reshape(len(max_contour),2), axis=0)\n",
" xmin, ymin = np.min(max_contour.reshape(len(max_contour),2), axis=0)\n",
" #croped_im = np.zeros((27,15))\n",
" blob = large[max(ymin - 1, 0):min(ymax + 1, large.shape[0]),max(xmin - 1, 0):min(xmax + 1, large.shape[1])]\n",
" #croped_im[0:blob.shape[0],0:blob.shape[1]] = blob\n",
" #return (1, [croped_im])\n",
" lstBlob.append(blob)\n",
" lstMin.append(xmax-xmin)\n",
" lstMax.append(ymax-ymin)\n",
" count = count + 1\n",
" return (count, lstBlob, lstMin, lstMax)\n",
" else:\n",
" return (0, [np.zeros((29, 19))], 0, 0)"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 11.9 s, sys: 7.51 s, total: 19.4 s\n",
"Wall time: 18.6 s\n"
]
}
],
"source": [
"%%time\n",
"pool = Pool(os.cpu_count()-2)\n",
"temp_blobs = pool.starmap(detect_blobs, zip(df.Image, df.TaskID))\n",
"pool.close()"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [],
"source": [
"df[\"BlobCount\"] = [a[0] for a in temp_blobs]\n",
"df[\"BlobImages\"] = [a[1] for a in temp_blobs]\n",
"df[\"BlobW\"] = [a[2] for a in temp_blobs]\n",
"df[\"BlobH\"] = [a[3] for a in temp_blobs]"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0 710145\n",
"1 128117\n",
"2 13193\n",
"Name: BlobCount, dtype: int64"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.BlobCount.value_counts()"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [],
"source": [
"dfX = df[(df.BlobCount == 1)].copy(deep=True)\n",
"dfX.BlobImages = dfX.BlobImages.apply(lambda x : x[0])\n",
"dfX.BlobW = dfX.BlobW.apply(lambda x : x[0])\n",
"dfX.BlobH = dfX.BlobH.apply(lambda x : x[0])\n",
"\n",
"dfY = df[(df.BlobCount == 2)].copy(deep=True)\n",
"dfY.BlobImages = dfY.BlobImages.apply(lambda x : x[0])\n",
"dfY.BlobW = dfY.BlobW.apply(lambda x : x[0])\n",
"dfY.BlobH = dfY.BlobH.apply(lambda x : x[0])\n",
"\n",
"dfZ = df[(df.BlobCount == 2)].copy(deep=True)\n",
"dfZ.BlobImages = dfZ.BlobImages.apply(lambda x : x[1])\n",
"dfZ.BlobW = dfZ.BlobW.apply(lambda x : x[1])\n",
"dfZ.BlobH = dfZ.BlobH.apply(lambda x : x[1])\n",
"\n",
"df = dfX.append([dfY, dfZ])"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Sample Size not Argumented: 154503\n"
]
}
],
"source": [
"print(\"Sample Size not Argumented:\", len(df))"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [],
"source": [
"df[\"BlobArea\"] = df[\"BlobW\"] * df[\"BlobH\"]"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"count 154503.0\n",
"mean 15.8\n",
"std 5.1\n",
"min 12.0\n",
"25% 12.0\n",
"50% 16.0\n",
"75% 16.0\n",
"max 110.0\n",
"Name: BlobArea, dtype: float64"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.BlobArea.describe().round(1)"
]
},
{
"cell_type": "code",
"execution_count": 27,
"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>count</th>\n",
" <th>mean</th>\n",
" <th>std</th>\n",
" <th>min</th>\n",
" <th>25%</th>\n",
" <th>50%</th>\n",
" <th>75%</th>\n",
" <th>max</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Input</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>Finger</th>\n",
" <td>110839.0</td>\n",
" <td>16.6</td>\n",
" <td>5.3</td>\n",
" <td>12.0</td>\n",
" <td>12.0</td>\n",
" <td>16.0</td>\n",
" <td>16.0</td>\n",
" <td>110.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Knuckle</th>\n",
" <td>43664.0</td>\n",
" <td>13.7</td>\n",
" <td>3.7</td>\n",
" <td>12.0</td>\n",
" <td>12.0</td>\n",
" <td>12.0</td>\n",
" <td>16.0</td>\n",
" <td>72.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" count mean std min 25% 50% 75% max\n",
"Input \n",
"Finger 110839.0 16.6 5.3 12.0 12.0 16.0 16.0 110.0\n",
"Knuckle 43664.0 13.7 3.7 12.0 12.0 12.0 16.0 72.0"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.groupby(\"Input\").BlobArea.describe().round(1)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"df[\"BlobSum\"] = df.BlobImages.apply(lambda x: np.sum(x))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"df.BlobSum.describe()"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x7fef38ed5908>"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYwAAAD8CAYAAABkbJM/AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAG2hJREFUeJzt3X+MXfV55/H3p3YgDgnYhuyV17bWrmIlcvCGwAgcJYpm48bYpIr5I8kaodqwbrxaSJN0LXXNVlorP5DIqpSClNBawcWO0jiUJsUCU9druFrtSjY/AsEYwnoCJh7L4AQb2EmUpJN99o/zDLmMr5mvZ87MnBt9XtLVnPOc7zn3uXeu/Znz496riMDMzGwsvzfdDZiZWW9wYJiZWREHhpmZFXFgmJlZEQeGmZkVcWCYmVkRB4aZmRVxYJiZWREHhpmZFZk53Q2M10UXXRSLFi2a7ja6+vnPf85555033W2MyX3Wpxd6BPdZp17oEd7c5+OPP/6ziHj3uDcWET15u+yyy6KpHn744eluoYj7rE8v9BjhPuvUCz1GvLlP4LGYwP+7PiRlZmZFHBhmZlbEgWFmZkUcGGZmVsSBYWZmRRwYZmZWxIFhZmZFHBhmZlbEgWFmZkWKPhpE0p8CfwwEcBC4HpgH7AQuBB4H/igifi3pXGAHcBnwCvDvI+JIbucmYAPwG+DzEbEn66uA24EZwDcj4pa6HmA3izY/MJmbZ9OyYa7rch9HbvnEpN6vmdlkGnMPQ9J84PNAX0RcTPWf+lrga8BtEfEe4BRVEJA/T2X9thyHpKW53vuBVcA3JM2QNAP4OrAaWApck2PNzKxBSg9JzQRmSZoJvAM4DnwMuDeXbweuzuk1OU8uXyFJWd8ZEb+KiBeAAeDyvA1ExPMR8WuqvZY1E3tYZmZWtzEDIyKOAX8B/IQqKF6jOgT1akQM57BBYH5OzweO5rrDOf7Czvqodc5UNzOzBhnzHIakOVR/8S8GXgX+nuqQ0pSTtBHYCNBqtWi32+PazqZlw2MPmoDWrO73Md5+J8vQ0FDjeuqmF/rshR7BfdapF3qEevssOen9B8ALEfFTAEnfAz4MzJY0M/ciFgDHcvwxYCEwmIewLqA6+T1SH9G5zpnqbxIRW4GtAH19fdHf31/Q/um6nZCu06Zlw9x68PSn9si1/ZN6v2er3W4z3udwKvVCn73QI7jPOvVCj1BvnyXnMH4CLJf0jjwXsQJ4BngY+FSOWQ/cl9O7cp5c/lB+DvsuYK2kcyUtBpYAjwCPAkskLZZ0DtWJ8V0Tf2hmZlanMfcwIuKApHuBHwDDwBNUf+U/AOyU9NWs3ZWr3AV8S9IAcJIqAIiIQ5LuoQqbYeDGiPgNgKTPAXuorsDaFhGH6nuIZmZWh6L3YUTEFmDLqPLzVFc4jR77S+DTZ9jOzcDNXeq7gd0lvZiZ2fTwO73NzKyIA8PMzIo4MMzMrIgDw8zMijgwzMysiAPDzMyKODDMzKyIA8PMzIo4MMzMrIgDw8zMijgwzMysiAPDzMyKODDMzKyIA8PMzIo4MMzMrIgDw8zMiowZGJLeK+nJjtvrkr4oaa6kvZIO5885OV6S7pA0IOkpSZd2bGt9jj8saX1H/TJJB3OdO/KrYM3MrEHGDIyIeC4iLomIS4DLgF8A3wc2A/siYgmwL+cBVlN9X/cSYCNwJ4CkuVTf2ncF1Tf1bRkJmRzz2Y71VtXy6MzMrDZne0hqBfDjiHgRWANsz/p24OqcXgPsiMp+YLakecCVwN6IOBkRp4C9wKpcdn5E7I+IAHZ0bMvMzBribANjLfCdnG5FxPGcfglo5fR84GjHOoNZe6v6YJe6mZk1yMzSgZLOAT4J3DR6WUSEpKizsTP0sJHqMBetVot2uz2u7WxaNlxjV6drzep+H+Ptd7IMDQ01rqdueqHPXugR3GedeqFHqLfP4sCgOjfxg4h4OedfljQvIo7nYaUTWT8GLOxYb0HWjgH9o+rtrC/oMv40EbEV2ArQ19cX/f393YaN6brND4xrvVKblg1z68HTn9oj1/ZP6v2erXa7zXifw6nUC332Qo/gPuvUCz1CvX2ezSGpa/jt4SiAXcDIlU7rgfs66uvyaqnlwGt56GoPsFLSnDzZvRLYk8tel7Q8r45a17EtMzNriKI9DEnnAR8H/mNH+RbgHkkbgBeBz2R9N3AVMEB1RdX1ABFxUtJXgEdz3Jcj4mRO3wDcDcwCHsybmZk1SFFgRMTPgQtH1V6humpq9NgAbjzDdrYB27rUHwMuLunFzMymh9/pbWZmRRwYZmZWxIFhZmZFHBhmZlbEgWFmZkUcGGZmVsSBYWZmRRwYZmZWxIFhZmZFzubDB22CFk3yhx6+lSO3fGLa7tvMfjd4D8PMzIo4MMzMrIgDw8zMijgwzMysiAPDzMyKODDMzKyIA8PMzIoUBYak2ZLulfQjSc9K+pCkuZL2SjqcP+fkWEm6Q9KApKckXdqxnfU5/rCk9R31yyQdzHXuyO/2NjOzBindw7gd+KeIeB/wAeBZYDOwLyKWAPtyHmA1sCRvG4E7ASTNBbYAVwCXA1tGQibHfLZjvVUTe1hmZla3MQND0gXAR4G7ACLi1xHxKrAG2J7DtgNX5/QaYEdU9gOzJc0DrgT2RsTJiDgF7AVW5bLzI2J/fh/4jo5tmZlZQ5R8NMhi4KfA30r6APA48AWgFRHHc8xLQCun5wNHO9YfzNpb1Qe71E8jaSPVXgutVot2u13Q/uk2LRse13qlWrMm/z7OVrfnamhoaNzP4VTqhT57oUdwn3XqhR6h3j5LAmMmcCnwJxFxQNLt/PbwEwAREZKilo7eQkRsBbYC9PX1RX9//7i2c90kf6bTpmXD3HqwWR/TdeTa/tNq7Xab8T6HU6kX+uyFHsF91qkXeoR6+yw5hzEIDEbEgZy/lypAXs7DSeTPE7n8GLCwY/0FWXur+oIudTMza5AxAyMiXgKOSnpvllYAzwC7gJErndYD9+X0LmBdXi21HHgtD13tAVZKmpMnu1cCe3LZ65KW59VR6zq2ZWZmDVF63ORPgG9LOgd4HrieKmzukbQBeBH4TI7dDVwFDAC/yLFExElJXwEezXFfjoiTOX0DcDcwC3gwb2Zm1iBFgRERTwJ9XRat6DI2gBvPsJ1twLYu9ceAi0t6MTOz6eF3epuZWREHhpmZFXFgmJlZEQeGmZkVcWCYmVkRB4aZmRVxYJiZWREHhpmZFXFgmJlZEQeGmZkVcWCYmVkRB4aZmRVxYJiZWREHhpmZFXFgmJlZEQeGmZkVKQoMSUckHZT0pKTHsjZX0l5Jh/PnnKxL0h2SBiQ9JenSju2sz/GHJa3vqF+W2x/IdVX3AzUzs4k5mz2MfxcRl0TEyDfvbQb2RcQSYF/OA6wGluRtI3AnVAEDbAGuAC4HtoyETI75bMd6q8b9iMzMbFJM5JDUGmB7Tm8Hru6o74jKfmC2pHnAlcDeiDgZEaeAvcCqXHZ+ROzPr3fd0bEtMzNriNLACOCfJT0uaWPWWhFxPKdfAlo5PR842rHuYNbeqj7YpW5mZg0ys3DcRyLimKR/BeyV9KPOhRERkqL+9t4sw2ojQKvVot1uj2s7m5YN19jV6VqzJv8+zla352poaGjcz+FU6oU+e6FHcJ916oUeod4+iwIjIo7lzxOSvk91DuJlSfMi4ngeVjqRw48BCztWX5C1Y0D/qHo76wu6jO/Wx1ZgK0BfX1/09/d3Gzam6zY/MK71Sm1aNsytB0uzeGocubb/tFq73Wa8z+FU6oU+e6FHcJ916oUeod4+xzwkJek8Se8amQZWAk8Du4CRK53WA/fl9C5gXV4ttRx4LQ9d7QFWSpqTJ7tXAnty2euSlufVUes6tmVmZg1R8mdwC/h+Xuk6E/i7iPgnSY8C90jaALwIfCbH7wauAgaAXwDXA0TESUlfAR7NcV+OiJM5fQNwNzALeDBvZmbWIGMGRkQ8D3ygS/0VYEWXegA3nmFb24BtXeqPARcX9GtmZtPE7/Q2M7MiDgwzMyviwDAzsyIODDMzK+LAMDOzIg4MMzMr4sAwM7MiDgwzMyviwDAzsyIODDMzK+LAMDOzIg4MMzMr4sAwM7MiDgwzMyviwDAzsyIODDMzK+LAMDOzIsWBIWmGpCck3Z/ziyUdkDQg6buSzsn6uTk/kMsXdWzjpqw/J+nKjvqqrA1I2lzfwzMzs7qczR7GF4BnO+a/BtwWEe8BTgEbsr4BOJX123IckpYCa4H3A6uAb2QIzQC+DqwGlgLX5FgzM2uQosCQtAD4BPDNnBfwMeDeHLIduDqn1+Q8uXxFjl8D7IyIX0XEC8AAcHneBiLi+Yj4NbAzx5qZWYPMLBz3V8CfAe/K+QuBVyNiOOcHgfk5PR84ChARw5Jey/Hzgf0d2+xc5+io+hXdmpC0EdgI0Gq1aLfbhe2/2aZlw2MPmoDWrMm/j7PV7bkaGhoa93M4lXqhz17oEdxnnXqhR6i3zzEDQ9IfAici4nFJ/bXc6zhFxFZgK0BfX1/094+vnes2P1BjV6fbtGyYWw+WZvHUOHJt/2m1drvNeJ/DqdQLffZCj+A+69QLPUK9fZb8r/Zh4JOSrgLeDpwP3A7MljQz9zIWAMdy/DFgITAoaSZwAfBKR31E5zpnqpuZWUOMeQ4jIm6KiAURsYjqpPVDEXEt8DDwqRy2Hrgvp3flPLn8oYiIrK/Nq6gWA0uAR4BHgSV51dU5eR+7anl0ZmZWm4kcN/kvwE5JXwWeAO7K+l3AtyQNACepAoCIOCTpHuAZYBi4MSJ+AyDpc8AeYAawLSIOTaAvMzObBGcVGBHRBto5/TzVFU6jx/wS+PQZ1r8ZuLlLfTew+2x6MTOzqeV3epuZWREHhpmZFXFgmJlZEQeGmZkVcWCYmVkRB4aZmRVxYJiZWREHhpmZFXFgmJlZEQeGmZkVcWCYmVkRB4aZmRVxYJiZWREHhpmZFXFgmJlZEQeGmZkVGTMwJL1d0iOSfijpkKQvZX2xpAOSBiR9N79elfwK1u9m/YCkRR3buinrz0m6sqO+KmsDkjbX/zDNzGyiSvYwfgV8LCI+AFwCrJK0HPgacFtEvAc4BWzI8RuAU1m/LcchaSnV17W+H1gFfEPSDEkzgK8Dq4GlwDU51szMGmTMwIjKUM6+LW8BfAy4N+vbgatzek3Ok8tXSFLWd0bEryLiBWCA6iteLwcGIuL5iPg1sDPHmplZgxSdw8g9gSeBE8Be4MfAqxExnEMGgfk5PR84CpDLXwMu7KyPWudMdTMza5CZJYMi4jfAJZJmA98H3jepXZ2BpI3ARoBWq0W73R7XdjYtGx570AS0Zk3+fZytbs/V0NDQuJ/DqdQLffZCj+A+69QLPUK9fRYFxoiIeFXSw8CHgNmSZuZexALgWA47BiwEBiXNBC4AXumoj+hc50z10fe/FdgK0NfXF/39/WfT/huu2/zAuNYrtWnZMLcePKundtIdubb/tFq73Wa8z+FU6oU+e6FHcJ916oUeod4+S66SenfuWSBpFvBx4FngYeBTOWw9cF9O78p5cvlDERFZX5tXUS0GlgCPAI8CS/Kqq3OoTozvquPBmZlZfUr+DJ4HbM+rmX4PuCci7pf0DLBT0leBJ4C7cvxdwLckDQAnqQKAiDgk6R7gGWAYuDEPdSHpc8AeYAawLSIO1fYIzcysFmMGRkQ8BXywS/15qiucRtd/CXz6DNu6Gbi5S303sLugXzMzmyZ+p7eZmRVxYJiZWREHhpmZFXFgmJlZEQeGmZkVcWCYmVkRB4aZmRVxYJiZWREHhpmZFXFgmJlZEQeGmZkVcWCYmVkRB4aZmRVxYJiZWREHhpmZFXFgmJlZkZKvaF0o6WFJz0g6JOkLWZ8raa+kw/lzTtYl6Q5JA5KeknRpx7bW5/jDktZ31C+TdDDXuUOSJuPBmpnZ+JXsYQwDmyJiKbAcuFHSUmAzsC8ilgD7ch5gNdX3dS8BNgJ3QhUwwBbgCqpv6tsyEjI55rMd662a+EMzM7M6jRkYEXE8In6Q0/8XeBaYD6wBtuew7cDVOb0G2BGV/cBsSfOAK4G9EXEyIk4Be4FVuez8iNgfEQHs6NiWmZk1xFmdw5C0iOr7vQ8ArYg4noteAlo5PR842rHaYNbeqj7YpW5mZg0ys3SgpHcC/wB8MSJe7zzNEBEhKSahv9E9bKQ6zEWr1aLdbo9rO5uWDdfY1elasyb/Ps5Wt+dqaGho3M/hVOqFPnuhR3CfdeqFHqHePosCQ9LbqMLi2xHxvSy/LGleRBzPw0onsn4MWNix+oKsHQP6R9XbWV/QZfxpImIrsBWgr68v+vv7uw0b03WbHxjXeqU2LRvm1oPFWTwljlzbf1qt3W4z3udwKvVCn73QI7jPOvVCj1BvnyVXSQm4C3g2Iv6yY9EuYORKp/XAfR31dXm11HLgtTx0tQdYKWlOnuxeCezJZa9LWp73ta5jW2Zm1hAlfwZ/GPgj4KCkJ7P2X4FbgHskbQBeBD6Ty3YDVwEDwC+A6wEi4qSkrwCP5rgvR8TJnL4BuBuYBTyYNzMza5AxAyMi/hdwpvdFrOgyPoAbz7CtbcC2LvXHgIvH6sXMzKaP3+ltZmZFHBhmZlbEgWFmZkUcGGZmVsSBYWZmRRwYZmZWxIFhZmZFHBhmZlbEgWFmZkUcGGZmVsSBYWZmRRwYZmZWxIFhZmZFHBhmZlbEgWFmZkUcGGZmVsSBYWZmRUq+03ubpBOSnu6ozZW0V9Lh/Dkn65J0h6QBSU9JurRjnfU5/rCk9R31yyQdzHXuyO/1NjOzhinZw7gbWDWqthnYFxFLgH05D7AaWJK3jcCdUAUMsAW4Argc2DISMjnmsx3rjb4vMzNrgDEDIyL+J3ByVHkNsD2ntwNXd9R3RGU/MFvSPOBKYG9EnIyIU8BeYFUuOz8i9ud3ge/o2JaZmTXIzHGu14qI4zn9EtDK6fnA0Y5xg1l7q/pgl3pXkjZS7bnQarVot9vjan7TsuFxrVeqNWvy7+NsdXuuhoaGxv0cTqVe6LMXegT3Wade6BHq7XO8gfGGiAhJUUczBfe1FdgK0NfXF/39/ePaznWbH6ixq9NtWjbMrQcn/NTW6si1/afV2u02430Op1Iv9NkLPYL7rFMv9Aj19jneq6RezsNJ5M8TWT8GLOwYtyBrb1Vf0KVuZmYNM97A2AWMXOm0Hrivo74ur5ZaDryWh672ACslzcmT3SuBPbnsdUnL8+qodR3bMjOzBhnzuImk7wD9wEWSBqmudroFuEfSBuBF4DM5fDdwFTAA/AK4HiAiTkr6CvBojvtyRIycSL+B6kqsWcCDeTMzs4YZMzAi4pozLFrRZWwAN55hO9uAbV3qjwEXj9WHmZlNL7/T28zMijgwzMysiAPDzMyKODDMzKyIA8PMzIo06+3INmkWdXl3+6Zlw5P+rvcjt3xiUrdvZlPHexhmZlbEgWFmZkUcGGZmVsSBYWZmRRwYZmZWxIFhZmZFHBhmZlbEgWFmZkUcGGZmVsSBYWZmRRrz0SCSVgG3AzOAb0bELdPcktWg20eSnK3xfoSJP5bErF6N2MOQNAP4OrAaWApcI2np9HZlZmadmrKHcTkwEBHPA0jaCawBnpnWrqyn1bF3U6pzL8h7Nva7qimBMR842jE/CFwxTb2YTchUBlUnB5VNtqYERhFJG4GNOTsk6bnp7OdMPg8XAT+b7j7G4j7r04Qe9bWiYdPeZ6Fe6LMXeoQ39/lvJrKhpgTGMWBhx/yCrL1JRGwFtk5VU+Ml6bGI6JvuPsbiPuvTCz2C+6xTL/QI9fbZiJPewKPAEkmLJZ0DrAV2TXNPZmbWoRF7GBExLOlzwB6qy2q3RcShaW7LzMw6NCIwACJiN7B7uvuoSeMPmyX3WZ9e6BHcZ516oUeosU9FRF3bMjOz32FNOYdhZmYN58AoJGmbpBOSnu6ozZW0V9Lh/Dkn65J0h6QBSU9JurRjnfU5/rCk9TX3uFDSw5KekXRI0hca2ufbJT0i6YfZ55eyvljSgeznu3kBBJLOzfmBXL6oY1s3Zf05SVfW2Wduf4akJyTd3+Aej0g6KOlJSY9lrVG/89z+bEn3SvqRpGclfahpfUp6bz6PI7fXJX2xgX3+af7beVrSd/Lf1OS/NiPCt4Ib8FHgUuDpjtp/Bzbn9Gbgazl9FfAgIGA5cCDrc4Hn8+ecnJ5TY4/zgEtz+l3A/6H6qJWm9SngnTn9NuBA3v89wNqs/zXwn3L6BuCvc3ot8N2cXgr8EDgXWAz8GJhR8+/9PwN/B9yf803s8Qhw0ahao37neR/bgT/O6XOA2U3ss6PfGcBLVO9daEyfVG90fgGY1fGavG4qXpu1P8m/yzdgEW8OjOeAeTk9D3gup/8GuGb0OOAa4G866m8aNwn93gd8vMl9Au8AfkD1zv6fATOz/iFgT07vAT6U0zNznICbgJs6tvXGuJp6WwDsAz4G3J/32agec5tHOD0wGvU7By6g+k9OTe5zVG8rgf/dtD757SdjzM3X2v3AlVPx2vQhqYlpRcTxnH4JaOV0t486mf8W9drlbucHqf56b1yfeajnSeAEsJfqr5tXI2K4y32+0U8ufw24cAr6/Cvgz4D/l/MXNrBHgAD+WdLjqj4NAZr3O18M/BT42zzE901J5zWwz05rge/kdGP6jIhjwF8APwGOU73WHmcKXpsOjJpEFdGNuORM0juBfwC+GBGvdy5rSp8R8ZuIuITqr/jLgfdNc0tvIukPgRMR8fh091LgIxFxKdWnPd8o6aOdCxvyO59JdUj3zoj4IPBzqkM7b2hInwDk8f9PAn8/etl095nnT9ZQhfC/Bs4DVk3FfTswJuZlSfMA8ueJrJ/po06KPgJlIiS9jSosvh0R32tqnyMi4lXgYapd6NmSRt4b1Hmfb/STyy8AXpnkPj8MfFLSEWAn1WGp2xvWI/DGX5xExAng+1QB3LTf+SAwGBEHcv5eqgBpWp8jVgM/iIiXc75Jff4B8EJE/DQi/gX4HtXrddJfmw6MidkFjFz9sJ7qnMFIfV1eQbEceC13Z/cAKyXNyb8SVmatFpIE3AU8GxF/2eA+3y1pdk7PojrP8ixVcHzqDH2O9P8p4KH8K28XsDavAlkMLAEeqaPHiLgpIhZExCKqQxMPRcS1TeoRQNJ5kt41Mk31u3qahv3OI+Il4Kik92ZpBdXXFzSqzw7X8NvDUSP9NKXPnwDLJb0j/82PPJeT/9qcjJNFv4s3qhfPceBfqP5a2kB1HHAfcBj4H8DcHCuqL4T6MXAQ6OvYzn8ABvJ2fc09foRqV/kp4Mm8XdXAPv8t8ET2+TTw37L++/mCHaA6FHBu1t+e8wO5/Pc7tvXn2f9zwOpJ+t3389urpBrVY/bzw7wdAv486436nef2LwEey9/7P1JdPdTEPs+j+gv8go5ao/oEvgT8KP/9fIvqSqdJf236nd5mZlbEh6TMzKyIA8PMzIo4MMzMrIgDw8zMijgwzMysiAPDzMyKODDMzKyIA8PMzIr8fxQhh7kF0BR2AAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"df.BlobSum.hist()"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#Small / Blobs where the pixels are only a \"little\" hit\n",
"dfX = df[df.BlobSum <= 255]\n",
"len(dfX)"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [],
"source": [
"#Augmenting by flipping in both axis (datax4)\n",
"df[\"Version\"] = \"Normal\"\n",
"dfFlipped = df.copy(deep=True)\n",
"dfFlipped.BlobImages = dfFlipped.BlobImages.apply(lambda x: np.flipud(x))\n",
"dfFlipped[\"Version\"] = \"FlippedUD\"\n",
"df = df.append(dfFlipped)\n",
"dfFlipped = df.copy(deep=True)\n",
"dfFlipped.BlobImages = dfFlipped.BlobImages.apply(lambda x: np.fliplr(x))\n",
"dfFlipped[\"Version\"] = \"FlippedLR\"\n",
"df = df.append(dfFlipped)"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Sample Size argumented: 618012\n"
]
}
],
"source": [
"print(\"Sample Size argumented:\", len(df))"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [],
"source": [
"def pasteToEmpty (blob):\n",
" croped_im = np.zeros((27,15))\n",
" croped_im[0:blob.shape[0],0:blob.shape[1]] = blob\n",
" return croped_im"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [],
"source": [
"df[\"Blobs\"] = df.BlobImages.apply(lambda x: pasteToEmpty(x))"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {},
"outputs": [],
"source": [
"df.to_pickle(\"DataStudyCollection/df_statistics.pkl\")"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {},
"outputs": [],
"source": [
"df[[\"userID\", \"TaskID\", \"Version\", \"Blobs\", \"InputMethod\"]].to_pickle(\"DataStudyCollection/df_blobs_area.pkl\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# display blobs"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"userID 1\n",
"Timestamp 1,54515E+12\n",
"Current_Task 121\n",
"Task_amount 680\n",
"TaskID 0\n",
"VersionID 7\n",
"RepetitionID 0\n",
"Actual_Data True\n",
"Is_Pause False\n",
"Image [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]...\n",
"IsMax True\n",
"MaxRepetition 0\n",
"ImageSum 1495\n",
"BlobCount 1\n",
"BlobImages [[2, 2, 11, 11, 2], [2, 9, 40, 42, 9], [4, 13,...\n",
"BlobW 3\n",
"BlobH 4\n",
"BlobArea 12\n",
"BlobSum 1071\n",
"Version Normal\n",
"Blobs [[2.0, 2.0, 11.0, 11.0, 2.0, 0.0, 0.0, 0.0, 0....\n",
"InputMethod 0\n",
"Input Knuckle\n",
"Name: 299548, dtype: object\n"
]
},
{
"data": {
"text/plain": [
"<Figure size 432x288 with 0 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x432 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.clf()\n",
"plt.figure(figsize=(6, 6))\n",
"ax = plt.gca()\n",
"data_point = 100\n",
"data = df.Blobs.iloc[data_point]\n",
"print(df.iloc[data_point])\n",
"plt.imshow(data, cmap='gray', vmin=0, vmax=255)\n",
"# Loop over data dimensions and create text annotations.\n",
"for i in range(0, data.shape[0]):\n",
" for j in range(0, data.shape[1]):\n",
" text = ax.text(j, i, int(data[i, j]),\n",
" ha=\"center\", va=\"center\", color=\"cyan\", fontsize=1)\n",
"plt.show()"
]
}
],
"metadata": {
"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.6.7"
}
},
"nbformat": 4,
"nbformat_minor": 2
}