--- a
+++ b/LSTM - Experiments/test-lstm-v0.1
@@ -0,0 +1 @@
+{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"provenance":[]},"kernelspec":{"name":"python3","display_name":"Python 3"},"language_info":{"name":"python"}},"cells":[{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"pepBl6EJYVSN","executionInfo":{"status":"ok","timestamp":1693522190485,"user_tz":300,"elapsed":8,"user":{"displayName":"César Mosqueira","userId":"11705195256143475621"}},"outputId":"6b956495-c0d5-40fa-f0bc-855c22fcb9ad"},"outputs":[{"output_type":"stream","name":"stdout","text":["sample_data\n"]}],"source":["!ls"]},{"cell_type":"code","source":["import tensorflow as tf\n","from tensorflow.keras.models import load_model\n","import requests\n","from sklearn.preprocessing import MinMaxScaler\n","import cv2\n","from IPython.display import HTML, display\n","import os\n","\n","import matplotlib.pyplot as plt\n","import pandas as pd\n","import numpy as np\n","import json"],"metadata":{"id":"bANmKxDwax5a","executionInfo":{"status":"ok","timestamp":1694558040850,"user_tz":300,"elapsed":3098,"user":{"displayName":"César Mosqueira","userId":"11705195256143475621"}}},"execution_count":1,"outputs":[]},{"cell_type":"code","source":["# Load the .h5 model\n","model_path = 'lstm_model_ex1.h5'\n","model = load_model(model_path)\n"],"metadata":{"id":"-T-zvVKwa6CQ","executionInfo":{"status":"error","timestamp":1694558055770,"user_tz":300,"elapsed":408,"user":{"displayName":"César Mosqueira","userId":"11705195256143475621"}},"colab":{"base_uri":"https://localhost:8080/","height":388},"outputId":"d7e1623a-5761-4e44-e177-9f3d4126ef73"},"execution_count":2,"outputs":[{"output_type":"error","ename":"OSError","evalue":"ignored","traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mOSError\u001b[0m                                   Traceback (most recent call last)","\u001b[0;32m<ipython-input-2-2ccb67afd767>\u001b[0m in \u001b[0;36m<cell line: 3>\u001b[0;34m()\u001b[0m\n\u001b[1;32m      1\u001b[0m \u001b[0;31m# Load the .h5 model\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      2\u001b[0m \u001b[0mmodel_path\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m'lstm_model_ex1.h5'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0mmodel\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mload_model\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmodel_path\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m","\u001b[0;32m/usr/local/lib/python3.10/dist-packages/keras/src/saving/saving_api.py\u001b[0m in \u001b[0;36mload_model\u001b[0;34m(filepath, custom_objects, compile, safe_mode, **kwargs)\u001b[0m\n\u001b[1;32m    236\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    237\u001b[0m     \u001b[0;31m# Legacy case.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 238\u001b[0;31m     return legacy_sm_saving_lib.load_model(\n\u001b[0m\u001b[1;32m    239\u001b[0m         \u001b[0mfilepath\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcustom_objects\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mcustom_objects\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcompile\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mcompile\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    240\u001b[0m     )\n","\u001b[0;32m/usr/local/lib/python3.10/dist-packages/keras/src/utils/traceback_utils.py\u001b[0m in \u001b[0;36merror_handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m     68\u001b[0m             \u001b[0;31m# To get the full stack trace, call:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     69\u001b[0m             \u001b[0;31m# `tf.debugging.disable_traceback_filtering()`\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 70\u001b[0;31m             \u001b[0;32mraise\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mwith_traceback\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfiltered_tb\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     71\u001b[0m         \u001b[0;32mfinally\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     72\u001b[0m             \u001b[0;32mdel\u001b[0m \u001b[0mfiltered_tb\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/usr/local/lib/python3.10/dist-packages/keras/src/saving/legacy/save.py\u001b[0m in \u001b[0;36mload_model\u001b[0;34m(filepath, custom_objects, compile, options)\u001b[0m\n\u001b[1;32m    232\u001b[0m                     \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfilepath_str\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    233\u001b[0m                         \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mtf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mio\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgfile\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mexists\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfilepath_str\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 234\u001b[0;31m                             raise IOError(\n\u001b[0m\u001b[1;32m    235\u001b[0m                                 \u001b[0;34mf\"No file or directory found at {filepath_str}\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    236\u001b[0m                             )\n","\u001b[0;31mOSError\u001b[0m: No file or directory found at lstm_model_ex1.h5"]}]},{"cell_type":"code","source":["model.summary()"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"vRCgKdiUa-zW","executionInfo":{"status":"ok","timestamp":1693520666903,"user_tz":300,"elapsed":586,"user":{"displayName":"Francesco Bassino","userId":"12214195385968794219"}},"outputId":"ea43590e-04fc-49c1-bc53-1befec197998"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["Model: \"sequential_1\"\n","_________________________________________________________________\n"," Layer (type)                Output Shape              Param #   \n","=================================================================\n"," lstm_2 (LSTM)               (None, 10, 128)           91648     \n","                                                                 \n"," dropout_2 (Dropout)         (None, 10, 128)           0         \n","                                                                 \n"," lstm_3 (LSTM)               (None, 64)                49408     \n","                                                                 \n"," dropout_3 (Dropout)         (None, 64)                0         \n","                                                                 \n"," dense_1 (Dense)             (None, 1)                 65        \n","                                                                 \n","=================================================================\n","Total params: 141,121\n","Trainable params: 141,121\n","Non-trainable params: 0\n","_________________________________________________________________\n"]}]},{"cell_type":"markdown","source":["### Demonstrating 3 different responses"],"metadata":{"id":"o0SsLyIQl8Xj"}},{"cell_type":"code","source":["!ls"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"qrJH-78qncKO","executionInfo":{"status":"ok","timestamp":1693522233720,"user_tz":300,"elapsed":252,"user":{"displayName":"César Mosqueira","userId":"11705195256143475621"}},"outputId":"c205accb-e29f-45f5-a7e0-35a92b14a3d8"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["lstm_model_ex1.h5\n","sample_data\n","single_extracted_landmarks_ambiguous.csv\n","single_extracted_landmarks_bad.csv\n","single_extracted_landmarks.csv\n","single_extracted_landmarks_inclass.csv\n","single_extracted_landmarks_inclass_front.csv\n"]}]},{"cell_type":"code","source":["ambiguous_video = pd.read_csv('single_extracted_landmarks_ambiguous.csv')\n","good_video = pd.read_csv('single_extracted_landmarks.csv')\n","bad_video = pd.read_csv('single_extracted_landmarks_bad.csv')\n","inclass = pd.read_csv('single_extracted_landmarks_inclass.csv')\n","inclass_front = pd.read_csv('single_extracted_landmarks_inclass_front.csv')"],"metadata":{"id":"H0O6eZYzdxo7"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["inclass_front.head(15)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":519},"id":"RVloKimFphry","executionInfo":{"status":"ok","timestamp":1693522281614,"user_tz":300,"elapsed":263,"user":{"displayName":"César Mosqueira","userId":"11705195256143475621"}},"outputId":"b78f479f-f832-457c-ee56-f15783f81041"},"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":["                             video  group  frame  \\\n","0   single_video_inclass_front.mp4      1      5   \n","1   single_video_inclass_front.mp4      1     11   \n","2   single_video_inclass_front.mp4      1     17   \n","3   single_video_inclass_front.mp4      1     23   \n","4   single_video_inclass_front.mp4      1     29   \n","5   single_video_inclass_front.mp4      1     35   \n","6   single_video_inclass_front.mp4      1     41   \n","7   single_video_inclass_front.mp4      1     47   \n","8   single_video_inclass_front.mp4      1     53   \n","9   single_video_inclass_front.mp4      1     59   \n","10  single_video_inclass_front.mp4      2     71   \n","11  single_video_inclass_front.mp4      2     77   \n","12  single_video_inclass_front.mp4      2     83   \n","13  single_video_inclass_front.mp4      2     89   \n","14  single_video_inclass_front.mp4      2     95   \n","\n","                                            landmarks  \n","0   [     233.46      174.49     0.99463      259....  \n","1   [     224.02      178.57     0.99599      250....  \n","2   [     193.71      178.13     0.99595      220....  \n","3   [     178.02      171.85     0.99656       205...  \n","4   [      202.7      170.08     0.99721      230....  \n","5   [     237.13      170.73     0.99831      265....  \n","6   [     252.49      171.97     0.99697      279....  \n","7   [     286.41      183.08     0.99699      308....  \n","8   [     315.89      188.04     0.99482      333....  \n","9   [      308.8      183.55     0.99582      326....  \n","10  [     332.22      182.48     0.99602      348....  \n","11  [     320.52       185.4     0.99461      336....  \n","12  [     311.52      193.42     0.99466      327....  \n","13  [     309.39      198.32     0.99483      325....  \n","14  [     318.19      201.38     0.99439      334....  "],"text/html":["\n","  <div id=\"df-cf3d7f15-1a34-4b95-b34a-ff0d26fef51f\" class=\"colab-df-container\">\n","    <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>video</th>\n","      <th>group</th>\n","      <th>frame</th>\n","      <th>landmarks</th>\n","    </tr>\n","  </thead>\n","  <tbody>\n","    <tr>\n","      <th>0</th>\n","      <td>single_video_inclass_front.mp4</td>\n","      <td>1</td>\n","      <td>5</td>\n","      <td>[     233.46      174.49     0.99463      259....</td>\n","    </tr>\n","    <tr>\n","      <th>1</th>\n","      <td>single_video_inclass_front.mp4</td>\n","      <td>1</td>\n","      <td>11</td>\n","      <td>[     224.02      178.57     0.99599      250....</td>\n","    </tr>\n","    <tr>\n","      <th>2</th>\n","      <td>single_video_inclass_front.mp4</td>\n","      <td>1</td>\n","      <td>17</td>\n","      <td>[     193.71      178.13     0.99595      220....</td>\n","    </tr>\n","    <tr>\n","      <th>3</th>\n","      <td>single_video_inclass_front.mp4</td>\n","      <td>1</td>\n","      <td>23</td>\n","      <td>[     178.02      171.85     0.99656       205...</td>\n","    </tr>\n","    <tr>\n","      <th>4</th>\n","      <td>single_video_inclass_front.mp4</td>\n","      <td>1</td>\n","      <td>29</td>\n","      <td>[      202.7      170.08     0.99721      230....</td>\n","    </tr>\n","    <tr>\n","      <th>5</th>\n","      <td>single_video_inclass_front.mp4</td>\n","      <td>1</td>\n","      <td>35</td>\n","      <td>[     237.13      170.73     0.99831      265....</td>\n","    </tr>\n","    <tr>\n","      <th>6</th>\n","      <td>single_video_inclass_front.mp4</td>\n","      <td>1</td>\n","      <td>41</td>\n","      <td>[     252.49      171.97     0.99697      279....</td>\n","    </tr>\n","    <tr>\n","      <th>7</th>\n","      <td>single_video_inclass_front.mp4</td>\n","      <td>1</td>\n","      <td>47</td>\n","      <td>[     286.41      183.08     0.99699      308....</td>\n","    </tr>\n","    <tr>\n","      <th>8</th>\n","      <td>single_video_inclass_front.mp4</td>\n","      <td>1</td>\n","      <td>53</td>\n","      <td>[     315.89      188.04     0.99482      333....</td>\n","    </tr>\n","    <tr>\n","      <th>9</th>\n","      <td>single_video_inclass_front.mp4</td>\n","      <td>1</td>\n","      <td>59</td>\n","      <td>[      308.8      183.55     0.99582      326....</td>\n","    </tr>\n","    <tr>\n","      <th>10</th>\n","      <td>single_video_inclass_front.mp4</td>\n","      <td>2</td>\n","      <td>71</td>\n","      <td>[     332.22      182.48     0.99602      348....</td>\n","    </tr>\n","    <tr>\n","      <th>11</th>\n","      <td>single_video_inclass_front.mp4</td>\n","      <td>2</td>\n","      <td>77</td>\n","      <td>[     320.52       185.4     0.99461      336....</td>\n","    </tr>\n","    <tr>\n","      <th>12</th>\n","      <td>single_video_inclass_front.mp4</td>\n","      <td>2</td>\n","      <td>83</td>\n","      <td>[     311.52      193.42     0.99466      327....</td>\n","    </tr>\n","    <tr>\n","      <th>13</th>\n","      <td>single_video_inclass_front.mp4</td>\n","      <td>2</td>\n","      <td>89</td>\n","      <td>[     309.39      198.32     0.99483      325....</td>\n","    </tr>\n","    <tr>\n","      <th>14</th>\n","      <td>single_video_inclass_front.mp4</td>\n","      <td>2</td>\n","      <td>95</td>\n","      <td>[     318.19      201.38     0.99439      334....</td>\n","    </tr>\n","  </tbody>\n","</table>\n","</div>\n","    <div class=\"colab-df-buttons\">\n","\n","  <div class=\"colab-df-container\">\n","    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-cf3d7f15-1a34-4b95-b34a-ff0d26fef51f')\"\n","            title=\"Convert this dataframe to an interactive table.\"\n","            style=\"display:none;\">\n","\n","  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n","    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n","  </svg>\n","    </button>\n","\n","  <style>\n","    .colab-df-container {\n","      display:flex;\n","      gap: 12px;\n","    }\n","\n","    .colab-df-convert {\n","      background-color: #E8F0FE;\n","      border: none;\n","      border-radius: 50%;\n","      cursor: pointer;\n","      display: none;\n","      fill: #1967D2;\n","      height: 32px;\n","      padding: 0 0 0 0;\n","      width: 32px;\n","    }\n","\n","    .colab-df-convert:hover {\n","      background-color: #E2EBFA;\n","      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n","      fill: #174EA6;\n","    }\n","\n","    .colab-df-buttons div {\n","      margin-bottom: 4px;\n","    }\n","\n","    [theme=dark] .colab-df-convert {\n","      background-color: #3B4455;\n","      fill: #D2E3FC;\n","    }\n","\n","    [theme=dark] .colab-df-convert:hover {\n","      background-color: #434B5C;\n","      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n","      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n","      fill: #FFFFFF;\n","    }\n","  </style>\n","\n","    <script>\n","      const buttonEl =\n","        document.querySelector('#df-cf3d7f15-1a34-4b95-b34a-ff0d26fef51f button.colab-df-convert');\n","      buttonEl.style.display =\n","        google.colab.kernel.accessAllowed ? 'block' : 'none';\n","\n","      async function convertToInteractive(key) {\n","        const element = document.querySelector('#df-cf3d7f15-1a34-4b95-b34a-ff0d26fef51f');\n","        const dataTable =\n","          await google.colab.kernel.invokeFunction('convertToInteractive',\n","                                                    [key], {});\n","        if (!dataTable) return;\n","\n","        const docLinkHtml = 'Like what you see? Visit the ' +\n","          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n","          + ' to learn more about interactive tables.';\n","        element.innerHTML = '';\n","        dataTable['output_type'] = 'display_data';\n","        await google.colab.output.renderOutput(dataTable, element);\n","        const docLink = document.createElement('div');\n","        docLink.innerHTML = docLinkHtml;\n","        element.appendChild(docLink);\n","      }\n","    </script>\n","  </div>\n","\n","\n","<div id=\"df-cb977ff4-452c-4697-896f-e329c4e8b07b\">\n","  <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-cb977ff4-452c-4697-896f-e329c4e8b07b')\"\n","            title=\"Suggest charts.\"\n","            style=\"display:none;\">\n","\n","<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n","     width=\"24px\">\n","    <g>\n","        <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n","    </g>\n","</svg>\n","  </button>\n","\n","<style>\n","  .colab-df-quickchart {\n","      --bg-color: #E8F0FE;\n","      --fill-color: #1967D2;\n","      --hover-bg-color: #E2EBFA;\n","      --hover-fill-color: #174EA6;\n","      --disabled-fill-color: #AAA;\n","      --disabled-bg-color: #DDD;\n","  }\n","\n","  [theme=dark] .colab-df-quickchart {\n","      --bg-color: #3B4455;\n","      --fill-color: #D2E3FC;\n","      --hover-bg-color: #434B5C;\n","      --hover-fill-color: #FFFFFF;\n","      --disabled-bg-color: #3B4455;\n","      --disabled-fill-color: #666;\n","  }\n","\n","  .colab-df-quickchart {\n","    background-color: var(--bg-color);\n","    border: none;\n","    border-radius: 50%;\n","    cursor: pointer;\n","    display: none;\n","    fill: var(--fill-color);\n","    height: 32px;\n","    padding: 0;\n","    width: 32px;\n","  }\n","\n","  .colab-df-quickchart:hover {\n","    background-color: var(--hover-bg-color);\n","    box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n","    fill: var(--button-hover-fill-color);\n","  }\n","\n","  .colab-df-quickchart-complete:disabled,\n","  .colab-df-quickchart-complete:disabled:hover {\n","    background-color: var(--disabled-bg-color);\n","    fill: var(--disabled-fill-color);\n","    box-shadow: none;\n","  }\n","\n","  .colab-df-spinner {\n","    border: 2px solid var(--fill-color);\n","    border-color: transparent;\n","    border-bottom-color: var(--fill-color);\n","    animation:\n","      spin 1s steps(1) infinite;\n","  }\n","\n","  @keyframes spin {\n","    0% {\n","      border-color: transparent;\n","      border-bottom-color: var(--fill-color);\n","      border-left-color: var(--fill-color);\n","    }\n","    20% {\n","      border-color: transparent;\n","      border-left-color: var(--fill-color);\n","      border-top-color: var(--fill-color);\n","    }\n","    30% {\n","      border-color: transparent;\n","      border-left-color: var(--fill-color);\n","      border-top-color: var(--fill-color);\n","      border-right-color: var(--fill-color);\n","    }\n","    40% {\n","      border-color: transparent;\n","      border-right-color: var(--fill-color);\n","      border-top-color: var(--fill-color);\n","    }\n","    60% {\n","      border-color: transparent;\n","      border-right-color: var(--fill-color);\n","    }\n","    80% {\n","      border-color: transparent;\n","      border-right-color: var(--fill-color);\n","      border-bottom-color: var(--fill-color);\n","    }\n","    90% {\n","      border-color: transparent;\n","      border-bottom-color: var(--fill-color);\n","    }\n","  }\n","</style>\n","\n","  <script>\n","    async function quickchart(key) {\n","      const quickchartButtonEl =\n","        document.querySelector('#' + key + ' button');\n","      quickchartButtonEl.disabled = true;  // To prevent multiple clicks.\n","      quickchartButtonEl.classList.add('colab-df-spinner');\n","      try {\n","        const charts = await google.colab.kernel.invokeFunction(\n","            'suggestCharts', [key], {});\n","      } catch (error) {\n","        console.error('Error during call to suggestCharts:', error);\n","      }\n","      quickchartButtonEl.classList.remove('colab-df-spinner');\n","      quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n","    }\n","    (() => {\n","      let quickchartButtonEl =\n","        document.querySelector('#df-cb977ff4-452c-4697-896f-e329c4e8b07b button');\n","      quickchartButtonEl.style.display =\n","        google.colab.kernel.accessAllowed ? 'block' : 'none';\n","    })();\n","  </script>\n","</div>\n","    </div>\n","  </div>\n"]},"metadata":{},"execution_count":7}]},{"cell_type":"code","source":["def is_float(num):\n","    try:\n","        float(num)\n","        return True\n","    except ValueError:\n","        return False"],"metadata":{"id":"keue15xyhIho"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["# remember to strip the 51st value\n","inclass_front['landmarks'].apply(lambda arr: np.array([float(n) for n in arr.split() if is_float(n)]))"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"jXTlSukjy6AG","executionInfo":{"status":"ok","timestamp":1693522586426,"user_tz":300,"elapsed":263,"user":{"displayName":"César Mosqueira","userId":"11705195256143475621"}},"outputId":"efe1d8f5-6474-4453-f480-64f74e53f9cb"},"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":["0     [233.46, 174.49, 0.99463, 259.33, 164.66, 0.99...\n","1     [224.02, 178.57, 0.99599, 250.85, 168.12, 0.99...\n","2     [193.71, 178.13, 0.99595, 220.76, 167.02, 0.99...\n","3     [178.02, 171.85, 0.99656, 205.8, 160.6, 0.9963...\n","4     [202.7, 170.08, 0.99721, 230.84, 157.82, 0.997...\n","                            ...                        \n","87    [363.26, 261.4, 0.98924, 375.29, 238.1, 0.8689...\n","88    [363.31, 261.6, 0.98925, 374.81, 238.74, 0.860...\n","89    [363.77, 261.76, 0.98847, 375.21, 239.1, 0.853...\n","90    [365.39, 262.41, 0.98606, 376.09, 240.3, 0.815...\n","91    [363.33, 263.68, 0.98647, 373.86, 241.44, 0.82...\n","Name: landmarks, Length: 92, dtype: object"]},"metadata":{},"execution_count":25}]},{"cell_type":"code","source":["def preprocess_sequences(single_video):\n","    local_data = single_video.copy()\n","    local_data['landmarks'] = local_data['landmarks'].apply(lambda arr: np.array([float(n) for n in arr.split() if is_float(n)]))\n","    # Group the data by 'video' and 'group'\n","    grouped_data = single_video.groupby(['video', 'group'])\n","    # Create lists to store the sequences and labels\n","    sequences = []\n","    sequence_length = 10\n","    # Iterate over each group\n","    for group, data in grouped_data:\n","        landmarks = data['landmarks'].tolist()\n","\n","        # Create sequences of landmarks\n","        for i in range(len(landmarks) - sequence_length + 1):\n","            sequence = landmarks[i:i+sequence_length]\n","            sequences.append(sequence)\n","    sequences = np.array(sequences)\n","\n","    scaler = MinMaxScaler()\n","    normalized_sequences = np.zeros_like(sequences)\n","    print(sequences.shape)\n","\n","    for i in range(sequences.shape[0]):\n","        for j in range(sequences.shape[1]):\n","            # Flatten the landmarks for each set within the sequence\n","            landmarks_flattened = np.reshape(sequences[i, j], (-1, 1))\n","            # Normalize the landmarks\n","            landmarks_normalized = scaler.fit_transform(landmarks_flattened)\n","            # Reshape the normalized landmarks back to the original shape\n","            normalized_landmarks = np.reshape(landmarks_normalized, sequences[i, j].shape)\n","            # Update the normalized landmarks in the sequences array\n","            normalized_sequences[i, j] = normalized_landmarks\n","    return normalized_sequences"],"metadata":{"id":"iJCnX5e-hJVZ"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["arr = inclass_front['landmarks'].iloc[0]"],"metadata":{"id":"27jyVQxSzyJ1"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["arr.replace(\" \", \"\")"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":54},"id":"xQ_31LTRz4MK","executionInfo":{"status":"ok","timestamp":1693522758467,"user_tz":300,"elapsed":3,"user":{"displayName":"César Mosqueira","userId":"11705195256143475621"}},"outputId":"e666705d-621a-46e1-a3ab-8555eea88b30"},"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":["'[233.46174.490.99463259.33164.660.99408226.37162.020.9799313.93181.90.98803217.26168.330.5209350.16246.450.96978157.46240.890.96054392.1311.120.9364498.044322.58\\n0.91558455.24346.020.9307194.2379.310.92102301.83392.10.90579182.09397.70.89308392.41439.170.47071237.77465.880.45786353.81514.870.12377244.63518.740.11916]'"],"application/vnd.google.colaboratory.intrinsic+json":{"type":"string"}},"metadata":{},"execution_count":38}]},{"cell_type":"code","source":[],"metadata":{"id":"fTOcb5FZzfmO"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["sequences_good = preprocess_sequences(good_video)\n","sequences_bad = preprocess_sequences(bad_video)\n","sequences_ambiguous = preprocess_sequences(ambiguous_video)\n","sequences_inclass = preprocess_sequences(inclass)\n","sequences_inclass_front = preprocess_sequences(inclass_front)"],"metadata":{"id":"G76Bj5HOhP_v","executionInfo":{"status":"ok","timestamp":1693520806574,"user_tz":300,"elapsed":539,"user":{"displayName":"Francesco Bassino","userId":"12214195385968794219"}},"colab":{"base_uri":"https://localhost:8080/"},"outputId":"ee0ba0d3-4268-4488-ef56-6928ce78af12"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["(5, 10, 50)\n","(8, 10, 50)\n","(4, 10, 50)\n","(14, 10, 50)\n","(9, 10, 50)\n"]}]},{"cell_type":"code","source":["local_response = 0.010817443020641804\n","payload = json.load(open('payloadexample.json'))"],"metadata":{"id":"GV8foiDnhcKd"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["arr = np.array([payload['array']])"],"metadata":{"id":"uddKu28QUnpv"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["arr.shape"],"metadata":{"id":"awasy3AnAl82","executionInfo":{"status":"ok","timestamp":1693525897296,"user_tz":300,"elapsed":4,"user":{"displayName":"César Mosqueira","userId":"11705195256143475621"}},"outputId":"dc0540e7-58a7-4124-c8bd-9510b036b134","colab":{"base_uri":"https://localhost:8080/"}},"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":["(10, 50)"]},"metadata":{},"execution_count":43}]},{"cell_type":"code","source":["sequences_bad[0].shape"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"6ypMJt1YUjim","executionInfo":{"status":"ok","timestamp":1693520811436,"user_tz":300,"elapsed":4,"user":{"displayName":"Francesco Bassino","userId":"12214195385968794219"}},"outputId":"32841df7-097b-40d2-9853-50a107e9eb46"},"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":["(10, 50)"]},"metadata":{},"execution_count":15}]},{"cell_type":"code","source":["model.predict(arr)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"H7O8zRZHhc1y","executionInfo":{"status":"ok","timestamp":1693525915720,"user_tz":300,"elapsed":1045,"user":{"displayName":"César Mosqueira","userId":"11705195256143475621"}},"outputId":"26064b7c-aca8-4ed7-eedf-e5e776730ec5"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["1/1 [==============================] - 1s 857ms/step\n"]},{"output_type":"execute_result","data":{"text/plain":["array([[0.0638905]], dtype=float32)"]},"metadata":{},"execution_count":46}]},{"cell_type":"code","source":["inclass[inclass['group'] == 15]"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":206},"id":"lC1gRje9h10l","executionInfo":{"status":"ok","timestamp":1692312069876,"user_tz":300,"elapsed":13,"user":{"displayName":"César Mosqueira","userId":"11705195256143475621"}},"outputId":"3b823ef8-f3ed-41fb-ecfb-1625837e9fec"},"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":["                        video  group  frame  \\\n","140  single_video_inclass.mp4     15    929   \n","141  single_video_inclass.mp4     15    935   \n","142  single_video_inclass.mp4     15    941   \n","143  single_video_inclass.mp4     15    947   \n","144  single_video_inclass.mp4     15    953   \n","\n","                                             landmarks  \n","140  [474.7, 183.7, 0.94313, 478.56, 165.14, 0.0238...  \n","141  [473.46, 188.12, 0.90622, 477.76, 169.85, 0.01...  \n","142  [471.51, 202.77, 0.73089, 478.11, 185.3, 0.008...  \n","143  [474.77, 206.04, 0.86001, 481.11, 189.61, 0.01...  \n","144  [474.47, 202.17, 0.8677, 480.32, 185.13, 0.013...  "],"text/html":["\n","  <div id=\"df-13346ce6-5f5f-40ca-95fa-ccdd217b6aa8\" class=\"colab-df-container\">\n","    <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>video</th>\n","      <th>group</th>\n","      <th>frame</th>\n","      <th>landmarks</th>\n","    </tr>\n","  </thead>\n","  <tbody>\n","    <tr>\n","      <th>140</th>\n","      <td>single_video_inclass.mp4</td>\n","      <td>15</td>\n","      <td>929</td>\n","      <td>[474.7, 183.7, 0.94313, 478.56, 165.14, 0.0238...</td>\n","    </tr>\n","    <tr>\n","      <th>141</th>\n","      <td>single_video_inclass.mp4</td>\n","      <td>15</td>\n","      <td>935</td>\n","      <td>[473.46, 188.12, 0.90622, 477.76, 169.85, 0.01...</td>\n","    </tr>\n","    <tr>\n","      <th>142</th>\n","      <td>single_video_inclass.mp4</td>\n","      <td>15</td>\n","      <td>941</td>\n","      <td>[471.51, 202.77, 0.73089, 478.11, 185.3, 0.008...</td>\n","    </tr>\n","    <tr>\n","      <th>143</th>\n","      <td>single_video_inclass.mp4</td>\n","      <td>15</td>\n","      <td>947</td>\n","      <td>[474.77, 206.04, 0.86001, 481.11, 189.61, 0.01...</td>\n","    </tr>\n","    <tr>\n","      <th>144</th>\n","      <td>single_video_inclass.mp4</td>\n","      <td>15</td>\n","      <td>953</td>\n","      <td>[474.47, 202.17, 0.8677, 480.32, 185.13, 0.013...</td>\n","    </tr>\n","  </tbody>\n","</table>\n","</div>\n","    <div class=\"colab-df-buttons\">\n","\n","  <div class=\"colab-df-container\">\n","    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-13346ce6-5f5f-40ca-95fa-ccdd217b6aa8')\"\n","            title=\"Convert this dataframe to an interactive table.\"\n","            style=\"display:none;\">\n","\n","  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n","    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n","  </svg>\n","    </button>\n","\n","  <style>\n","    .colab-df-container {\n","      display:flex;\n","      gap: 12px;\n","    }\n","\n","    .colab-df-convert {\n","      background-color: #E8F0FE;\n","      border: none;\n","      border-radius: 50%;\n","      cursor: pointer;\n","      display: none;\n","      fill: #1967D2;\n","      height: 32px;\n","      padding: 0 0 0 0;\n","      width: 32px;\n","    }\n","\n","    .colab-df-convert:hover {\n","      background-color: #E2EBFA;\n","      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n","      fill: #174EA6;\n","    }\n","\n","    .colab-df-buttons div {\n","      margin-bottom: 4px;\n","    }\n","\n","    [theme=dark] .colab-df-convert {\n","      background-color: #3B4455;\n","      fill: #D2E3FC;\n","    }\n","\n","    [theme=dark] .colab-df-convert:hover {\n","      background-color: #434B5C;\n","      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n","      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n","      fill: #FFFFFF;\n","    }\n","  </style>\n","\n","    <script>\n","      const buttonEl =\n","        document.querySelector('#df-13346ce6-5f5f-40ca-95fa-ccdd217b6aa8 button.colab-df-convert');\n","      buttonEl.style.display =\n","        google.colab.kernel.accessAllowed ? 'block' : 'none';\n","\n","      async function convertToInteractive(key) {\n","        const element = document.querySelector('#df-13346ce6-5f5f-40ca-95fa-ccdd217b6aa8');\n","        const dataTable =\n","          await google.colab.kernel.invokeFunction('convertToInteractive',\n","                                                    [key], {});\n","        if (!dataTable) return;\n","\n","        const docLinkHtml = 'Like what you see? Visit the ' +\n","          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n","          + ' to learn more about interactive tables.';\n","        element.innerHTML = '';\n","        dataTable['output_type'] = 'display_data';\n","        await google.colab.output.renderOutput(dataTable, element);\n","        const docLink = document.createElement('div');\n","        docLink.innerHTML = docLinkHtml;\n","        element.appendChild(docLink);\n","      }\n","    </script>\n","  </div>\n","\n","\n","<div id=\"df-a17dfe98-d653-4e51-b7a3-cd8c914426d1\">\n","  <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-a17dfe98-d653-4e51-b7a3-cd8c914426d1')\"\n","            title=\"Suggest charts.\"\n","            style=\"display:none;\">\n","\n","<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n","     width=\"24px\">\n","    <g>\n","        <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n","    </g>\n","</svg>\n","  </button>\n","\n","<style>\n","  .colab-df-quickchart {\n","    background-color: #E8F0FE;\n","    border: none;\n","    border-radius: 50%;\n","    cursor: pointer;\n","    display: none;\n","    fill: #1967D2;\n","    height: 32px;\n","    padding: 0 0 0 0;\n","    width: 32px;\n","  }\n","\n","  .colab-df-quickchart:hover {\n","    background-color: #E2EBFA;\n","    box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n","    fill: #174EA6;\n","  }\n","\n","  [theme=dark] .colab-df-quickchart {\n","    background-color: #3B4455;\n","    fill: #D2E3FC;\n","  }\n","\n","  [theme=dark] .colab-df-quickchart:hover {\n","    background-color: #434B5C;\n","    box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n","    filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n","    fill: #FFFFFF;\n","  }\n","</style>\n","\n","  <script>\n","    async function quickchart(key) {\n","      const charts = await google.colab.kernel.invokeFunction(\n","          'suggestCharts', [key], {});\n","    }\n","    (() => {\n","      let quickchartButtonEl =\n","        document.querySelector('#df-a17dfe98-d653-4e51-b7a3-cd8c914426d1 button');\n","      quickchartButtonEl.style.display =\n","        google.colab.kernel.accessAllowed ? 'block' : 'none';\n","    })();\n","  </script>\n","</div>\n","    </div>\n","  </div>\n"]},"metadata":{},"execution_count":92}]},{"cell_type":"code","source":[],"metadata":{"id":"59Lm08EEqI8O"},"execution_count":null,"outputs":[]}]}
\ No newline at end of file