Files
spoterembedding/visualize_data.ipynb

1633 lines
94 KiB
Plaintext

{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"from augmentations.augment import __preprocess_row_sign"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0 path\n",
"1 participant_id\n",
"2 sequence_id\n",
"3 sign\n",
"4 labels\n",
"5 nose_X\n",
"6 nose_Y\n",
"7 leftEye_X\n",
"8 leftEye_Y\n",
"9 rightEye_X\n",
"10 rightEye_Y\n",
"11 leftEar_X\n",
"12 leftEar_Y\n",
"13 rightEar_X\n",
"14 rightEar_Y\n",
"15 leftShoulder_X\n",
"16 leftShoulder_Y\n",
"17 rightShoulder_X\n",
"18 rightShoulder_Y\n",
"19 leftElbow_X\n",
"20 leftElbow_Y\n",
"21 rightElbow_X\n",
"22 rightElbow_Y\n",
"23 leftWrist_X\n",
"24 leftWrist_Y\n",
"25 rightWrist_X\n",
"26 rightWrist_Y\n",
"27 wrist_left_X\n",
"28 wrist_left_Y\n",
"29 thumbCMC_left_X\n",
"30 thumbCMC_left_Y\n",
"31 thumbMP_left_X\n",
"32 thumbMP_left_Y\n",
"33 thumbIP_left_X\n",
"34 thumbIP_left_Y\n",
"35 thumbTip_left_X\n",
"36 thumbTip_left_Y\n",
"37 indexMCP_left_X\n",
"38 indexMCP_left_Y\n",
"39 indexPIP_left_X\n",
"40 indexPIP_left_Y\n",
"41 indexDIP_left_X\n",
"42 indexDIP_left_Y\n",
"43 indexTip_left_X\n",
"44 indexTip_left_Y\n",
"45 middleMCP_left_X\n",
"46 middleMCP_left_Y\n",
"47 middlePIP_left_X\n",
"48 middlePIP_left_Y\n",
"49 middleDIP_left_X\n",
"50 middleDIP_left_Y\n",
"51 middleTip_left_X\n",
"52 middleTip_left_Y\n",
"53 ringMCP_left_X\n",
"54 ringMCP_left_Y\n",
"55 ringPIP_left_X\n",
"56 ringPIP_left_Y\n",
"57 ringDIP_left_X\n",
"58 ringDIP_left_Y\n",
"59 ringTip_left_X\n",
"60 ringTip_left_Y\n",
"61 littleMCP_left_X\n",
"62 littleMCP_left_Y\n",
"63 littlePIP_left_X\n",
"64 littlePIP_left_Y\n",
"65 littleDIP_left_X\n",
"66 littleDIP_left_Y\n",
"67 littleTip_left_X\n",
"68 littleTip_left_Y\n",
"69 wrist_right_X\n",
"70 wrist_right_Y\n",
"71 thumbCMC_right_X\n",
"72 thumbCMC_right_Y\n",
"73 thumbMP_right_X\n",
"74 thumbMP_right_Y\n",
"75 thumbIP_right_X\n",
"76 thumbIP_right_Y\n",
"77 thumbTip_right_X\n",
"78 thumbTip_right_Y\n",
"79 indexMCP_right_X\n",
"80 indexMCP_right_Y\n",
"81 indexPIP_right_X\n",
"82 indexPIP_right_Y\n",
"83 indexDIP_right_X\n",
"84 indexDIP_right_Y\n",
"85 indexTip_right_X\n",
"86 indexTip_right_Y\n",
"87 middleMCP_right_X\n",
"88 middleMCP_right_Y\n",
"89 middlePIP_right_X\n",
"90 middlePIP_right_Y\n",
"91 middleDIP_right_X\n",
"92 middleDIP_right_Y\n",
"93 middleTip_right_X\n",
"94 middleTip_right_Y\n",
"95 ringMCP_right_X\n",
"96 ringMCP_right_Y\n",
"97 ringPIP_right_X\n",
"98 ringPIP_right_Y\n",
"99 ringDIP_right_X\n",
"100 ringDIP_right_Y\n",
"101 ringTip_right_X\n",
"102 ringTip_right_Y\n",
"103 littleMCP_right_X\n",
"104 littleMCP_right_Y\n",
"105 littlePIP_right_X\n",
"106 littlePIP_right_Y\n",
"107 littleDIP_right_X\n",
"108 littleDIP_right_Y\n",
"109 littleTip_right_X\n",
"110 littleTip_right_Y\n",
"111 neck_X\n",
"112 neck_Y\n"
]
}
],
"source": [
"df = pd.read_csv('data/processed/spoter_train.csv')\n",
"for i, e in enumerate(df.columns):\n",
" print(i, e)"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [],
"source": [
"# dataset = 'data/processed/spoter_train.csv'\n",
"\n",
"def plot(dataset):\n",
" df = pd.read_csv(dataset)\n",
" # get columns 0 - 26\n",
" # df = df.iloc[:, 5:27]\n",
"\n",
"\n",
" # df = df.iloc[:, 27:69]\n",
" # df = df.iloc[:, 69:]\n",
"\n",
" if 'wlasl' in dataset:\n",
" df = df.iloc[:, :108]\n",
"\n",
" else:\n",
" df = df.iloc[:, 5:]\n",
"\n",
"\n",
" # get first row\n",
" row = df.iloc[0]\n",
"\n",
" # use matplotlib to create a scatter plot (the columns are X, Y, X, Y, X, Y, X, Y)\n",
" import matplotlib.pyplot as plt\n",
" import ast\n",
"\n",
" def __process_row(coords):\n",
" coords = coords.tolist()\n",
"\n",
" new_coords = [] # string to list\n",
"\n",
" for x in coords:\n",
" new_coords.append(ast.literal_eval(x))\n",
"\n",
" coords = [x[2] for x in new_coords]\n",
"\n",
" return [float(x) for x in coords]\n",
"\n",
"\n",
" # extract X and Y coordinates from the row\n",
" x_coords = row.iloc[::2] # columns 0, 2, 4, 6, ...\n",
" y_coords = row.iloc[1::2] # columns 1, 3, 5, 7, ...\n",
"\n",
" x_coords = __process_row(x_coords)\n",
" y_coords = __process_row(y_coords)\n",
"\n",
" # create a scatter plot\n",
" plt.scatter(x_coords, y_coords)\n",
"\n",
" # add axis labels and a title\n",
" plt.xlabel('X')\n",
" plt.ylabel('Y')\n",
" plt.title('Scatter plot of X and Y coordinates')\n",
"\n",
" # show the plot\n",
" plt.show()\n"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAHHCAYAAABDUnkqAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA/40lEQVR4nO3de1yUZf7/8feAwniAQUIOGilaVuQBjyym2QHDdCkrN9NKs4NpZiW137JcSa1ws8zyrJm2tqZb2dnwQLltxS6mUh7SzDDNBE8JqCskc/3+8MesI6CAMAM3r+fjMY/i4rpnPvc1g/Oe677va2zGGCMAAACL8PF2AQAAAFWJcAMAACyFcAMAACyFcAMAACyFcAMAACyFcAMAACyFcAMAACyFcAMAACyFcAMAACyFcANYwNVXX62rr77a22W4ycnJ0YABA3TBBRfIZrNp2rRp3i6pSrRs2VJ33323t8uoEc583e3atUs2m02LFi3yWk2ARLhBDbZp0yYNGDBALVq0kN1uV/PmzdW7d29Nnz692h5zyZIlpb4J//rrr3rmmWeUmZlZbY/tDcePH9czzzyjtWvXVvl9jxkzRitXrtTYsWO1ePFi9enTp9R+q1evls1m04QJE0r8LisrSw0bNtSAAQOqvL7qsnTpUtlsNs2dO7fU348cOVL169fXt99+6+HKrOP555/X+++/7+0yUJMZoAb66quvjJ+fn7n44ovNpEmTzPz588348ePN9ddfb1q3bl1tj9uvXz/TokWLEu3r1q0zkszChQur7bHPR69evUyvXr0qvN2BAweMJJOcnFzlNYWFhZk77rijXH0HDx5s/P39zfbt293a+/TpYwIDA83evXurvL7KatGihRk6dOhZ+/Tp08cEBQWZ7Oxst/b//Oc/xsfHx/z5z3+uxgo958zXndPpNP/973/NyZMnq/VxGzVqdM7nAHVbPW+HK6A0zz33nBwOh9atW6egoCC33+3fv987RVWDY8eOqVGjRt4uo1rs37+/xHNXlpdfflmffvqpRowYoc8++0zSqRmQ1NRUvfrqq2rWrFk1Vlr1Zs+erSuuuEJjxozRkiVLJElFRUV64IEHdNFFF+mZZ57xboHlVNHXp81mk91ur8aKgHLydroCSnPppZeaq6++utz9Fy9ebLp27WoaNGhggoKCTM+ePc3KlStdv3///fdN3759TUREhPHz8zOtWrUyEydOdPuE2atXLyPJ7daiRQvz+eefl2jXGbM4//73v01CQoIJDAw0DRo0MFdddZX58ssv3WpMTk42ksyWLVvMoEGDTFBQkImJiSlznxYuXGgkmX/+859m+PDhJjg42AQEBJi77rrLHD582K1vaTM3OTk55p577jGhoaHG39/ftG/f3ixatMj1+6ysrFL361yzODt37jQDBgwwTZo0MQ0aNDCxsbHm448/LlH3mbdzmTdvnpFkFi1aZH777TcTHh5uunbtaoqKis657a5du8zIkSNNmzZtjN1uN8HBwWbAgAEmKyvLrV9xbV9++aUZM2aMCQkJMQ0bNjT9+/c3+/fvd+vrdDrNpEmTTPPmzU2DBg3M1VdfbTZv3lyumRtjjHnhhReMJLNq1SpjjDFTp041ksynn356zm2NOfWauuGGG0xQUJBp2LChadeunZk2bZpbn7S0NNOjRw/TsGFD43A4zI033mi2bt1a4r42bNhg+vTpYwICAkyjRo3Mtddea9LT00sdm7Vr15qRI0eapk2bmqCgINfv586da1q1amXsdrvp2rWr+eKLL0q87opfU6f/bQwdOtQ0atTI/PLLL+amm24yjRo1MiEhIeaxxx4rMcMzZcoUExcXZ4KDg43dbjedOnUyb7/9tluf0l5bpz8fv/zyixk2bJgJDQ01fn5+Jjo62ixYsKDEmLz66qsmOjra9W9G586dzd///vcynw/ULoQb1EjXX3+9CQgIMJs2bTpn32eeecZIMt27dzdTpkwxr7zyihk8eLB54oknXH369+9vbrvtNjNlyhQze/Zs86c//clIMo8//rirz6pVq0xMTIwJCQkxixcvNosXLzbvvfeeyc7ONhMnTjSSzPDhw12/27lzpzHm1BuMn5+fiYuLMy+99JJ5+eWXTfv27Y2fn5/5z3/+47r/4nATHR1tbrrpJjNr1iwzc+bMMver+M2mXbt2pmfPnubVV181o0aNMj4+Puaqq64yTqfT1ffMN5njx4+byy+/3NSvX9+MGTPGvPrqq6Znz55GkusN8ujRo2b27NlGkrn55ptd+/Xtt9+WWVN2drYJCwszAQEB5umnnzZTp041HTp0MD4+Pmb58uXGmFPhZ/HixUaS6d27t+t+z8XpdJorr7zShISEmEGDBhlfX1+zYcOGc25njDFvv/226dChgxk/fryZN2+eeeqpp0yTJk1MixYtzLFjx0qMaceOHc21115rpk+fbh577DHj6+trbrvtNrf7HDdunJFk+vbta2bMmGHuuece06xZMxMSElKucPP777+bDh06mNatW5sdO3aYxo0bm9tvv71c+7Nq1Srj5+dnWrRoYZKTk83s2bPNww8/bOLj4119Vq9eberVq2fatGljXnjhBTNhwgQTEhJimjRp4hbqNm/ebBo1amQiIiLMpEmTzOTJk01UVJTx9/c3//73v0uMTXR0tOnVq5eZPn26mTx5sjHGmNdee831N/bqq6+aRx991AQFBZlWrVqVK9zY7XZzxRVXmHvuucfMnj3b3HrrrUaSmTVrltt+X3jhhebBBx80M2bMMFOnTjXdunUzktzC8+LFi42/v7/p2bOn67X19ddfG2NOvT4vvPBCExkZaSZOnGhmz55tbrzxRiPJvPzyy677KA7SAwYMMHPnzjWvvPKKuffee83DDz9crucHNR/hBjXSqlWrjK+vr/H19TVxcXHm//7v/8zKlStNYWGhW78dO3YYHx8fc/PNN5f4hH/6m//x48dLPMYDDzxgGjZsaE6cOOFqq+g5N06n01xyySUmISGhxONFRUWZ3r17u9qKw82gQYPKNQbFbzadO3d22+/iGYEPPvjA1XZmuJk2bZqRZN58801XW2FhoYmLizONGzc2eXl5xpiKn3Pz6KOPGknmX//6l6stPz/fREVFmZYtW7o9B5LMqFGjynW/xTZv3mzq169vJJlHH3203NuV9vymp6cbSeZvf/ubq614TOPj492erzFjxhhfX19z5MgRY4wx+/fvN35+fqZfv35u/Z566qkSMwVnU3yOTXBwcKnn4JTm5MmTJioqyrRo0cL89ttvbr87vZaYmBgTGhpqDh065Gr79ttvjY+PjxkyZIirrX///sbPz88Vxo0x5tdffzUBAQHmqquucrUVj02PHj3cZlQKCwtNaGioiYmJMQUFBa724oBQnnAjyUycONFtXzp27Gg6d+7s1nbm81hYWGjatm1rrr32Wrf2ss65uffee01ERIQ5ePCgW/vtt99uHA6H6/5vuukmc8UVV5TYHtbB1VKokXr37q309HTdeOON+vbbb/XCCy8oISFBzZs314cffujq9/7778vpdGr8+PHy8XF/OdtsNtf/N2jQwPX/+fn5OnjwoHr27Knj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fLGefvppTZo0ST179tQtt9wif39/rVu3Ts2aNVNKSoq6d++uJk2aaOjQoXr44Ydls9m0ePHiUsNT586dtWzZMiUlJalr165q3LixEhMT1bp1awUFBWnOnDkKCAhQo0aNFBsbq6ioKL322mu64YYbdMUVV2jYsGFq3ry59u7dq88//1yBgYH66KOPzmssCgsLdd111+m2227T9u3bNWvWLPXo0UM33nhjmdsMHz5cc+fO1d13363169erZcuWeuedd/TVV19p2rRpCggIkHTqEER0dLSWLVumNm3aKDg4WG3bti3zfI8nn3xSb731lm644QY9/PDDCg4O1htvvKGsrCy9++67Jc7xKY/169dr5syZGjVqlNt5Kc2bN9fEiROVlJSkd999V7feemuZ9/HHP/5RixcvlsPhUHR0tNLT07VmzRpdcMEFFa5HOjUL8PjjjyslJUV//OMf1bdvX23cuFGffvqpQkJCKnWf5eXj46PZs2crMTFRMTExGjZsmCIiIrRt2zZt2bJFK1eulHTqUOgNN9yguLg43Xvvvfrvf/+r6dOny+FwuC0S+Oyzz2r16tXq0aOHHnzwQdWrV09z585VQUGBXnjhhXPWU79+fT377LN64IEHdO2112rgwIHKysrSwoULy33OTXn069dPU6dOVZ8+fTR48GDt379fM2fO1MUXX6zvvvvOrW/nzp21Zs0aTZ06Vc2aNVNUVJRiY2M1efJkff7554qNjdX999+v6OhoHT58WBs2bNCaNWt0+PBhSadOVg8PD9eVV16psLAwff/995oxY4b69evn+ttALeelq7SAs/r000/NPffcYy677DLTuHFj11cxjB492uTk5JTo//rrr5uOHTsaf39/06RJE9OrVy+zevVq1++/+uor84c//ME0aNDANGvWzHVpuSTz+eefu/odPXrUDB482AQFBbkW8Sv2wQcfmOjoaFOvXr0Sl7tu3LjR3HLLLeaCCy4w/v7+pkWLFua2224zaWlprj7Fl4IfOHCgXGNw5iJ+TZo0MY0bNzZ33HGH2+W/xpS9iN+wYcNMSEiI8fPzM+3atSv16yO+/vpr07lzZ+Pn51ehRfyCgoKM3W433bp1c1uHpJjKcSn4yZMnTadOnUyzZs1Mbm5uqb+PiYkxF154ocnPzy/zfn777TfXvjZu3NgkJCSYbdu2lVhwr3hM161b57Z98UKNp78WioqKzIQJE0xERESlFvE712Oey5dffml69+7tWnivffv2Zvr06W591qxZY6688krToEEDExgYaBITE8tcxC8hIcE0btzYNGzY0FxzzTWutWHKW+esWbNc6+N06dKlwov4nan47+F0CxYsMJdcconx9/c3l112mVm4cGGp/bZt22auuuoq06BBgxKX5ufk5JhRo0aZyMhIU79+fRMeHm6uu+46M2/ePFefuXPnmquuusr199q6dWvz5z//udTXIGonmzGcQQfURIsWLdKwYcO0bt26cl9pAwDgnBsAAGAxhBsAAGAphBsAAGApnHMDAAAshZkbAABgKYQbAABgKXVuET+n06lff/1VAQEBFV56HgAAeIcxRvn5+WrWrNk5Fwytc+Hm119/Ped3qQAAgJppz549uvDCC8/ap86Fm+Kltffs2XPO71QBAAA1Q15eniIjI8v1FRl1LtwUH4oKDAwk3AAAUMuU55QSTigGAACWQrgBAACWQrgBAACWQrgBAACW4tVw88UXXygxMVHNmjWTzWbT+++/X+5tv/rqK9WrV08xMTHVVh8AAKh9vBpujh07pg4dOmjmzJkV2u7IkSMaMmSIrrvuumqqDAAA1FZevRT8hhtu0A033FDh7UaMGKHBgwfL19e3QrM9AADA+mrdOTcLFy7UTz/9pOTk5HL1LygoUF5entsNAABYV60KNzt27NCTTz6pN998U/XqlW/SKSUlRQ6Hw3XjqxcAALC2WhNuioqKNHjwYE2YMEFt2rQp93Zjx45Vbm6u67Znz55qrBIAgNqnyGmUvvOQPsjcq/Sdh1TkNN4u6bzUmq9fyM/P1zfffKONGzfqoYceknTqG76NMapXr55WrVqla6+9tsR2/v7+8vf393S5AADUCqmb92nCR1u1L/eEqy3CYVdyYrT6tI3wYmWVV2vCTWBgoDZt2uTWNmvWLH322Wd65513FBUV5aXKAAConVI379PINzfozHma7NwTGvnmBs2+s1OtDDheDTdHjx7Vjz/+6Po5KytLmZmZCg4O1kUXXaSxY8dq7969+tvf/iYfHx+1bdvWbfvQ0FDZ7fYS7QAA4OyKnEYTPtpaIthIkpFkkzTho63qHR0uX59zf1llTeLVc26++eYbdezYUR07dpQkJSUlqWPHjho/frwkad++fdq9e7c3SwQAwJIysg67HYo6k5G0L/eEMrIOe66oKmIzxtTus4YqKC8vTw6HQ7m5uQoMDPR2OQAAeMUHmXv1yNLMc/Z75fYY3RTTvPoLOoeKvH/XmqulAABA1QkNsFdpv5qEcAMAQB3ULSpYEQ67yjqbxqZTV011iwr2ZFlVgnADAEAd5OtjU3JitCSVCDjFPycnRte6k4klwg0AAHVWn7YRmn1nJ4U73A89hTvstfYycKkWrXMDAACqXp+2EeodHa6MrMPan39CoQGnDkXVxhmbYoQbAADqOF8fm+JaX+DtMqoMh6UAAIClEG4AAIClEG4AAIClEG4AAIClEG4AAIClEG4AAIClEG4AAIClEG4AAIClEG4AAIClEG4AAIClEG4AAIClEG4AAIClEG4AAIClEG4AAIClEG4AAIClEG4AAIClEG4AAICl1PN2AQBqjyKnUUbWYe3PP6HQALu6RQXL18fm7bIAwA3hBkC5pG7epwkfbdW+3BOutgiHXcmJ0erTNsKLlQGAOw5LATin1M37NPLNDW7BRpKyc09o5JsblLp5n5cqA4CSCDcAzqrIaTTho60ypfyuuG3CR1tV5CytBwB4HuEGwFllZB0uMWNzOiNpX+4JZWQd9lxRAHAWhBsAZ7U/v+xgU5l+AFDdCDcAzio0wF6l/QCguhFuAJxVt6hgRTjsKuuCb5tOXTXVLSrYk2UBQJkINwDOytfHpuTEaEkqEXCKf05OjGa9GwA1BuEGwDn1aRuh2Xd2UrjD/dBTuMOu2Xd2Yp0bADUKi/gBKJc+bSPUOzqcFYoB1HiEGwDl5utjU1zrC7xdBgCcFYelAACApRBuAACApRBuAACApXg13HzxxRdKTExUs2bNZLPZ9P7775+1//Lly9W7d281bdpUgYGBiouL08qVKz1TLAAAqBW8Gm6OHTumDh06aObMmeXq/8UXX6h3795asWKF1q9fr2uuuUaJiYnauHFjNVcKAABqC5sxpkZ8la/NZtN7772n/v37V2i7K664QgMHDtT48ePL1T8vL08Oh0O5ubkKDAysRKUAAMDTKvL+XasvBXc6ncrPz1dwcNnLvhcUFKigoMD1c15enidKAwAAXlKrTyh+8cUXdfToUd12221l9klJSZHD4XDdIiMjPVghAADwtFobbpYsWaIJEyboH//4h0JDQ8vsN3bsWOXm5rpue/bs8WCVAADA02rlYamlS5fqvvvu09tvv634+Piz9vX395e/v7+HKgMAAN5W62Zu3nrrLQ0bNkxvvfWW+vXr5+1yAABADePVmZujR4/qxx9/dP2clZWlzMxMBQcH66KLLtLYsWO1d+9e/e1vf5N06lDU0KFD9corryg2NlbZ2dmSpAYNGsjhcHhlHwAAQM3i1Zmbb775Rh07dlTHjh0lSUlJSerYsaPrsu59+/Zp9+7drv7z5s3TyZMnNWrUKEVERLhujzzyiFfqBwAANU+NWefGU1jnBgCA2qci79+17pwbAACAsyHcAAAASyHcAAAASyHcAAAASyHcAAAASyHcAAAASyHcAAAASyHcAAAASyHcAAAASyHcAAAASyHcAAAASyHcAAAASyHcAAAASyHcAAAASyHcAAAASyHcAAAASyHcAAAASyHcAAAASyHcAAAASyHcAAAASyHcAAAASyHcAAAASyHcAAAASyHcAAAASyHcAAAASyHcAAAASyHcAAAASyHcAAAASyHcAAAASyHcAAAASyHcAAAASyHcAAAASyHcAAAASyHcAAAASyHcAAAASyHcAAAASyHcAAAASyHcAAAAS/FquPniiy+UmJioZs2ayWaz6f333z/nNmvXrlWnTp3k7++viy++WIsWLar2OgEAwLkVOY3Sdx7SB5l7lb7zkIqcxit11PPKo/5/x44dU4cOHXTPPffolltuOWf/rKws9evXTyNGjNDf//53paWl6b777lNERIQSEhI8UDEAAChN6uZ9mvDRVu3LPeFqi3DYlZwYrT5tIzxai80Y451YdQabzab33ntP/fv3L7PPE088oU8++USbN292td1+++06cuSIUlNTy/U4eXl5cjgcys3NVWBg4PmWDQBAnZe6eZ9GvrlBZwYK2///7+w7O513wKnI+3etOucmPT1d8fHxbm0JCQlKT08vc5uCggLl5eW53QAAQNUochpN+GhriWAjydU24aOtHj1EVavCTXZ2tsLCwtzawsLClJeXp//+97+lbpOSkiKHw+G6RUZGeqJUAADqhIysw26Hos5kJO3LPaGMrMMeq6lWhZvKGDt2rHJzc123PXv2eLskAAAsY39+2cGmMv2qgldPKK6o8PBw5eTkuLXl5OQoMDBQDRo0KHUbf39/+fv7e6I8AADqnNAAe5X2qwq1auYmLi5OaWlpbm2rV69WXFyclyoCAKBu6xYV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VhX/NtSvX18dO3bUjz/+WB0lekRlxiEiIkL169eXr6+vq+3yyy9Xdna2CgsL5efnV601V4fzeT0cO3ZMS5cu1cSJE8+rBg5LlZOfn586d+6stLQ0V5vT6VRaWprbp4/TxcXFufWXpNWrV5fZv6arzBhYUWXH4YUXXtCkSZOUmpqqLl26eKLUalVVrwen06mCgoLqKNEjKjoOl112mTZt2qTMzEzX7cYbb9Q111yjzMxMRUZGerL8KlEVr4WioiJt2rRJERER1VVmtavMOFx55ZX68ccfXQFXkn744QdFRETUymAjnd/r4e2331ZBQYHuvPPO8yuiUqch11FLly41/v7+ZtGiRWbr1q1m+PDhJigoyHX54l133WWefPJJV/+vvvrK1KtXz7z44ovm+++/N8nJyZa4FLwiY1BQUGA2btxoNm7caCIiIszjjz9uNm7caHbs2OGtXagSFR2HyZMnGz8/P/POO++4Xe6Yn5/vrV2oEhUdh+eff96sWrXK7Ny502zdutW8+OKLpl69emb+/Pne2oUqUdFxOJMVrpaq6BhMmDDBrFy50uzcudOsX7/e3H777cZut5stW7Z4axeqREXHYffu3SYgIMA89NBDZvv27ebjjz82oaGh5tlnn/XWLlSJyv5N9OjRwwwcOPC8H59wU0HTp083F110kfHz8zPdunUz//73v12/69Wrlxk6dKhb/3/84x+mTZs2xs/Pz1xxxRXmk08+8XDFVa8iY5CVlWUklbj16tXL84VXsYqMQ4sWLUodh+TkZM8XXsUqMg5PP/20ufjii43dbjdNmjQxcXFxZunSpV6ouupV9N+G01kh3BhTsTF49NFHXX3DwsJM3759zYYNG7xQddWr6Gvh66+/NrGxscbf39+0atXKPPfcc+bkyZMerrrqVXQctm3bZiSZVatWnfdj24wx5vzmfgAAAGoOzrkBAACWQrgBAACWQrgBAACWQrgBAACWQrgBAACWQrgBAACWQrgBAACWQrgBAACWQrgBUKsVFRWpe/fuuuWWW9zac3NzFRkZqaefftpLlQHwFlYoBlDr/fDDD4qJidH8+fN1xx13SJKGDBmib7/9VuvWrau1X0AIoHIINwAs4dVXX9UzzzyjLVu2KCMjQ3/605+0bt06dejQwdulAfAwwg0ASzDG6Nprr5Wvr682bdqk0aNHa9y4cd4uC4AXEG4AWMa2bdt0+eWXq127dtqwYYPq1avn7ZIAeAEnFAOwjNdff10NGzZUVlaWfvnlF2+XA8BLmLkBYAlff/21evXqpVWrVunZZ5+VJK1Zs0Y2m83LlQHwNGZuANR6x48f1913362RI0fqmmuu0YIFC5SRkaE5c+Z4uzQAXsDMDYBa75FHHtGKFSv07bffqmHDhpKkuXPn6vHHH9emTZvUsmVL7xYIwKMINwBqtX/+85+67rrrtHbtWvXo0cPtdwkJCTp58iSHp4A6hnADAAAshXNuAACApRBuAACApRBuAACApRBuAACApRBuAACApRBuAACApRBuAACApRBuAACApRBuAACApRBuAACApRBuAACApRBuAACApfw/DIN97LSlbXgAAAAASUVORK5CYII=",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plot('data/wlasl/WLASL100_train.csv')"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAHHCAYAAABDUnkqAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAABA5klEQVR4nO3deVyVZf7/8TeggBsgoYBGbmWFG4pKlEsZhumXssbJtNJsscyspGbSNHGpdFrMctdKGxvTqWw313IaiwYTrcx0TDGtBLcC1BTlXL8//HHGIyDnIGe7eT0fj/N4xM11n/M59zl0v72u+7ruAGOMEQAAgEUEersAAACAqkS4AQAAlkK4AQAAlkK4AQAAlkK4AQAAlkK4AQAAlkK4AQAAlkK4AQAAlkK4AQAAlkK4ASzg6quv1tVXX+3tMhzk5eWpX79+uuCCCxQQEKBp06Z5u6Qq0bRpU915553eLsMnnP292717twICArRw4UKv1QRIhBv4sO+++079+vVTkyZNFBoaqsaNG6tnz56aPn26215z8eLFZZ6Ef/31V40fP16bN29222t7w7FjxzR+/HitW7euyp975MiRWrlypUaPHq1FixapV69eZbZbvXq1AgICNGHChFK/y8nJUe3atdWvX78qr89dlixZooCAAM2dO7fM3w8bNkw1a9bUN9984+HKrOOZZ57Re++95+0y4MsM4IO++OILExwcbC6++GIzadIkM3/+fDNu3Dhz3XXXmRYtWrjtdfv06WOaNGlSavuGDRuMJLNgwQK3vfb56N69u+nevbvL+x04cMBIMhkZGVVeU3R0tLntttucajtw4EATEhJitm/f7rC9V69eJiwszPzyyy9VXl9lNWnSxAwePPicbXr16mUiIiJMbm6uw/b//Oc/JjAw0PzlL39xY4Wec/b3zmazmT/++MOcOnXKra9bp06dCj8DVG81vB2ugLI8/fTTCg8P14YNGxQREeHwu/3793unKDc4evSo6tSp4+0y3GL//v2lPrvyvPjii/rkk090//3369NPP5V0ugdkxYoVevnll9WoUSM3Vlr1Zs+erVatWmnkyJFavHixJKm4uFj33XefLrroIo0fP967BTrJ1e9nQECAQkND3VgR4CRvpyugLJdeeqm5+uqrnW6/aNEi06lTJ1OrVi0TERFhunbtalauXGn//XvvvWd69+5tYmNjTXBwsGnevLmZOHGiw78wu3fvbiQ5PJo0aWI+++yzUtt1Vi/OV199ZVJTU01YWJipVauW6datm1m/fr1DjRkZGUaS+f77782AAQNMRESESUhIKPc9LViwwEgy//rXv8zQoUNNZGSkqVevnrnjjjvM4cOHHdqW1XOTl5dn7rrrLtOwYUMTEhJi2rZtaxYuXGj/fU5OTpnvq6JenJ07d5p+/fqZ+vXrm1q1apmkpCTz0Ucflar77EdF5s2bZySZhQsXmt9++83ExMSYTp06meLi4gr33b17txk2bJhp2bKlCQ0NNZGRkaZfv34mJyfHoV1JbevXrzcjR440UVFRpnbt2qZv375m//79Dm1tNpuZNGmSady4salVq5a5+uqrzZYtW5zquTHGmGeffdZIMqtWrTLGGDN16lQjyXzyyScV7mvM6e/U9ddfbyIiIkzt2rVNmzZtzLRp0xzarF271nTp0sXUrl3bhIeHmxtuuMFs3bq11HNlZ2ebXr16mXr16pk6deqYHj16mMzMzDKPzbp168ywYcNMgwYNTEREhP33c+fONc2bNzehoaGmU6dO5vPPPy/1vSv5Tp35tzF48GBTp04d8/PPP5sbb7zR1KlTx0RFRZlHH320VA/Pc889Z5KTk01kZKQJDQ01HTp0MG+99ZZDm7K+W2d+Hj///LMZMmSIadiwoQkODjbx8fHm1VdfLXVMXn75ZRMfH2//f0ZiYqL5xz/+Ue7nAf9CuIFPuu6660y9evXMd999V2Hb8ePHG0nmyiuvNM8995x56aWXzMCBA83jjz9ub9O3b19zyy23mOeee87Mnj3b/PnPfzaSzGOPPWZvs2rVKpOQkGCioqLMokWLzKJFi8y7775rcnNzzcSJE40kM3ToUPvvdu7caYw5fYIJDg42ycnJ5oUXXjAvvviiadu2rQkODjb/+c9/7M9fEm7i4+PNjTfeaGbNmmVmzpxZ7vsqOdm0adPGdO3a1bz88stm+PDhJjAw0HTr1s3YbDZ727NPMseOHTOXX365qVmzphk5cqR5+eWXTdeuXY0k+wnyyJEjZvbs2UaSuemmm+zv65tvvim3ptzcXBMdHW3q1atnxowZY6ZOnWratWtnAgMDzbJly4wxp8PPokWLjCTTs2dP+/NWxGazmauuuspERUWZAQMGmKCgIJOdnV3hfsYY89Zbb5l27dqZcePGmXnz5pknnnjC1K9f3zRp0sQcPXq01DFt37696dGjh5k+fbp59NFHTVBQkLnlllscnnPs2LFGkundu7eZMWOGueuuu0yjRo1MVFSUU+Hm5MmTpl27dqZFixZmx44dpm7duubWW2916v2sWrXKBAcHmyZNmpiMjAwze/Zs89BDD5mUlBR7m9WrV5saNWqYli1bmmeffdZMmDDBREVFmfr16zuEui1btpg6deqY2NhYM2nSJDNlyhTTrFkzExISYr766qtSxyY+Pt50797dTJ8+3UyZMsUYY8wrr7xi/xt7+eWXzSOPPGIiIiJM8+bNnQo3oaGhplWrVuauu+4ys2fPNn/605+MJDNr1iyH933hhReaBx54wMyYMcNMnTrVdO7c2UhyCM+LFi0yISEhpmvXrvbv1pdffmmMOf39vPDCC01cXJyZOHGimT17trnhhhuMJPPiiy/an6MkSPfr18/MnTvXvPTSS+buu+82Dz30kFOfD3wf4QY+adWqVSYoKMgEBQWZ5ORk89e//tWsXLnSFBUVObTbsWOHCQwMNDfddFOpf+GfefI/duxYqde47777TO3atc3x48ft21y95sZms5lLLrnEpKamlnq9Zs2amZ49e9q3lYSbAQMGOHUMSk42iYmJDu+7pEfg/ffft287O9xMmzbNSDJvvPGGfVtRUZFJTk42devWNQUFBcYY16+5eeSRR4wk8+9//9u+rbCw0DRr1sw0bdrU4TOQZIYPH+7U85bYsmWLqVmzppFkHnnkEaf3K+vzzczMNJLM3//+d/u2kmOakpLi8HmNHDnSBAUFmd9//90YY8z+/ftNcHCw6dOnj0O7J554olRPwbmUXGMTGRlZ5jU4ZTl16pRp1qyZadKkifntt98cfndmLQkJCaZhw4bm0KFD9m3ffPONCQwMNIMGDbJv69u3rwkODraHcWOM+fXXX029evVMt27d7NtKjk2XLl0celSKiopMw4YNTUJCgjlx4oR9e0lAcCbcSDITJ050eC/t27c3iYmJDtvO/hyLiopM69atTY8ePRy2l3fNzd13321iY2PNwYMHHbbfeuutJjw83P78N954o2nVqlWp/WEdzJaCT+rZs6cyMzN1ww036JtvvtGzzz6r1NRUNW7cWB988IG93XvvvSebzaZx48YpMNDx6xwQEGD/71q1atn/u7CwUAcPHlTX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AQAAlkK4AQAAlkK4AQAAlkK4AQAAlkK4AQAAlkK4AQAAlkK4AQAAlkK4AQAAlkK4AQAAlkK4AQAAlkK4AQAAlkK4AQAAlkK4AQAAlkK4AQAAlkK4AQAAlkK4AQAAlkK4AQAAluIT4WbmzJlq2rSpQkNDlZSUpKysrHLbzp8/X127dlX9+vVVv359paSknLM9AACoXrwebpYuXar09HRlZGQoOztb7dq1U2pqqvbv319m+3Xr1mnAgAH67LPPlJmZqbi4OF133XX65ZdfPFw5AADwRQHGGOPNApKSktSpUyfNmDFDkmSz2RQXF6cRI0Zo1KhRFe5fXFys+vXra8aMGRo0aFCF7QsKChQeHq78/HyFhYWdd/0AAMD9XDl/e7XnpqioSBs3blRKSop9W2BgoFJSUpSZmenUcxw7dkwnT55UZGSku8oEAAB+pIY3X/zgwYMqLi5WdHS0w/bo6Ght27bNqed4/PHH1ahRI4eAdKYTJ07oxIkT9p8LCgoqXzAAAPB5Xr/m5nxMmTJFS5Ys0bvvvqvQ0NAy20yePFnh4eH2R1xcnIerBAAAnuTVcBMVFaWgoCDl5eU5bM/Ly1NMTMw5933++ec1ZcoUrVq1Sm3bti233ejRo5Wfn29/7N27t0pqBwAAvsmr4SY4OFiJiYlau3atfZvNZtPatWuVnJxc7n7PPvusJk2apBUrVqhjx47nfI2QkBCFhYU5PAAAgHV59ZobSUpPT9fgwYPVsWNHde7cWdOmTdPRo0c1ZMgQSdKgQYPUuHFjTZ48WZL0t7/9TePGjdPixYvVtGlT5ebmSpLq1q2runXreu19AAAA3+D1cNO/f38dOHBA48aNU25urhISErRixQr7RcZ79uxRYOD/Ophmz56toqIi9evXz+F5MjIyNH78eE+WDgAAfJDX17nxNNa5AQDA//jNOjcAAABVjXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAs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ixYtTGhoqImLizMPPPCA+e233zxfuB/47LPPyvx/ackxHTx4sOnevXupfRISEkxwcLBp3ry5WbBggcfrPpcAY+ijAwAA1sE1NwAAwFIINwAAwFIINwAAwFIINwAAwFIINwAAwFIINwAAwFIINwAAwFIINwAAwFIINwD8WnFxsa688krdfPPNDtvz8/MVFxenMWPGeKkyAN7CCsUA/N5///tfJSQkaP78+brtttskSYMGDdI333yjDRs2cDNKoJoh3ACwhJdfflnjx4/X999/r6ysLP35z3/Whg0b1K5dO2+XBsDDCDcALMEYox49eigoKEjfffedRowYobFjx3q7LABeQLgBYBnbtm3T5ZdfrjZt2ig7O1s1atTwdkkAvIALigFYxmuvvabatWsrJydHP//8s7fLAeAl9NwAsIQvv/xS3bt316pVq/TUU09JktasWaOAgAAvVwbA0+i5AeD3jh07pjvvvFPDhg3TNddco1dffVVZWVmaM2eOt0sD4AX03ADwew8//LCWL1+ub775RrVr15YkzZ07V4899pi+++47NW3a1LsFAvAowg0Av/avf/1L1157rdatW6cuXbo4/C41NVWnTp1ieAqoZgg3AADAUrjmBgAAWArhBgAAWArhBgAAWArhBgAAWArhBgAAWArhBgAAWArhBgAAWArhBgAAWArhBgAAWArhBgAAWArhBgAAWArhBgAAWMr/A2BwwcDn0UjZAAAAAElFTkSuQmCC",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plot('data/processed/spoter_train.csv')"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[18 19 20 21 22 23 24 25 26 27 28 29 30]\n",
" frame row_id type landmark_index x y z\n",
"3801 25 25-face-0 face 0 0.498506 0.494856 -0.018860\n",
"3802 25 25-face-1 face 1 0.506121 0.470006 -0.056474\n",
"3803 25 25-face-2 face 2 0.505620 0.475341 -0.025482\n",
"3804 25 25-face-3 face 3 0.497120 0.439673 -0.049148\n",
"3805 25 25-face-4 face 4 0.506552 0.461902 -0.062083\n"
]
},
{
"data": {
"application/vnd.plotly.v1+json": {
"config": {
"plotlyServerURL": "https://plot.ly"
},
"data": [
{
"customdata": [
[
"wrist_left"
],
[
"thumbCMC_left"
],
[
"thumbMP_left"
],
[
"thumbIP_left"
],
[
"thumbTip_left"
],
[
"indexMCP_left"
],
[
"indexPIP_left"
],
[
"indexDIP_left"
],
[
"indexTip_left"
],
[
"middleMCP_left"
],
[
"middlePIP_left"
],
[
"middleDIP_left"
],
[
"middleTip_left"
],
[
"ringMCP_left"
],
[
"ringPIP_left"
],
[
"ringDIP_left"
],
[
"ringTip_left"
],
[
"littleMCP_left"
],
[
"littlePIP_left"
],
[
"littleDIP_left"
],
[
"littleTip_left"
]
],
"hovertemplate": "type=left_hand<br>x=%{x}<br>y=%{y}<br>name=%{customdata[0]}<extra></extra>",
"legendgroup": "left_hand",
"marker": {
"color": "#636efa",
"symbol": "circle"
},
"mode": "markers",
"name": "left_hand",
"orientation": "v",
"showlegend": true,
"type": "scatter",
"x": [
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null
],
"xaxis": "x",
"y": [
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null
],
"yaxis": "y"
},
{
"customdata": [
[
"nose"
],
[
"leftEye"
],
[
"rightEye"
],
[
"leftEar"
],
[
"rightEar"
],
[
"leftShoulder"
],
[
"rightShoulder"
],
[
"leftElbow"
],
[
"rightElbow"
],
[
"leftWrist"
],
[
"rightWrist"
]
],
"hovertemplate": "type=pose<br>x=%{x}<br>y=%{y}<br>name=%{customdata[0]}<extra></extra>",
"legendgroup": "pose",
"marker": {
"color": "#EF553B",
"symbol": "circle"
},
"mode": "markers",
"name": "pose",
"orientation": "v",
"showlegend": true,
"type": "scatter",
"x": [
0.5037816762924194,
0.544114351272583,
0.47258099913597107,
0.6112894415855408,
0.42202046513557434,
0.790356457233429,
0.30560430884361267,
0.8586887121200562,
0.052559275180101395,
0.8901190161705017,
0.14568309485912323
],
"xaxis": "x",
"y": [
0.5385957062244415,
0.5870676934719086,
0.5835375487804413,
0.5667203366756439,
0.5620827376842499,
0.3601607084274292,
0.3561617136001587,
0.10383915901184082,
0.12815016508102417,
-0.1593785285949707,
0.4648846983909607
],
"yaxis": "y"
},
{
"customdata": [
[
"wrist_right"
],
[
"thumbCMC_right"
],
[
"thumbMP_right"
],
[
"thumbIP_right"
],
[
"thumbTip_right"
],
[
"indexMCP_right"
],
[
"indexPIP_right"
],
[
"indexDIP_right"
],
[
"indexTip_right"
],
[
"middleMCP_right"
],
[
"middlePIP_right"
],
[
"middleDIP_right"
],
[
"middleTip_right"
],
[
"ringMCP_right"
],
[
"ringPIP_right"
],
[
"ringDIP_right"
],
[
"ringTip_right"
],
[
"littleMCP_right"
],
[
"littlePIP_right"
],
[
"littleDIP_right"
],
[
"littleTip_right"
]
],
"hovertemplate": "type=right_hand<br>x=%{x}<br>y=%{y}<br>name=%{customdata[0]}<extra></extra>",
"legendgroup": "right_hand",
"marker": {
"color": "#00cc96",
"symbol": "circle"
},
"mode": "markers",
"name": "right_hand",
"orientation": "v",
"showlegend": true,
"type": "scatter",
"x": [
0.1788196861743927,
0.23843127489089966,
0.25467628240585327,
0.27044928073883057,
0.2871263027191162,
0.19056828320026398,
0.2649158835411072,
0.3157113492488861,
0.3494824171066284,
0.18622460961341858,
0.2733367681503296,
0.32277774810791016,
0.3569425642490387,
0.19574135541915894,
0.2806362509727478,
0.3286181688308716,
0.36066585779190063,
0.21657982468605042,
0.2816353738307953,
0.31945061683654785,
0.34714818000793457
],
"xaxis": "x",
"y": [
0.4631972312927246,
0.49802637100219727,
0.5355206429958344,
0.5633883774280548,
0.5824070870876312,
0.5867454409599304,
0.6103077828884125,
0.6078206300735474,
0.6010101139545441,
0.5849654078483582,
0.6130928993225098,
0.6087997257709503,
0.6008164584636688,
0.5775772035121918,
0.6042222082614899,
0.6019154489040375,
0.5936585664749146,
0.564491868019104,
0.5853257775306702,
0.5884504020214081,
0.5863424837589264
],
"yaxis": "y"
}
],
"layout": {
"legend": {
"title": {
"text": "type"
},
"tracegroupgap": 0
},
"margin": {
"t": 60
},
"template": {
"data": {
"bar": [
{
"error_x": {
"color": "#2a3f5f"
},
"error_y": {
"color": "#2a3f5f"
},
"marker": {
"line": {
"color": "#E5ECF6",
"width": 0.5
},
"pattern": {
"fillmode": "overlay",
"size": 10,
"solidity": 0.2
}
},
"type": "bar"
}
],
"barpolar": [
{
"marker": {
"line": {
"color": "#E5ECF6",
"width": 0.5
},
"pattern": {
"fillmode": "overlay",
"size": 10,
"solidity": 0.2
}
},
"type": "barpolar"
}
],
"carpet": [
{
"aaxis": {
"endlinecolor": "#2a3f5f",
"gridcolor": "white",
"linecolor": "white",
"minorgridcolor": "white",
"startlinecolor": "#2a3f5f"
},
"baxis": {
"endlinecolor": "#2a3f5f",
"gridcolor": "white",
"linecolor": "white",
"minorgridcolor": "white",
"startlinecolor": "#2a3f5f"
},
"type": "carpet"
}
],
"choropleth": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"type": "choropleth"
}
],
"contour": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
],
"type": "contour"
}
],
"contourcarpet": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"type": "contourcarpet"
}
],
"heatmap": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
],
"type": "heatmap"
}
],
"heatmapgl": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
],
"type": "heatmapgl"
}
],
"histogram": [
{
"marker": {
"pattern": {
"fillmode": "overlay",
"size": 10,
"solidity": 0.2
}
},
"type": "histogram"
}
],
"histogram2d": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
],
"type": "histogram2d"
}
],
"histogram2dcontour": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
],
"type": "histogram2dcontour"
}
],
"mesh3d": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"type": "mesh3d"
}
],
"parcoords": [
{
"line": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "parcoords"
}
],
"pie": [
{
"automargin": true,
"type": "pie"
}
],
"scatter": [
{
"fillpattern": {
"fillmode": "overlay",
"size": 10,
"solidity": 0.2
},
"type": "scatter"
}
],
"scatter3d": [
{
"line": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scatter3d"
}
],
"scattercarpet": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scattercarpet"
}
],
"scattergeo": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scattergeo"
}
],
"scattergl": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scattergl"
}
],
"scattermapbox": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scattermapbox"
}
],
"scatterpolar": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scatterpolar"
}
],
"scatterpolargl": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scatterpolargl"
}
],
"scatterternary": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scatterternary"
}
],
"surface": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
],
"type": "surface"
}
],
"table": [
{
"cells": {
"fill": {
"color": "#EBF0F8"
},
"line": {
"color": "white"
}
},
"header": {
"fill": {
"color": "#C8D4E3"
},
"line": {
"color": "white"
}
},
"type": "table"
}
]
},
"layout": {
"annotationdefaults": {
"arrowcolor": "#2a3f5f",
"arrowhead": 0,
"arrowwidth": 1
},
"autotypenumbers": "strict",
"coloraxis": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"colorscale": {
"diverging": [
[
0,
"#8e0152"
],
[
0.1,
"#c51b7d"
],
[
0.2,
"#de77ae"
],
[
0.3,
"#f1b6da"
],
[
0.4,
"#fde0ef"
],
[
0.5,
"#f7f7f7"
],
[
0.6,
"#e6f5d0"
],
[
0.7,
"#b8e186"
],
[
0.8,
"#7fbc41"
],
[
0.9,
"#4d9221"
],
[
1,
"#276419"
]
],
"sequential": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
],
"sequentialminus": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
]
},
"colorway": [
"#636efa",
"#EF553B",
"#00cc96",
"#ab63fa",
"#FFA15A",
"#19d3f3",
"#FF6692",
"#B6E880",
"#FF97FF",
"#FECB52"
],
"font": {
"color": "#2a3f5f"
},
"geo": {
"bgcolor": "white",
"lakecolor": "white",
"landcolor": "#E5ECF6",
"showlakes": true,
"showland": true,
"subunitcolor": "white"
},
"hoverlabel": {
"align": "left"
},
"hovermode": "closest",
"mapbox": {
"style": "light"
},
"paper_bgcolor": "white",
"plot_bgcolor": "#E5ECF6",
"polar": {
"angularaxis": {
"gridcolor": "white",
"linecolor": "white",
"ticks": ""
},
"bgcolor": "#E5ECF6",
"radialaxis": {
"gridcolor": "white",
"linecolor": "white",
"ticks": ""
}
},
"scene": {
"xaxis": {
"backgroundcolor": "#E5ECF6",
"gridcolor": "white",
"gridwidth": 2,
"linecolor": "white",
"showbackground": true,
"ticks": "",
"zerolinecolor": "white"
},
"yaxis": {
"backgroundcolor": "#E5ECF6",
"gridcolor": "white",
"gridwidth": 2,
"linecolor": "white",
"showbackground": true,
"ticks": "",
"zerolinecolor": "white"
},
"zaxis": {
"backgroundcolor": "#E5ECF6",
"gridcolor": "white",
"gridwidth": 2,
"linecolor": "white",
"showbackground": true,
"ticks": "",
"zerolinecolor": "white"
}
},
"shapedefaults": {
"line": {
"color": "#2a3f5f"
}
},
"ternary": {
"aaxis": {
"gridcolor": "white",
"linecolor": "white",
"ticks": ""
},
"baxis": {
"gridcolor": "white",
"linecolor": "white",
"ticks": ""
},
"bgcolor": "#E5ECF6",
"caxis": {
"gridcolor": "white",
"linecolor": "white",
"ticks": ""
}
},
"title": {
"x": 0.05
},
"xaxis": {
"automargin": true,
"gridcolor": "white",
"linecolor": "white",
"ticks": "",
"title": {
"standoff": 15
},
"zerolinecolor": "white",
"zerolinewidth": 2
},
"yaxis": {
"automargin": true,
"gridcolor": "white",
"linecolor": "white",
"ticks": "",
"title": {
"standoff": 15
},
"zerolinecolor": "white",
"zerolinewidth": 2
}
}
},
"xaxis": {
"anchor": "y",
"constrain": "domain",
"domain": [
0,
1
],
"range": [
0,
1
],
"title": {
"text": "x"
}
},
"yaxis": {
"anchor": "x",
"domain": [
0,
1
],
"range": [
0,
1
],
"scaleanchor": "x",
"scaleratio": 1,
"title": {
"text": "y"
}
}
}
},
"text/html": [
"<div> <div id=\"8f1cccf1-52ac-4cf0-8409-1c18e66d17c3\" class=\"plotly-graph-div\" style=\"height:525px; width:100%;\"></div> <script type=\"text/javascript\"> require([\"plotly\"], function(Plotly) { window.PLOTLYENV=window.PLOTLYENV || {}; if (document.getElementById(\"8f1cccf1-52ac-4cf0-8409-1c18e66d17c3\")) { Plotly.newPlot( \"8f1cccf1-52ac-4cf0-8409-1c18e66d17c3\", [{\"customdata\":[[\"wrist_left\"],[\"thumbCMC_left\"],[\"thumbMP_left\"],[\"thumbIP_left\"],[\"thumbTip_left\"],[\"indexMCP_left\"],[\"indexPIP_left\"],[\"indexDIP_left\"],[\"indexTip_left\"],[\"middleMCP_left\"],[\"middlePIP_left\"],[\"middleDIP_left\"],[\"middleTip_left\"],[\"ringMCP_left\"],[\"ringPIP_left\"],[\"ringDIP_left\"],[\"ringTip_left\"],[\"littleMCP_left\"],[\"littlePIP_left\"],[\"littleDIP_left\"],[\"littleTip_left\"]],\"hovertemplate\":\"type=left_hand<br>x=%{x}<br>y=%{y}<br>name=%{customdata[0]}<extra></extra>\",\"legendgroup\":\"left_hand\",\"marker\":{\"color\":\"#636efa\",\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"left_hand\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],\"xaxis\":\"x\",\"y\":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],\"yaxis\":\"y\",\"type\":\"scatter\"},{\"customdata\":[[\"nose\"],[\"leftEye\"],[\"rightEye\"],[\"leftEar\"],[\"rightEar\"],[\"leftShoulder\"],[\"rightShoulder\"],[\"leftElbow\"],[\"rightElbow\"],[\"leftWrist\"],[\"rightWrist\"]],\"hovertemplate\":\"type=pose<br>x=%{x}<br>y=%{y}<br>name=%{customdata[0]}<extra></extra>\",\"legendgroup\":\"pose\",\"marker\":{\"color\":\"#EF553B\",\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"pose\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[0.5037816762924194,0.544114351272583,0.47258099913597107,0.6112894415855408,0.42202046513557434,0.790356457233429,0.30560430884361267,0.8586887121200562,0.052559275180101395,0.8901190161705017,0.14568309485912323],\"xaxis\":\"x\",\"y\":[0.5385957062244415,0.5870676934719086,0.5835375487804413,0.5667203366756439,0.5620827376842499,0.3601607084274292,0.3561617136001587,0.10383915901184082,0.12815016508102417,-0.1593785285949707,0.4648846983909607],\"yaxis\":\"y\",\"type\":\"scatter\"},{\"customdata\":[[\"wrist_right\"],[\"thumbCMC_right\"],[\"thumbMP_right\"],[\"thumbIP_right\"],[\"thumbTip_right\"],[\"indexMCP_right\"],[\"indexPIP_right\"],[\"indexDIP_right\"],[\"indexTip_right\"],[\"middleMCP_right\"],[\"middlePIP_right\"],[\"middleDIP_right\"],[\"middleTip_right\"],[\"ringMCP_right\"],[\"ringPIP_right\"],[\"ringDIP_right\"],[\"ringTip_right\"],[\"littleMCP_right\"],[\"littlePIP_right\"],[\"littleDIP_right\"],[\"littleTip_right\"]],\"hovertemplate\":\"type=right_hand<br>x=%{x}<br>y=%{y}<br>name=%{customdata[0]}<extra></extra>\",\"legendgroup\":\"right_hand\",\"marker\":{\"color\":\"#00cc96\",\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"right_hand\",\"orientation\":\"v\",\"showlegend\":true,\"x\":[0.1788196861743927,0.23843127489089966,0.25467628240585327,0.27044928073883057,0.2871263027191162,0.19056828320026398,0.2649158835411072,0.3157113492488861,0.3494824171066284,0.18622460961341858,0.2733367681503296,0.32277774810791016,0.3569425642490387,0.19574135541915894,0.2806362509727478,0.3286181688308716,0.36066585779190063,0.21657982468605042,0.2816353738307953,0.31945061683654785,0.34714818000793457],\"xaxis\":\"x\",\"y\":[0.4631972312927246,0.49802637100219727,0.5355206429958344,0.5633883774280548,0.5824070870876312,0.5867454409599304,0.6103077828884125,0.6078206300735474,0.6010101139545441,0.5849654078483582,0.6130928993225098,0.6087997257709503,0.6008164584636688,0.5775772035121918,0.6042222082614899,0.6019154489040375,0.5936585664749146,0.564491868019104,0.5853257775306702,0.5884504020214081,0.5863424837589264],\"yaxis\":\"y\",\"type\":\"scatter\"}], {\"template\":{\"data\":{\"histogram2dcontour\":[{\"type\":\"histogram2dcontour\",\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]]}],\"choropleth\":[{\"type\":\"choropleth\",\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}],\"histogram2d\":[{\"type\":\"histogram2d\",\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]]}],\"heatmap\":[{\"type\":\"heatmap\",\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]]}],\"heatmapgl\":[{\"type\":\"heatmapgl\",\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]]}],\"contourcarpet\":[{\"type\":\"contourcarpet\",\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}],\"contour\":[{\"type\":\"contour\",\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]]}],\"surface\":[{\"type\":\"surface\",\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]]}],\"mesh3d\":[{\"type\":\"mesh3d\",\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}],\"scatter\":[{\"fillpattern\":{\"fillmode\":\"overlay\",\"size\":10,\"solidity\":0.2},\"type\":\"scatter\"}],\"parcoords\":[{\"type\":\"parcoords\",\"line\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}}],\"scatterpolargl\":[{\"type\":\"scatterpolargl\",\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}}],\"bar\":[{\"error_x\":{\"color\":\"#2a3f5f\"},\"error_y\":{\"color\":\"#2a3f5f\"},\"marker\":{\"line\":{\"color\":\"#E5ECF6\",\"width\":0.5},\"pattern\":{\"fillmode\":\"overlay\",\"size\":10,\"solidity\":0.2}},\"type\":\"bar\"}],\"scattergeo\":[{\"type\":\"scattergeo\",\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}}],\"scatterpolar\":[{\"type\":\"scatterpolar\",\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}}],\"histogram\":[{\"marker\":{\"pattern\":{\"fillmode\":\"overlay\",\"size\":10,\"solidity\":0.2}},\"type\":\"histogram\"}],\"scattergl\":[{\"type\":\"scattergl\",\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}}],\"scatter3d\":[{\"type\":\"scatter3d\",\"line\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}}],\"scattermapbox\":[{\"type\":\"scattermapbox\",\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}}],\"scatterternary\":[{\"type\":\"scatterternary\",\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}}],\"scattercarpet\":[{\"type\":\"scattercarpet\",\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}}],\"carpet\":[{\"aaxis\":{\"endlinecolor\":\"#2a3f5f\",\"gridcolor\":\"white\",\"linecolor\":\"white\",\"minorgridcolor\":\"white\",\"startlinecolor\":\"#2a3f5f\"},\"baxis\":{\"endlinecolor\":\"#2a3f5f\",\"gridcolor\":\"white\",\"linecolor\":\"white\",\"minorgridcolor\":\"white\",\"startlinecolor\":\"#2a3f5f\"},\"type\":\"carpet\"}],\"table\":[{\"cells\":{\"fill\":{\"color\":\"#EBF0F8\"},\"line\":{\"color\":\"white\"}},\"header\":{\"fill\":{\"color\":\"#C8D4E3\"},\"line\":{\"color\":\"white\"}},\"type\":\"table\"}],\"barpolar\":[{\"marker\":{\"line\":{\"color\":\"#E5ECF6\",\"width\":0.5},\"pattern\":{\"fillmode\":\"overlay\",\"size\":10,\"solidity\":0.2}},\"type\":\"barpolar\"}],\"pie\":[{\"automargin\":true,\"type\":\"pie\"}]},\"layout\":{\"autotypenumbers\":\"strict\",\"colorway\":[\"#636efa\",\"#EF553B\",\"#00cc96\",\"#ab63fa\",\"#FFA15A\",\"#19d3f3\",\"#FF6692\",\"#B6E880\",\"#FF97FF\",\"#FECB52\"],\"font\":{\"color\":\"#2a3f5f\"},\"hovermode\":\"closest\",\"hoverlabel\":{\"align\":\"left\"},\"paper_bgcolor\":\"white\",\"plot_bgcolor\":\"#E5ECF6\",\"polar\":{\"bgcolor\":\"#E5ECF6\",\"angularaxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\"},\"radialaxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\"}},\"ternary\":{\"bgcolor\":\"#E5ECF6\",\"aaxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\"},\"baxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\"},\"caxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\"}},\"coloraxis\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"colorscale\":{\"sequential\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]],\"sequentialminus\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]],\"diverging\":[[0,\"#8e0152\"],[0.1,\"#c51b7d\"],[0.2,\"#de77ae\"],[0.3,\"#f1b6da\"],[0.4,\"#fde0ef\"],[0.5,\"#f7f7f7\"],[0.6,\"#e6f5d0\"],[0.7,\"#b8e186\"],[0.8,\"#7fbc41\"],[0.9,\"#4d9221\"],[1,\"#276419\"]]},\"xaxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\",\"title\":{\"standoff\":15},\"zerolinecolor\":\"white\",\"automargin\":true,\"zerolinewidth\":2},\"yaxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\",\"title\":{\"standoff\":15},\"zerolinecolor\":\"white\",\"automargin\":true,\"zerolinewidth\":2},\"scene\":{\"xaxis\":{\"backgroundcolor\":\"#E5ECF6\",\"gridcolor\":\"white\",\"linecolor\":\"white\",\"showbackground\":true,\"ticks\":\"\",\"zerolinecolor\":\"white\",\"gridwidth\":2},\"yaxis\":{\"backgroundcolor\":\"#E5ECF6\",\"gridcolor\":\"white\",\"linecolor\":\"white\",\"showbackground\":true,\"ticks\":\"\",\"zerolinecolor\":\"white\",\"gridwidth\":2},\"zaxis\":{\"backgroundcolor\":\"#E5ECF6\",\"gridcolor\":\"white\",\"linecolor\":\"white\",\"showbackground\":true,\"ticks\":\"\",\"zerolinecolor\":\"white\",\"gridwidth\":2}},\"shapedefaults\":{\"line\":{\"color\":\"#2a3f5f\"}},\"annotationdefaults\":{\"arrowcolor\":\"#2a3f5f\",\"arrowhead\":0,\"arrowwidth\":1},\"geo\":{\"bgcolor\":\"white\",\"landcolor\":\"#E5ECF6\",\"subunitcolor\":\"white\",\"showland\":true,\"showlakes\":true,\"lakecolor\":\"white\"},\"title\":{\"x\":0.05},\"mapbox\":{\"style\":\"light\"}}},\"xaxis\":{\"anchor\":\"y\",\"domain\":[0.0,1.0],\"title\":{\"text\":\"x\"},\"range\":[0,1],\"constrain\":\"domain\"},\"yaxis\":{\"anchor\":\"x\",\"domain\":[0.0,1.0],\"title\":{\"text\":\"y\"},\"scaleanchor\":\"x\",\"scaleratio\":1,\"range\":[0,1]},\"legend\":{\"title\":{\"text\":\"type\"},\"tracegroupgap\":0},\"margin\":{\"t\":60}}, {\"responsive\": true} ).then(function(){\n",
" \n",
"var gd = document.getElementById('8f1cccf1-52ac-4cf0-8409-1c18e66d17c3');\n",
"var x = new MutationObserver(function (mutations, observer) {{\n",
" var display = window.getComputedStyle(gd).display;\n",
" if (!display || display === 'none') {{\n",
" console.log([gd, 'removed!']);\n",
" Plotly.purge(gd);\n",
" observer.disconnect();\n",
" }}\n",
"}});\n",
"\n",
"// Listen for the removal of the full notebook cells\n",
"var notebookContainer = gd.closest('#notebook-container');\n",
"if (notebookContainer) {{\n",
" x.observe(notebookContainer, {childList: true});\n",
"}}\n",
"\n",
"// Listen for the clearing of the current output cell\n",
"var outputEl = gd.closest('.output');\n",
"if (outputEl) {{\n",
" x.observe(outputEl, {childList: true});\n",
"}}\n",
"\n",
" }) }; }); </script> </div>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# read parquet file at data/train_landmark_files/2044/635217.parquet\n",
"import pandas as pd\n",
"import matplotlib.pyplot as plt\n",
"\n",
"df = pd.read_parquet('data/train_landmark_files/37779/254554888.parquet')\n",
"\n",
"# print all unique frame numbers\n",
"print(df['frame'].unique())\n",
"\n",
"# filter where type is pose\n",
"df = df[df['frame'] == 25]\n",
"\n",
"print(df.head())\n",
"\n",
"mapping = {\n",
" 'pose_0': 'nose',\n",
" 'pose_1': 'leftEye',\n",
" 'pose_4': 'rightEye',\n",
" 'pose_7': 'leftEar',\n",
" 'pose_8': 'rightEar',\n",
" 'pose_11': 'leftShoulder',\n",
" 'pose_12': 'rightShoulder',\n",
" 'pose_13': 'leftElbow',\n",
" 'pose_14': 'rightElbow',\n",
" 'pose_15': 'leftWrist',\n",
" 'pose_16': 'rightWrist',\n",
"\n",
" 'left_hand_0': 'wrist_left',\n",
" 'left_hand_1': 'thumbCMC_left',\n",
" 'left_hand_2': 'thumbMP_left',\n",
" 'left_hand_3': 'thumbIP_left',\n",
" 'left_hand_4': 'thumbTip_left',\n",
" 'left_hand_5': 'indexMCP_left',\n",
" 'left_hand_6': 'indexPIP_left',\n",
" 'left_hand_7': 'indexDIP_left',\n",
" 'left_hand_8': 'indexTip_left',\n",
" 'left_hand_9': 'middleMCP_left',\n",
" 'left_hand_10': 'middlePIP_left',\n",
" 'left_hand_11': 'middleDIP_left',\n",
" 'left_hand_12': 'middleTip_left',\n",
" 'left_hand_13': 'ringMCP_left',\n",
" 'left_hand_14': 'ringPIP_left',\n",
" 'left_hand_15': 'ringDIP_left',\n",
" 'left_hand_16': 'ringTip_left',\n",
" 'left_hand_17': 'littleMCP_left',\n",
" 'left_hand_18': 'littlePIP_left',\n",
" 'left_hand_19': 'littleDIP_left',\n",
" 'left_hand_20': 'littleTip_left',\n",
"\n",
" 'right_hand_0': 'wrist_right',\n",
" 'right_hand_1': 'thumbCMC_right',\n",
" 'right_hand_2': 'thumbMP_right',\n",
" 'right_hand_3': 'thumbIP_right',\n",
" 'right_hand_4': 'thumbTip_right',\n",
" 'right_hand_5': 'indexMCP_right',\n",
" 'right_hand_6': 'indexPIP_right',\n",
" 'right_hand_7': 'indexDIP_right',\n",
" 'right_hand_8': 'indexTip_right',\n",
" 'right_hand_9': 'middleMCP_right',\n",
" 'right_hand_10': 'middlePIP_right',\n",
" 'right_hand_11': 'middleDIP_right',\n",
" 'right_hand_12': 'middleTip_right',\n",
" 'right_hand_13': 'ringMCP_right',\n",
" 'right_hand_14': 'ringPIP_right',\n",
" 'right_hand_15': 'ringDIP_right',\n",
" 'right_hand_16': 'ringTip_right',\n",
" 'right_hand_17': 'littleMCP_right',\n",
" 'right_hand_18': 'littlePIP_right',\n",
" 'right_hand_19': 'littleDIP_right',\n",
" 'right_hand_20': 'littleTip_right',\n",
" }\n",
"\n",
"# scatter plot and when hovering over the point, show the frame number\n",
"import plotly.express as px\n",
"\n",
"# combine type and landmark index\n",
"df['landmark_id'] = df['type'] + '_' + df['landmark_index'].astype(str)\n",
"# only keep rows where landmark_id is in the mapping\n",
"df = df[df['landmark_id'].isin(mapping.keys())]\n",
"df['name'] = df['landmark_id'].apply(lambda x: mapping[x])\n",
"\n",
"# flip vertically\n",
"df['y'] = 1 - df['y']\n",
"\n",
"# keep aspect ratio\n",
"\n",
"# scatter with px and set color of points based on the type\n",
"fig = px.scatter(df, x='x', y='y', color='type', hover_data=['name'])\n",
"\n",
"fig.update_xaxes(range=[0, 1], constrain='domain')\n",
"fig.update_yaxes(scaleanchor='x', scaleratio=1, range=[0, 1])\n",
"\n",
"# show the plot\n",
"fig.show()\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# from training dataset\n",
"import pandas as pd\n",
"import matplotlib.pyplot as plt\n",
"\n"
]
}
],
"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.8.10"
},
"orig_nbformat": 4
},
"nbformat": 4,
"nbformat_minor": 2
}