Last active
March 1, 2022 01:37
-
-
Save jcheong0428/60b748c9cdb39c3c8db0145682577f7f to your computer and use it in GitHub Desktop.
22W_PSYC53.ipynb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"nbformat": 4, | |
"nbformat_minor": 0, | |
"metadata": { | |
"colab": { | |
"name": "22W_PSYC53.ipynb", | |
"provenance": [], | |
"collapsed_sections": [], | |
"authorship_tag": "ABX9TyPBtPIecYUIARuFLdZf9r2K", | |
"include_colab_link": true | |
}, | |
"kernelspec": { | |
"name": "python3", | |
"display_name": "Python 3" | |
}, | |
"language_info": { | |
"name": "python" | |
} | |
}, | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "view-in-github", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"<a href=\"https://colab.research.google.com/gist/jcheong0428/60b748c9cdb39c3c8db0145682577f7f/22w_psyc53.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": [ | |
"# 1.1 Install OpenFace\n", | |
"Note that installation can take ~40 minutes. \n", | |
"\n", | |
"If you plan on using OpenPose, change your runtime to GPU. \n", | |
"Click \"Runtime\"->\"Change runtime type\" from the top menu and click \"GPU\". " | |
], | |
"metadata": { | |
"id": "JWIME_JHDchK" | |
} | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": { | |
"id": "yfpPuxEwqXCk" | |
}, | |
"outputs": [], | |
"source": [ | |
"import os\n", | |
"from os.path import exists, join, basename, splitext\n", | |
"\n", | |
"git_repo_url = 'https://github.com/TadasBaltrusaitis/OpenFace.git'\n", | |
"project_name = splitext(basename(git_repo_url))[0]\n", | |
"# clone openface\n", | |
"!git clone -q --depth 1 $git_repo_url\n", | |
"\n", | |
"# install python dependencies\n", | |
"!pip install -q youtube-dl\n", | |
"\n", | |
"# Finally, actually install OpenFace\n", | |
"!cd OpenFace && bash ./download_models.sh && sudo bash ./install.sh" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": [ | |
"## 1.2 Upload your video\n", | |
"Drop your video into the File section shown on the left. Check what your file name is, and change the \"output.mp4\" and \"output.avi\" to your video's file name.\n", | |
"\n", | |
"For example, if your video name is group1.mp4, change \"output.mp4\" to \"group1.mp3\", and \"output.avi\" to \"group1.avi\".\n" | |
], | |
"metadata": { | |
"id": "hGug5hg3d0dI" | |
} | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"# change output.mp4 to your group's video\n", | |
"!./OpenFace/build/bin/FaceLandmarkVidMulti -f output.mp4 -out_dir processed\n", | |
"# convert the result into MP4\n", | |
"!ffmpeg -y -loglevel info -i processed/output.avi output.mp4" | |
], | |
"metadata": { | |
"id": "9kY9-FtaDb47" | |
}, | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"def show_local_mp4_video(file_name, width=640, height=480):\n", | |
" import io\n", | |
" import base64\n", | |
" from IPython.display import HTML\n", | |
" video_encoded = base64.b64encode(io.open(file_name, 'rb').read())\n", | |
" return HTML(data='''<video width=\"{0}\" height=\"{1}\" alt=\"test\" controls>\n", | |
" <source src=\"data:video/mp4;base64,{2}\" type=\"video/mp4\" />\n", | |
" </video>'''.format(width, height, video_encoded.decode('ascii')))\n", | |
"\n", | |
"show_local_mp4_video('output.mp4', width=960, height=720)" | |
], | |
"metadata": { | |
"id": "FQMrovkROHw2" | |
}, | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": [ | |
"To avoid installing and processing this step, download the processed results in the \"processed\" folder from the \"Files\" tab on the left. The file will be named \"yourvideoname.csv\". Click Download from the three dots when you hover over the file. " | |
], | |
"metadata": { | |
"id": "N6R5fSUVILHJ" | |
} | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": [ | |
"# 2.1 Install OpenPose\n", | |
"\n", | |
"Before installing OpenPose change your runtime to GPU. \n", | |
"Click \"Runtime\"->\"Change runtime type\" from the top menu and click \"GPU\". \n", | |
"~20 minutes" | |
], | |
"metadata": { | |
"id": "wL0xnah4iDqZ" | |
} | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"import os\n", | |
"from os.path import exists, join, basename, splitext\n", | |
"\n", | |
"git_repo_url = 'https://github.com/CMU-Perceptual-Computing-Lab/openpose.git'\n", | |
"project_name = splitext(basename(git_repo_url))[0]\n", | |
"if not exists(project_name):\n", | |
" # see: https://github.com/CMU-Perceptual-Computing-Lab/openpose/issues/949\n", | |
" # install new CMake becaue of CUDA10\n", | |
" !wget -q https://cmake.org/files/v3.13/cmake-3.13.0-Linux-x86_64.tar.gz\n", | |
" !tar xfz cmake-3.13.0-Linux-x86_64.tar.gz --strip-components=1 -C /usr/local\n", | |
" # clone openpose\n", | |
" !git clone -q --depth 1 $git_repo_url\n", | |
" !sed -i 's/execute_process(COMMAND git checkout master WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}\\/3rdparty\\/caffe)/execute_process(COMMAND git checkout f019d0dfe86f49d1140961f8c7dec22130c83154 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}\\/3rdparty\\/caffe)/g' openpose/CMakeLists.txt\n", | |
" # install system dependencies\n", | |
" !apt-get -qq install -y libatlas-base-dev libprotobuf-dev libleveldb-dev libsnappy-dev libhdf5-serial-dev protobuf-compiler libgflags-dev libgoogle-glog-dev liblmdb-dev opencl-headers ocl-icd-opencl-dev libviennacl-dev\n", | |
" # install python dependencies\n", | |
" !pip install -q youtube-dl\n", | |
" # build openpose\n", | |
" !cd openpose && rm -rf build || true && mkdir build && cd build && cmake .. && make -j`nproc`\n", | |
" \n", | |
"from IPython.display import YouTubeVideo" | |
], | |
"metadata": { | |
"id": "MmxUVLglgHm4", | |
"outputId": "e7cbbff9-b639-4702-b02d-6ffa52c5b814", | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
} | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stdout", | |
"text": [ | |
"^C\n", | |
"\n", | |
"gzip: stdin: unexpected end of file\n", | |
"tar: Unexpected EOF in archive\n", | |
"tar: Unexpected EOF in archive\n", | |
"tar: Error is not recoverable: exiting now\n" | |
] | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": [ | |
"# 2.2 Upload your group's video & Extract poses from video. \n", | |
"Change \"video.mp4\" to your video name. " | |
], | |
"metadata": { | |
"id": "TVLO6nfRiWDv" | |
} | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"# Use openpose to extract poses\n", | |
"!cd openpose && ./build/examples/openpose/openpose.bin --video ../video.mp4 --write_json ./output/ --display 0 --write_video ../openpose.avi\n", | |
"# convert the result into MP4\n", | |
"!ffmpeg -y -loglevel info -i openpose.avi openpose.mp4" | |
], | |
"metadata": { | |
"id": "pvrSe9IVgHkk" | |
}, | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"def show_local_mp4_video(file_name, width=640, height=480):\n", | |
" import io\n", | |
" import base64\n", | |
" from IPython.display import HTML\n", | |
" video_encoded = base64.b64encode(io.open(file_name, 'rb').read())\n", | |
" return HTML(data='''<video width=\"{0}\" height=\"{1}\" alt=\"test\" controls>\n", | |
" <source src=\"data:video/mp4;base64,{2}\" type=\"video/mp4\" />\n", | |
" </video>'''.format(width, height, video_encoded.decode('ascii')))\n", | |
"\n", | |
"# visualize results\n", | |
"show_local_mp4_video('openpose.mp4', width=960, height=720)" | |
], | |
"metadata": { | |
"id": "EqWcLtA-egaj" | |
}, | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": [ | |
"OpenPose outputs are saved in the \"outuput\" folder. Download the entire folder by running the following code to save the results into a zip file. You can then click the zip file \"openpose_results.zip\" to download it. " | |
], | |
"metadata": { | |
"id": "dgu7zFAnJHX3" | |
} | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"!zip -r /content/openpose_results.zip /content/openpose/output\n" | |
], | |
"metadata": { | |
"id": "wHXfEVciJKpY" | |
}, | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": [ | |
"\n", | |
"\n", | |
"# 2.3 Analyze OpenPose data\n" | |
], | |
"metadata": { | |
"id": "IukgXavSeh9U" | |
} | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": [ | |
"If you are re-logging in, start from here by uploading the results zip file. You don't need to install OpenPose again. The code below will extract the zip file to the /openpose/output director. " | |
], | |
"metadata": { | |
"id": "4kSYoVqSuQO_" | |
} | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"!mkdir -p /content/openpose\n", | |
"!unzip -j openpose_results.zip -d /content/openpose/output" | |
], | |
"metadata": { | |
"id": "FFwym5diuPVI" | |
}, | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": [ | |
"After you have the data extracted, run the following code." | |
], | |
"metadata": { | |
"id": "KHXrpIq-uP9O" | |
} | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"import json, os, glob\n", | |
"import pandas as pd, numpy as np\n", | |
"import matplotlib.pyplot as plt\n", | |
"\n", | |
"\n", | |
"pose_2d_keys = {0: \"Nose\", 1: \"Neck\", 2: \"RShoulder\",\n", | |
"3: \"RElbow\", 4: \"RWrist\", 5: \"LShoulder\", 6: \"LElbow\",\n", | |
"7: \"LWrist\", 8: \"MidHip\", 9: \"RHip\",\n", | |
"10: \"RKnee\", 11: \"RAnkle\", 12: \"LHip\", 13: \"LKnee\", 14: \"LAnkle\", 15: \"REye\",\n", | |
"16: \"LEye\", 17: \"REar\", 18: \"LEar\", 19: \"LBigToe\", 20: \"LSmallToe\",\n", | |
"21: \"LHeel\", 22: \"RBigToe\", 23: \"RSmallToe\", 24: \"RHeel\", 25: \"Background\"}\n", | |
"pose2d_cols = np.ravel([[f'x_{pose_2d_keys[i]}',\n", | |
" f'y_{pose_2d_keys[i]}',\n", | |
" f'c_{pose_2d_keys[i]}'] for i in range(25)])\n", | |
"\n", | |
"def load_keypoints(fname, frame_no):\n", | |
" '''Load OpenPose keypoints output\n", | |
" Args:\n", | |
" fname: filename of OpenPose output keypoints\n", | |
" frame_no: frame number to be appended to file\n", | |
" Returns:\n", | |
" Pandas dataframe that includes filename, inferred frameno, value, key, keyID.\n", | |
" Example Use:\n", | |
" import glob, os\n", | |
" import pandas as pd\n", | |
" from tqdm import tqdm\n", | |
" fnames = np.sort(glob.glob('output/json/*_keypoints.json'))\n", | |
" new_df_fname = 'output/Sherlock.csv'\n", | |
" if not os.path.exists(new_df_fname):\n", | |
" for fname in tqdm(fnames[:5000]):\n", | |
" frame_no = os.path.split(fname)[1].split('_')[1]\n", | |
" load_keypoints(fname, frame_no = frame_no).to_csv(new_df_fname, index=False, header=False, mode='a')\n", | |
" else:\n", | |
" col_names = ['fname', 'frame', 'key','keyID', 'personID','value']\n", | |
" df = pd.read_csv(new_df_fname, header=None, names=col_names)\n", | |
" '''\n", | |
" with open(fname) as json_file:\n", | |
" data = json.load(json_file)\n", | |
" # check if no_people different from number of unique people ids\n", | |
" no_people = len(data['people'])\n", | |
" people_ids = [data['people'][i_people]['person_id'][0] for i_people in range(no_people)]\n", | |
" if no_people != len(np.unique(people_ids)):\n", | |
" people_ids = list(range(no_people))\n", | |
" df = pd.DataFrame()\n", | |
" for i_people in range(no_people):\n", | |
" for key in data['people'][i_people].keys():\n", | |
" value = data['people'][i_people][key]\n", | |
" # if key=='pose_keypoints_2d':\n", | |
" # # use appropriate name\n", | |
" # keyID = [pose2d_cols[i] for i in range(len(value))]\n", | |
" # else:\n", | |
" keyID = [f\"{key}_{str(i).zfill(3)}\" for i in range(len(value))]\n", | |
" df = pd.concat([df, pd.DataFrame({'fname': fname, 'frame': frame_no,\n", | |
" 'key': key, 'keyID': keyID,\n", | |
" 'personID': people_ids[i_people],\n", | |
" 'value': value\n", | |
" })])\n", | |
" return df.reset_index(drop=True)\n", | |
"\n", | |
"import glob, os\n", | |
"import pandas as pd\n", | |
"from tqdm import tqdm\n", | |
"fnames = np.sort(glob.glob('/content/openpose/output/*_keypoints.json'))\n", | |
"new_df_fname = 'pose_output.csv'\n", | |
"if not os.path.exists(new_df_fname):\n", | |
" for fname in tqdm(fnames):\n", | |
" frame_no = os.path.split(fname)[1].split('_')[1]\n", | |
" df = load_keypoints(fname, frame_no = frame_no).to_csv(new_df_fname, index=False, header=False, mode='a')\n", | |
"else:\n", | |
" col_names = ['fname', 'frame', 'key','keyID', 'personID','value']\n", | |
" df = pd.read_csv(new_df_fname, header=None, names=col_names)" | |
], | |
"metadata": { | |
"id": "BVI2NCtVgHhn" | |
}, | |
"execution_count": 1, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": [ | |
"See OpenPose doc for link between columnID and body point: https://cmu-perceptual-computing-lab.github.io/openpose/web/html/doc/md_doc_02_output.html\n", | |
"\n", | |
"The code below plots the movement of the sternum for each individual in the video. Note that you'll need to tweek the face_id to match th enumber of people in the video. " | |
], | |
"metadata": { | |
"id": "g1Hq1l7-esG1" | |
} | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"# Check if data loaded. \n", | |
"df.head()" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 270 | |
}, | |
"id": "UxRUpVG0GH7s", | |
"outputId": "a9461aa0-127a-403e-ec5f-98452efd59ae" | |
}, | |
"execution_count": 2, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/html": [ | |
"\n", | |
" <div id=\"df-1a610303-3701-40bd-b2b7-57bd8b39872f\">\n", | |
" <div 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>fname</th>\n", | |
" <th>frame</th>\n", | |
" <th>key</th>\n", | |
" <th>keyID</th>\n", | |
" <th>personID</th>\n", | |
" <th>value</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>/content/openpose/output/ExpVideo_000000000000...</td>\n", | |
" <td>0</td>\n", | |
" <td>person_id</td>\n", | |
" <td>person_id_000</td>\n", | |
" <td>0</td>\n", | |
" <td>-1.000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>/content/openpose/output/ExpVideo_000000000000...</td>\n", | |
" <td>0</td>\n", | |
" <td>pose_keypoints_2d</td>\n", | |
" <td>pose_keypoints_2d_000</td>\n", | |
" <td>0</td>\n", | |
" <td>562.671000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>/content/openpose/output/ExpVideo_000000000000...</td>\n", | |
" <td>0</td>\n", | |
" <td>pose_keypoints_2d</td>\n", | |
" <td>pose_keypoints_2d_001</td>\n", | |
" <td>0</td>\n", | |
" <td>453.773000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>/content/openpose/output/ExpVideo_000000000000...</td>\n", | |
" <td>0</td>\n", | |
" <td>pose_keypoints_2d</td>\n", | |
" <td>pose_keypoints_2d_002</td>\n", | |
" <td>0</td>\n", | |
" <td>0.842676</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>/content/openpose/output/ExpVideo_000000000000...</td>\n", | |
" <td>0</td>\n", | |
" <td>pose_keypoints_2d</td>\n", | |
" <td>pose_keypoints_2d_003</td>\n", | |
" <td>0</td>\n", | |
" <td>527.467000</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>\n", | |
" <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-1a610303-3701-40bd-b2b7-57bd8b39872f')\"\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 0 24 24\"\n", | |
" width=\"24px\">\n", | |
" <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n", | |
" <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n", | |
" </svg>\n", | |
" </button>\n", | |
" \n", | |
" <style>\n", | |
" .colab-df-container {\n", | |
" display:flex;\n", | |
" flex-wrap:wrap;\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", | |
" [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-1a610303-3701-40bd-b2b7-57bd8b39872f 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-1a610303-3701-40bd-b2b7-57bd8b39872f');\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", | |
" </div>\n", | |
" " | |
], | |
"text/plain": [ | |
" fname ... value\n", | |
"0 /content/openpose/output/ExpVideo_000000000000... ... -1.000000\n", | |
"1 /content/openpose/output/ExpVideo_000000000000... ... 562.671000\n", | |
"2 /content/openpose/output/ExpVideo_000000000000... ... 453.773000\n", | |
"3 /content/openpose/output/ExpVideo_000000000000... ... 0.842676\n", | |
"4 /content/openpose/output/ExpVideo_000000000000... ... 527.467000\n", | |
"\n", | |
"[5 rows x 6 columns]" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 2 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"# Scatterplot of neck\n", | |
"threshold = .85\n", | |
"filter_window = 60\n", | |
"\n", | |
"for personID in [0,1,2]:\n", | |
" persondf = df.query(\"key=='pose_keypoints_2d' and personID==@personID\") \n", | |
" cs_index = persondf.query(\"keyID=='pose_keypoints_2d_002' and value>@threshold\").index\n", | |
"\n", | |
" xs = persondf.loc[cs_index-2]['value'].rolling(filter_window).median(center=True).values\n", | |
" ys = persondf.loc[cs_index-1]['value'].rolling(filter_window).median(center=True).values\n", | |
" \n", | |
" plt.scatter(xs, ys, s=1, label=personID)\n", | |
"plt.legend()\n", | |
"plt.axis('equal')\n", | |
"plt.xlim([0, 1920])\n", | |
"plt.ylim([1080,0])\n", | |
"plt.show()" | |
], | |
"metadata": { | |
"id": "z8OKndioed5D", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 269 | |
}, | |
"outputId": "a6255d4d-6758-4cad-84fb-9f095852cd4b" | |
}, | |
"execution_count": 3, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<Figure size 432x288 with 1 Axes>" | |
] | |
}, | |
"metadata": { | |
"needs_background": "light" | |
} | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": [ | |
"# 3.1 Video Event Segmentation Tool \n", | |
"\n", | |
"\n", | |
"* [Click this link to use the tool](https://jinhyuncheong.com/vest/vest.html)\n", | |
"* [How to use the tool](https://towardsdatascience.com/how-to-use-vest-a-free-online-tool-for-segmenting-video-clips-a6ec50e29971?sk=2065cb12567832eef625bbba810543b6)\n", | |
"* How to analyze the output (shown below)\n", | |
"\n", | |
"\n" | |
], | |
"metadata": { | |
"id": "UDvkdm_WgH-9" | |
} | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": [ | |
"1. After you are done annotating, download your results with the \"Download results\" button. You will get a \"segmentation_results.json\" file in your download folder. \n", | |
"2. Drag & drop this file into the Files menu on your right. This will upload the file to Colab. \n", | |
"3. Run the following code below to get the outputs in a table format and plot the speech times. " | |
], | |
"metadata": { | |
"id": "cLocy-50goQz" | |
} | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"import pandas as pd\n", | |
"\n", | |
"def parse_vest_json(f):\n", | |
" \"\"\"Parse json output from VEST\n", | |
"\n", | |
" Args:\n", | |
" f: path to VEST json output\n", | |
" \n", | |
" Returns:\n", | |
" segmentations dataframe\n", | |
" points dataframe\n", | |
" \"\"\"\n", | |
" seg_df, pts_df = pd.DataFrame(), pd.DataFrame()\n", | |
"\n", | |
" df = pd.read_json(f, lines=True)\n", | |
" seg_cols = [col for col in df.columns if 'segment' in col]\n", | |
" _seg_df = df[seg_cols].dropna().T\n", | |
" for rowix, row in _seg_df.iterrows():\n", | |
" seg_df = pd.concat([seg_df, pd.DataFrame(row.values[0],index=[row.name])])\n", | |
"\n", | |
" pts_cols = [col for col in df.columns if 'point' in col]\n", | |
" _pts_df = df[pts_cols].dropna().T\n", | |
" for rowix, row in _pts_df.iterrows():\n", | |
" pts_df = pd.concat([pts_df, pd.DataFrame(row.values[0], index=[row.name])])\n", | |
" return seg_df, pts_df\n", | |
"\n", | |
"\n", | |
"path_to_file = \"/content/segmentation_results.json\"\n", | |
"seg_df, pts_df = parse_vest_json(f=path_to_file)\n", | |
"display(seg_df.head(), pts_df.head()) # Show the first few lines. " | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 221 | |
}, | |
"id": "MxJDRii8qgDa", | |
"outputId": "404deed0-8a7b-494d-aead-3e747090efce" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/html": [ | |
"\n", | |
" <div id=\"df-c40c6506-e1ca-4a83-8773-2c5775a3f219\">\n", | |
" <div 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>startTime</th>\n", | |
" <th>endTime</th>\n", | |
" <th>id</th>\n", | |
" <th>labelText</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>peaks.segment.0</th>\n", | |
" <td>1.866666</td>\n", | |
" <td>50.858667</td>\n", | |
" <td>peaks.segment.0</td>\n", | |
" <td>Speaker 1</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>peaks.segment.2</th>\n", | |
" <td>52.773333</td>\n", | |
" <td>103.168000</td>\n", | |
" <td>peaks.segment.2</td>\n", | |
" <td>Speaker 2</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>peaks.segment.3</th>\n", | |
" <td>103.594667</td>\n", | |
" <td>138.069333</td>\n", | |
" <td>peaks.segment.3</td>\n", | |
" <td>Speaker 3</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>peaks.segment.4</th>\n", | |
" <td>142.812303</td>\n", | |
" <td>144.469333</td>\n", | |
" <td>peaks.segment.4</td>\n", | |
" <td>Speaker 1</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>peaks.segment.5</th>\n", | |
" <td>144.725333</td>\n", | |
" <td>147.114667</td>\n", | |
" <td>peaks.segment.5</td>\n", | |
" <td>Speaker 2</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>\n", | |
" <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-c40c6506-e1ca-4a83-8773-2c5775a3f219')\"\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 0 24 24\"\n", | |
" width=\"24px\">\n", | |
" <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n", | |
" <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n", | |
" </svg>\n", | |
" </button>\n", | |
" \n", | |
" <style>\n", | |
" .colab-df-container {\n", | |
" display:flex;\n", | |
" flex-wrap:wrap;\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", | |
" [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-c40c6506-e1ca-4a83-8773-2c5775a3f219 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-c40c6506-e1ca-4a83-8773-2c5775a3f219');\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", | |
" </div>\n", | |
" " | |
], | |
"text/plain": [ | |
" startTime endTime id labelText\n", | |
"peaks.segment.0 1.866666 50.858667 peaks.segment.0 Speaker 1\n", | |
"peaks.segment.2 52.773333 103.168000 peaks.segment.2 Speaker 2\n", | |
"peaks.segment.3 103.594667 138.069333 peaks.segment.3 Speaker 3\n", | |
"peaks.segment.4 142.812303 144.469333 peaks.segment.4 Speaker 1\n", | |
"peaks.segment.5 144.725333 147.114667 peaks.segment.5 Speaker 2" | |
] | |
}, | |
"metadata": {} | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/html": [ | |
"\n", | |
" <div id=\"df-2327bbf1-6119-4991-873d-935adc21580e\">\n", | |
" <div 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", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>\n", | |
" <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-2327bbf1-6119-4991-873d-935adc21580e')\"\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 0 24 24\"\n", | |
" width=\"24px\">\n", | |
" <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n", | |
" <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n", | |
" </svg>\n", | |
" </button>\n", | |
" \n", | |
" <style>\n", | |
" .colab-df-container {\n", | |
" display:flex;\n", | |
" flex-wrap:wrap;\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", | |
" [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-2327bbf1-6119-4991-873d-935adc21580e 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-2327bbf1-6119-4991-873d-935adc21580e');\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", | |
" </div>\n", | |
" " | |
], | |
"text/plain": [ | |
"Empty DataFrame\n", | |
"Columns: []\n", | |
"Index: []" | |
] | |
}, | |
"metadata": {} | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": [ | |
"# 3.2 Plot how each person was speaking." | |
], | |
"metadata": { | |
"id": "wf4G-7QKhHlu" | |
} | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"import matplotlib.pyplot as plt\n", | |
"yvaldict = {'Speaker 1': {'ymin':0, 'ymax':.333, 'color': 'b'}, \n", | |
" 'Speaker 2':{'ymin': .333, 'ymax':.666, 'color': 'r'} , \n", | |
" 'Speaker 3': {'ymin': .666, 'ymax':.999, 'color': 'k'}}\n", | |
"# plot segmentation results.\n", | |
"f,ax = plt.subplots(figsize=(15,2))\n", | |
"for speaker in yvaldict.keys():\n", | |
" for rowix, row in seg_df.query('labelText==@speaker').iterrows():\n", | |
" ax.fill_betweenx([yvaldict[row.labelText]['ymin'], yvaldict[row.labelText]['ymax']],\n", | |
" row.startTime, row.endTime, color=yvaldict[row.labelText]['color']\n", | |
" )\n", | |
"\n", | |
"# plot points results\n", | |
"_ = [ax.axvline(row.startTime, linestyle='--') for rowix, row in pts_df.iterrows()]\n", | |
"\n", | |
"# add speech portion info \n", | |
"seg_df['duration'] = seg_df['endTime']-seg_df['startTime']\n", | |
"speechportion = seg_df.groupby('labelText').sum()/seg_df.groupby('labelText').sum().sum()\n", | |
"speechportion = speechportion['duration']\n", | |
"\n", | |
"ax.set(xlabel='Time (sec)', title=f\"Group XX\\n\\\n", | |
"Speech time distributions: S1 {speechportion['Speaker 1']:.2f}, \\\n", | |
"S2 {speechportion['Speaker 2']:.2f}, S3 {speechportion['Speaker 3']:.2f}\", ylabel=\"Speaker\")\n", | |
"ax.set(yticks=[.15, .5, .85], yticklabels=[\"S1\", \"S2\", \"s3\"])\n", | |
"plt.show()" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 202 | |
}, | |
"id": "4j46qFW_AP29", | |
"outputId": "2cdc0c0c-01ad-4585-e006-1ceacca94f3c" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<Figure size 1080x144 with 1 Axes>" | |
] | |
}, | |
"metadata": { | |
"needs_background": "light" | |
} | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": [ | |
"# 3.3 Print out how long each person spoke. " | |
], | |
"metadata": { | |
"id": "UyLSPDAyhm7m" | |
} | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"seg_df = seg_df.assign(duration = seg_df['endTime']-seg_df['startTime'])\n", | |
"seg_df.groupby('labelText').sum()[['duration']]" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 175 | |
}, | |
"id": "k8qpd4R7AUI6", | |
"outputId": "17c3af49-5692-4559-bd87-b256073a9969" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/html": [ | |
"\n", | |
" <div id=\"df-78e4fb37-0d7f-4a97-a494-50527963e54b\">\n", | |
" <div 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>duration</th>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>labelText</th>\n", | |
" <th></th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>Speaker 1</th>\n", | |
" <td>79.995635</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>Speaker 2</th>\n", | |
" <td>156.776076</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>Speaker 3</th>\n", | |
" <td>78.014459</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>\n", | |
" <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-78e4fb37-0d7f-4a97-a494-50527963e54b')\"\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 0 24 24\"\n", | |
" width=\"24px\">\n", | |
" <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n", | |
" <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n", | |
" </svg>\n", | |
" </button>\n", | |
" \n", | |
" <style>\n", | |
" .colab-df-container {\n", | |
" display:flex;\n", | |
" flex-wrap:wrap;\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", | |
" [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-78e4fb37-0d7f-4a97-a494-50527963e54b 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-78e4fb37-0d7f-4a97-a494-50527963e54b');\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", | |
" </div>\n", | |
" " | |
], | |
"text/plain": [ | |
" duration\n", | |
"labelText \n", | |
"Speaker 1 79.995635\n", | |
"Speaker 2 156.776076\n", | |
"Speaker 3 78.014459" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 30 | |
} | |
] | |
} | |
] | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment