{ "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": [ "
\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", "
userIDTimestampCurrent_TaskTask_amountTaskIDVersionIDRepetitionIDActual_DataIs_PauseImage
79191715471389286921680620TrueFalse[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...
79201715471389287351680620TrueFalse[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...
79211715471389287731680620TrueFalse[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...
79221715471389288131680620TrueFalse[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...
79231715471389288611680620TrueFalse[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...
\n", "
" ], "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": [ "
\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", "
userIDTimestampCurrent_TaskTask_amountTaskIDVersionIDRepetitionIDActual_DataIs_PauseImageIsMaxMaxRepetitionImageSum
29198011,54515E+1233680020TrueFalse[[0, 2, 0, 0, 0, 0, 1, 2, 2, 3, 2, 1, 1, 1, 0]...True0307
29198111,54515E+1233680020TrueFalse[[0, 2, 0, 0, 0, 0, 1, 2, 2, 3, 2, 1, 1, 1, 0]...True0222
29198211,54515E+1233680020TrueFalse[[0, 2, 0, 0, 0, 0, 1, 2, 2, 3, 2, 1, 1, 1, 0]...True0521
29198311,54515E+1233680020TrueFalse[[0, 2, 0, 0, 0, 0, 1, 2, 2, 3, 2, 1, 1, 1, 0]...True0318
29198411,54515E+1233680020TrueFalse[[0, 2, 0, 0, 0, 0, 1, 2, 2, 3, 2, 1, 1, 1, 0]...True0373
\n", "
" ], "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": [ "
\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", "
countmeanstdmin25%50%75%max
Input
Finger110839.016.65.312.012.016.016.0110.0
Knuckle43664.013.73.712.012.012.016.072.0
\n", "
" ], "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": [ "" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "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": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "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 }