{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/theorousseaux/Documents/Hackathon/FitnessEquation/venv/lib/python3.9/site-packages/urllib3/__init__.py:35: NotOpenSSLWarning: urllib3 v2 only supports OpenSSL 1.1.1+, currently the 'ssl' module is compiled with 'LibreSSL 2.8.3'. See: https://github.com/urllib3/urllib3/issues/3020\n", " warnings.warn(\n" ] } ], "source": [ "from ultralytics import YOLO\n", "import numpy as np" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "id_joints_dict = {0: 'nose',\n", " 1: 'left_eye',\n", " 2: 'right_eye',\n", " 3: 'left_ear',\n", " 4: 'right_ear',\n", " 5: 'left_shoulder',\n", " 6: 'right_shoulder',\n", " 7: 'left_elbow',\n", " 8: 'right_elbow',\n", " 9: 'left_wrist',\n", " 10: 'right_wrist',\n", " 11: 'left_hip',\n", " 12: 'right_hip',\n", " 13: 'left_knee',\n", " 14: 'right_knee',\n", " 15: 'left_ankle',\n", " 16: 'right_ankle'}\n", "joints_id_dict = {v: k for k, v in id_joints_dict.items()}" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "import os\n", "import json\n", "\n", "model = YOLO('yolov8n-pose.pt')\n", "\n", "def get_keypoints_from_keypoints(video_path):\n", " save_folder='tmp'\n", " os.makedirs(save_folder, exist_ok=True)\n", " keypoints = []\n", " results = model(video_path, save=True, show_conf=False, show_boxes=False)\n", " for (i, frame) in enumerate(results):\n", " frame_dict = {}\n", " frame_dict['frame'] = i\n", " frame_dict['keypoints'] = frame.keypoints.xy[0].tolist()\n", " keypoints.append(frame_dict)\n", "\n", " file_path = os.path.join(save_folder, 'keypoints.json')\n", " with open(file_path, 'w') as f:\n", " json.dump(keypoints, f)\n", " return file_path" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "\n", "WARNING ⚠️ inference results will accumulate in RAM unless `stream=True` is passed, causing potential out-of-memory\n", "errors for large sources or long-running streams and videos. See https://docs.ultralytics.com/modes/predict/ for help.\n", "\n", "Example:\n", " results = model(source=..., stream=True) # generator of Results objects\n", " for r in results:\n", " boxes = r.boxes # Boxes object for bbox outputs\n", " masks = r.masks # Masks object for segment masks outputs\n", " probs = r.probs # Class probabilities for classification outputs\n", "\n", "video 1/1 (frame 1/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 230.4ms\n", "video 1/1 (frame 2/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 263.6ms\n", "video 1/1 (frame 3/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 191.3ms\n", "video 1/1 (frame 4/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 477.2ms\n", "video 1/1 (frame 5/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 258.6ms\n", "video 1/1 (frame 6/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 398.7ms\n", "video 1/1 (frame 7/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 188.5ms\n", "video 1/1 (frame 8/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 149.0ms\n", "video 1/1 (frame 9/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 161.3ms\n", "video 1/1 (frame 10/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 176.9ms\n", "video 1/1 (frame 11/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 164.3ms\n", "video 1/1 (frame 12/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 203.6ms\n", "video 1/1 (frame 13/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 135.6ms\n", "video 1/1 (frame 14/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 154.7ms\n", "video 1/1 (frame 15/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 144.6ms\n", "video 1/1 (frame 16/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 138.3ms\n", "video 1/1 (frame 17/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 137.0ms\n", "video 1/1 (frame 18/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 188.8ms\n", "video 1/1 (frame 19/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 232.4ms\n", "video 1/1 (frame 20/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 172.6ms\n", "video 1/1 (frame 21/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 151.3ms\n", "video 1/1 (frame 22/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 139.4ms\n", "video 1/1 (frame 23/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 414.1ms\n", "video 1/1 (frame 24/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 178.9ms\n", "video 1/1 (frame 25/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 160.2ms\n", "video 1/1 (frame 26/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 157.9ms\n", "video 1/1 (frame 27/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 119.3ms\n", "video 1/1 (frame 28/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 115.3ms\n", "video 1/1 (frame 29/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 126.8ms\n", "video 1/1 (frame 30/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 120.9ms\n", "video 1/1 (frame 31/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 135.1ms\n", "video 1/1 (frame 32/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 141.1ms\n", "video 1/1 (frame 33/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 172.1ms\n", "video 1/1 (frame 34/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 183.0ms\n", "video 1/1 (frame 35/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 119.2ms\n", "video 1/1 (frame 36/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 158.8ms\n", "video 1/1 (frame 37/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 255.3ms\n", "video 1/1 (frame 38/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 188.8ms\n", "video 1/1 (frame 39/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 187.2ms\n", "video 1/1 (frame 40/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 155.8ms\n", "video 1/1 (frame 41/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 168.0ms\n", "video 1/1 (frame 42/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 323.6ms\n", "video 1/1 (frame 43/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 261.0ms\n", "video 1/1 (frame 44/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 156.9ms\n", "video 1/1 (frame 45/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 151.8ms\n", "video 1/1 (frame 46/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 112.9ms\n", "video 1/1 (frame 47/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 125.9ms\n", "video 1/1 (frame 48/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 129.6ms\n", "video 1/1 (frame 49/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 142.0ms\n", "video 1/1 (frame 50/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 142.4ms\n", "video 1/1 (frame 51/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 156.3ms\n", "video 1/1 (frame 52/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 159.2ms\n", "video 1/1 (frame 53/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 162.1ms\n", "video 1/1 (frame 54/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 133.4ms\n", "video 1/1 (frame 55/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 166.4ms\n", "video 1/1 (frame 56/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 215.8ms\n", "video 1/1 (frame 57/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 197.6ms\n", "video 1/1 (frame 58/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 170.0ms\n", "video 1/1 (frame 59/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 120.6ms\n", "video 1/1 (frame 60/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 125.3ms\n", "video 1/1 (frame 61/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 184.4ms\n", "video 1/1 (frame 62/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 142.0ms\n", "video 1/1 (frame 63/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 126.3ms\n", "video 1/1 (frame 64/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 118.1ms\n", "video 1/1 (frame 65/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 120.3ms\n", "video 1/1 (frame 66/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 150.5ms\n", "video 1/1 (frame 67/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 125.5ms\n", "video 1/1 (frame 68/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 184.2ms\n", "video 1/1 (frame 69/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 148.8ms\n", "video 1/1 (frame 70/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 141.5ms\n", "video 1/1 (frame 71/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 126.0ms\n", "video 1/1 (frame 72/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 123.8ms\n", "video 1/1 (frame 73/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 129.9ms\n", "video 1/1 (frame 74/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 132.3ms\n", "video 1/1 (frame 75/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 124.5ms\n", "video 1/1 (frame 76/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 182.3ms\n", "video 1/1 (frame 77/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 135.3ms\n", "video 1/1 (frame 78/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 152.5ms\n", "video 1/1 (frame 79/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 127.7ms\n", "video 1/1 (frame 80/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 166.9ms\n", "video 1/1 (frame 81/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 220.3ms\n", "video 1/1 (frame 82/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 231.6ms\n", "video 1/1 (frame 83/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 124.3ms\n", "video 1/1 (frame 84/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 145.9ms\n", "video 1/1 (frame 85/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 137.3ms\n", "video 1/1 (frame 86/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 133.3ms\n", "video 1/1 (frame 87/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 138.1ms\n", "video 1/1 (frame 88/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 139.4ms\n", "video 1/1 (frame 89/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 135.2ms\n", "video 1/1 (frame 90/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 329.4ms\n", "video 1/1 (frame 91/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 132.1ms\n", "video 1/1 (frame 92/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 173.0ms\n", "video 1/1 (frame 93/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 164.7ms\n", "video 1/1 (frame 94/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 317.4ms\n", "video 1/1 (frame 95/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 179.2ms\n", "video 1/1 (frame 96/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 183.4ms\n", "video 1/1 (frame 97/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 133.8ms\n", "video 1/1 (frame 98/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 181.9ms\n", "video 1/1 (frame 99/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 187.5ms\n", "video 1/1 (frame 100/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 244.7ms\n", "video 1/1 (frame 101/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 149.7ms\n", "video 1/1 (frame 102/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 154.9ms\n", "video 1/1 (frame 103/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 152.3ms\n", "video 1/1 (frame 104/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 178.2ms\n", "video 1/1 (frame 105/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 141.9ms\n", "video 1/1 (frame 106/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 129.7ms\n", "video 1/1 (frame 107/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 177.9ms\n", "video 1/1 (frame 108/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 205.1ms\n", "video 1/1 (frame 109/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 142.6ms\n", "video 1/1 (frame 110/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 210.7ms\n", "video 1/1 (frame 111/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 232.0ms\n", "video 1/1 (frame 112/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 144.9ms\n", "video 1/1 (frame 113/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 144.8ms\n", "video 1/1 (frame 114/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 137.1ms\n", "video 1/1 (frame 115/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 129.4ms\n", "video 1/1 (frame 116/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 163.9ms\n", "video 1/1 (frame 117/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 136.4ms\n", "video 1/1 (frame 118/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 125.8ms\n", "video 1/1 (frame 119/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 136.8ms\n", "video 1/1 (frame 120/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 169.3ms\n", "video 1/1 (frame 121/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 166.7ms\n", "video 1/1 (frame 122/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 128.1ms\n", "video 1/1 (frame 123/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 134.1ms\n", "video 1/1 (frame 124/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 143.6ms\n", "video 1/1 (frame 125/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 134.9ms\n", "video 1/1 (frame 126/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 131.3ms\n", "video 1/1 (frame 127/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 128.9ms\n", "video 1/1 (frame 128/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 145.7ms\n", "video 1/1 (frame 129/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 159.0ms\n", "video 1/1 (frame 130/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 128.7ms\n", "video 1/1 (frame 131/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 125.3ms\n", "video 1/1 (frame 132/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 137.2ms\n", "video 1/1 (frame 133/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 133.8ms\n", "video 1/1 (frame 134/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 160.2ms\n", "video 1/1 (frame 135/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 126.8ms\n", "video 1/1 (frame 136/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 137.7ms\n", "video 1/1 (frame 137/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 136.5ms\n", "video 1/1 (frame 138/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 138.3ms\n", "video 1/1 (frame 139/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 121.5ms\n", "video 1/1 (frame 140/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 139.0ms\n", "video 1/1 (frame 141/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 130.4ms\n", "video 1/1 (frame 142/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 126.8ms\n", "video 1/1 (frame 143/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 128.8ms\n", "video 1/1 (frame 144/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 138.0ms\n", "video 1/1 (frame 145/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 140.6ms\n", "video 1/1 (frame 146/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 152.9ms\n", "video 1/1 (frame 147/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 222.8ms\n", "video 1/1 (frame 148/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 164.2ms\n", "video 1/1 (frame 149/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 160.0ms\n", "video 1/1 (frame 150/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 153.4ms\n", "video 1/1 (frame 151/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 160.7ms\n", "video 1/1 (frame 152/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 224.6ms\n", "video 1/1 (frame 153/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 225.8ms\n", "video 1/1 (frame 154/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 191.1ms\n", "video 1/1 (frame 155/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 174.6ms\n", "video 1/1 (frame 156/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 235.8ms\n", "video 1/1 (frame 157/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 330.0ms\n", "video 1/1 (frame 158/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 323.1ms\n", "video 1/1 (frame 159/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 315.6ms\n", "video 1/1 (frame 160/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 191.4ms\n", "video 1/1 (frame 161/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 175.8ms\n", "video 1/1 (frame 162/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 297.0ms\n", "video 1/1 (frame 163/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 226.6ms\n", "video 1/1 (frame 164/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 151.3ms\n", "video 1/1 (frame 165/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 138.7ms\n", "video 1/1 (frame 166/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 257.8ms\n", "video 1/1 (frame 167/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 159.7ms\n", "video 1/1 (frame 168/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 160.9ms\n", "video 1/1 (frame 169/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 200.8ms\n", "video 1/1 (frame 170/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 139.3ms\n", "video 1/1 (frame 171/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 245.1ms\n", "video 1/1 (frame 172/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 228.0ms\n", "video 1/1 (frame 173/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 134.4ms\n", "video 1/1 (frame 174/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 131.9ms\n", "video 1/1 (frame 175/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 148.3ms\n", "video 1/1 (frame 176/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 134.1ms\n", "video 1/1 (frame 177/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 190.5ms\n", "video 1/1 (frame 178/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 133.6ms\n", "video 1/1 (frame 179/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 137.1ms\n", "video 1/1 (frame 180/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 137.6ms\n", "video 1/1 (frame 181/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 135.5ms\n", "video 1/1 (frame 182/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 135.9ms\n", "video 1/1 (frame 183/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 128.7ms\n", "video 1/1 (frame 184/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 158.0ms\n", "video 1/1 (frame 185/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 188.6ms\n", "video 1/1 (frame 186/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 126.7ms\n", "video 1/1 (frame 187/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 244.6ms\n", "video 1/1 (frame 188/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 277.3ms\n", "video 1/1 (frame 189/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 163.4ms\n", "video 1/1 (frame 190/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 132.9ms\n", "video 1/1 (frame 191/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 150.2ms\n", "video 1/1 (frame 192/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 165.9ms\n", "video 1/1 (frame 193/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 135.2ms\n", "video 1/1 (frame 194/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 172.0ms\n", "video 1/1 (frame 195/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 201.4ms\n", "video 1/1 (frame 196/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 143.6ms\n", "video 1/1 (frame 197/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 139.0ms\n", "video 1/1 (frame 198/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 134.2ms\n", "video 1/1 (frame 199/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 273.2ms\n", "video 1/1 (frame 200/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 194.1ms\n", "video 1/1 (frame 201/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 166.9ms\n", "video 1/1 (frame 202/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 204.6ms\n", "video 1/1 (frame 203/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 244.5ms\n", "video 1/1 (frame 204/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 170.2ms\n", "video 1/1 (frame 205/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 167.5ms\n", "video 1/1 (frame 206/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 129.4ms\n", "video 1/1 (frame 207/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 130.1ms\n", "video 1/1 (frame 208/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 142.4ms\n", "video 1/1 (frame 209/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 139.7ms\n", "video 1/1 (frame 210/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 136.7ms\n", "video 1/1 (frame 211/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 150.0ms\n", "video 1/1 (frame 212/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 149.7ms\n", "video 1/1 (frame 213/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 135.6ms\n", "video 1/1 (frame 214/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 311.5ms\n", "video 1/1 (frame 215/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 201.6ms\n", "video 1/1 (frame 216/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 169.3ms\n", "video 1/1 (frame 217/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 184.5ms\n", "video 1/1 (frame 218/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 147.5ms\n", "video 1/1 (frame 219/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 134.3ms\n", "video 1/1 (frame 220/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 128.6ms\n", "video 1/1 (frame 221/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 139.0ms\n", "video 1/1 (frame 222/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 154.0ms\n", "video 1/1 (frame 223/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 144.0ms\n", "video 1/1 (frame 224/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 129.6ms\n", "video 1/1 (frame 225/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 128.8ms\n", "video 1/1 (frame 226/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 164.6ms\n", "video 1/1 (frame 227/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 431.3ms\n", "video 1/1 (frame 228/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 166.4ms\n", "video 1/1 (frame 229/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 130.6ms\n", "video 1/1 (frame 230/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 184.5ms\n", "video 1/1 (frame 231/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 178.2ms\n", "video 1/1 (frame 232/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 129.9ms\n", "video 1/1 (frame 233/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 147.2ms\n", "video 1/1 (frame 234/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 161.7ms\n", "video 1/1 (frame 235/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 160.9ms\n", "video 1/1 (frame 236/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 135.7ms\n", "video 1/1 (frame 237/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 153.6ms\n", "video 1/1 (frame 238/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 254.3ms\n", "video 1/1 (frame 239/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 160.6ms\n", "video 1/1 (frame 240/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 211.3ms\n", "video 1/1 (frame 241/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 228.0ms\n", "video 1/1 (frame 242/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 222.4ms\n", "video 1/1 (frame 243/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 151.3ms\n", "video 1/1 (frame 244/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 161.4ms\n", "video 1/1 (frame 245/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 147.0ms\n", "video 1/1 (frame 246/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 156.6ms\n", "video 1/1 (frame 247/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 141.1ms\n", "video 1/1 (frame 248/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 162.3ms\n", "video 1/1 (frame 249/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 130.8ms\n", "video 1/1 (frame 250/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 134.4ms\n", "video 1/1 (frame 251/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 198.2ms\n", "video 1/1 (frame 252/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 167.7ms\n", "video 1/1 (frame 253/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 160.2ms\n", "video 1/1 (frame 254/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 135.4ms\n", "video 1/1 (frame 255/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 184.6ms\n", "video 1/1 (frame 256/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 228.7ms\n", "video 1/1 (frame 257/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 156.7ms\n", "video 1/1 (frame 258/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 157.1ms\n", "video 1/1 (frame 259/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 238.6ms\n", "video 1/1 (frame 260/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 135.1ms\n", "video 1/1 (frame 261/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 412.2ms\n", "video 1/1 (frame 262/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 378.5ms\n", "video 1/1 (frame 263/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 141.5ms\n", "video 1/1 (frame 264/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 118.5ms\n", "video 1/1 (frame 265/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 201.7ms\n", "video 1/1 (frame 266/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 455.5ms\n", "video 1/1 (frame 267/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 204.4ms\n", "video 1/1 (frame 268/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 229.4ms\n", "video 1/1 (frame 269/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 318.1ms\n", "video 1/1 (frame 270/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 199.6ms\n", "video 1/1 (frame 271/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 201.7ms\n", "video 1/1 (frame 272/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 205.1ms\n", "video 1/1 (frame 273/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 218.1ms\n", "video 1/1 (frame 274/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 246.2ms\n", "video 1/1 (frame 275/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 194.4ms\n", "video 1/1 (frame 276/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 125.4ms\n", "video 1/1 (frame 277/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 135.2ms\n", "video 1/1 (frame 278/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 130.6ms\n", "video 1/1 (frame 279/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 117.9ms\n", "video 1/1 (frame 280/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 124.8ms\n", "video 1/1 (frame 281/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 124.1ms\n", "video 1/1 (frame 282/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 119.3ms\n", "video 1/1 (frame 283/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 117.4ms\n", "video 1/1 (frame 284/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 130.3ms\n", "video 1/1 (frame 285/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 127.5ms\n", "video 1/1 (frame 286/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 117.8ms\n", "video 1/1 (frame 287/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 160.0ms\n", "video 1/1 (frame 288/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 136.3ms\n", "video 1/1 (frame 289/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 135.7ms\n", "video 1/1 (frame 290/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 132.0ms\n", "video 1/1 (frame 291/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 273.5ms\n", "video 1/1 (frame 292/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 350.5ms\n", "video 1/1 (frame 293/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 392.9ms\n", "video 1/1 (frame 294/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 248.5ms\n", "video 1/1 (frame 295/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 229.2ms\n", "video 1/1 (frame 296/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 149.1ms\n", "video 1/1 (frame 297/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 182.2ms\n", "video 1/1 (frame 298/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 138.7ms\n", "video 1/1 (frame 299/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 162.7ms\n", "video 1/1 (frame 300/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 134.0ms\n", "video 1/1 (frame 301/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 123.2ms\n", "video 1/1 (frame 302/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 135.6ms\n", "video 1/1 (frame 303/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 173.2ms\n", "video 1/1 (frame 304/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 176.3ms\n", "video 1/1 (frame 305/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 245.3ms\n", "video 1/1 (frame 306/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 170.5ms\n", "video 1/1 (frame 307/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 127.9ms\n", "video 1/1 (frame 308/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 128.6ms\n", "video 1/1 (frame 309/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 125.0ms\n", "video 1/1 (frame 310/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 122.6ms\n", "video 1/1 (frame 311/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 127.6ms\n", "video 1/1 (frame 312/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 136.9ms\n", "video 1/1 (frame 313/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 133.0ms\n", "video 1/1 (frame 314/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 123.8ms\n", "video 1/1 (frame 315/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 125.8ms\n", "video 1/1 (frame 316/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 136.3ms\n", "video 1/1 (frame 317/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 133.4ms\n", "video 1/1 (frame 318/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 133.5ms\n", "video 1/1 (frame 319/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 139.8ms\n", "video 1/1 (frame 320/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 135.9ms\n", "video 1/1 (frame 321/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 131.1ms\n", "video 1/1 (frame 322/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 141.3ms\n", "video 1/1 (frame 323/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 125.6ms\n", "video 1/1 (frame 324/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 139.8ms\n", "video 1/1 (frame 325/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 137.7ms\n", "video 1/1 (frame 326/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 171.9ms\n", "video 1/1 (frame 327/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 129.8ms\n", "video 1/1 (frame 328/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 139.2ms\n", "video 1/1 (frame 329/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 132.2ms\n", "video 1/1 (frame 330/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 131.0ms\n", "video 1/1 (frame 331/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 158.7ms\n", "video 1/1 (frame 332/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 126.4ms\n", "video 1/1 (frame 333/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 128.0ms\n", "video 1/1 (frame 334/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 152.3ms\n", "video 1/1 (frame 335/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 138.4ms\n", "video 1/1 (frame 336/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 130.4ms\n", "video 1/1 (frame 337/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 126.2ms\n", "video 1/1 (frame 338/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 133.7ms\n", "video 1/1 (frame 339/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 136.8ms\n", "video 1/1 (frame 340/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 126.8ms\n", "video 1/1 (frame 341/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 128.9ms\n", "video 1/1 (frame 342/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 140.9ms\n", "video 1/1 (frame 343/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 131.6ms\n", "video 1/1 (frame 344/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 154.8ms\n", "video 1/1 (frame 345/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 126.1ms\n", "video 1/1 (frame 346/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 141.7ms\n", "video 1/1 (frame 347/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 131.4ms\n", "video 1/1 (frame 348/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 126.9ms\n", "video 1/1 (frame 349/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 132.4ms\n", "video 1/1 (frame 350/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 136.4ms\n", "video 1/1 (frame 351/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 133.2ms\n", "video 1/1 (frame 352/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 129.5ms\n", "video 1/1 (frame 353/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 128.4ms\n", "video 1/1 (frame 354/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 134.0ms\n", "video 1/1 (frame 355/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 130.8ms\n", "video 1/1 (frame 356/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 126.3ms\n", "video 1/1 (frame 357/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 141.0ms\n", "video 1/1 (frame 358/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 137.0ms\n", "video 1/1 (frame 359/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 130.3ms\n", "video 1/1 (frame 360/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 125.6ms\n", "video 1/1 (frame 361/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 124.5ms\n", "video 1/1 (frame 362/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 134.7ms\n", "video 1/1 (frame 363/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 131.3ms\n", "video 1/1 (frame 364/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 124.6ms\n", "video 1/1 (frame 365/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 129.5ms\n", "video 1/1 (frame 366/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 149.4ms\n", "video 1/1 (frame 367/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 149.8ms\n", "video 1/1 (frame 368/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 144.0ms\n", "video 1/1 (frame 369/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 147.2ms\n", "video 1/1 (frame 370/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 203.9ms\n", "video 1/1 (frame 371/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 149.9ms\n", "video 1/1 (frame 372/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 412.8ms\n", "video 1/1 (frame 373/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 198.5ms\n", "video 1/1 (frame 374/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 130.6ms\n", "video 1/1 (frame 375/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 144.8ms\n", "video 1/1 (frame 376/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 125.2ms\n", "video 1/1 (frame 377/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 139.9ms\n", "video 1/1 (frame 378/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 144.8ms\n", "video 1/1 (frame 379/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 152.5ms\n", "video 1/1 (frame 380/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 189.4ms\n", "video 1/1 (frame 381/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 121.4ms\n", "video 1/1 (frame 382/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 119.3ms\n", "video 1/1 (frame 383/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 119.2ms\n", "video 1/1 (frame 384/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 883.2ms\n", "video 1/1 (frame 385/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 163.8ms\n", "video 1/1 (frame 386/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 409.6ms\n", "video 1/1 (frame 387/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 166.2ms\n", "video 1/1 (frame 388/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 189.0ms\n", "video 1/1 (frame 389/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 129.4ms\n", "video 1/1 (frame 390/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 150.6ms\n", "video 1/1 (frame 391/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 180.5ms\n", "video 1/1 (frame 392/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 163.7ms\n", "video 1/1 (frame 393/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 127.2ms\n", "video 1/1 (frame 394/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 127.9ms\n", "video 1/1 (frame 395/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 125.4ms\n", "video 1/1 (frame 396/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 157.1ms\n", "video 1/1 (frame 397/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 194.6ms\n", "video 1/1 (frame 398/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 150.1ms\n", "video 1/1 (frame 399/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 119.3ms\n", "video 1/1 (frame 400/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 140.9ms\n", "video 1/1 (frame 401/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 154.9ms\n", "video 1/1 (frame 402/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 140.4ms\n", "video 1/1 (frame 403/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 122.5ms\n", "video 1/1 (frame 404/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 174.9ms\n", "video 1/1 (frame 405/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 126.5ms\n", "Speed: 6.9ms preprocess, 168.8ms inference, 1.3ms postprocess per image at shape (1, 3, 640, 576)\n", "Results saved to \u001b[1m/Users/theorousseaux/Documents/Hackathon/FitnessEquation/runs/pose/predict10\u001b[0m\n" ] } ], "source": [ "file_path = get_keypoints_from_keypoints('../../data/pose/squat.mp4')" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [], "source": [ "def calculate_angle(a, b, c):\n", "\n", " \"\"\"\n", " Calculates the angle between three joints.\n", "\n", " Args:\n", " a (tuple): coordinates of the first joint\n", " b (tuple): coordinates of the second joint\n", " c (tuple): coordinates of the third joint\n", "\n", " Returns:\n", " angle (float): angle between the three joints\n", " \"\"\"\n", " \n", " ba = np.array(a) - np.array(b)\n", " bc = np.array(c) - np.array(b)\n", "\n", " cosine_angle = np.dot(ba, bc) / (np.linalg.norm(ba) * np.linalg.norm(bc))\n", " angle = np.arccos(cosine_angle)\n", "\n", " return np.degrees(angle)\n", "\n", "def compute_left_knee_angle(keypoints):\n", "\n", " \"\"\"\n", " Computes the knee angle.\n", "\n", " Args:\n", " keypoints (list): list of keypoints\n", "\n", " Returns:\n", " knee_angle (float): knee angle\n", " \"\"\"\n", "\n", " left_hip = keypoints[joints_id_dict['left_hip']]\n", " left_knee = keypoints[joints_id_dict['left_knee']]\n", " left_ankle = keypoints[joints_id_dict['left_ankle']]\n", "\n", " knee_angle = calculate_angle(left_hip, left_knee, left_ankle)\n", "\n", " return knee_angle\n", "\n", "def compute_right_knee_angle(keypoints):\n", " \n", " \"\"\"\n", " Computes the knee angle.\n", " \n", " Args:\n", " keypoints (list): list of keypoints\n", " \n", " Returns:\n", " knee_angle (float): knee angle\n", " \"\"\"\n", " \n", " right_hip = keypoints[joints_id_dict['right_hip']]\n", " right_knee = keypoints[joints_id_dict['right_knee']]\n", " right_ankle = keypoints[joints_id_dict['right_ankle']]\n", " \n", " knee_angle = calculate_angle(right_hip, right_knee, right_ankle)\n", " \n", " return knee_angle \n", "\n", "def moving_average(data, window_size):\n", "\n", " \"\"\"\n", " Computes the moving average of a list.\n", "\n", " Args:\n", " data (list): list of values\n", " window_size (int): size of the window\n", "\n", " Returns:\n", " avg (list): list of moving average values\n", " \"\"\"\n", "\n", " avg = []\n", " for i in range(len(data) - window_size + 1):\n", " avg.append(sum(data[i:i + window_size]) / window_size)\n", "\n", " return avg" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[166.86948323445398,\n", " 166.8841659671558,\n", " 166.89243964490635,\n", " 166.89759766904126,\n", " 166.89664163184258,\n", " 166.9030714891749,\n", " 166.90583181272711,\n", " 166.9052865913186,\n", " 166.90429725989497,\n", " 166.90391830442985,\n", " 166.9021203739705,\n", " 166.90134969961954,\n", " 166.9015497550319,\n", " 166.90332061203497,\n", " 166.9017919789185,\n", " 166.90078366101983,\n", " 166.90129921693529,\n", " 166.90182765564404,\n", " 166.9005366310771,\n", " 166.89838608408564,\n", " 166.8977663040462,\n", " 166.89319904933978,\n", " 166.88382332910516,\n", " 166.87587096214855,\n", " 166.8683282986173,\n", " 166.97604672661197,\n", " 167.0730517120081,\n", " 167.18113542921648,\n", " 167.30122453139967,\n", " 167.4138700025592,\n", " 167.29505655976004,\n", " 167.1737958056854,\n", " 167.0599211213337,\n", " 166.89407673527785,\n", " 166.72746683293673,\n", " 166.44028988155634,\n", " 165.84631854733718,\n", " 164.87497185994886,\n", " 163.89533811841477,\n", " 162.9201084650834,\n", " 161.9902869903691,\n", " 161.06332647746888,\n", " 159.89516457030768,\n", " 158.77983346447735,\n", " 157.66129645495508,\n", " 155.93208453293258,\n", " 154.5247472243725,\n", " 153.1959085875595,\n", " 151.8544868559208,\n", " 150.17419533991637,\n", " 148.68183254892014,\n", " 147.17776201149687,\n", " 145.15111109833953,\n", " 143.12003120746905,\n", " 140.74593397197924,\n", " 138.9828284196009,\n", " 137.21995150207465,\n", " 135.23278876816366,\n", " 133.25318397449357,\n", " 130.98188665377995,\n", " 128.7101194020159,\n", " 125.91247794985857,\n", " 123.8748553444868,\n", " 121.84503756697409,\n", " 120.24337039040623,\n", " 118.6464224893501,\n", " 116.59220300369623,\n", " 115.05414277166624,\n", " 113.51976922260337,\n", " 112.14320516889234,\n", " 110.77046515791639,\n", " 109.61935139275097,\n", " 108.46841055216343,\n", " 107.1084940591218,\n", " 105.67173478846027,\n", " 104.22791431124196,\n", " 103.2257590823986,\n", " 102.20813322122221,\n", " 100.98556814148648,\n", " 100.24986588986651,\n", " 99.49582631038068,\n", " 98.8044930386457,\n", " 98.12391878939285,\n", " 97.59609736384502,\n", " 97.06037983596504,\n", " 95.52224092448174,\n", " 93.99400460952594,\n", " 92.48397435615067,\n", " 91.06316948560288,\n", " 89.62063573204212,\n", " 87.97992447885653,\n", " 86.58637557905105,\n", " 85.19836762551424,\n", " 83.61155732273326,\n", " 82.02365668619613,\n", " 81.33059070646732,\n", " 80.64265201866495,\n", " 79.69191036997367,\n", " 78.86551825739329,\n", " 78.05932957380577,\n", " 77.25142624739243,\n", " 76.4533974266805,\n", " 75.55667648467788,\n", " 74.90060350163135,\n", " 74.24956037979143,\n", " 73.73366636062937,\n", " 73.20381481358388,\n", " 72.95482051356619,\n", " 72.72670381899113,\n", " 72.58494785353189,\n", " 72.6508984959566,\n", " 72.68771613098622,\n", " 73.01137668115788,\n", " 73.32718772804921,\n", " 73.6635926707941,\n", " 73.96726303705151,\n", " 74.2731936300378,\n", " 74.63745276008909,\n", " 74.97734971381814,\n", " 75.29394979226676,\n", " 75.61576368220696,\n", " 76.20178522011447,\n", " 76.57658629420422,\n", " 76.98798755740994,\n", " 77.44858062734536,\n", " 77.92247003556713,\n", " 78.43298602098498,\n", " 78.88404603783984,\n", " 79.29334017337487,\n", " 79.62802598988934,\n", " 79.95368023341231,\n", " 79.95057747974367,\n", " 79.95574000946952,\n", " 80.0008358402226,\n", " 79.96975427117178,\n", " 79.93440357477047,\n", " 80.03981098942673,\n", " 80.12120292374134,\n", " 80.36229555699296,\n", " 80.6216783489024,\n", " 80.90212442327348,\n", " 81.44954794073348,\n", " 82.01505449757799,\n", " 82.6321305781617,\n", " 83.25210477625062,\n", " 84.04192061088247,\n", " 84.67947762607724,\n", " 85.32722207801346,\n", " 86.00413748568852,\n", " 86.66584929987808,\n", " 87.63853171300406,\n", " 88.43135391454788,\n", " 89.20850503817613,\n", " 90.38562475894692,\n", " 91.5779349441513,\n", " 93.16293796525547,\n", " 94.73831443611816,\n", " 96.76181008886013,\n", " 98.62286025900073,\n", " 100.48576475934598,\n", " 102.77037598233258,\n", " 105.06356485248027,\n", " 107.98968683253365,\n", " 110.40196543107666,\n", " 112.80745597979039,\n", " 114.95513493216345,\n", " 117.0945230913828,\n", " 119.52803622349684,\n", " 121.9612715958248,\n", " 125.25948537556853,\n", " 127.80498663874198,\n", " 130.35564241070944,\n", " 132.61727731551852,\n", " 134.88226129129083,\n", " 137.67728745874246,\n", " 140.16963578037445,\n", " 142.65944308627581,\n", " 144.72498377798874,\n", " 146.80708487060826,\n", " 148.2187238201503,\n", " 149.64520245552913,\n", " 151.12314481234463,\n", " 152.24173379715117,\n", " 153.3636279699433,\n", " 154.107973596754,\n", " 154.84919945780553,\n", " 155.9904214203122,\n", " 156.79332676094901,\n", " 157.68576379094245,\n", " 158.71626510943594,\n", " 159.72835110516306,\n", " 160.40510416152267,\n", " 161.08514546378115,\n", " 161.73096918865735,\n", " 162.22580333974454,\n", " 162.7180188758495,\n", " 163.16580612403223,\n", " 163.62919154661853,\n", " 164.04575255805656,\n", " 164.12738749861896,\n", " 164.2291102849912,\n", " 164.63011048778404,\n", " 165.039935571406,\n", " 165.48837874348766,\n", " 165.9381013104822,\n", " 166.38611515837766,\n", " 166.48238775712994,\n", " 166.56957179431862,\n", " 166.65021607242818,\n", " 166.73352459436217,\n", " 166.81730246658194,\n", " 166.86135025257067,\n", " 166.9009214731988,\n", " 166.9800174924186,\n", " 167.05375689009747,\n", " 167.14897683967558,\n", " 167.24283886723654,\n", " 167.13817783652604,\n", " 166.98636322001866,\n", " 166.8323820478459,\n", " 166.72395247406195,\n", " 166.63527806368126,\n", " 166.53192609052147,\n", " 166.36980373107846,\n", " 166.2046511720921,\n", " 166.1114288799946,\n", " 166.01406465089923,\n", " 166.1379543832531,\n", " 166.25207517302286,\n", " 166.52804881211614,\n", " 166.74494256934787,\n", " 166.92130272252635,\n", " 166.94207694994174,\n", " 166.9682710761989,\n", " 166.8987698006428,\n", " 166.74663510949398,\n", " 166.58805749859445,\n", " 166.00525812148732,\n", " 165.4323034698364,\n", " 164.484436043486,\n", " 163.54599319441826,\n", " 162.41752427603217,\n", " 161.4653822686726,\n", " 160.50652290621503,\n", " 159.1175982852519,\n", " 157.71960546746215,\n", " 155.7155725783195,\n", " 154.11954814139528,\n", " 152.52876548264254,\n", " 150.6680649485689,\n", " 148.80903616723998,\n", " 146.49198820357861,\n", " 144.1773630424052,\n", " 141.27390774861306,\n", " 138.90188079392527,\n", " 136.53448517279998,\n", " 134.20734789580314,\n", " 131.88032965111344,\n", " 129.09625588284035,\n", " 126.80014384349386,\n", " 124.4921964856474,\n", " 123.22986560190796,\n", " 121.95337573778488,\n", " 120.24658296115649,\n", " 118.54319272047803,\n", " 116.3540798421146,\n", " 114.73539098787305,\n", " 113.11906877122064,\n", " 111.7193012205443,\n", " 110.3166967887657,\n", " 108.3484377792258,\n", " 106.01662454538659,\n", " 103.76958581527754,\n", " 102.2425589594963,\n", " 100.70636938763377,\n", " 99.65749618582456,\n", " 99.51349799456975,\n", " 98.44713935201685,\n", " 96.95966631861042,\n", " 95.47424866731191,\n", " 94.24093165347418,\n", " 92.99362214525779,\n", " 91.39139090964707,\n", " 90.09835421655293,\n", " 88.79987985919081,\n", " 87.2167629635195,\n", " 84.71518674395143,\n", " 83.09789968739392,\n", " 82.11611591561882,\n", " 80.91970150578771,\n", " 80.03362421933308,\n", " 79.19320347422678,\n", " 78.43521567307786,\n", " 77.68196749831024,\n", " 76.94399752184324,\n", " 76.48584697145903,\n", " 76.09814138597412,\n", " 75.81533345865734,\n", " 75.57603947497537,\n", " 75.58555706503964,\n", " 75.61075188010209,\n", " 75.72968509635157,\n", " 76.02589457581374,\n", " 76.31600683943313,\n", " 76.61610755778194,\n", " 76.92487011833978,\n", " 77.54000133969627,\n", " 77.72170561570101,\n", " 77.88212396983505,\n", " 78.27743258050374,\n", " 78.64580038720291,\n", " 78.78628113021145,\n", " 78.64349000989834,\n", " 78.45519667949357,\n", " 78.24615457494664,\n", " 78.03788087869643,\n", " 77.46619785140209,\n", " 77.26033947021934,\n", " 77.40726746155698,\n", " 77.26438292951224,\n", " 77.17044683094315,\n", " 77.21117146385541,\n", " 77.52871323579464,\n", " 77.62642136316416,\n", " 77.76113315830706,\n", " 77.90116120935895,\n", " 78.0538928421669,\n", " 78.19135632723797,\n", " 78.04859785758667,\n", " 77.91420103978179,\n", " 77.81001307569844,\n", " 77.66149873456371,\n", " 77.56083081746377,\n", " 77.71695615127439,\n", " 77.82548107068428,\n", " 77.91165077767478,\n", " 77.99424725907936,\n", " 78.2372575689776,\n", " 78.40107645490096,\n", " 78.58378720922674,\n", " 78.86768216779898,\n", " 79.15247594878329,\n", " 79.6353619182768,\n", " 80.12508519571682,\n", " 80.60341672888936,\n", " 81.35317052791345,\n", " 82.09731619173212,\n", " 82.59930616837299,\n", " 83.05335087778028,\n", " 83.89007031777139,\n", " 84.57825092675739,\n", " 85.25657848555883,\n", " 86.22979736649106,\n", " 87.21256847657352,\n", " 89.68956742466032,\n", " 91.91351792791049,\n", " 94.13879155989544,\n", " 96.83702212171924,\n", " 99.5884426359793,\n", " 101.62047272856368,\n", " 103.6361463515426,\n", " 106.6127216144442,\n", " 109.07381395190748,\n", " 111.52695267232941,\n", " 112.51593447243218,\n", " 113.93905371208105,\n", " 116.02116162717569,\n", " 117.71909123850025,\n", " 119.42324606724142,\n", " 122.01320740243644,\n", " 124.6077761968593,\n", " 126.76224727545696,\n", " 128.9189935121242,\n", " 131.49724574635678,\n", " 134.06389091028103,\n", " 136.19442255547511,\n", " 138.236660899451,\n", " 140.28302270868394,\n", " 142.478167277856,\n", " 144.11433400112625,\n", " 145.74103293481699,\n", " 147.21726536852523,\n", " 148.69395890540136,\n", " 149.8418323899798,\n", " 150.99512800421317,\n", " 152.32936508701707,\n", " 153.09467415708355,\n", " 153.86618464099797,\n", " 154.8462550626569,\n", " 155.82438676205686,\n", " 157.13104345530678,\n", " 158.08759503632157,\n", " 159.04420023518767,\n", " 160.04871830187375,\n", " 161.05424553148129,\n", " 161.95292931754383]" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def compute_right_knee_angle_list(json_path: str):\n", " keypoints_list = json.load(open(json_path))\n", " right_knee_angle_list = []\n", " for keypoints in keypoints_list:\n", " right_knee_angle = compute_right_knee_angle(keypoints['keypoints'])\n", " right_knee_angle_list.append(right_knee_angle)\n", " return moving_average(right_knee_angle_list, 10)\n", "\n", "compute_right_knee_angle_list(file_path)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "angles = []\n", "\n", "for i in range(len(keypoints)):\n", " angles.append(compute_left_knee_angle(keypoints[i]))\n", "\n", "angles = moving_average(angles, 10)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAigAAAGdCAYAAAA44ojeAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABhsElEQVR4nO3dd3xb9bk/8M/R9JTkLTse2YsskwRjCCEQlwwIsy3QXEoLhUtLaBmXW9Iy2v7oDaWUDkrh0vZCuazCLQk7EBKSMBxnTxwnThxveVuSh2SN8/tDOidx4sRL9jmSPu/Xy68XWLLynCiSHz3f5/t8BVEURRARERGpiEbpAIiIiIhOxwSFiIiIVIcJChEREakOExQiIiJSHSYoREREpDpMUIiIiEh1mKAQERGR6jBBISIiItXRKR3AUPj9ftTV1SExMRGCICgdDhEREQ2AKIpwOp3IysqCRnPuGklYJih1dXXIyclROgwiIiIagurqamRnZ5/zPmGZoCQmJgIIXKDJZFI4GiIiIhoIh8OBnJwc+ff4uYRlgiIt65hMJiYoREREYWYg7RlskiUiIiLVYYJCREREqsMEhYiIiFSHCQoRERGpDhMUIiIiUh0mKERERKQ6g05Qtm7dihUrViArKwuCIGDdunW9bu/o6MCqVauQnZ2N2NhYTJ8+Hc8//3yv+7hcLtx9991ISUlBQkICbrjhBjQ0NAzrQoiIiChyDDpB6ezsxOzZs/Hss8/2efv999+P9evX45VXXkFpaSnuvfderFq1Cu+++658n/vuuw/vvfce3nrrLWzZsgV1dXW4/vrrh34VREREFFEEURTFIf+wIGDt2rW49tpr5e/NmDEDN954Ix555BH5e3PnzsWyZcvw+OOPw263Iy0tDa+99hq++c1vAgAOHz6MadOmobi4GBdeeGG/f67D4YDZbIbdbuegNiIiojAxmN/fIe9Bueiii/Duu++itrYWoijis88+w5EjR3DFFVcAAHbt2gWPx4OioiL5Z6ZOnYrc3FwUFxf3+ZhutxsOh6PXFxEREUWukCcozzzzDKZPn47s7GwYDAYsXboUzz77LBYuXAgAsNlsMBgMsFgsvX4uIyMDNputz8dcs2YNzGaz/MWDAomIiCLbiCQo27Ztw7vvvotdu3bhd7/7He6++258+umnQ37M1atXw263y1/V1dUhjJiIiIjUJqSHBXZ3d+NnP/sZ1q5diyuvvBIAMGvWLOzduxdPPfUUioqKYLVa0dPTg/b29l5VlIaGBlit1j4f12g0wmg0hjJUIooSHW4vNpY2oKqlC9+9aCzMsXqlQyKiAQhpguLxeODxeKDR9C7MaLVa+P1+AIGGWb1ej40bN+KGG24AAJSVlaGqqgqFhYWhDIeIotjBWjue23IMG75uQI838P7zwYF6vHz7BUhPjFE4OiLqz6ATlI6ODpSXl8v/X1FRgb179yI5ORm5ubm49NJL8eCDDyI2NhZ5eXnYsmULXn75ZTz99NMAALPZjNtvvx33338/kpOTYTKZcM8996CwsHBAO3iIiM5GFEVsO96Kv2wux+dHm+Xvj0+Nh8PlwWGbE7f8bTv++e8XwhJnUDBSIurPoLcZb968GZdddtkZ37/11lvx0ksvwWazYfXq1fjkk0/Q2tqKvLw83HnnnbjvvvsgCAKAwKC2Bx54AK+//jrcbjeWLFmCv/zlL2dd4jkdtxkT0el2nGjFf31Yij1V7QAArUbA1bOz8INLxmF6pgmVLV349n8Xo9HpxuwcC179QQESjCEtIhNRPwbz+3tYc1CUwgSFiCT2bg+e+OgwXt9eBQAw6DS4cV4O7lw4HjnJcb3ue6TBiRv/uxhtXR6cn2vBX787DykJ7G8jGi1MUIgo4omiiA8P2PCL9w6hyekGANw0Pwf3XzH5nD0mB2rsWPm3bXC4vMhNjsOL35+PCWkJoxU2UVRjgkJEEa2uvRuPvnMQn5Y2AgDGp8VjzXUzUTA+ZUA/X97Yge+/tB3Vrd1IitPj3VULzqi2EFHoKTpJlohoJFW2dGLJH7bi09JG6LUCfrx4Ej788SUDTk4AYGJ6Atb96GLMGGNCW5cHd7+2G26vbwSjJqLBYoJCRGHl2c/K4XR5MdWaiA9+fAnu/8ZkxOi1g36clAQj/vuWebDE6bG/xo5nNpb3/0NENGqYoBBR2Kht78bbu2sBAP91/UxMzkgc1uONscRizXUzAQDPbTmG/TXtww2RiEKECYoKnWjuRMnxFlS1dKGrx4swbBMiGhHPbDwKr1/ERRNScH5uUkgec9nMTFw5KxM+v4gH39rPpR4ileAQAJX5x1cn8Iv3DuHUnCTOoMXMMWbMG5uEWy8ayymYFJXKG514c2fgHK4HrpgS0sf+1dXnYduxFpQ1OPHMxnL8x5LQPj4RDR4rKCohiiKe3nAEj70bSE7GWGJh1AWenq4eH0oqWvHsZ8fw7eeL5S2VRNHkiY8Owy8CV0zPwNy80FRPJCkJRjx+7QwAXOohUgtWUFSgrbMHq98+gPWHbACA+78xGfdcPhEA0NnjQ117N/ZUteGZTeU40dKF+9/ci/+9vUDJkIlG1Zflzfi0tBE6jYD/XDp1RP6MZTMzcdWsTLy/vx7/8dY+vHfPAhh1g2++JaLQYIJyiu4eH2wOF7w+Pzw+ET6/CI/fD69PhDd42CEACBBO/rcgfQ+nfE/odZt0uyAISI43IMNkRJwh8Ff/VXkz7n9zH2wOF/RaAb+4+jysLMiTfy7BqMPkjERMzkjEvLHJWPL7rfj8aDN2V7WFbA2eSM18fhGPf1AKAPi3C/MwMX3khqr96poZ2Ha8BUcaOnDbSzuwdEYmxqbEQYCAvJQ4ZCfFyq9vIhpZTFBOsa2iBd9/cceo/FmJRh3SEo2oaOmEKAYOM/vTzfmYMcZ81p+ZkJaA688fgzd31uAvn5Xjb7fOH5VYiZT0r101KK13wBSjw08WTxrRPys53oBfXzcTd72yC1+Wt+DL8pZet6clGnHBuGTMybZg6Qwrh7sRjSAmKKcw6jRINOqg1QrQaTTQawXogv+t1Zysm5y6p+bUHTbiGf/R+75evx8tHT3o6vHB6fbC6fYCAG6+IBePXDVNrqqcy79fOgFv7qzBZ2VNsHd7YI7VD+VSicJCp9uL335SBgD48eJJSIof+ROIl5xnxXurFmDT4UZsO96C1s4eeP0iqlq60OR044P99fhgfz1++3EZvn/xWKy6fCISY/g6JAo1jrpXQIfbiwaHC40ON8yxekzPGtw1LP7dZhxr6sRfVp6P5TMzRyhKIuW4vT6UN3bglW2VeH17NfJS4vDJfQsV7QlxeXzYV92OnZVt2HqkCSUVrQCA1AQjfnn1ebhyFl+LRP0ZzO9vVlAUkGDUISEtYcgHlC2ako5jTRXYXNbIBIUiTnmjE9/5awkaT9mttnrZVMUbVmP0WhSMT0HB+BT8aNEEfFbWiMffL8Xx5k7c/dpuJMUX4KIJqYrGSBRJuM04DC2akgYA2HKkiUPcKKJ4fX488NZ+NDrdSIzRoWBcMh5bMR1LzrMqHVovgiDg8qkZ+OjeS3DtnCwAgW3QfD0ShQ4rKGHognHJiNVr0eBwo7TeOeglIiK1en1HNfZVtyMxRocN910Kq1ndQwmNOi0evmo6NnzdgP01dnx4wMalHqIQYQUlDBl1Wlw0IXBy6+YjjQpHQxQabq8Pf/kscGDfA9+YrPrkRJKaYMQPLhkPAHjqkzJ4fP5+foKIBoIJSpiSlnk2lzUpHAlRaLy5swb1dhesphjcdEGu0uEMyh0LxyMl3oCK5k55HD8RDQ8TlDC1aEo6AGBXZRscLo/C0RANz6nVkx9dNgEx+vCa4Jpg1MnTn//w6VF09XgVjogo/DFBCVM5yXEYnxYPn1/EV+XNSodDNCz/3FEtV0++PS9H6XCG5DsFechJjkWT040XvzyhdDhEYY8JShhbOCmwzLP1KBMUCl/VrV14cn1gGFs4Vk8kBp0GD3wjcAryC1uPw8nKJtGwMEEJY5dODiYo3G5MYUoURfzHW/vQ4fZi/tikXudQhaMVs7MwIS0e9m4PXmIVhcKYGn6nMEEJYwXjk2HQalDT1o2K5k6lwyEatHV7a1FS0YpYvRZPf3sOtJrwPohPqxHw4+B5QX/9/Dj7wygsHWvqwOKnt+BPG48qGgcTlDAWZ9ChYHwyAOCjgzaFoyEaHIfLg19/cBgAcM/iiRFz8N5Vs7IwMT0BDpeXVRQKSx/ur8fxpk7sqmxTNA4mKGFuxazAFMu1e2pVUZIjGqjfbziC5g43xqfF4wcLxisdTshoNYJ86vILW4+j3t6tcEREg/PBgXoAUHzoIBOUMLdsphVGnQbljR04WOtQOhyiAfm6zoF/fHUCAPDLq8+DQRdZb0VXzsxEfq4FHW4vHll3kB8eKGwca+rAYZsTOo2AK6ZnKBpLZL0rRKHEGD2uCJ5T8q/dNQpHQ9Q/URTx6DsH4RcDv8gvCe5GiyQajYDf3DALeq2AT0sb8eEBLsFSePhwf6B6cvHEVFjiDIrGwgQlAlyfPwYA8N6+Oo7ZJtV7e3ctdla2Ic6gxcNXTVM6nBEzOSMRP1wUGN722LsHue2YwoJalncAJigR4ZJJqUhNMKClswefH+Xoe1Ive7cHaz4qBQD8ePEkZJpjFY5oZN192QTkpcShuaMHnxxqUDoconNS0/IOwAQlIui0GqyYHWiWfW9fvcLREJ3d27tr0NzRg/Fp8bjt4nFKhzPijDotrgtWOD86yNcmqZu0vLNgkvLLOwATlIixNNiHsrmsET4/G/JInT4LHm558/zciGuMPZvlMwOl8q1HmjkXhVRNWt6R/s0qLTreIaLA3LwkmGJ0aOvyYG+1snvXifrS1ePFtuMtAIDLpkZeY+zZTEpPwIS0ePT4/NhU2qh0OER9Km8MLO/otQKWTLcqHQ4AJigRQ6fVYGFw9P2mw3wTJPUpPtaCHq8fYyyxmJCWoHQ4o0YQBPkT6YcHuMxD6iT927x4YirMcXqFowlgghJBLp+aDgDYdJiNsqQ+n5UFEufLpqZBEMJ7pP1gLZsRSFA2H2lCh9urcDREZ/pQZcs7ABOUiLJoSjoEASitd3B6JamKKIrYHOw/uWxKusLRjL5pmYkYlxqPHq8fn7HCSSqjxuUdgAlKREmONyA/xwKAyzykLseaOlDT1g2DToPCCSlKhzPqBEFA0bRAYvbVsRaFoyHqTY3LOwATlIgjLfPwUxqpyWfBZceCccmIM+gUjkYZ5+cmAQD2VrcrGwjRaaQE5UoVLe8ATFAizmXBBOXL8ha4PD6FoyEK2FAaGFIWjcs7kjm5FgBAmc2Brh72oZA6nLq8c4WKlncAJigRZ3qmCVZTDLo9PnlLJ5GSGp0u7DjRCgBYMkNdb4CjKdMciwyTEX4ROFBjVzocIgDqXd4BmKBEHEEQ5BkTXOYhNfj4UANEEZidY8EYS2SPtu/PnGCPGJd5SC3UurwDMEGJSFIZfVNZI495J8V9sL8OAHDlzOitnkjyg30o2ytaFY6ECKhp6zrl7B31vT6ZoESgiyemQqsRUN3aDZvDpXQ4FMUqmjux7XgrNAJw5awspcNR3CWTUgEEdvK4vewRI2VtOx5IlGdlm1W3vAMwQYlI8UYdJqTFAwC+rnMoHA1Fs9e3VwEIzOiJ9uUdINAjlp5oRLfHxyoKKU7qUywYr86t/0xQItR5WWYATFBIOV6fH//aVQMAuPmCXIWjUQdBELBoSqBHTBpcR6SUkopAgnIhExQaTdMzTQCAr+uZoJAydlW2oaWzB+ZYPS6bEj2HA/ZnUbBHTBr9T6SEmrYuVLd2Q6sRMC8vSelw+sQEJUJNzwokKIdYQSGFbPg6MPvk8qnp0Gn5ViNZMCnQI3a8qRNVLV1Kh0NR6pNDgdfn+bkWxBvVOTyR7xoRSqqgVLV2weHyKBwNRRtRFOXhbN+YnqFwNOpiitFjbvAT6+YjrKKQMtR4OODpmKBEqKR4g9yUyKFQNNr2VLejsqULBp0GCydzeed00igA9qGQEurt3dhZ2QZBOHnSthoxQYlg88YGPqXtPNGmcCQUbf7x1QkAwNWzs5Cg0vKxki4NJm3bjrfA5+esIhpdHx6wAQDm5yXDao5ROJqzY4ISweaNTQYAecw40WhocLjwwf5A+fh7F41VNhiVmmJNRIJRh64eH440OJUOh6KMPDxxlnqrJwATlIg2P1hB2V3VBq/Pr3A0FC1eLamC1y9iXl4SZowxKx2OKmk1AmbnBP5u9lS1KxsMRZXa9m7srmoPLu+ob3rsqZigRLDJ6YlIjAl8SuN2YxoNbq8Pr5UEhrPdyurJOeXnBD5A7KniEiyNng+D1c35Y5ORblLv8g7ABCWiaTQCLpoQGMDz7t46haOhaPDp141o7nAjw2TEUpV/OlNafq4FQKChmGg0iKKIt3ZVAwj0h6kdE5QI9+15OQCA/9tdA5eHZ3/QyPqiPLAr5apZWdBz9sk5SScblzd2wN7NUQA08vbX2HGkoQNGnQYrmKCQ0hZNSUeWOQbtXR6sP2hTOhyKcF8dC4zOvniiOkdnq0lKghF5KXEAgH2sotAokKonS2dYYY5V3+GApxt0grJ161asWLECWVlZEAQB69atO+M+paWluPrqq2E2mxEfH4/58+ejqqpKvt3lcuHuu+9GSkoKEhIScMMNN6ChoWFYF0J902oE3BQ8B+XVkkqFo6FIVtPWhcqWLmg1AuYHd5DRuUlVlL1MUGiEuTw+vBNc6pcq62o36ASls7MTs2fPxrPPPtvn7ceOHcOCBQswdepUbN68Gfv378cjjzyCmJiTzTj33Xcf3nvvPbz11lvYsmUL6urqcP311w/9KuicbpyfA61GwI4TbdzSSCOmOFg9mTnGjMQY9X86U4P8YILCRlkaaR8fssHp8mKMJRaFKj0c8HSDnqC0bNkyLFu27Ky3//znP8fy5cvx5JNPyt+bMGGC/N92ux1///vf8dprr+Hyyy8HALz44ouYNm0atm3bhgsvvHCwIVE/MkwxKJqWjo8PNeD17VV4bMV5SodEEUhKUKTGbOpffm5wJ091O0RRhCAICkdEkWrtnloAwDfnZkOjCY9/ZyHtQfH7/fjggw8wefJkLFmyBOnp6SgoKOi1DLRr1y54PB4UFRXJ35s6dSpyc3NRXFzc5+O63W44HI5eXzQ40jLP2j21cHvZLEuhJYqi3H9y0YRUhaMJH9MyTTDoNGjv8qCSBwfSCPH6/NheERjYGU6760KaoDQ2NqKjowNPPPEEli5dik8++QTXXXcdrr/+emzZsgUAYLPZYDAYYLFYev1sRkYGbLa+mzjXrFkDs9ksf+XkhMf6mZosnJQGqynQLPvp1zygjEKrorkTNocLBq1GPgiP+mfQaTAhLQFA4O+QaCQctjnR1eNDolGHKRmJSoczYCGvoADANddcg/vuuw9z5szBQw89hKuuugrPP//8kB939erVsNvt8ld1dXWoQo4aWo2Ab87NBgC8uZN/fxRaUvUkP9eCWINW4WjCS25y4FDPyhYmKDQydlUGepzy85LCZnkHCHGCkpqaCp1Oh+nTp/f6/rRp0+RdPFarFT09PWhvb+91n4aGBlitfZeejEYjTCZTry8aPClB2Xq0CXXt3QpHQ5FEKh8Xsv9k0HKTA1uNq1r5mqSRsTOYoMwLs+pmSBMUg8GA+fPno6ysrNf3jxw5gry8PADA3LlzodfrsXHjRvn2srIyVFVVobCwMJTh0GnGpsajYFwyRBF4e3eN0uFQBDlUZwcAzA7uSqGBO5mgsAeFQk8URewMHhgbbgnKoHfxdHR0oLy8XP7/iooK7N27F8nJycjNzcWDDz6IG2+8EQsXLsRll12G9evX47333sPmzZsBAGazGbfffjvuv/9+JCcnw2Qy4Z577kFhYSF38IyCb8/LQUlFK97cWYMfLZoYVuU+UieXxyf3T0zPZHVzsHJT4gEA1UxQaAQca+pEvd0Fg04j7xoLF4OuoOzcuRP5+fnIz88HANx///3Iz8/Ho48+CgC47rrr8Pzzz+PJJ5/EzJkz8be//Q3/+te/sGDBAvkxfv/73+Oqq67CDTfcgIULF8JqteLtt98O0SXRuSyfmYlEow5VrV0oPt6idDgUAY40OOEXgeR4A9ITjUqHE3ZOraCIoqhwNBRpthwJHD9xwdjksOsPG3QFZdGiRf2+iG677TbcdtttZ709JiYGzz777FmHvdHIiTVocU1+Fl7ZVoXXt1fh4oncEkrDUxo8KXtaZiLneAzBGEssBAHo9vjQ3NGDNCZ5FEJbgwnKwsnh917Ps3ii0E3zAzNRPjnUgK4er8LRULgrrQ9MJ55m5fLOUBh0GmSZAzt52IdCoeTy+FBSEaiUL5ycpnA0g8cEJQqdl2VCpjkGPT4/zwChYfs6WEGZyv6TIctJlhIUbjWm0NlxohUujx8ZJmNYzT+RMEGJQoIgyMO0dp3gGSA0dKIo4vApSzw0NHIfSgu3GlPoyMs7k9LCcvmVCUqUkk6b3VHJBIWGrs7ugsPlhU4jYGJ6gtLhhC1uNaaRsPVIM4DwXN4BmKBErXljg4eUVbbB5+fOARqa0rpA9WRiegKMuvDaIaAmOcEEhVuNKVQaHC6UNTghCMCCMN0MwQQlSk21mpBg1MHp9qLM5lQ6HApTJ3fwsP9kOPKCs1BYQaFQ2Rlcvp+eaUJSvEHhaIaGCUqU0moE5OdaAAC7KluVDYbCVqmN/SehIC3x2BwuuDw8bZyGb19NOwDI7/PhiAlKFJuXF+xDYaMsDdFhaYsxKyjDkhSnR4IxMJaqpo2NsjR80g7N2dkWReMYDiYoUWx+sA9FOqeBaDBcHh9OBE/gnWJlBWU4BEFgHwqFjNfnx4GawPlYc8L4fCwmKFFsTq4FWo2AOrsLtTzdmAbpeFMn/CJgidMjLYHTT4crNzgLpbKFs1BoeI42dqDb40OCUYcJaeG7u44JShSLM+jkw932VrUrGwyFnaONgeWdSekJYTljQW3GWAIVlHq7S+FIKNztCy7vzMo2h/WBsExQopyUoJQFmx2JBqq8sQMAMDGdyzuhkGEKVKEaHExQaHikBtnZYby8AzBBiXpS78BhbjWmQTraEEhQJnFAW0hYzTEAgAaHW+FIKNztCVbEw7lBFmCCEvWmBhOUsgYmKDQ48hJPBhOUUEhPlBIUVlBo6Lp6vDgSfD8P5y3GABOUqCdVUKpau3iyMQ1Yj9ePEy2B3SaTuMQTElzioVA4WOuAXwSsphhkmGKUDmdYmKBEuZQEI1ITjBBF4EiwZE/UnxMtnfD5RSQadfIvVhoe6ZdJZ48PHW5+WKCh2VsdmGs1O8escCTDxwSF5GUe6VRaov5I/ScTM7iDJ1TijTokBoe12biTh4ZIGtA2JydJ2UBCgAkKYVZ2INPezoFtNECnbjGm0EkPVqMaucxDQyQ1yIZ7/wnABIVw8qTLL8ubIYo82Zj6d7RR2sHD/pNQknfyOJmg0ODV27tRb3dBI5z84BnOmKAQzs9LglGnQYPDLc+2IDqX8lOWeCh0MoI7eWx2bjWmwZMGbk61mhBn0CkbTAgwQSHE6LW4YFzg4MAvypsVjobUzuvz43gzZ6CMhHQTtxrT0O0J9p9EwvIOwASFgi4+ZZmH6FwqW7vg8YmIM2iRZY5VOpyIkmUJJCh1PBuLhmBPVWAHT35u+DfIAkxQKEjqQ9l2vBUen1/haEjN5B086Qlhfc6HGmUnBRK+6jYmKDQ4Hp8fB2oDJxizgkIRZXqmCUlxenS4vdgfPMeBqC/lwR08E7m8E3I5SYEDA2tau9iwToNSZnPC5fHDHKvHuJR4pcMJCSYoBADQaARcFKyifHG0ReFoSM24g2fkZAcTFKfbC3u3R+FoKJxIyztzciwRU9lkgkKyiydIyzxMUOjseEjgyIk1aJGaEJiFUt3KZR4auEiafyJhgkKyGWNMACAfNEV0Op9fxLGmYILCLcYjIic50IdS09alcCQUTvbIE2QtisYRSkxQSCb1FLR09qClg3MY6Ew1bV1we/0w6jTycgSFltSHUs0EhQaorbMHFc2dAJigUISKM+jkT29HObCN+iAt70xIS4A2Qta51UbeycMlHhog6fyd8WnxsMQZlA0mhJigUC9S4+NRLvNQH+QGWS7vjJicZFZQaHDk+ScRcEDgqZigUC/SL54jDayg0Jl4SODIk5d4Wpmg0MBE2gRZCRMU6mWyVEFpZAWFziSd1TSRW4xHzMkm2W7OQqF++f2ivMTDBIUi2uQMaYmHFRTqze8X5QSFSzwjJ8sSC40AuL1+NDnZrE7ndry5A06XF7F6LaZkRNYHByYo1MuE9MAEQu7kodPV2bvR1eODXisgL5k7eEaKXqtBppkj72lgdgfnn8zKNkOnjaxf6ZF1NTRsp+7kYR8KnUpqkB2fmhBxb4RqMyaJs1BoYE4OaIusBlmACQr1gX0o1JfyUw4JpJHFRlkaqFNH3EcaJih0hknsQ6E+HOUhgaNGqmJyFgqdS4fbK0/+jrQGWYAJCvVB2kLKkfd0Ks5AGT2cJksDsb+mHX4RGGOJRYYpRulwQo4JCp1B3snDabIUJIqivMTDU4xHHoe10UBI/SdzIrB6AjBBoT5IO3laO3tg7+KR7wQ0ONxwur3QagSMTeUOnpEmLfHUt7vg9fkVjobUSp5/EoH9JwATFOpDnEGH1ITAeQ78BEfAyf6TvJQ4GHVahaOJfOmJMdBrBXj9ImwOl9LhkAqJohjRO3gAJih0FtncRUCnOCov77D/ZDRoNQLGWNgoS2dX09aN5g439FoB52WZlA5nRDBBoT5Ja+A1HBRFOKVBlv0no4Z9KHQupfUOAIHXZIw+MquaTFCoT/KR73xzJJyspI1NjVc4kughVTFrWMWkPki7LKdaI/dDAxMU6hMHRdGppImmOcHElUaePAuFVUzqQ1lw2XUyExSKNnxzJInfL6K2PfDvIJtn8Iwa6UMCx91TX44GKyiTI3guERMU6tOpb4488j26NTrd8PhE6DQCMhKNSocTNeRlVjbJ0mk8Pj+ONQUrKBF2gvGpmKBQn7IssRAEwOXxo7mjR+lwSEHSJ/hMSwwPCRxFUpNsg9MFt9encDSkJieaO+HxiYg3aOXdXpGI7zbUJ4NOA2twdDIbZaObtJMr28LlndGUEm9ArF4LUQRqudRKp5BOmp+UkQhBEBSOZuQwQaGzYqMsAScrKNlskB1VgiCwF4z6dKKlEwAwPi2yd9UxQaGzyg6+OXIWSnSTKyhJrKCMNn5IoL6caA4kKGNTmKBQlOIuAgJOLvGxgjL6OKyN+lLZEvj3kJcS2R8amKDQWclvjtxFENUqmgKf1nIj/M1QjaSkkFVMOpW0xMMKCkUtTpMlp8uDOnvgsDqewzP6OE2WTtfV40Wj0w2ACQpFMamCUtfeDZ+fs1Ci0bFg9SQt0QhLnEHhaKIPm2TpdNLyTlKcHuY4vcLRjKxBJyhbt27FihUrkJWVBUEQsG7durPe96677oIgCPjDH/7Q6/utra1YuXIlTCYTLBYLbr/9dnR0dAw2FBphVlPgyHePj0e+RytpWiWrJ8qQPiS0dvag0+1VOBpSA6lBNi/CqyfAEBKUzs5OzJ49G88+++w577d27Vps27YNWVlZZ9y2cuVKHDp0CBs2bMD777+PrVu34s477xxsKDTCtBoBWfKR7ywxR6PyxsifVqlmphg9zLGBT8nsQyEAOBGsoIyNgp4w3WB/YNmyZVi2bNk571NbW4t77rkHH3/8Ma688spet5WWlmL9+vXYsWMH5s2bBwB45plnsHz5cjz11FN9JjSknCxzLCpbumCzs4ISjY4GE5SJrKAoJtMcA3u3B/X2bkyJ4IPhaGAqW1hBGTK/349bbrkFDz74IM4777wzbi8uLobFYpGTEwAoKiqCRqNBSUlJqMOhYcowBc5eaXQyQYlGRxu5xKM0qzkw0ZkfEgg4uYNnXGrkJyiDrqD05ze/+Q10Oh1+/OMf93m7zWZDenp67yB0OiQnJ8Nms/X5M263G263W/5/h8MRuoDpnNKD4+4bHO5+7kmRxuXxycsKrKAoJ1NKUNgHRoieGShAiCsou3btwh//+Ee89NJLIT0fYM2aNTCbzfJXTk5OyB6bzi09UaqgMEGJNhXNnRBFwBKnR3I8d/AoJcPECgoFuDw+1Af/HUT6FmMgxAnK559/jsbGRuTm5kKn00Gn06GyshIPPPAAxo4dCwCwWq1obGzs9XNerxetra2wWq19Pu7q1atht9vlr+rq6lCGTecgVVAa+ekt6kjHuY9PjY/oA8nUjhUUkkjVE1OMDpYI32IMhHiJ55ZbbkFRUVGv7y1ZsgS33HILvv/97wMACgsL0d7ejl27dmHu3LkAgE2bNsHv96OgoKDPxzUajTAajaEMlQaIFZTodawxsNY9IY3LO0piBYUk8gTZKPnQMOgEpaOjA+Xl5fL/V1RUYO/evUhOTkZubi5SUlJ63V+v18NqtWLKlCkAgGnTpmHp0qW444478Pzzz8Pj8WDVqlW46aabuINHhTJYQYlax5sDFZQJ7D9RVKY5sNWfFRSqjJIR95JBL/Hs3LkT+fn5yM/PBwDcf//9yM/Px6OPPjrgx3j11VcxdepULF68GMuXL8eCBQvwwgsvDDYUGgVSBaWzx4cODoqKKqcu8ZByrMEPCe1dHrg8PoWjISVVNEdPgywwhArKokWLIIoDH3t+4sSJM76XnJyM1157bbB/NCkg3qhDvEGLzh4fGh0uJLDcHxVEUcTx4Jh7VlCUZYrVIVavRbfHB5vdhbFMGKNWmS2wg3VSlAxO5Fk81C95mYd9KFHD5nChq8cHnUZAbnJ0fFpTK0EQTs5C4TJP1PL7RRy2BeYSTc9kgkIEIHBQHAA08M0xakgNsrkpcdBr+TahNGmZp97OcffRqrK1C109Phh1GvagEEky5GFtTFCihdwgyyU9VRiTFGiUreV5PFGrtD6wvDPVmghdlHxoiI6rpGHJTpIODOSbY7Q4FjyDZ3xadHxSU7sxwUM7a9v5GoxWUoIyLdOkcCSjhwkK9UvqQahu44nG0eJYE2egqIlUQeGJxtHr6zomKERnkBKUqlYmKNHieBOXeNQkmxWUqMcKClEfcoIJSk1rN/z+gW8xp/DU6faiLji1dAKXeFRBqqDUtXcPaswDRYb2rh75NTk1SnbwAExQaAAyzTHQaQT0+PxocLJRNtJVNAeWd1LiDbDE8ZBANcg0x0IQAJfHj5bOHqXDoVFWWh/YXpydFAtTTOSfwSNhgkL90mk1yAqWmKtauMwT6Y5xeUd1DDqNPNWZO3mij7S8Mz2KlncAJig0QCcbZfnmGOmkBlnu4FEX7uSJXl9HYf8JwASFBiiHjbJRgxUUdRqTFHgNsoISfaKxQRZggkIDJFdQmKBEvOOsoKgSKyjR6dRzsSZnRNeHBiYoNCDcahwd/H6RW4xVirNQolNLZw+6PT4Iwsl/A9GCCQoNCBOU6FDb3g231w+DViNPECZ14CyU6CRVra2mGBh1WoWjGV1MUGhAcpIDb45NTje6e3wKR0Mj5Xhwi3FeSlzUnPcRLk6ex8MPCdFE2piQkxR9p4rzHYgGxByrR2KMDgBQwzfIiCV9WstLib43Q7WTelAcLi+cLo/C0dBokV6T2cnRV9FkgkIDIggCl3migC04rdJqjlE4EjpdvFEHS1xgSBeXeaKH9IEwmxUUorNjghL5bI5AgpJpjr5Pa+FA3snDRtmoUSMv8UTfa5IJCg0YE5TI1xBMUDJMrKCoEbcaRx9piUeaRRVNmKDQgMnD2jjuPmLVS0s8TFBU6WSjLBOUaODzi3IyygSF6BykwV3lwTkZFHka2IOiapPSAyfZbjveonAkNBoaHC54fCJ0GiEqPzQwQaEBm5IReHOsau1CV49X4Wgo1DrcXjjdgeeVCYo6fWN6BjQCsK/GjsqWTqXDoREmLe9kWWKh1QgKRzP6mKDQgKUkGJGaYIAoAuWNrKJEGmkHT4JRhwSjTuFoqC9piUZcPDEVAPDevjqFo6GRJjfIRuEWY4AJCg3S5GAVpczmVDgSCjWpQZbVE3VbMSsLAPDevnqFI6GRVh3cYhyNQ9oAJig0SExQIhcbZMPDkhlW6LUCyhqcfB1GuOrW6G2QBZig0CBNtQYTlAa+MUYabjEOD+ZYPS6dnA6AyzyRrloe0sYlHqJ+TQ4mKEeYoEQcaft4tK53h5Or5wSWeT48yGWeSCZtJ4/GKbIAExQapEnpCQCABocb7V09CkdDoXSi5eRBgaRuCycFGmWPN3XC3s1zeSKRx+dHvZ1NskQDlhijl6dZHmngTp5IUiUfFBivcCTUH0ucQS77H6q1KxwNjYS69m74RSBGr0FaglHpcBTBBIUGbQr7UCKOy+OTm2TzorQhL9zMHGMGABxgghKRpAbZ7KQ4CEL0zUABmKDQEJzcyeNQOBIKFWkgVIJRh+R4g8LR0EDMCCYoB+v4OoxE0d4gCzBBoSGYYg30oRyxcYknUlS2SMs70ftpLdxIFZSDrKBEpJoon4ECMEGhIZAqKIdtDoiiqHA0FApskA0/UgWlorkTDhcbZSPNyRkorKAQDdiEtEAFxeHyor2Lb4yRgA2y4Sc53iA3rB+q5TJPpIn2KbIAExQaghi9FmmJga7yGh77HhGkHpRofjMMRzPGmAAAh+q4zBNpon2KLMAEhYZIatyS1kkpvNW2SzsGorecHI64kycyuTw+NHe4AUT3a5IJCg2JNNmQFZTwJ4qi/DxG85thOJrBBCUiSR/8Eo06mGP1CkejHCYoNCQ5rKBEjPYuD7p6fACALAsTlHByaqNsh9urcDQUKvIMlOTo3lXHBIWGhBWUyCEt76QmGBGj1yocDQ1GaoIRVlMMRJEnjEeSGi65AmCCQkMkvXCqWUEJezUcCBXWxqcFdl6daO5UOBIKFemQwDFRXtFkgkJDcrJJtpuzUMKcVAUbwwQlLI1LDSQoFUxQIoZU1WSCQjQEUq9CV48PrZ081TicyTt4ovzNMFzJCUoLE5RIURusakb7hwYmKDQkMXotMs0xAIATLVzmCWfcwRPe5ASliQlKpKhrDxzcyQoK0RBNTA9MlC1vZHNeOKvlEk9YO3WJh8ut4a/H60eDM5CgRPuuOiYoNGST0gNn8hxp4KGB4ezkenf0TqwMZznJcdBqBHR7fGhwuJUOh4bJZndBFAGjToPUhOg+WZwJCg3ZpIxABeVoIxOUcOV0eWDvDpynxApKeNJrNcgNjkM/3sTXYriraQ/2n1hio3oGCsAEhYZhkrTE08AlnnAlVU8scXokGHUKR0NDJR3geYSvxbAn95/wAwMTFBo6aYmnzu6Ck8e9h6WaVm5njATTMgOvxdJ6JijhTuoJyzLzNckEhYbMHKdHevBU43Iu84QlHhIYGaZlBk41LrU5FI6Ehqu2nVuMJUxQaFjYhxLe2CAbGaQEpczmhNfnVzgaGg4OaTuJCQoNi7TMwwpKeKrhQKiIkJcchziDFm6vn3OJwpzUgxLtW4wBJig0THIFhc15YamWQ9oigkYjYIpV6kPhMk+48vtFLrueggkKDQtnoYQ3lpMjx1RrsA+FCUrYau50o8frh0YArMFJ3dGMCQoNi7TVuLa9G51ur8LR0GB09/jQ3BE4R4mf1sLf9ExWUMKdVNHMMMVAr+WvZ/4N0LAkxRvkaYfHOCQqrEjVkwSjDuZYvcLR0HDJO3m41Thssf+kNyYoNGzSMs9RLvOElVOXd6J9YmUkmBpMUGwOF9p4wnhYqj1liiwNIUHZunUrVqxYgaysLAiCgHXr1sm3eTwe/PSnP8XMmTMRHx+PrKwsfPe730VdXV2vx2htbcXKlSthMplgsVhw++23o6ODv9zCldQoe4SHBoYV7uCJLAlGnTzynss84YkHd/Y26ASls7MTs2fPxrPPPnvGbV1dXdi9ezceeeQR7N69G2+//TbKyspw9dVX97rfypUrcejQIWzYsAHvv/8+tm7dijvvvHPoV0GKOjnynklmOOEOnsgjT5S18cNCOCoPLpOPS4lXOBJ1GPThG8uWLcOyZcv6vM1sNmPDhg29vvfnP/8ZF1xwAaqqqpCbm4vS0lKsX78eO3bswLx58wAAzzzzDJYvX46nnnoKWVlZQ7gMUtJEaYmHs1DCCnfwRJ7pmWZ8fKgB+2valQ6FhuBwsH9I2jIe7Ua8B8Vut0MQBFgsFgBAcXExLBaLnJwAQFFRETQaDUpKSvp8DLfbDYfD0euL1GNycImnuq0L3T0+haOhgaphOTnizB+bBAAoOd4KURQVjoYGo8npRktnDwQBmJzBBAUY4QTF5XLhpz/9KW6++WaYTMEGLpsN6enpve6n0+mQnJwMm83W5+OsWbMGZrNZ/srJyRnJsGmQUhKMSI43QBS5kyecnFzi4Zj7SHF+XhIMWg1sDhcnyoaZsuCyXF5yHGINWoWjUYcRS1A8Hg++/e1vQxRFPPfcc8N6rNWrV8Nut8tf1dXVIYqSQmViunQmD9e+w0GP148GZ/BYdy7xRIwYvRZzci0AgOJjLcoGQ4NyOHjQI5d3ThqRBEVKTiorK7Fhwwa5egIAVqsVjY2Nve7v9XrR2toKq9Xa5+MZjUaYTKZeX6QuUqMsJ8qGh3p7N0QRMOo08hwbigyF41MAAMXHmaCEE6mCMsXK32+SkCcoUnJy9OhRfPrpp0hJSel1e2FhIdrb27Fr1y75e5s2bYLf70dBQUGow6FRIq2Z8kye8HDqdkbOQIkshRMC77nbjrewDyWMHKoLVFCmsYIiG/Quno6ODpSXl8v/X1FRgb179yI5ORmZmZn45je/id27d+P999+Hz+eT+0qSk5NhMBgwbdo0LF26FHfccQeef/55eDwerFq1CjfddBN38IQxKUFhBSU8yA2yXN6JOHNyLDDoNGhyunGsqVNefiX16nR75SUeaYmOhlBB2blzJ/Lz85Gfnw8AuP/++5Gfn49HH30UtbW1ePfdd1FTU4M5c+YgMzNT/vrqq6/kx3j11VcxdepULF68GMuXL8eCBQvwwgsvhO6qaNRJO3mqWrvQ1cMzedSuhiemRqwYvRZzcwO7ebjMEx72VbfDLwJZ5hhkmvmalAy6grJo0aJzlg0HUlJMTk7Ga6+9Ntg/mlQsJcGI1AQjmjvcONrQgdk5FqVDonPgDp7IVjghBcXHW7DtWAtuuTBP6XCoH7ur2gAEdmHRSTyLh0JGqqKUsQ9F9eQx91ziiUgXBhtld5xoVTgSGojdVe0AgLlMUHphgkIhI/ehcMy26slTZLnEE5FmjDFBEIBGpxvNHW6lw6F+HKi1Awj0D9FJTFAoZKT9+1/zoDJV8/r8sNkDM1DYgxKZ4gw6jA2e58KDA9XN7fWhyRlIIvN4Bk8vTFAoZPKD3ed7q9vh9fmVDYbOqsHphtcvQqcRkJ4Yo3Q4NELkgwOZoKia9GEhRq9BUpxe4WjUhQkKhczk9EQkxujQ1ePDYS7zqJbUIJtpiYFWwxkokWpacOBXaT1fi2pW1x5IULLMnEl0OiYoFDIajSA3ebE5T71q2wMNstkW7uCJZNMypQSFFRQ1q2s/+YGBemOCQiE1f2wyAGDniTaFI6GzqWllg2w0mJYVSFDKGzvg4ZKratXbA6/HLM4/OQMTFAopqYKys5LHvauVvIOHW4wjWpY5BkadBl6/KH9KJ/WpC/agZPL1eAYmKBRSs7Mt0GsFNDjc8jh1UpdaTpGNCoIgICc5sIxX3crXolrVt0sVFC7xnI4JCoVUrEGLGWPMANiHolY1bVziiRY5wee4qrVL4UjobKQmWVZQzsQEhUJunrzMwz4UtfH7xZMVFDbJRrxcqYLSxgRFrers0pIrKyinY4JCITdPbpRlBUVtmjvc6PH6oREAK0vKEU9a4mEFRZ2cLg+crsDhqjwk8ExMUCjkpArKkYYOtHf1KBwNnUo6xTjDFAODji//SCclKDVMUFSpPtgga4rRId446LN7Ix7foSjkUhKMGJ8aGNksndJJ6lDHHTxRJSeJFRQ1k16PWXw99okJCo2IeWOlgW1MUNSkwRE48yODyztRISc58IuvrcsDp8ujcDR0OqmCwgSlb0xQaESwD0WdGp2BN8T0RKPCkdBoSIzRy+e7cKux+shTZPmBoU9MUGhESH0o+2rscHt9CkdDEunU1DQmKFGDO3nUSz6HhxWUPjFBoRExLjUeKfEG9Hj9OFhrVzocCpISFJ5iHD2y5WFtTFDURh5zzy3GfWKCQiNCEAT2oahQo0NKUFhBiRa5TFBUS+pB4RbjvjFBoRHDgwPVR+5BMTFBiRbSTp5qHj2hKqJ48owkHhTYNyYoNGKkgwN3VbbC7+fBgUrr8frR1hXYycElnuiRy2FtqtTa2QO31w9BADLM/MDQFyYoNGLOyzIjRq9BW5cHx5s7lA4n6jV3BJZ3dBoBlli9wtHQaJG2Gle3dvGEcRWRlndS4o0w6rQKR6NOTFBoxBh0GszOtgAAdle2KxoLAY2n7ODRaASFo6HRkmWJhUYA3F6/3CRNymtwBBIUK6snZ8UEhUbUnFwLAGBPdbuicdCpO3j4hhhN9FqN3ITJZR71kIYmWk1cbj0bJig0ovJzLACAPRx5rzipQTaN/SdRZ3xa4OiJwzanwpGQRKqgpDNBOSsmKDSi5uRIBwc60en2KhxNdJM+sXEHT/TJzw28DndX8oOCWkgfGDL4geGsmKDQiLKaY2A1xcAvAgc4sE1RtW08KDBaSZOddzJBUQ35XCx+YDgrJig04qTtxpsONyocSXSrCY46z05ighJt5uRaIAiBHhTpkzspS1riyeASz1kxQaERd23+GADAmzur4fLwXB6l1AQrKExQoo8pRo8pGYkAuKNOLbjk2j8mKDTiLp+ajjGWWLR3efDevjqlw4lKXp8ftuAntuzgZFGKLucHK5m72bCuOI/Pj5ZOaYmHFZSzYYJCI06rEfCdglwAwCvbKhWOJjrZHC74/CIMWg3SEviJLRrNzZUmOzNBUVpzhxuiGBiamBxnUDoc1WKCQqPipvk5MGg12Fdjxz7ORBl10vJOliWGQ9qilNQLdqDGDreXS61Kajjl0E6+Hs+OCQqNipQEI66clQkAeLWEVZTRViv3n3B5J1rlpcQhNcGAHp8fB2sdSocT1Wz2wOuRM1DOjQkKjZpvzc0GAGw63MTDA0dZDbcYRz1BEHB+7skDPEk5Fc2BHXV5KfzAcC5MUGjUzB2bhDiDFs0dbpTa+AluNNW2c4sxAReMSwYAbPi6AW6vj4cHKqQieHjquNR4hSNRNyYoNGqMOi0uHJ8CANh6pFnhaKKLXEFhghLVVszOgkYAdpxow5SH1+OOl3cqHVJUqmjuBMAEpT9MUGhULZyUCgD4jEPbRlUNe1AIgS2tF09Mlf//09JGHGvqUDCi6CQlKONTExSORN2YoNCoKpqeAa1GwPYTrSg53qJ0OFHB5xdRb+eQNgpYWZDX6///tatGoUiik73bg+aOHgDA2FR+YDgXJig0qrKT4nDT/BwAwBPrD3MNfBQ0Ol3w+EToNAKHQhGWzrDirbsK8eQNswAAa/fU8nU4ik4EqydpiUYkxugVjkbdmKDQqPvJ4kmI1Wuxp6odHx9qUDqciCct72RaYqDlzAUCMH9sMq6ekwWjToN6uwvHg780aeSx/2TgmKDQqEs3xeAHl4wDADz58WH0eP0KRxTZ5BkoFpaT6aQYvRazss0AgN2cLjtq5AQlhQlKf5igkCLuXDgeKfEGHG/qxO8/PaJ0OBFNOsWYO3jodNJclN1V7coGEkVOtAQSlLGsoPSLCQopIjFGj19fNwMA8PyWY9jGhtkRU9vOBlnqW76UoLCCMmpOtAQ+MIxjg2y/mKCQYpbOyMSN83IgisD9/9yLts4epUOKSNxiTGdzfp4FAHCk0QmHy6NsMFFCapJlBaV/TFBIUY+umI6xKXGos7tw4wvF8nZYCh1pzTs3mQkK9ZaeGIOc5FiIIniI5yho6+yBvTuQCOYlM0HpDxMUUlS8UYcXvjsPGSYjjjR04Ia/fIXjHBwVMt09PnmJZ0Ia3xDpTHIfSmW7soFEAan/xGqKQaxBq3A06scEhRQ3OSMR//rhRRifFo86uwuPf1CqdEgRo6K5E6IIWOL0SI43KB0OqdDcvOABglXsQxlpUoLCQwIHhgkKqUJ2UhyeuTkfALDteAu3HofI8eChZONT4yEInIFCZ5IqKHuq2njK+Ag70Sw1yLKaORBMUEg1pllNSI43oKvHh/017UqHExGONQY+sU1I45kf1Lep1kTE6rVwurwo5/LqiDpZQWGCMhBMUEg1NBoBF44PHAf/1TFuOw4FuYLCBIXOQqfVYE6OBQCwvaJV2WAiHLcYDw4TFFKVwgmBk1aLmaCEhHRSLRtk6VwumpACgK+7kSZtMWYFZWCYoJCqSG+Uu6ra4PL4FI4mvImiiONNwSWedFZQ6Owumhh43X11rJl9KCOkvevkFuOxTFAGhAkKqcr41HikJxrR4/VzuuUw2RwudPX4oNMInIFC5zQr24J4gxZtXR4ctjmVDiciSfOIuMV44JigkKoIgnCy3Mzx98MiVU9yU+Kg1/KlTmen12pwwTip/6tZ4WgiU2Ww/4RbjAeO71qkOhcF+1DYKDs8Uv/J+FQu71D/LmL/14iSTzHmFuMBG3SCsnXrVqxYsQJZWVkQBAHr1q3rdbsoinj00UeRmZmJ2NhYFBUV4ejRo73u09raipUrV8JkMsFiseD2229HRwe3t1FAYbCCsq+6HZ1ur8LRhK+T/Sd8Q6T+Sa+7kopWeH2cQxRqldxiPGiDTlA6Ozsxe/ZsPPvss33e/uSTT+JPf/oTnn/+eZSUlCA+Ph5LliyBy+WS77Ny5UocOnQIGzZswPvvv4+tW7fizjvvHPpVUETJSY5DdlIsvH4RO05w2+NQyTt4WEGhAZieaYIlTo8Otxf7a+1KhxNxKrjFeNAGnaAsW7YMjz/+OK677rozbhNFEX/4wx/w8MMP45prrsGsWbPw8ssvo66uTq60lJaWYv369fjb3/6GgoICLFiwAM888wzeeOMN1NXVDfuCKDIUjue2x+E61hhMUFhBoQHQaAS+7kYQKyiDF9IelIqKCthsNhQVFcnfM5vNKCgoQHFxMQCguLgYFosF8+bNk+9TVFQEjUaDkpKSPh/X7XbD4XD0+qLIJm17ZKPs0HT1eFFnD1Qt2YNCAyU1yu7huTwh1d7Vg/au4CnGbJIdsJAmKDabDQCQkZHR6/sZGRnybTabDenp6b1u1+l0SE5Olu9zujVr1sBsNstfOTk5oQybVKhwfKBh72CtHfbgC5sGTuo/SY43IImHBNIAzco2AwD213CJJ5SkCbIZJiPiDDqFowkfYbGLZ/Xq1bDb7fJXdXW10iHRCLOaYzA+NR5+ESipYBVlsI43S2fwsJxMAzc90wyNADQ63WhwuPr/ARoQaYIsB7QNTkgTFKvVCgBoaGjo9f2Ghgb5NqvVisbGxl63e71etLa2yvc5ndFohMlk6vVFka+Q81CGTOo/4fIODUasQYvJGYkAWEUJJemQQCYogxPSBGXcuHGwWq3YuHGj/D2Hw4GSkhIUFhYCAAoLC9He3o5du3bJ99m0aRP8fj8KCgpCGQ6FOc5lGDq5gsIGWRqkmWMCyzwHeKJ4yMgVFM5AGZRBL4Z1dHSgvLxc/v+Kigrs3bsXycnJyM3Nxb333ovHH38ckyZNwrhx4/DII48gKysL1157LQBg2rRpWLp0Ke644w48//zz8Hg8WLVqFW666SZkZWWF7MIo/EknGx+2OdHS4UZKglHhiMIHKyg0VDOzzXhrVw32VLcrHUrE4CnGQzPoCsrOnTuRn5+P/Px8AMD999+P/Px8PProowCA//zP/8Q999yDO++8E/Pnz0dHRwfWr1+PmJgY+TFeffVVTJ06FYsXL8by5cuxYMECvPDCCyG6JIoUKQlGTLUGys3bjnMeykD5/aI8tZKHBNJgFYwLLK3uONHKAztDQBRFeSYRKyiDM+gKyqJFiyCKZz/tUhAE/OpXv8KvfvWrs94nOTkZr7322mD/aIpCF45PwWGbE18da8aVszKVDics1Dtc6Pb4oNcKyEmKVTocCjOTMxKQnmhEo9ON3ZVtuGhiqtIhhbWatm44XV7otQIrmoMUFrt4KHrx4MDBOxScAjohLQE6HhJIgyQIAhZMCiQlW4/y4MDhKq0PzO2amJ4Ig46vx8Hg3xapWsH4FGiEwFwPm53bHgdC6h3Iz7UoGgeFr4WT0gAAnx9tUjiS8HfY5gQATMtMVDiS8MMEhVTNHKvHeVmBXQXFx/lpbiB2VwamgObnJCkcCYWri4PLOofqHGjucCscTXiTKijTrByPMVhMUEj15GUebjful9fnl+dXsIJCQ5WWaMT0zMAv1C/L+cFgOOQEJZMJymAxQSHVkwa2fcUEpV9lDU50e3xINOowIY0NeTR0lwT7UD5nH8qQdbq9qGwNbDHmEs/gMUEh1Zs/Nhk6jYCatm5UB1/s1Lc9Ve0AgDm5Fmg0grLBUFi75JQ+lHPt3KSzO2xzQhSB9EQj5zgNARMUUr14ow6zcywAuMzTHylByQ/+fREN1byxSdBpBDQ43Kht71Y6nLDE5Z3hYYJCYaFwvLTMw3LzueypDjbI5rJBloYnRq/FlOCgxAM8l2dImKAMDxMUCgunzkNhublv7V09ON4UmCA7hxUUCoFZ2RYAwP5aJihDwS3Gw8MEhcLC+XlJMOg0aHC45YPwqLe9wfkn41PjkRRvUDYYigizsqWDA5mgDJbfL+IwKyjDwgSFwkKMXovzg9tmuZunb9J5RXO4vZhCRDrZeH9NOyuXg1TT1o3OHh8MOg3G8wyeIWGCQmHjogmBbY/bmKCcQRRFfHLIBgBYNCVd4WgoUkyxBsazO1xe1LSxUXYwjjYGlnd45MTQ8W+NwkbhKX0ofj8/zZ2qvLEDx5s7YdBqcNmUNKXDoQih12qQbQkcOFndxi3+g1HeGDjBeEIaqydDxQSFwsbsbAti9Vq0dvbgSPDTCQV8HKyeXDwxBYkxeoWjoUiSFUxQ6tt5FtZgHGuSEhQOTBwqJigUNgw6DeaPSwYAfFXOZZ5TfXyoAQCw5DyrwpFQpMk0xwAA6u1c4hmMY8EddRPTmaAMFRMUCisn56EwQZHUtnfjQK0dGgEomp6hdDgUYTKDFZRaVlAGTBTFU5Z4mKAMFRMUCisXBCso+2ralQ1ERaTm2Hl5yUjlOG0KsTEWVlAGq6WzB/ZuDwQBGM8elCFjgkJhZWpwsmWT040WHgMPr8+Pf+6oBgBccR6rJxR6mWb2oAxWWXBAW3ZSLGL0WoWjCV9MUCisxBt1yEuJA3DyTSCavfTVCRy2OWGO1eO6/DFKh0MRKCtYQaljBWXAXtlWCQCYn5escCThjQkKhR2pilIa5QlKTVsXfvfJEQDAz5ZP5WmpNCKkCorT5YXT5VE4GvU7bHPgo4OBZde7Fk1QOJrwxgSFws4Ua2BsdJnNoXAkynrsnUPo9vhwwdhkfGtujtLhUISKN+pgjg1sXa+3c5mnP89sKgcALJ9pxeQMnsEzHExQKOxMC1ZQDkdxBWXniVZsPNwIvVbAf10/AxqNoHRIFMGkWSjVrRzWdi5HG5z48EA9AOCeyycpHE34Y4JCYUc6Av5IgxO+KJ0o+/yWYwCAG87PxsR0fkqjkSV9KNjPQwPP6ZlN5RBFYMl5GTwgMASYoFDYyUuJR4xeA5fHj8qW6DvZ+KMD9fi0tBGCANy5cLzS4VAUkA6g3BM8MZvOVN7Ygff21wFg9SRUmKBQ2NFqBHltN9p28nxZ3oyfvLEXAHBr4ViM5xAoGgVzciwAgH3V7TwH6yz+8lmgelI0LQMzgqdA0/AwQaGwFI07eQ7bHLjz5Z3o8fmxbIYVj1w1XemQKEpMtZpg1Glg7/agIgqrlv050dyJdXtrAQA/XjxR4WgiBxMUCkvRuJNnzYeH0dnjQ+H4FPzhpjnQsjGWRolBp5GrArsq2xSORn2e/awcfhG4bEoaZmVblA4nYjBBobAUbTt59la3Y8uRJmg1An5zwywYdZxOSaPr4ompAID399crHIm6tHb24J29wd6Txew9CSUmKBSWpJ08Va1d6HB7FY5m5P3x08BAtuvyxyA3OEmXaDRdH5xU/MXRJjQ4OA9F8vbuGvT4/JgxxoTzc5OUDieiMEGhsJSSYEReShxEEdhY2qB0OCNqX3U7PitrgkYAVl3G9W1SxtjUeMzLS4JfBNbtqVU6HFXw+UW8vr0KAHDzBbkKRxN5mKBQ2Lp6dhYAyOXVSPWXzYHJlNfOGYOxqTwZlZRz9ZzAa27j4UaFI1GHl746gWNNnUiM0cnvRxQ6TFAobF0zJ1By3nKkKWJPNm50uPBpaeCXwQ95rgcp7NLJaQCA3ZVtUbG0ei7VrV146uMyAMDqZdOQGKNXOKLIwwSFwtbE9ATMHGOGzy/igwOR2bj31q4a+Pwi5uUlYRLP9SCF5aXEIy8lDl6/iOJjLUqHoxhRFPGztQfQ7fGhYFwybprPs7BGAhMUCmvXBEvOkbgm7veL+OeOagDATVzfJpVYOClQRdlyJHqXebYebcbnR5th1GnwxA2zeBbWCGGCQmHt6tlZ0AjA7qp2VLVE1kFmxcdbUNXahUSjDstnWpUOhwgAcPnUdADA+oM2eHx+haNRxvv7An1v356Xg3HsCxsxTFAorKWbYnDRhMB8hg8PRtYyzxvB6sk1+VmIM+gUjoYoYMGkVKQmGNHc0YMtZU1KhzPqvD4/NgR3Di7jB4cRxQSFwl7RtMAnus1lkVNybu3swccHbQCAm+ZzeYfUQ6/V4Lr8wNLq/+2qUTia0VdS0Yr2Lg+S4w24YGyy0uFENCYoFPYWTQkkKDtPtMHp8igcTWicOvyJB4+R2twwNxsAsPFwA1o7exSOZnR9FKzUXjE9Azotf4WOJP7tUtgbmxqPcanx8PpFfFke/jsLRPGU5lhWT0iFplpNmDnGDI9PxDt7I69B/Wz8fhEfHwos7yyZweWdkcYEhSLCoimBnQUfqmi7sSiK+N0nZbjtpR1odA58NPi246042tiBGL1GHoxFpDbfDFZR3toZPcs8u6va0OR0IzFGh4uDvW80cpigUES4Pj/wZrn+kA32LnUs8zy35Rie2VSOTYcbcftLO9E5wMFWL2w9BiDwC8DE4U+kUlfPzoJBq8HX9Q7sr2lXOpxR8W5w907RtAwYdPz1OdL4N0wRYcYYE6ZlmtDj9WOdCkrO6w/W48n1gSmTsXotDtTaseq13fD2sy3zsM2Bz8qaIAjADxaMH41QiYYkKd4gb39/ZVulwtGMPHu3R24Kvv78MQpHEx2YoFBEEAQBN84LVFHe2FENURQVi+VIgxP3/XMfAOC7hXl49Y4CxOg1+KysCT95Yy96vGdPUl7YehwAsGyGlefukOr924V5AAKVBXu3OiqXI+WN7VXo6vFhSkYiFkzk8s5oYIJCEePa/DEw6DQorXfgYK1DkRi6e3xY9dpudHt8uHhiCh69ajrOz03Cn28+H3qtgA8O1OOWv5eguY+zg443deDd4MGH/76Q5+6Q+s3NS8JUayJcHj/e3h3aXpRdla3YV92uimFwHp8fL311AgBw+yXjIAicHDsamKBQxLDEGbDkvEDJ+Z87qxSJ4VfvH8KRhg6kJRrxhxvz5W2IRdMz8Ldb5yPBqENJRStWPPMFPjpQj7r2bnx1rBl3v7obS//wObx+EQXjkjE7x6JI/ESDIQgCVhYEdpq9WlIVssrlX7cexw3PFeOaZ7/ErF98gpteKMZTH5dhe0XrWX/G7xdhs7vQ3eNDe1cPatq6UGZzYldlG+rau4cVz4cH6lFvdyE1wSgfr0EjTxCVrIUPkcPhgNlsht1uh8lkUjocUpEvjjbj3/5egsQYHXb8vAgxeu2o/dnrD9bjrld2QxCAV24vwMV9lIHLG52483934XhTZ5+PceH4ZDx5w2zkpsSNdLhEIeF0eVDwXxvR1ePD63dciMIJKcN6vI8P2fDv/7sLAJBg1J1xavJvvzkL35qXA6fLg1i9FjqtBqIo4oG39uHt3X33n8UZtFh398WYPIQDN0VRxIo/f4GDtQ488I3JuGfxpMFfFMkG8/ub87Mpolw0IQXZSbGoaevGRwfrcV1wd89Ic7g8ePSdQwCAuy6d0GdyAgAT0xPxzt0X46mPy7DteCuONXVAoxHw7XnZuGl+LoeyUdhJjNHj2vwxeK2kCq+WVA4rQWnt7MHP1x4AAHzvorF49KrpKG/qwM4TbdhY2oCNhxvx24/LkGDU4d5/7kVijA7fmG6Fo9tzxonmBp0GCUYdfH4R9m4PVr22G++uWjDoDy3bK1pxsNYBo06DlcGeGxodTFAoomg0Ar41Nwe///QI3thePWoJyu8+LkOj042xKXH4ST+fsBJj9PjlNTMAAG6vD6KIUa30EIXavxXk4bWSKnx8yIYmpxtpicYhPc6j7xxEc0cPpmQkYvXyqdBoBEzOSMTkjETcMHcMFv9uC2rauvHDV3cDANwdPXh9+8nl3PuKJuO2BWMRo9dCH1xebXK6seyPn+NIQwd+9f7X+K/rZg4qpr9+XgEgMD03Od4wpOuioWEPCkWcb83LhiAEzsyobh35E473Vbfj5eA2y8evnTmoZMOo0zI5obA3PcuE/FwLPD4RP197AH7/wDsHPD4/tle04v+9/zXe318PrUbAU9+aDaOu9+vCqNPiietnwRIXmA10yaRU/Pctc/HvC8fjxnk5+H/XzsDdl01AYoxeTk4AIC3RiN/fOBsA8FpJ1aCGOb6+vQqfljZAEIDbLh434J+j0GAFhSJOliUWheNT8NWxFryztxarLh+5NWOvz4/Vbx+AKALXzsnCgkncfkjR6eErp+PmF7bhk68b8Ni7h/Cra87rd7eL1+fHzS9sw87KNvl7P1o0ATOz+17qXDApFTt/XoTK1i6MTYmHViPIjfHncsmkNPxw0QQ8t/kYfvqv/Zg5xoyc5HP3eX1+tAkPrzsIAPjx5ZMwMT2h3z+HQosVFIpI1+UHBim9vad2RGeivPTVCXxd74A5Vo+Hr5o+Yn8OkdrNzUvCb781C4IA/O+2Sjzx0eF+f2bd3jrsrGxDrF6LFbOz8PsbZ+O+osnn/BmdVoMJaQnQaga31ff+b0xGfq4FTpcXP35jzzm3L39xtBk/emU3fH4R1+WPwb1FbIxVAhMUikjLZmYiRq/B8aZOHKobmZko9m4P/rjxKADgoWVTkZowtHV3okhxzZwx+M31swAA/731+Flno3h8fnywvx6/+yQwbfknRZPwzM35uC4/G5pBJh4Dpddq8Keb8pEYo8OeqnY8veHIGffx+vx4esMR3PI/JXC6vbhgXDKeuGEm554ohEs8FJESjDosmpyO9YdsWH/QNiK7Y1768gScLi8mpSfgxnk5IX98onD07fk5qGrtwp8/K8dDbx9AbnIc5uYlQRAE9Hj9+OfOavzls3LU2wMHaI6xxOK7haOzOyYnOQ6/uWEWfvTqbjy3+Rj2VLVhckYikuIMMMfq8dHBeuw4EVhuunFeDn55zXln9MLQ6GGCQhFr2Uwr1h+y4cMD9Xjgiskh/RTkdHnw9y8CY+nvWTxpxD71EYWj+78xGaX1Dmw83IhvPl+MOIMWeSnxcHR7UBscmpaaYMB3LsjFLYVjEWcYvV9Fy2dm4jsFuXitpArbjrdi2/Hew98SjDr8+roZuGYOz9tRGhMUiliXT02HQafB8eZO7K+xh3Q668vFlXC4vJiQFo8rZ2aG7HGJIoFGI+D3N83BD1/Zha+OtaCrx4fS+sBSa2qCET9ePBE3zs9RrDrx6FXTkRxngE8UodMIaO3sgb3bg3iDDj+6bALyUngOlhqEPEHx+Xz4xS9+gVdeeQU2mw1ZWVn43ve+h4cfflj+BCuKIh577DH89a9/RXt7Oy6++GI899xzmDSJjUgUOokxeiyfYcW6vXV46pMy/O/tBSF53E63F3/9PFg9uXzSoJv1iKKBKUaPV39wIdxeH6pbu1HZ0omuHh8WT0sf1YpJX2L0WvzHkimKxkD9C3mT7G9+8xs899xz+POf/4zS0lL85je/wZNPPolnnnlGvs+TTz6JP/3pT3j++edRUlKC+Ph4LFmyBC6XK9ThUJR74IopMGg1+PxoM7YcaQrJY67bW4v2Lg/yUuJw1SxWT4jOxajTYmJ6AhZPy8CK2VmKJycUPkKeoHz11Ve45pprcOWVV2Ls2LH45je/iSuuuALbt28HEKie/OEPf8DDDz+Ma665BrNmzcLLL7+Muro6rFu3LtThUJTLSY6TG/DWfFgK3yAGSPVFFEW8/FVgKNstF+bJhwESEVFohfzd9aKLLsLGjRtx5EhgC9e+ffvwxRdfYNmyZQCAiooK2Gw2FBUVyT9jNptRUFCA4uLiPh/T7XbD4XD0+iIaqFWXT4QpRofDNif+Ncwj4f+1uxZlDU7E6DX41lzu3CEiGikhT1Aeeugh3HTTTZg6dSr0ej3y8/Nx7733YuXKlQAAm80GAMjIyOj1cxkZGfJtp1uzZg3MZrP8lZPDXww0cJY4A1ZdPhEA8PQnR9Dd4xvS42w90oSH/rUfAHDHJeNhDo7cJiKi0At5gvLmm2/i1VdfxWuvvYbdu3fjH//4B5566in84x//GPJjrl69Gna7Xf6qrq4OYcQUDb5bOBZjLLGwOVz4ny8rBv3z+2vacdcru+D1i7h6dla/0y6JiGh4Qp6gPPjgg3IVZebMmbjllltw3333Yc2aNQAAqzVwbkJDQ0Ovn2toaJBvO53RaITJZOr1RTQYMXot/nNpoGv/uc3H0NzhHvDPnmjuxPdf3IGuHh8WTEzFU9+azbknREQjLOQJSldXFzSa3g+r1Wrh9wfOPRg3bhysVis2btwo3+5wOFBSUoLCwsJQh0MkWzErCzPGmNDh9uKpj8sG9DNNTjdufXE7Wjp7cF6WCc/92/kw6NgYS0Q00kL+TrtixQr8+te/xgcffIATJ05g7dq1ePrpp3HdddcBAARBwL333ovHH38c7777Lg4cOIDvfve7yMrKwrXXXhvqcIhkGo2Any8PHOj3xo5qvNTPUk+jw4Vb/l6CypYu5CTH4sXvz0diDPtOiIhGgyCG+KhXp9OJRx55BGvXrkVjYyOysrJw880349FHH4XBYABwclDbCy+8gPb2dixYsAB/+ctfMHnywNb1HQ4HzGYz7HY7l3to0J79rBy//bgMggA8/29z+zyuvaK5E9/9nxJUt3YjNcGIt+4qxLhUTpckIhqOwfz+DnmCMhqYoNBwiKKIn609iNe3V8Gg0+Dpb8/GlTMzIQgC3F4f3t1bh//6sBRtwWFs/3tbAXJT4pQOm4go7DFBIeqH1+fHqtf2YP2hwNZ2qykGM8aYUHK8FU63FwAwY4wJL37vAqQlGpUMlYgoYgzm9zdnDlNU0mk1+PN38vHER4fxSkklbA4XbI7AUQtWUwy+e1EefrBgPBtiiYgUwgoKRT2Xx4eSilaU1jswLy8J5+cmcRsxEdEIYAWFaBBi9FpcOjkNl05OUzoUIiIKYv2aiIiIVIcJChEREakOExQiIiJSHSYoREREpDpMUIiIiEh1mKAQERGR6jBBISIiItVhgkJERESqwwSFiIiIVIcJChEREakOExQiIiJSHSYoREREpDpMUIiIiEh1wvI0Y1EUAQSObSYiIqLwIP3eln6Pn0tYJihOpxMAkJOTo3AkRERENFhOpxNms/mc9xHEgaQxKuP3+1FXV4fExEQIghDSx3Y4HMjJyUF1dTVMJlNIH1steI2RgdcYGXiNkYHXODCiKMLpdCIrKwsazbm7TMKygqLRaJCdnT2if4bJZIrYf2QSXmNk4DVGBl5jZOA19q+/yomETbJERESkOkxQiIiISHWYoJzGaDTiscceg9FoVDqUEcNrjAy8xsjAa4wMvMbQC8smWSIiIopsrKAQERGR6jBBISIiItVhgkJERESqwwSFiIiIVIcJyimeffZZjB07FjExMSgoKMD27duVDmnIfvGLX0AQhF5fU6dOlW93uVy4++67kZKSgoSEBNxwww1oaGhQMOL+bd26FStWrEBWVhYEQcC6det63S6KIh599FFkZmYiNjYWRUVFOHr0aK/7tLa2YuXKlTCZTLBYLLj99tvR0dExildxbv1d4/e+970zntelS5f2uo/ar3HNmjWYP38+EhMTkZ6ejmuvvRZlZWW97jOQf59VVVW48sorERcXh/T0dDz44IPwer2jeSlnNZBrXLRo0RnP5V133dXrPmq+xueeew6zZs2Sh3YVFhbio48+km8P9+cQ6P8aw/057MsTTzwBQRBw7733yt9T7LkUSRRFUXzjjTdEg8Eg/s///I946NAh8Y477hAtFovY0NCgdGhD8thjj4nnnXeeWF9fL381NTXJt991111iTk6OuHHjRnHnzp3ihRdeKF500UUKRty/Dz/8UPz5z38uvv322yIAce3atb1uf+KJJ0Sz2SyuW7dO3Ldvn3j11VeL48aNE7u7u+X7LF26VJw9e7a4bds28fPPPxcnTpwo3nzzzaN8JWfX3zXeeuut4tKlS3s9r62trb3uo/ZrXLJkifjiiy+KBw8eFPfu3SsuX75czM3NFTs6OuT79Pfv0+v1ijNmzBCLiorEPXv2iB9++KGYmpoqrl69WolLOsNArvHSSy8V77jjjl7Ppd1ul29X+zW+++674gcffCAeOXJELCsrE3/2s5+Jer1ePHjwoCiK4f8cimL/1xjuz+Hptm/fLo4dO1acNWuW+JOf/ET+vlLPJROUoAsuuEC8++675f/3+XxiVlaWuGbNGgWjGrrHHntMnD17dp+3tbe3i3q9Xnzrrbfk75WWlooAxOLi4lGKcHhO/+Xt9/tFq9Uq/va3v5W/197eLhqNRvH1118XRVEUv/76axGAuGPHDvk+H330kSgIglhbWztqsQ/U2RKUa6655qw/E27XKIqi2NjYKAIQt2zZIoriwP59fvjhh6JGoxFtNpt8n+eee040mUyi2+0e3QsYgNOvURQDv9xO/SVwunC7RlEUxaSkJPFvf/tbRD6HEukaRTGynkOn0ylOmjRJ3LBhQ6/rUvK55BIPgJ6eHuzatQtFRUXy9zQaDYqKilBcXKxgZMNz9OhRZGVlYfz4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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "\n", "os.makedirs('fig', exist_ok=True)\n", "plt.plot(angles)\n", "plt.xlabel('Frame')\n", "plt.ylabel('Knee Angle')\n", "plt.title('Evolution of the knee angle')\n", "plt.savefig('fig/knee_angle.png')" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "AIMessage(content=\"Who's there?\\n\\n(Please provide the next line of the knock-knock joke.)\", response_metadata={'token_usage': {'prompt_tokens': 5, 'total_tokens': 26, 'completion_tokens': 21}, 'model': 'mistral-large-latest', 'finish_reason': 'stop'}, id='run-f72f8b00-6073-439e-9b82-cc50101f0809-0')" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from langchain_core.messages import HumanMessage\n", "from langchain_mistralai.chat_models import ChatMistralAI\n", "\n", "# If api_key is not passed, default behavior is to use the `MISTRAL_API_KEY` environment variable.\n", "llm = ChatMistralAI(model='mistral-large-latest', api_key=\"i5jSJkCFNGKfgIztloxTMjfckiFbYBj4\")\n", "messages = [HumanMessage(content=\"knock knock\")]\n", "llm.invoke(messages)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 83, "metadata": {}, "outputs": [], "source": [ "# Import things that are needed generically\n", "from langchain.pydantic_v1 import BaseModel, Field\n", "from langchain.tools import tool\n", "\n", "@tool\n", "def compute_right_knee_angle(pose: list) -> float:\n", "\n", " \"\"\"\n", " Computes the knee angle.\n", "\n", " Args:\n", " pose (list): list of keypoints\n", "\n", " Returns:\n", " knee_angle (float): knee angle\n", " \"\"\"\n", "\n", " right_hip = pose[joints_id_dict['right_hip']]\n", " right_knee = pose[joints_id_dict['right_knee']]\n", " right_ankle = pose[joints_id_dict['right_ankle']]\n", "\n", " knee_angle = calculate_angle(right_hip, right_knee, right_ankle)\n", "\n", " print(knee_angle)\n", "\n", " return str(knee_angle)\n", "\n", "@tool\n", "def get_keypoints_from_path(video_path: str):\n", " \"\"\"\n", " Get keypoints from a video.\n", "\n", " Args:\n", " video_path (str): path to the video\n", " model (YOLO): model to use\n", "\n", " Returns:\n", " keypoints (list): list of keypoints\n", " \"\"\"\n", "\n", " keypoints = []\n", " results = model(video_path, save=True, show_conf=False, show_boxes=False)\n", " for frame in results:\n", " tensor = frame.keypoints.xy[0]\n", " keypoints.append(tensor.tolist())\n", "\n", " return keypoints" ] }, { "cell_type": "code", "execution_count": 84, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "\n", "WARNING ⚠️ inference results will accumulate in RAM unless `stream=True` is passed, causing potential out-of-memory\n", "errors for large sources or long-running streams and videos. See https://docs.ultralytics.com/modes/predict/ for help.\n", "\n", "Example:\n", " results = model(source=..., stream=True) # generator of Results objects\n", " for r in results:\n", " boxes = r.boxes # Boxes object for bbox outputs\n", " masks = r.masks # Masks object for segment masks outputs\n", " probs = r.probs # Class probabilities for classification outputs\n", "\n", "video 1/1 (frame 1/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 140.3ms\n", "video 1/1 (frame 2/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 160.4ms\n", "video 1/1 (frame 3/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 222.3ms\n", "video 1/1 (frame 4/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 156.6ms\n", "video 1/1 (frame 5/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 190.2ms\n", "video 1/1 (frame 6/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 190.0ms\n", "video 1/1 (frame 7/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 166.8ms\n", "video 1/1 (frame 8/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 187.1ms\n", "video 1/1 (frame 9/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 199.7ms\n", "video 1/1 (frame 10/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 166.0ms\n", "video 1/1 (frame 11/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 130.8ms\n", "video 1/1 (frame 12/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 140.1ms\n", "video 1/1 (frame 13/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 259.1ms\n", "video 1/1 (frame 14/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 234.3ms\n", "video 1/1 (frame 15/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 141.8ms\n", "video 1/1 (frame 16/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 134.8ms\n", "video 1/1 (frame 17/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 136.7ms\n", "video 1/1 (frame 18/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 148.5ms\n", "video 1/1 (frame 19/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 117.3ms\n", "video 1/1 (frame 20/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 128.7ms\n", "video 1/1 (frame 21/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 125.8ms\n", "video 1/1 (frame 22/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 120.0ms\n", "video 1/1 (frame 23/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 125.8ms\n", "video 1/1 (frame 24/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 115.9ms\n", "video 1/1 (frame 25/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 165.2ms\n", "video 1/1 (frame 26/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 116.3ms\n", "video 1/1 (frame 27/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 189.5ms\n", "video 1/1 (frame 28/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 212.3ms\n", "video 1/1 (frame 29/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 192.5ms\n", "video 1/1 (frame 30/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 170.5ms\n", "video 1/1 (frame 31/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 158.8ms\n", "video 1/1 (frame 32/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 166.6ms\n", "video 1/1 (frame 33/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 151.0ms\n", "video 1/1 (frame 34/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 153.6ms\n", "video 1/1 (frame 35/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 172.3ms\n", "video 1/1 (frame 36/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 227.4ms\n", "video 1/1 (frame 37/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 145.4ms\n", "video 1/1 (frame 38/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 170.7ms\n", "video 1/1 (frame 39/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 122.0ms\n", "video 1/1 (frame 40/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 116.7ms\n", "video 1/1 (frame 41/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 188.8ms\n", "video 1/1 (frame 42/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 147.0ms\n", "video 1/1 (frame 43/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 171.9ms\n", "video 1/1 (frame 44/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 147.8ms\n", "video 1/1 (frame 45/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 115.6ms\n", "video 1/1 (frame 46/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 143.7ms\n", "video 1/1 (frame 47/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 132.5ms\n", "video 1/1 (frame 48/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 125.3ms\n", "video 1/1 (frame 49/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 116.8ms\n", "video 1/1 (frame 50/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 118.9ms\n", "video 1/1 (frame 51/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 138.3ms\n", "video 1/1 (frame 52/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 123.8ms\n", "video 1/1 (frame 53/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 126.7ms\n", "video 1/1 (frame 54/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 123.6ms\n", "video 1/1 (frame 55/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 120.0ms\n", "video 1/1 (frame 56/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 146.3ms\n", "video 1/1 (frame 57/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 127.0ms\n", "video 1/1 (frame 58/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 142.8ms\n", "video 1/1 (frame 59/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 201.3ms\n", "video 1/1 (frame 60/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 151.2ms\n", "video 1/1 (frame 61/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 144.8ms\n", "video 1/1 (frame 62/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 133.2ms\n", "video 1/1 (frame 63/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 131.8ms\n", "video 1/1 (frame 64/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 180.7ms\n", "video 1/1 (frame 65/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 158.7ms\n", "video 1/1 (frame 66/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 128.0ms\n", "video 1/1 (frame 67/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 132.9ms\n", "video 1/1 (frame 68/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 127.5ms\n", "video 1/1 (frame 69/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 125.3ms\n", "video 1/1 (frame 70/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 173.3ms\n", "video 1/1 (frame 71/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 181.7ms\n", "video 1/1 (frame 72/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 135.3ms\n", "video 1/1 (frame 73/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 136.4ms\n", "video 1/1 (frame 74/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 176.6ms\n", "video 1/1 (frame 75/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 154.9ms\n", "video 1/1 (frame 76/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 134.9ms\n", "video 1/1 (frame 77/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 131.2ms\n", "video 1/1 (frame 78/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 130.1ms\n", "video 1/1 (frame 79/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 121.9ms\n", "video 1/1 (frame 80/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 134.1ms\n", "video 1/1 (frame 81/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 128.8ms\n", "video 1/1 (frame 82/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 123.4ms\n", "video 1/1 (frame 83/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 118.8ms\n", "video 1/1 (frame 84/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 162.0ms\n", "video 1/1 (frame 85/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 130.4ms\n", "video 1/1 (frame 86/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 134.2ms\n", "video 1/1 (frame 87/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 121.1ms\n", "video 1/1 (frame 88/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 125.9ms\n", "video 1/1 (frame 89/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 122.7ms\n", "video 1/1 (frame 90/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 121.5ms\n", "video 1/1 (frame 91/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 131.3ms\n", "video 1/1 (frame 92/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 137.9ms\n", "video 1/1 (frame 93/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 151.3ms\n", "video 1/1 (frame 94/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 137.7ms\n", "video 1/1 (frame 95/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 124.8ms\n", "video 1/1 (frame 96/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 136.5ms\n", "video 1/1 (frame 97/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 171.1ms\n", "video 1/1 (frame 98/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 160.2ms\n", "video 1/1 (frame 99/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 126.9ms\n", "video 1/1 (frame 100/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 139.6ms\n", "video 1/1 (frame 101/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 134.6ms\n", "video 1/1 (frame 102/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 127.5ms\n", "video 1/1 (frame 103/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 125.4ms\n", "video 1/1 (frame 104/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 136.2ms\n", "video 1/1 (frame 105/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 138.9ms\n", "video 1/1 (frame 106/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 124.7ms\n", "video 1/1 (frame 107/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 126.3ms\n", "video 1/1 (frame 108/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 147.9ms\n", "video 1/1 (frame 109/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 132.9ms\n", "video 1/1 (frame 110/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 164.8ms\n", "video 1/1 (frame 111/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 142.5ms\n", "video 1/1 (frame 112/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 137.2ms\n", "video 1/1 (frame 113/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 139.1ms\n", "video 1/1 (frame 114/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 125.0ms\n", "video 1/1 (frame 115/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 126.9ms\n", "video 1/1 (frame 116/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 132.9ms\n", "video 1/1 (frame 117/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 144.9ms\n", "video 1/1 (frame 118/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 248.0ms\n", "video 1/1 (frame 119/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 131.5ms\n", "video 1/1 (frame 120/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 138.5ms\n", "video 1/1 (frame 121/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 140.4ms\n", "video 1/1 (frame 122/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 166.1ms\n", "video 1/1 (frame 123/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 123.5ms\n", "video 1/1 (frame 124/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 137.1ms\n", "video 1/1 (frame 125/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 133.1ms\n", "video 1/1 (frame 126/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 138.7ms\n", "video 1/1 (frame 127/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 121.6ms\n", "video 1/1 (frame 128/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 130.2ms\n", "video 1/1 (frame 129/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 129.7ms\n", "video 1/1 (frame 130/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 122.8ms\n", "video 1/1 (frame 131/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 120.3ms\n", "video 1/1 (frame 132/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 132.7ms\n", "video 1/1 (frame 133/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 129.8ms\n", "video 1/1 (frame 134/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 121.9ms\n", "video 1/1 (frame 135/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 134.4ms\n", "video 1/1 (frame 136/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 148.5ms\n", "video 1/1 (frame 137/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 134.8ms\n", "video 1/1 (frame 138/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 125.2ms\n", "video 1/1 (frame 139/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 122.3ms\n", "video 1/1 (frame 140/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 139.2ms\n", "video 1/1 (frame 141/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 129.4ms\n", "video 1/1 (frame 142/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 128.5ms\n", "video 1/1 (frame 143/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 127.5ms\n", "video 1/1 (frame 144/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 134.5ms\n", "video 1/1 (frame 145/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 210.8ms\n", "video 1/1 (frame 146/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 122.1ms\n", "video 1/1 (frame 147/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 137.3ms\n", "video 1/1 (frame 148/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 161.3ms\n", "video 1/1 (frame 149/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 135.2ms\n", "video 1/1 (frame 150/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 123.6ms\n", "video 1/1 (frame 151/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 120.9ms\n", "video 1/1 (frame 152/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 129.9ms\n", "video 1/1 (frame 153/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 126.2ms\n", "video 1/1 (frame 154/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 124.3ms\n", "video 1/1 (frame 155/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 120.9ms\n", "video 1/1 (frame 156/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 130.9ms\n", "video 1/1 (frame 157/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 132.2ms\n", "video 1/1 (frame 158/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 122.6ms\n", "video 1/1 (frame 159/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 120.9ms\n", "video 1/1 (frame 160/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 169.3ms\n", "video 1/1 (frame 161/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 169.8ms\n", "video 1/1 (frame 162/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 124.6ms\n", "video 1/1 (frame 163/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 121.0ms\n", "video 1/1 (frame 164/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 135.9ms\n", "video 1/1 (frame 165/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 126.4ms\n", "video 1/1 (frame 166/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 126.5ms\n", "video 1/1 (frame 167/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 121.8ms\n", "video 1/1 (frame 168/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 130.3ms\n", "video 1/1 (frame 169/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 133.0ms\n", "video 1/1 (frame 170/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 120.0ms\n", "video 1/1 (frame 171/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 124.0ms\n", "video 1/1 (frame 172/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 136.7ms\n", "video 1/1 (frame 173/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 129.8ms\n", "video 1/1 (frame 174/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 130.9ms\n", "video 1/1 (frame 175/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 151.2ms\n", "video 1/1 (frame 176/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 130.7ms\n", "video 1/1 (frame 177/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 126.5ms\n", "video 1/1 (frame 178/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 122.3ms\n", "video 1/1 (frame 179/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 120.4ms\n", "video 1/1 (frame 180/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 129.2ms\n", "video 1/1 (frame 181/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 129.3ms\n", "video 1/1 (frame 182/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 119.1ms\n", "video 1/1 (frame 183/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 123.3ms\n", "video 1/1 (frame 184/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 130.3ms\n", "video 1/1 (frame 185/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 137.3ms\n", "video 1/1 (frame 186/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 121.6ms\n", "video 1/1 (frame 187/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 122.4ms\n", "video 1/1 (frame 188/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 128.2ms\n", "video 1/1 (frame 189/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 139.6ms\n", "video 1/1 (frame 190/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 122.4ms\n", "video 1/1 (frame 191/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 117.8ms\n", "video 1/1 (frame 192/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 128.1ms\n", "video 1/1 (frame 193/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 126.7ms\n", "video 1/1 (frame 194/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 125.6ms\n", "video 1/1 (frame 195/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 121.5ms\n", "video 1/1 (frame 196/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 129.6ms\n", "video 1/1 (frame 197/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 129.4ms\n", "video 1/1 (frame 198/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 126.8ms\n", "video 1/1 (frame 199/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 120.8ms\n", "video 1/1 (frame 200/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 133.8ms\n", "video 1/1 (frame 201/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 124.3ms\n", "video 1/1 (frame 202/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 141.5ms\n", "video 1/1 (frame 203/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 124.4ms\n", "video 1/1 (frame 204/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 134.5ms\n", "video 1/1 (frame 205/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 133.0ms\n", "video 1/1 (frame 206/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 125.5ms\n", "video 1/1 (frame 207/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 134.1ms\n", "video 1/1 (frame 208/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 157.0ms\n", "video 1/1 (frame 209/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 151.9ms\n", "video 1/1 (frame 210/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 148.7ms\n", "video 1/1 (frame 211/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 154.3ms\n", "video 1/1 (frame 212/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 154.5ms\n", "video 1/1 (frame 213/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 153.0ms\n", "video 1/1 (frame 214/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 152.4ms\n", "video 1/1 (frame 215/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 162.2ms\n", "video 1/1 (frame 216/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 154.5ms\n", "video 1/1 (frame 217/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 154.2ms\n", "video 1/1 (frame 218/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 119.6ms\n", "video 1/1 (frame 219/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 122.3ms\n", "video 1/1 (frame 220/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 118.6ms\n", "video 1/1 (frame 221/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 126.2ms\n", "video 1/1 (frame 222/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 148.2ms\n", "video 1/1 (frame 223/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 136.3ms\n", "video 1/1 (frame 224/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 173.5ms\n", "video 1/1 (frame 225/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 150.2ms\n", "video 1/1 (frame 226/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 155.0ms\n", "video 1/1 (frame 227/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 170.5ms\n", "video 1/1 (frame 228/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 126.3ms\n", "video 1/1 (frame 229/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 126.9ms\n", "video 1/1 (frame 230/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 140.5ms\n", "video 1/1 (frame 231/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 134.3ms\n", "video 1/1 (frame 232/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 124.1ms\n", "video 1/1 (frame 233/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 124.8ms\n", "video 1/1 (frame 234/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 143.8ms\n", "video 1/1 (frame 235/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 136.8ms\n", "video 1/1 (frame 236/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 122.7ms\n", "video 1/1 (frame 237/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 135.6ms\n", "video 1/1 (frame 238/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 151.1ms\n", "video 1/1 (frame 239/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 125.8ms\n", "video 1/1 (frame 240/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 158.7ms\n", "video 1/1 (frame 241/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 163.7ms\n", "video 1/1 (frame 242/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 138.7ms\n", "video 1/1 (frame 243/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 133.5ms\n", "video 1/1 (frame 244/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 147.8ms\n", "video 1/1 (frame 245/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 130.3ms\n", "video 1/1 (frame 246/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 139.0ms\n", "video 1/1 (frame 247/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 146.9ms\n", "video 1/1 (frame 248/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 151.7ms\n", "video 1/1 (frame 249/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 144.5ms\n", "video 1/1 (frame 250/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 159.8ms\n", "video 1/1 (frame 251/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 133.4ms\n", "video 1/1 (frame 252/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 196.9ms\n", "video 1/1 (frame 253/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 136.3ms\n", "video 1/1 (frame 254/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 156.3ms\n", "video 1/1 (frame 255/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 161.4ms\n", "video 1/1 (frame 256/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 135.2ms\n", "video 1/1 (frame 257/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 668.1ms\n", "video 1/1 (frame 258/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 293.2ms\n", "video 1/1 (frame 259/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 255.6ms\n", "video 1/1 (frame 260/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 126.0ms\n", "video 1/1 (frame 261/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 115.0ms\n", "video 1/1 (frame 262/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 118.7ms\n", "video 1/1 (frame 263/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 124.9ms\n", "video 1/1 (frame 264/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 124.1ms\n", "video 1/1 (frame 265/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 130.6ms\n", "video 1/1 (frame 266/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 134.7ms\n", "video 1/1 (frame 267/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 138.9ms\n", "video 1/1 (frame 268/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 128.5ms\n", "video 1/1 (frame 269/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 127.0ms\n", "video 1/1 (frame 270/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 140.0ms\n", "video 1/1 (frame 271/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 137.8ms\n", "video 1/1 (frame 272/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 127.4ms\n", "video 1/1 (frame 273/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 157.0ms\n", "video 1/1 (frame 274/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 124.5ms\n", "video 1/1 (frame 275/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 129.7ms\n", "video 1/1 (frame 276/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 133.2ms\n", "video 1/1 (frame 277/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 143.1ms\n", "video 1/1 (frame 278/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 126.9ms\n", "video 1/1 (frame 279/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 166.7ms\n", "video 1/1 (frame 280/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 145.3ms\n", "video 1/1 (frame 281/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 155.1ms\n", "video 1/1 (frame 282/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 136.2ms\n", "video 1/1 (frame 283/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 166.1ms\n", "video 1/1 (frame 284/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 193.9ms\n", "video 1/1 (frame 285/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 211.1ms\n", "video 1/1 (frame 286/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 205.2ms\n", "video 1/1 (frame 287/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 193.0ms\n", "video 1/1 (frame 288/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 232.3ms\n", "video 1/1 (frame 289/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 214.0ms\n", "video 1/1 (frame 290/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 146.5ms\n", "video 1/1 (frame 291/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 200.0ms\n", "video 1/1 (frame 292/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 189.1ms\n", "video 1/1 (frame 293/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 171.8ms\n", "video 1/1 (frame 294/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 368.1ms\n", "video 1/1 (frame 295/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 148.3ms\n", "video 1/1 (frame 296/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 122.0ms\n", "video 1/1 (frame 297/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 130.6ms\n", "video 1/1 (frame 298/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 135.9ms\n", "video 1/1 (frame 299/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 175.5ms\n", "video 1/1 (frame 300/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 189.2ms\n", "video 1/1 (frame 301/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 387.2ms\n", "video 1/1 (frame 302/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 242.4ms\n", "video 1/1 (frame 303/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 216.5ms\n", "video 1/1 (frame 304/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 254.1ms\n", "video 1/1 (frame 305/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 195.4ms\n", "video 1/1 (frame 306/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 339.0ms\n", "video 1/1 (frame 307/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 187.0ms\n", "video 1/1 (frame 308/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 205.6ms\n", "video 1/1 (frame 309/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 141.1ms\n", "video 1/1 (frame 310/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 180.9ms\n", "video 1/1 (frame 311/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 234.7ms\n", "video 1/1 (frame 312/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 137.0ms\n", "video 1/1 (frame 313/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 194.2ms\n", "video 1/1 (frame 314/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 190.5ms\n", "video 1/1 (frame 315/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 189.2ms\n", "video 1/1 (frame 316/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 142.2ms\n", "video 1/1 (frame 317/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 149.5ms\n", "video 1/1 (frame 318/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 114.9ms\n", "video 1/1 (frame 319/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 123.2ms\n", "video 1/1 (frame 320/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 191.0ms\n", "video 1/1 (frame 321/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 118.9ms\n", "video 1/1 (frame 322/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 241.8ms\n", "video 1/1 (frame 323/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 115.3ms\n", "video 1/1 (frame 324/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 126.6ms\n", "video 1/1 (frame 325/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 158.7ms\n", "video 1/1 (frame 326/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 117.7ms\n", "video 1/1 (frame 327/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 114.1ms\n", "video 1/1 (frame 328/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 174.9ms\n", "video 1/1 (frame 329/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 194.2ms\n", "video 1/1 (frame 330/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 147.2ms\n", "video 1/1 (frame 331/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 113.8ms\n", "video 1/1 (frame 332/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 116.6ms\n", "video 1/1 (frame 333/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 135.4ms\n", "video 1/1 (frame 334/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 166.3ms\n", "video 1/1 (frame 335/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 131.0ms\n", "video 1/1 (frame 336/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 118.8ms\n", "video 1/1 (frame 337/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 120.5ms\n", "video 1/1 (frame 338/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 129.7ms\n", "video 1/1 (frame 339/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 126.7ms\n", "video 1/1 (frame 340/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 124.2ms\n", "video 1/1 (frame 341/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 123.7ms\n", "video 1/1 (frame 342/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 135.5ms\n", "video 1/1 (frame 343/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 130.0ms\n", "video 1/1 (frame 344/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 121.6ms\n", "video 1/1 (frame 345/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 123.2ms\n", "video 1/1 (frame 346/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 144.0ms\n", "video 1/1 (frame 347/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 125.7ms\n", "video 1/1 (frame 348/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 153.1ms\n", "video 1/1 (frame 349/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 122.5ms\n", "video 1/1 (frame 350/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 139.9ms\n", "video 1/1 (frame 351/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 125.8ms\n", "video 1/1 (frame 352/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 147.1ms\n", "video 1/1 (frame 353/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 123.3ms\n", "video 1/1 (frame 354/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 135.6ms\n", "video 1/1 (frame 355/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 167.2ms\n", "video 1/1 (frame 356/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 152.9ms\n", "video 1/1 (frame 357/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 127.2ms\n", "video 1/1 (frame 358/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 145.0ms\n", "video 1/1 (frame 359/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 133.1ms\n", "video 1/1 (frame 360/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 130.5ms\n", "video 1/1 (frame 361/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 140.4ms\n", "video 1/1 (frame 362/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 128.7ms\n", "video 1/1 (frame 363/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 127.4ms\n", "video 1/1 (frame 364/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 122.0ms\n", "video 1/1 (frame 365/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 122.2ms\n", "video 1/1 (frame 366/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 156.5ms\n", "video 1/1 (frame 367/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 171.7ms\n", "video 1/1 (frame 368/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 230.8ms\n", "video 1/1 (frame 369/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 230.3ms\n", "video 1/1 (frame 370/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 585.8ms\n", "video 1/1 (frame 371/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 239.3ms\n", "video 1/1 (frame 372/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 191.2ms\n", "video 1/1 (frame 373/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 182.9ms\n", "video 1/1 (frame 374/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 166.0ms\n", "video 1/1 (frame 375/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 175.3ms\n", "video 1/1 (frame 376/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 167.2ms\n", "video 1/1 (frame 377/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 168.0ms\n", "video 1/1 (frame 378/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 172.9ms\n", "video 1/1 (frame 379/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 165.5ms\n", "video 1/1 (frame 380/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 276.7ms\n", "video 1/1 (frame 381/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 199.5ms\n", "video 1/1 (frame 382/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 170.3ms\n", "video 1/1 (frame 383/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 140.6ms\n", "video 1/1 (frame 384/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 161.2ms\n", "video 1/1 (frame 385/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 138.9ms\n", "video 1/1 (frame 386/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 144.6ms\n", "video 1/1 (frame 387/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 130.0ms\n", "video 1/1 (frame 388/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 150.8ms\n", "video 1/1 (frame 389/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 134.0ms\n", "video 1/1 (frame 390/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 131.6ms\n", "video 1/1 (frame 391/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 162.0ms\n", "video 1/1 (frame 392/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 134.1ms\n", "video 1/1 (frame 393/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 141.6ms\n", "video 1/1 (frame 394/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 238.5ms\n", "video 1/1 (frame 395/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 158.1ms\n", "video 1/1 (frame 396/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 121.8ms\n", "video 1/1 (frame 397/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 396.2ms\n", "video 1/1 (frame 398/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 463.3ms\n", "video 1/1 (frame 399/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 278.9ms\n", "video 1/1 (frame 400/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 211.4ms\n", "video 1/1 (frame 401/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 163.1ms\n", "video 1/1 (frame 402/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 163.2ms\n", "video 1/1 (frame 403/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 125.6ms\n", "video 1/1 (frame 404/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 163.0ms\n", "video 1/1 (frame 405/465) /Users/theorousseaux/Documents/Hackathon/FitnessEquation/Modules/PoseEstimation/../../data/pose/squat.mp4: 640x576 1 person, 162.2ms\n", "Speed: 6.6ms preprocess, 152.9ms inference, 1.3ms postprocess per image at shape (1, 3, 640, 576)\n", "Results saved to \u001b[1m/Users/theorousseaux/Documents/Hackathon/FitnessEquation/runs/pose/predict5\u001b[0m\n" ] } ], "source": [ "sequence = get_keypoints_from_path('../../data/pose/squat.mp4')" ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "compute_right_knee_angle\n", "compute_right_knee_angle(pose: list) -> float - Computes the knee angle.\n", "\n", " Args:\n", " pose (list): list of keypoints\n", "\n", " Returns:\n", " knee_angle (float): knee angle\n", "{'pose': {'title': 'Pose', 'type': 'array', 'items': {}}}\n", "False\n" ] } ], "source": [ "print(compute_right_knee_angle.name)\n", "print(compute_right_knee_angle.description)\n", "print(compute_right_knee_angle.args)\n", "print(compute_right_knee_angle.return_direct)" ] }, { "cell_type": "code", "execution_count": 85, "metadata": {}, "outputs": [], "source": [ "from langchain.agents import AgentExecutor, create_tool_calling_agent\n", "from langchain_community.tools.tavily_search import TavilySearchResults\n", "from langchain_core.prompts import ChatPromptTemplate\n", "\n", "tools = [compute_right_knee_angle]\n", "\n", "prompt = ChatPromptTemplate.from_messages(\n", " [\n", " (\n", " \"system\",\n", " \"You are a helpful assistant. Make sure to use the compute_right_knee_angle tool for information.\",\n", " ),\n", " (\"placeholder\", \"{chat_history}\"),\n", " (\"human\", \"{input}\"),\n", " (\"placeholder\", \"{agent_scratchpad}\"),\n", " ]\n", ")\n", "\n", "# Construct the Tools agent\n", "agent = create_tool_calling_agent(llm, tools, prompt)" ] }, { "cell_type": "code", "execution_count": 91, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "\n", "\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n", "\u001b[32;1m\u001b[1;3m\n", "Invoking: `compute_right_knee_angle` with `{'pose': [[705.0933227539062, 159.55224609375], [0.0, 0.0], [688.4795532226562, 135.9303436279297], [0.0, 0.0], [628.56689453125, 150.44094848632812], [603.4036254882812, 295.99420166015625], [619.6266479492188, 305.51202392578125], [0.0, 0.0], [629.2274780273438, 532.8370361328125], [0.0, 0.0], [665.978515625, 716.4405517578125], [634.9310302734375, 684.9545288085938], [642.503173828125, 691.6080932617188], [633.3930053710938, 1001.8157958984375], [649.4693603515625, 1014.472900390625], [601.3526611328125, 1321.026123046875], [580.6210327148438, 1337.936279296875]]}`\n", "\n", "\n", "\u001b[0m166.748027626137\n", "\u001b[36;1m\u001b[1;3m166.748027626137\u001b[0m\u001b[32;1m\u001b[1;3mThe knee angle at the beginning is approximately 166.75 degrees.\u001b[0m\n", "\n", "\u001b[1m> Finished chain.\u001b[0m\n" ] }, { "data": { "text/plain": [ "{'input': 'Compute my knee angle at the beginning: [[705.0933227539062, 159.55224609375], [0.0, 0.0], [688.4795532226562, 135.9303436279297], [0.0, 0.0], [628.56689453125, 150.44094848632812], [603.4036254882812, 295.99420166015625], [619.6266479492188, 305.51202392578125], [0.0, 0.0], [629.2274780273438, 532.8370361328125], [0.0, 0.0], [665.978515625, 716.4405517578125], [634.9310302734375, 684.9545288085938], [642.503173828125, 691.6080932617188], [633.3930053710938, 1001.8157958984375], [649.4693603515625, 1014.472900390625], [601.3526611328125, 1321.026123046875], [580.6210327148438, 1337.936279296875]]',\n", " 'output': 'The knee angle at the beginning is approximately 166.75 degrees.'}" ] }, "execution_count": 91, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Create an agent executor by passing in the agent and tools\n", "agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)\n", "agent_executor.invoke({\"input\": f\"Compute my knee angle at the beginning: {sequence[0]}\"})" ] }, { "cell_type": "code", "execution_count": 49, "metadata": {}, "outputs": [], "source": [ "from langchain import hub\n", "from langchain.agents import AgentExecutor, create_json_chat_agent\n", "from langchain_community.tools.tavily_search import TavilySearchResults\n", "\n", "\n", "tools = [compute_right_knee_angle]\n", "\n", "# Get the prompt to use - you can modify this!\n", "prompt = hub.pull(\"hwchase17/react-chat-json\")\n", "\n", "# Construct the JSON agent\n", "agent = create_json_chat_agent(llm, tools, prompt)" ] }, { "cell_type": "code", "execution_count": 50, "metadata": {}, "outputs": [], "source": [ "# Create an agent executor by passing in the agent and tools\n", "agent_executor = AgentExecutor(\n", " agent=agent, tools=tools, verbose=True, handle_parsing_errors=False\n", ")" ] }, { "cell_type": "code", "execution_count": 51, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Parameter `stop` not yet supported (https://docs.mistral.ai/api)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "\n", "\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n" ] }, { "ename": "SSEError", "evalue": "Expected response header Content-Type to contain 'text/event-stream', got 'application/json'", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mSSEError\u001b[0m Traceback (most recent call last)", "Cell \u001b[0;32mIn[51], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43magent_executor\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43minvoke\u001b[49m\u001b[43m(\u001b[49m\u001b[43m{\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43minput\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43mf\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mHi, is my squat correct ? \u001b[39;49m\u001b[38;5;132;43;01m{\u001b[39;49;00m\u001b[43mkeypoints\u001b[49m\u001b[38;5;132;43;01m}\u001b[39;49;00m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m}\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[0;32m~/Documents/Hackathon/FitnessEquation/venv/lib/python3.9/site-packages/langchain/chains/base.py:163\u001b[0m, in \u001b[0;36mChain.invoke\u001b[0;34m(self, input, config, **kwargs)\u001b[0m\n\u001b[1;32m 161\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mBaseException\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 162\u001b[0m run_manager\u001b[38;5;241m.\u001b[39mon_chain_error(e)\n\u001b[0;32m--> 163\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m e\n\u001b[1;32m 164\u001b[0m run_manager\u001b[38;5;241m.\u001b[39mon_chain_end(outputs)\n\u001b[1;32m 166\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m include_run_info:\n", "File \u001b[0;32m~/Documents/Hackathon/FitnessEquation/venv/lib/python3.9/site-packages/langchain/chains/base.py:153\u001b[0m, in \u001b[0;36mChain.invoke\u001b[0;34m(self, input, config, **kwargs)\u001b[0m\n\u001b[1;32m 150\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 151\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_validate_inputs(inputs)\n\u001b[1;32m 152\u001b[0m outputs \u001b[38;5;241m=\u001b[39m (\n\u001b[0;32m--> 153\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_call\u001b[49m\u001b[43m(\u001b[49m\u001b[43minputs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mrun_manager\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrun_manager\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 154\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m new_arg_supported\n\u001b[1;32m 155\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_call(inputs)\n\u001b[1;32m 156\u001b[0m )\n\u001b[1;32m 158\u001b[0m final_outputs: Dict[\u001b[38;5;28mstr\u001b[39m, Any] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mprep_outputs(\n\u001b[1;32m 159\u001b[0m inputs, outputs, return_only_outputs\n\u001b[1;32m 160\u001b[0m )\n\u001b[1;32m 161\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mBaseException\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m e:\n", "File \u001b[0;32m~/Documents/Hackathon/FitnessEquation/venv/lib/python3.9/site-packages/langchain/agents/agent.py:1432\u001b[0m, in \u001b[0;36mAgentExecutor._call\u001b[0;34m(self, inputs, run_manager)\u001b[0m\n\u001b[1;32m 1430\u001b[0m \u001b[38;5;66;03m# We now enter the agent loop (until it returns something).\u001b[39;00m\n\u001b[1;32m 1431\u001b[0m \u001b[38;5;28;01mwhile\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_should_continue(iterations, time_elapsed):\n\u001b[0;32m-> 1432\u001b[0m next_step_output \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_take_next_step\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 1433\u001b[0m \u001b[43m \u001b[49m\u001b[43mname_to_tool_map\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1434\u001b[0m \u001b[43m \u001b[49m\u001b[43mcolor_mapping\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1435\u001b[0m \u001b[43m \u001b[49m\u001b[43minputs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1436\u001b[0m \u001b[43m \u001b[49m\u001b[43mintermediate_steps\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1437\u001b[0m \u001b[43m \u001b[49m\u001b[43mrun_manager\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrun_manager\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1438\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1439\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(next_step_output, AgentFinish):\n\u001b[1;32m 1440\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_return(\n\u001b[1;32m 1441\u001b[0m next_step_output, intermediate_steps, run_manager\u001b[38;5;241m=\u001b[39mrun_manager\n\u001b[1;32m 1442\u001b[0m )\n", "File \u001b[0;32m~/Documents/Hackathon/FitnessEquation/venv/lib/python3.9/site-packages/langchain/agents/agent.py:1138\u001b[0m, in \u001b[0;36mAgentExecutor._take_next_step\u001b[0;34m(self, name_to_tool_map, color_mapping, inputs, intermediate_steps, run_manager)\u001b[0m\n\u001b[1;32m 1129\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_take_next_step\u001b[39m(\n\u001b[1;32m 1130\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m 1131\u001b[0m name_to_tool_map: Dict[\u001b[38;5;28mstr\u001b[39m, BaseTool],\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 1135\u001b[0m run_manager: Optional[CallbackManagerForChainRun] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 1136\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m Union[AgentFinish, List[Tuple[AgentAction, \u001b[38;5;28mstr\u001b[39m]]]:\n\u001b[1;32m 1137\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_consume_next_step(\n\u001b[0;32m-> 1138\u001b[0m [\n\u001b[1;32m 1139\u001b[0m a\n\u001b[1;32m 1140\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m a \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_iter_next_step(\n\u001b[1;32m 1141\u001b[0m name_to_tool_map,\n\u001b[1;32m 1142\u001b[0m color_mapping,\n\u001b[1;32m 1143\u001b[0m inputs,\n\u001b[1;32m 1144\u001b[0m intermediate_steps,\n\u001b[1;32m 1145\u001b[0m run_manager,\n\u001b[1;32m 1146\u001b[0m )\n\u001b[1;32m 1147\u001b[0m ]\n\u001b[1;32m 1148\u001b[0m )\n", "File \u001b[0;32m~/Documents/Hackathon/FitnessEquation/venv/lib/python3.9/site-packages/langchain/agents/agent.py:1138\u001b[0m, in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 1129\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_take_next_step\u001b[39m(\n\u001b[1;32m 1130\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m 1131\u001b[0m name_to_tool_map: Dict[\u001b[38;5;28mstr\u001b[39m, BaseTool],\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 1135\u001b[0m run_manager: Optional[CallbackManagerForChainRun] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 1136\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m Union[AgentFinish, List[Tuple[AgentAction, \u001b[38;5;28mstr\u001b[39m]]]:\n\u001b[1;32m 1137\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_consume_next_step(\n\u001b[0;32m-> 1138\u001b[0m [\n\u001b[1;32m 1139\u001b[0m a\n\u001b[1;32m 1140\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m a \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_iter_next_step(\n\u001b[1;32m 1141\u001b[0m name_to_tool_map,\n\u001b[1;32m 1142\u001b[0m color_mapping,\n\u001b[1;32m 1143\u001b[0m inputs,\n\u001b[1;32m 1144\u001b[0m intermediate_steps,\n\u001b[1;32m 1145\u001b[0m run_manager,\n\u001b[1;32m 1146\u001b[0m )\n\u001b[1;32m 1147\u001b[0m ]\n\u001b[1;32m 1148\u001b[0m )\n", "File \u001b[0;32m~/Documents/Hackathon/FitnessEquation/venv/lib/python3.9/site-packages/langchain/agents/agent.py:1166\u001b[0m, in \u001b[0;36mAgentExecutor._iter_next_step\u001b[0;34m(self, name_to_tool_map, color_mapping, inputs, intermediate_steps, run_manager)\u001b[0m\n\u001b[1;32m 1163\u001b[0m intermediate_steps \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_prepare_intermediate_steps(intermediate_steps)\n\u001b[1;32m 1165\u001b[0m \u001b[38;5;66;03m# Call the LLM to see what to do.\u001b[39;00m\n\u001b[0;32m-> 1166\u001b[0m output \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43magent\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mplan\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 1167\u001b[0m \u001b[43m \u001b[49m\u001b[43mintermediate_steps\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1168\u001b[0m \u001b[43m \u001b[49m\u001b[43mcallbacks\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrun_manager\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_child\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mif\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mrun_manager\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01melse\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 1169\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43minputs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1170\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1171\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m OutputParserException \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 1172\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mhandle_parsing_errors, \u001b[38;5;28mbool\u001b[39m):\n", "File \u001b[0;32m~/Documents/Hackathon/FitnessEquation/venv/lib/python3.9/site-packages/langchain/agents/agent.py:397\u001b[0m, in \u001b[0;36mRunnableAgent.plan\u001b[0;34m(self, intermediate_steps, callbacks, **kwargs)\u001b[0m\n\u001b[1;32m 389\u001b[0m final_output: Any \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 390\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mstream_runnable:\n\u001b[1;32m 391\u001b[0m \u001b[38;5;66;03m# Use streaming to make sure that the underlying LLM is invoked in a\u001b[39;00m\n\u001b[1;32m 392\u001b[0m \u001b[38;5;66;03m# streaming\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 395\u001b[0m \u001b[38;5;66;03m# Because the response from the plan is not a generator, we need to\u001b[39;00m\n\u001b[1;32m 396\u001b[0m \u001b[38;5;66;03m# accumulate the output into final output and return that.\u001b[39;00m\n\u001b[0;32m--> 397\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m chunk \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mrunnable\u001b[38;5;241m.\u001b[39mstream(inputs, config\u001b[38;5;241m=\u001b[39m{\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcallbacks\u001b[39m\u001b[38;5;124m\"\u001b[39m: callbacks}):\n\u001b[1;32m 398\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m final_output \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 399\u001b[0m final_output \u001b[38;5;241m=\u001b[39m chunk\n", "File \u001b[0;32m~/Documents/Hackathon/FitnessEquation/venv/lib/python3.9/site-packages/langchain_core/runnables/base.py:2875\u001b[0m, in \u001b[0;36mRunnableSequence.stream\u001b[0;34m(self, input, config, **kwargs)\u001b[0m\n\u001b[1;32m 2869\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mstream\u001b[39m(\n\u001b[1;32m 2870\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m 2871\u001b[0m \u001b[38;5;28minput\u001b[39m: Input,\n\u001b[1;32m 2872\u001b[0m config: Optional[RunnableConfig] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 2873\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs: Optional[Any],\n\u001b[1;32m 2874\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m Iterator[Output]:\n\u001b[0;32m-> 2875\u001b[0m \u001b[38;5;28;01myield from\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mtransform(\u001b[38;5;28miter\u001b[39m([\u001b[38;5;28minput\u001b[39m]), config, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n", "File \u001b[0;32m~/Documents/Hackathon/FitnessEquation/venv/lib/python3.9/site-packages/langchain_core/runnables/base.py:2862\u001b[0m, in \u001b[0;36mRunnableSequence.transform\u001b[0;34m(self, input, config, **kwargs)\u001b[0m\n\u001b[1;32m 2856\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mtransform\u001b[39m(\n\u001b[1;32m 2857\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m 2858\u001b[0m \u001b[38;5;28minput\u001b[39m: Iterator[Input],\n\u001b[1;32m 2859\u001b[0m config: Optional[RunnableConfig] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 2860\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs: Optional[Any],\n\u001b[1;32m 2861\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m Iterator[Output]:\n\u001b[0;32m-> 2862\u001b[0m \u001b[38;5;28;01myield from\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_transform_stream_with_config(\n\u001b[1;32m 2863\u001b[0m \u001b[38;5;28minput\u001b[39m,\n\u001b[1;32m 2864\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_transform,\n\u001b[1;32m 2865\u001b[0m patch_config(config, run_name\u001b[38;5;241m=\u001b[39m(config \u001b[38;5;129;01mor\u001b[39;00m {})\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mrun_name\u001b[39m\u001b[38;5;124m\"\u001b[39m) \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mname),\n\u001b[1;32m 2866\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs,\n\u001b[1;32m 2867\u001b[0m )\n", "File \u001b[0;32m~/Documents/Hackathon/FitnessEquation/venv/lib/python3.9/site-packages/langchain_core/runnables/base.py:1880\u001b[0m, in \u001b[0;36mRunnable._transform_stream_with_config\u001b[0;34m(self, input, transformer, config, run_type, **kwargs)\u001b[0m\n\u001b[1;32m 1878\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 1879\u001b[0m \u001b[38;5;28;01mwhile\u001b[39;00m \u001b[38;5;28;01mTrue\u001b[39;00m:\n\u001b[0;32m-> 1880\u001b[0m chunk: Output \u001b[38;5;241m=\u001b[39m \u001b[43mcontext\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrun\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mnext\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43miterator\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;66;03m# type: ignore\u001b[39;00m\n\u001b[1;32m 1881\u001b[0m \u001b[38;5;28;01myield\u001b[39;00m chunk\n\u001b[1;32m 1882\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m final_output_supported:\n", "File \u001b[0;32m~/Documents/Hackathon/FitnessEquation/venv/lib/python3.9/site-packages/langchain_core/runnables/base.py:2826\u001b[0m, in \u001b[0;36mRunnableSequence._transform\u001b[0;34m(self, input, run_manager, config)\u001b[0m\n\u001b[1;32m 2817\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m step \u001b[38;5;129;01min\u001b[39;00m steps:\n\u001b[1;32m 2818\u001b[0m final_pipeline \u001b[38;5;241m=\u001b[39m step\u001b[38;5;241m.\u001b[39mtransform(\n\u001b[1;32m 2819\u001b[0m final_pipeline,\n\u001b[1;32m 2820\u001b[0m patch_config(\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 2823\u001b[0m ),\n\u001b[1;32m 2824\u001b[0m )\n\u001b[0;32m-> 2826\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m output \u001b[38;5;129;01min\u001b[39;00m final_pipeline:\n\u001b[1;32m 2827\u001b[0m \u001b[38;5;28;01myield\u001b[39;00m output\n", "File \u001b[0;32m~/Documents/Hackathon/FitnessEquation/venv/lib/python3.9/site-packages/langchain_core/runnables/base.py:1283\u001b[0m, in \u001b[0;36mRunnable.transform\u001b[0;34m(self, input, config, **kwargs)\u001b[0m\n\u001b[1;32m 1280\u001b[0m final: Input\n\u001b[1;32m 1281\u001b[0m got_first_val \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mFalse\u001b[39;00m\n\u001b[0;32m-> 1283\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m chunk \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28minput\u001b[39m:\n\u001b[1;32m 1284\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m got_first_val:\n\u001b[1;32m 1285\u001b[0m final \u001b[38;5;241m=\u001b[39m adapt_first_streaming_chunk(chunk) \u001b[38;5;66;03m# type: ignore\u001b[39;00m\n", "File \u001b[0;32m~/Documents/Hackathon/FitnessEquation/venv/lib/python3.9/site-packages/langchain_core/runnables/base.py:4728\u001b[0m, in \u001b[0;36mRunnableBindingBase.transform\u001b[0;34m(self, input, config, **kwargs)\u001b[0m\n\u001b[1;32m 4722\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mtransform\u001b[39m(\n\u001b[1;32m 4723\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m 4724\u001b[0m \u001b[38;5;28minput\u001b[39m: Iterator[Input],\n\u001b[1;32m 4725\u001b[0m config: Optional[RunnableConfig] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 4726\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs: Any,\n\u001b[1;32m 4727\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m Iterator[Output]:\n\u001b[0;32m-> 4728\u001b[0m \u001b[38;5;28;01myield from\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mbound\u001b[38;5;241m.\u001b[39mtransform(\n\u001b[1;32m 4729\u001b[0m \u001b[38;5;28minput\u001b[39m,\n\u001b[1;32m 4730\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_merge_configs(config),\n\u001b[1;32m 4731\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39m{\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mkwargs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs},\n\u001b[1;32m 4732\u001b[0m )\n", "File \u001b[0;32m~/Documents/Hackathon/FitnessEquation/venv/lib/python3.9/site-packages/langchain_core/runnables/base.py:1300\u001b[0m, in \u001b[0;36mRunnable.transform\u001b[0;34m(self, input, config, **kwargs)\u001b[0m\n\u001b[1;32m 1293\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mTypeError\u001b[39;00m(\n\u001b[1;32m 1294\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mFailed while trying to add together \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 1295\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtype \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mtype\u001b[39m(final)\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m and \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mtype\u001b[39m(chunk)\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 1296\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mThese types should be addable for transform to work.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 1297\u001b[0m )\n\u001b[1;32m 1299\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m got_first_val:\n\u001b[0;32m-> 1300\u001b[0m \u001b[38;5;28;01myield from\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mstream(final, config, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n", "File \u001b[0;32m~/Documents/Hackathon/FitnessEquation/venv/lib/python3.9/site-packages/langchain_core/language_models/chat_models.py:249\u001b[0m, in \u001b[0;36mBaseChatModel.stream\u001b[0;34m(self, input, config, stop, **kwargs)\u001b[0m\n\u001b[1;32m 242\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mBaseException\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 243\u001b[0m run_manager\u001b[38;5;241m.\u001b[39mon_llm_error(\n\u001b[1;32m 244\u001b[0m e,\n\u001b[1;32m 245\u001b[0m response\u001b[38;5;241m=\u001b[39mLLMResult(\n\u001b[1;32m 246\u001b[0m generations\u001b[38;5;241m=\u001b[39m[[generation]] \u001b[38;5;28;01mif\u001b[39;00m generation \u001b[38;5;28;01melse\u001b[39;00m []\n\u001b[1;32m 247\u001b[0m ),\n\u001b[1;32m 248\u001b[0m )\n\u001b[0;32m--> 249\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m e\n\u001b[1;32m 250\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 251\u001b[0m run_manager\u001b[38;5;241m.\u001b[39mon_llm_end(LLMResult(generations\u001b[38;5;241m=\u001b[39m[[generation]]))\n", "File \u001b[0;32m~/Documents/Hackathon/FitnessEquation/venv/lib/python3.9/site-packages/langchain_core/language_models/chat_models.py:229\u001b[0m, in \u001b[0;36mBaseChatModel.stream\u001b[0;34m(self, input, config, stop, **kwargs)\u001b[0m\n\u001b[1;32m 227\u001b[0m generation: Optional[ChatGenerationChunk] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 228\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 229\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m chunk \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_stream(messages, stop\u001b[38;5;241m=\u001b[39mstop, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m 230\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m chunk\u001b[38;5;241m.\u001b[39mmessage\u001b[38;5;241m.\u001b[39mid \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 231\u001b[0m chunk\u001b[38;5;241m.\u001b[39mmessage\u001b[38;5;241m.\u001b[39mid \u001b[38;5;241m=\u001b[39m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mrun-\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mrun_manager\u001b[38;5;241m.\u001b[39mrun_id\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n", "File \u001b[0;32m~/Documents/Hackathon/FitnessEquation/venv/lib/python3.9/site-packages/langchain_mistralai/chat_models.py:428\u001b[0m, in \u001b[0;36mChatMistralAI._stream\u001b[0;34m(self, messages, stop, run_manager, **kwargs)\u001b[0m\n\u001b[1;32m 425\u001b[0m params \u001b[38;5;241m=\u001b[39m {\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mparams, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mstream\u001b[39m\u001b[38;5;124m\"\u001b[39m: \u001b[38;5;28;01mTrue\u001b[39;00m}\n\u001b[1;32m 427\u001b[0m default_chunk_class: Type[BaseMessageChunk] \u001b[38;5;241m=\u001b[39m AIMessageChunk\n\u001b[0;32m--> 428\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m chunk \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcompletion_with_retry(\n\u001b[1;32m 429\u001b[0m messages\u001b[38;5;241m=\u001b[39mmessage_dicts, run_manager\u001b[38;5;241m=\u001b[39mrun_manager, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mparams\n\u001b[1;32m 430\u001b[0m ):\n\u001b[1;32m 431\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(chunk[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mchoices\u001b[39m\u001b[38;5;124m\"\u001b[39m]) \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m0\u001b[39m:\n\u001b[1;32m 432\u001b[0m \u001b[38;5;28;01mcontinue\u001b[39;00m\n", "File \u001b[0;32m~/Documents/Hackathon/FitnessEquation/venv/lib/python3.9/site-packages/langchain_mistralai/chat_models.py:301\u001b[0m, in \u001b[0;36mChatMistralAI.completion_with_retry.._completion_with_retry..iter_sse\u001b[0;34m()\u001b[0m\n\u001b[1;32m 297\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21miter_sse\u001b[39m() \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m Iterator[Dict]:\n\u001b[1;32m 298\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m connect_sse(\n\u001b[1;32m 299\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mclient, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mPOST\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m/chat/completions\u001b[39m\u001b[38;5;124m\"\u001b[39m, json\u001b[38;5;241m=\u001b[39mkwargs\n\u001b[1;32m 300\u001b[0m ) \u001b[38;5;28;01mas\u001b[39;00m event_source:\n\u001b[0;32m--> 301\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m event \u001b[38;5;129;01min\u001b[39;00m event_source\u001b[38;5;241m.\u001b[39miter_sse():\n\u001b[1;32m 302\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m event\u001b[38;5;241m.\u001b[39mdata \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m[DONE]\u001b[39m\u001b[38;5;124m\"\u001b[39m:\n\u001b[1;32m 303\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m\n", "File \u001b[0;32m~/Documents/Hackathon/FitnessEquation/venv/lib/python3.9/site-packages/httpx_sse/_api.py:28\u001b[0m, in \u001b[0;36mEventSource.iter_sse\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 27\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21miter_sse\u001b[39m(\u001b[38;5;28mself\u001b[39m) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m Iterator[ServerSentEvent]:\n\u001b[0;32m---> 28\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_check_content_type\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 29\u001b[0m decoder \u001b[38;5;241m=\u001b[39m SSEDecoder()\n\u001b[1;32m 30\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m line \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_response\u001b[38;5;241m.\u001b[39miter_lines():\n", "File \u001b[0;32m~/Documents/Hackathon/FitnessEquation/venv/lib/python3.9/site-packages/httpx_sse/_api.py:18\u001b[0m, in \u001b[0;36mEventSource._check_content_type\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 16\u001b[0m content_type \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_response\u001b[38;5;241m.\u001b[39mheaders\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcontent-type\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m\"\u001b[39m)\u001b[38;5;241m.\u001b[39mpartition(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m;\u001b[39m\u001b[38;5;124m\"\u001b[39m)[\u001b[38;5;241m0\u001b[39m]\n\u001b[1;32m 17\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtext/event-stream\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;129;01min\u001b[39;00m content_type:\n\u001b[0;32m---> 18\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m SSEError(\n\u001b[1;32m 19\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mExpected response header Content-Type to contain \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtext/event-stream\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m, \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 20\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mgot \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mcontent_type\u001b[38;5;132;01m!r}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 21\u001b[0m )\n", "\u001b[0;31mSSEError\u001b[0m: Expected response header Content-Type to contain 'text/event-stream', got 'application/json'" ] } ], "source": [ "agent_executor.invoke({\"input\": f\"Hi, is my squat correct ? {keypoints}\"})" ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Parameter `stop` not yet supported (https://docs.mistral.ai/api)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "\n", "\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n" ] }, { "ename": "SSEError", "evalue": "Expected response header Content-Type to contain 'text/event-stream', got 'application/json'", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mSSEError\u001b[0m Traceback (most recent call last)", "Cell \u001b[0;32mIn[44], line 2\u001b[0m\n\u001b[1;32m 1\u001b[0m input_\u001b[38;5;241m=\u001b[39m\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mIs my squat correct? \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mkeypoints\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m----> 2\u001b[0m \u001b[43magent_executor\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43minvoke\u001b[49m\u001b[43m(\u001b[49m\u001b[43m{\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43minput\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43minput_\u001b[49m\u001b[43m}\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[0;32m~/Documents/Hackathon/FitnessEquation/venv/lib/python3.9/site-packages/langchain/chains/base.py:163\u001b[0m, in \u001b[0;36mChain.invoke\u001b[0;34m(self, input, config, **kwargs)\u001b[0m\n\u001b[1;32m 161\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mBaseException\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 162\u001b[0m run_manager\u001b[38;5;241m.\u001b[39mon_chain_error(e)\n\u001b[0;32m--> 163\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m e\n\u001b[1;32m 164\u001b[0m run_manager\u001b[38;5;241m.\u001b[39mon_chain_end(outputs)\n\u001b[1;32m 166\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m include_run_info:\n", "File \u001b[0;32m~/Documents/Hackathon/FitnessEquation/venv/lib/python3.9/site-packages/langchain/chains/base.py:153\u001b[0m, in \u001b[0;36mChain.invoke\u001b[0;34m(self, input, config, **kwargs)\u001b[0m\n\u001b[1;32m 150\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 151\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_validate_inputs(inputs)\n\u001b[1;32m 152\u001b[0m outputs \u001b[38;5;241m=\u001b[39m (\n\u001b[0;32m--> 153\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_call\u001b[49m\u001b[43m(\u001b[49m\u001b[43minputs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mrun_manager\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrun_manager\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 154\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m new_arg_supported\n\u001b[1;32m 155\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_call(inputs)\n\u001b[1;32m 156\u001b[0m )\n\u001b[1;32m 158\u001b[0m final_outputs: Dict[\u001b[38;5;28mstr\u001b[39m, Any] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mprep_outputs(\n\u001b[1;32m 159\u001b[0m inputs, outputs, return_only_outputs\n\u001b[1;32m 160\u001b[0m )\n\u001b[1;32m 161\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mBaseException\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m e:\n", "File \u001b[0;32m~/Documents/Hackathon/FitnessEquation/venv/lib/python3.9/site-packages/langchain/agents/agent.py:1432\u001b[0m, in \u001b[0;36mAgentExecutor._call\u001b[0;34m(self, inputs, run_manager)\u001b[0m\n\u001b[1;32m 1430\u001b[0m \u001b[38;5;66;03m# We now enter the agent loop (until it returns something).\u001b[39;00m\n\u001b[1;32m 1431\u001b[0m \u001b[38;5;28;01mwhile\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_should_continue(iterations, time_elapsed):\n\u001b[0;32m-> 1432\u001b[0m next_step_output \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_take_next_step\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 1433\u001b[0m \u001b[43m \u001b[49m\u001b[43mname_to_tool_map\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1434\u001b[0m \u001b[43m \u001b[49m\u001b[43mcolor_mapping\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1435\u001b[0m \u001b[43m \u001b[49m\u001b[43minputs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1436\u001b[0m \u001b[43m \u001b[49m\u001b[43mintermediate_steps\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1437\u001b[0m \u001b[43m \u001b[49m\u001b[43mrun_manager\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrun_manager\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1438\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1439\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(next_step_output, AgentFinish):\n\u001b[1;32m 1440\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_return(\n\u001b[1;32m 1441\u001b[0m next_step_output, intermediate_steps, run_manager\u001b[38;5;241m=\u001b[39mrun_manager\n\u001b[1;32m 1442\u001b[0m )\n", "File \u001b[0;32m~/Documents/Hackathon/FitnessEquation/venv/lib/python3.9/site-packages/langchain/agents/agent.py:1138\u001b[0m, in \u001b[0;36mAgentExecutor._take_next_step\u001b[0;34m(self, name_to_tool_map, color_mapping, inputs, intermediate_steps, run_manager)\u001b[0m\n\u001b[1;32m 1129\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_take_next_step\u001b[39m(\n\u001b[1;32m 1130\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m 1131\u001b[0m name_to_tool_map: Dict[\u001b[38;5;28mstr\u001b[39m, BaseTool],\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 1135\u001b[0m run_manager: Optional[CallbackManagerForChainRun] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 1136\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m Union[AgentFinish, List[Tuple[AgentAction, \u001b[38;5;28mstr\u001b[39m]]]:\n\u001b[1;32m 1137\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_consume_next_step(\n\u001b[0;32m-> 1138\u001b[0m [\n\u001b[1;32m 1139\u001b[0m a\n\u001b[1;32m 1140\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m a \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_iter_next_step(\n\u001b[1;32m 1141\u001b[0m name_to_tool_map,\n\u001b[1;32m 1142\u001b[0m color_mapping,\n\u001b[1;32m 1143\u001b[0m inputs,\n\u001b[1;32m 1144\u001b[0m intermediate_steps,\n\u001b[1;32m 1145\u001b[0m run_manager,\n\u001b[1;32m 1146\u001b[0m )\n\u001b[1;32m 1147\u001b[0m ]\n\u001b[1;32m 1148\u001b[0m )\n", "File \u001b[0;32m~/Documents/Hackathon/FitnessEquation/venv/lib/python3.9/site-packages/langchain/agents/agent.py:1138\u001b[0m, in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 1129\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_take_next_step\u001b[39m(\n\u001b[1;32m 1130\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m 1131\u001b[0m name_to_tool_map: Dict[\u001b[38;5;28mstr\u001b[39m, BaseTool],\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 1135\u001b[0m run_manager: Optional[CallbackManagerForChainRun] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 1136\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m Union[AgentFinish, List[Tuple[AgentAction, \u001b[38;5;28mstr\u001b[39m]]]:\n\u001b[1;32m 1137\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_consume_next_step(\n\u001b[0;32m-> 1138\u001b[0m [\n\u001b[1;32m 1139\u001b[0m a\n\u001b[1;32m 1140\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m a \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_iter_next_step(\n\u001b[1;32m 1141\u001b[0m name_to_tool_map,\n\u001b[1;32m 1142\u001b[0m color_mapping,\n\u001b[1;32m 1143\u001b[0m inputs,\n\u001b[1;32m 1144\u001b[0m intermediate_steps,\n\u001b[1;32m 1145\u001b[0m run_manager,\n\u001b[1;32m 1146\u001b[0m )\n\u001b[1;32m 1147\u001b[0m ]\n\u001b[1;32m 1148\u001b[0m )\n", "File \u001b[0;32m~/Documents/Hackathon/FitnessEquation/venv/lib/python3.9/site-packages/langchain/agents/agent.py:1166\u001b[0m, in \u001b[0;36mAgentExecutor._iter_next_step\u001b[0;34m(self, name_to_tool_map, color_mapping, inputs, intermediate_steps, run_manager)\u001b[0m\n\u001b[1;32m 1163\u001b[0m intermediate_steps \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_prepare_intermediate_steps(intermediate_steps)\n\u001b[1;32m 1165\u001b[0m \u001b[38;5;66;03m# Call the LLM to see what to do.\u001b[39;00m\n\u001b[0;32m-> 1166\u001b[0m output \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43magent\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mplan\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 1167\u001b[0m \u001b[43m \u001b[49m\u001b[43mintermediate_steps\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1168\u001b[0m \u001b[43m \u001b[49m\u001b[43mcallbacks\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrun_manager\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_child\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mif\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mrun_manager\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01melse\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 1169\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43minputs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1170\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1171\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m OutputParserException \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 1172\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mhandle_parsing_errors, \u001b[38;5;28mbool\u001b[39m):\n", "File \u001b[0;32m~/Documents/Hackathon/FitnessEquation/venv/lib/python3.9/site-packages/langchain/agents/agent.py:397\u001b[0m, in \u001b[0;36mRunnableAgent.plan\u001b[0;34m(self, intermediate_steps, callbacks, **kwargs)\u001b[0m\n\u001b[1;32m 389\u001b[0m final_output: Any \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 390\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mstream_runnable:\n\u001b[1;32m 391\u001b[0m \u001b[38;5;66;03m# Use streaming to make sure that the underlying LLM is invoked in a\u001b[39;00m\n\u001b[1;32m 392\u001b[0m \u001b[38;5;66;03m# streaming\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 395\u001b[0m \u001b[38;5;66;03m# Because the response from the plan is not a generator, we need to\u001b[39;00m\n\u001b[1;32m 396\u001b[0m \u001b[38;5;66;03m# accumulate the output into final output and return that.\u001b[39;00m\n\u001b[0;32m--> 397\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m chunk \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mrunnable\u001b[38;5;241m.\u001b[39mstream(inputs, config\u001b[38;5;241m=\u001b[39m{\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcallbacks\u001b[39m\u001b[38;5;124m\"\u001b[39m: callbacks}):\n\u001b[1;32m 398\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m final_output \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 399\u001b[0m final_output \u001b[38;5;241m=\u001b[39m chunk\n", "File \u001b[0;32m~/Documents/Hackathon/FitnessEquation/venv/lib/python3.9/site-packages/langchain_core/runnables/base.py:2875\u001b[0m, in \u001b[0;36mRunnableSequence.stream\u001b[0;34m(self, input, config, **kwargs)\u001b[0m\n\u001b[1;32m 2869\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mstream\u001b[39m(\n\u001b[1;32m 2870\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m 2871\u001b[0m \u001b[38;5;28minput\u001b[39m: Input,\n\u001b[1;32m 2872\u001b[0m config: Optional[RunnableConfig] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 2873\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs: Optional[Any],\n\u001b[1;32m 2874\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m Iterator[Output]:\n\u001b[0;32m-> 2875\u001b[0m \u001b[38;5;28;01myield from\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mtransform(\u001b[38;5;28miter\u001b[39m([\u001b[38;5;28minput\u001b[39m]), config, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n", "File \u001b[0;32m~/Documents/Hackathon/FitnessEquation/venv/lib/python3.9/site-packages/langchain_core/runnables/base.py:2862\u001b[0m, in \u001b[0;36mRunnableSequence.transform\u001b[0;34m(self, input, config, **kwargs)\u001b[0m\n\u001b[1;32m 2856\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mtransform\u001b[39m(\n\u001b[1;32m 2857\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m 2858\u001b[0m \u001b[38;5;28minput\u001b[39m: Iterator[Input],\n\u001b[1;32m 2859\u001b[0m config: Optional[RunnableConfig] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 2860\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs: Optional[Any],\n\u001b[1;32m 2861\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m Iterator[Output]:\n\u001b[0;32m-> 2862\u001b[0m \u001b[38;5;28;01myield from\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_transform_stream_with_config(\n\u001b[1;32m 2863\u001b[0m \u001b[38;5;28minput\u001b[39m,\n\u001b[1;32m 2864\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_transform,\n\u001b[1;32m 2865\u001b[0m patch_config(config, run_name\u001b[38;5;241m=\u001b[39m(config \u001b[38;5;129;01mor\u001b[39;00m {})\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mrun_name\u001b[39m\u001b[38;5;124m\"\u001b[39m) \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mname),\n\u001b[1;32m 2866\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs,\n\u001b[1;32m 2867\u001b[0m )\n", "File \u001b[0;32m~/Documents/Hackathon/FitnessEquation/venv/lib/python3.9/site-packages/langchain_core/runnables/base.py:1880\u001b[0m, in \u001b[0;36mRunnable._transform_stream_with_config\u001b[0;34m(self, input, transformer, config, run_type, **kwargs)\u001b[0m\n\u001b[1;32m 1878\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 1879\u001b[0m \u001b[38;5;28;01mwhile\u001b[39;00m \u001b[38;5;28;01mTrue\u001b[39;00m:\n\u001b[0;32m-> 1880\u001b[0m chunk: Output \u001b[38;5;241m=\u001b[39m \u001b[43mcontext\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrun\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mnext\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43miterator\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;66;03m# type: ignore\u001b[39;00m\n\u001b[1;32m 1881\u001b[0m \u001b[38;5;28;01myield\u001b[39;00m chunk\n\u001b[1;32m 1882\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m final_output_supported:\n", "File \u001b[0;32m~/Documents/Hackathon/FitnessEquation/venv/lib/python3.9/site-packages/langchain_core/runnables/base.py:2826\u001b[0m, in \u001b[0;36mRunnableSequence._transform\u001b[0;34m(self, input, run_manager, config)\u001b[0m\n\u001b[1;32m 2817\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m step \u001b[38;5;129;01min\u001b[39;00m steps:\n\u001b[1;32m 2818\u001b[0m final_pipeline \u001b[38;5;241m=\u001b[39m step\u001b[38;5;241m.\u001b[39mtransform(\n\u001b[1;32m 2819\u001b[0m final_pipeline,\n\u001b[1;32m 2820\u001b[0m patch_config(\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 2823\u001b[0m ),\n\u001b[1;32m 2824\u001b[0m )\n\u001b[0;32m-> 2826\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m output \u001b[38;5;129;01min\u001b[39;00m final_pipeline:\n\u001b[1;32m 2827\u001b[0m \u001b[38;5;28;01myield\u001b[39;00m output\n", "File \u001b[0;32m~/Documents/Hackathon/FitnessEquation/venv/lib/python3.9/site-packages/langchain_core/runnables/base.py:1283\u001b[0m, in \u001b[0;36mRunnable.transform\u001b[0;34m(self, input, config, **kwargs)\u001b[0m\n\u001b[1;32m 1280\u001b[0m final: Input\n\u001b[1;32m 1281\u001b[0m got_first_val \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mFalse\u001b[39;00m\n\u001b[0;32m-> 1283\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m chunk \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28minput\u001b[39m:\n\u001b[1;32m 1284\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m got_first_val:\n\u001b[1;32m 1285\u001b[0m final \u001b[38;5;241m=\u001b[39m adapt_first_streaming_chunk(chunk) \u001b[38;5;66;03m# type: ignore\u001b[39;00m\n", "File \u001b[0;32m~/Documents/Hackathon/FitnessEquation/venv/lib/python3.9/site-packages/langchain_core/runnables/base.py:4728\u001b[0m, in \u001b[0;36mRunnableBindingBase.transform\u001b[0;34m(self, input, config, **kwargs)\u001b[0m\n\u001b[1;32m 4722\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mtransform\u001b[39m(\n\u001b[1;32m 4723\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m 4724\u001b[0m \u001b[38;5;28minput\u001b[39m: Iterator[Input],\n\u001b[1;32m 4725\u001b[0m config: Optional[RunnableConfig] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 4726\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs: Any,\n\u001b[1;32m 4727\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m Iterator[Output]:\n\u001b[0;32m-> 4728\u001b[0m \u001b[38;5;28;01myield from\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mbound\u001b[38;5;241m.\u001b[39mtransform(\n\u001b[1;32m 4729\u001b[0m \u001b[38;5;28minput\u001b[39m,\n\u001b[1;32m 4730\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_merge_configs(config),\n\u001b[1;32m 4731\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39m{\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mkwargs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs},\n\u001b[1;32m 4732\u001b[0m )\n", "File \u001b[0;32m~/Documents/Hackathon/FitnessEquation/venv/lib/python3.9/site-packages/langchain_core/runnables/base.py:1300\u001b[0m, in \u001b[0;36mRunnable.transform\u001b[0;34m(self, input, config, **kwargs)\u001b[0m\n\u001b[1;32m 1293\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mTypeError\u001b[39;00m(\n\u001b[1;32m 1294\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mFailed while trying to add together \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 1295\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtype \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mtype\u001b[39m(final)\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m and \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mtype\u001b[39m(chunk)\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 1296\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mThese types should be addable for transform to work.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 1297\u001b[0m )\n\u001b[1;32m 1299\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m got_first_val:\n\u001b[0;32m-> 1300\u001b[0m \u001b[38;5;28;01myield from\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mstream(final, config, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n", "File \u001b[0;32m~/Documents/Hackathon/FitnessEquation/venv/lib/python3.9/site-packages/langchain_core/language_models/chat_models.py:249\u001b[0m, in \u001b[0;36mBaseChatModel.stream\u001b[0;34m(self, input, config, stop, **kwargs)\u001b[0m\n\u001b[1;32m 242\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mBaseException\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 243\u001b[0m run_manager\u001b[38;5;241m.\u001b[39mon_llm_error(\n\u001b[1;32m 244\u001b[0m e,\n\u001b[1;32m 245\u001b[0m response\u001b[38;5;241m=\u001b[39mLLMResult(\n\u001b[1;32m 246\u001b[0m generations\u001b[38;5;241m=\u001b[39m[[generation]] \u001b[38;5;28;01mif\u001b[39;00m generation \u001b[38;5;28;01melse\u001b[39;00m []\n\u001b[1;32m 247\u001b[0m ),\n\u001b[1;32m 248\u001b[0m )\n\u001b[0;32m--> 249\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m e\n\u001b[1;32m 250\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 251\u001b[0m run_manager\u001b[38;5;241m.\u001b[39mon_llm_end(LLMResult(generations\u001b[38;5;241m=\u001b[39m[[generation]]))\n", "File \u001b[0;32m~/Documents/Hackathon/FitnessEquation/venv/lib/python3.9/site-packages/langchain_core/language_models/chat_models.py:229\u001b[0m, in \u001b[0;36mBaseChatModel.stream\u001b[0;34m(self, input, config, stop, **kwargs)\u001b[0m\n\u001b[1;32m 227\u001b[0m generation: Optional[ChatGenerationChunk] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 228\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 229\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m chunk \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_stream(messages, stop\u001b[38;5;241m=\u001b[39mstop, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m 230\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m chunk\u001b[38;5;241m.\u001b[39mmessage\u001b[38;5;241m.\u001b[39mid \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 231\u001b[0m chunk\u001b[38;5;241m.\u001b[39mmessage\u001b[38;5;241m.\u001b[39mid \u001b[38;5;241m=\u001b[39m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mrun-\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mrun_manager\u001b[38;5;241m.\u001b[39mrun_id\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n", "File \u001b[0;32m~/Documents/Hackathon/FitnessEquation/venv/lib/python3.9/site-packages/langchain_mistralai/chat_models.py:428\u001b[0m, in \u001b[0;36mChatMistralAI._stream\u001b[0;34m(self, messages, stop, run_manager, **kwargs)\u001b[0m\n\u001b[1;32m 425\u001b[0m params \u001b[38;5;241m=\u001b[39m {\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mparams, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mstream\u001b[39m\u001b[38;5;124m\"\u001b[39m: \u001b[38;5;28;01mTrue\u001b[39;00m}\n\u001b[1;32m 427\u001b[0m default_chunk_class: Type[BaseMessageChunk] \u001b[38;5;241m=\u001b[39m AIMessageChunk\n\u001b[0;32m--> 428\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m chunk \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcompletion_with_retry(\n\u001b[1;32m 429\u001b[0m messages\u001b[38;5;241m=\u001b[39mmessage_dicts, run_manager\u001b[38;5;241m=\u001b[39mrun_manager, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mparams\n\u001b[1;32m 430\u001b[0m ):\n\u001b[1;32m 431\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(chunk[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mchoices\u001b[39m\u001b[38;5;124m\"\u001b[39m]) \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m0\u001b[39m:\n\u001b[1;32m 432\u001b[0m \u001b[38;5;28;01mcontinue\u001b[39;00m\n", "File \u001b[0;32m~/Documents/Hackathon/FitnessEquation/venv/lib/python3.9/site-packages/langchain_mistralai/chat_models.py:301\u001b[0m, in \u001b[0;36mChatMistralAI.completion_with_retry.._completion_with_retry..iter_sse\u001b[0;34m()\u001b[0m\n\u001b[1;32m 297\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21miter_sse\u001b[39m() \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m Iterator[Dict]:\n\u001b[1;32m 298\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m connect_sse(\n\u001b[1;32m 299\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mclient, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mPOST\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m/chat/completions\u001b[39m\u001b[38;5;124m\"\u001b[39m, json\u001b[38;5;241m=\u001b[39mkwargs\n\u001b[1;32m 300\u001b[0m ) \u001b[38;5;28;01mas\u001b[39;00m event_source:\n\u001b[0;32m--> 301\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m event \u001b[38;5;129;01min\u001b[39;00m event_source\u001b[38;5;241m.\u001b[39miter_sse():\n\u001b[1;32m 302\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m event\u001b[38;5;241m.\u001b[39mdata \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m[DONE]\u001b[39m\u001b[38;5;124m\"\u001b[39m:\n\u001b[1;32m 303\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m\n", "File \u001b[0;32m~/Documents/Hackathon/FitnessEquation/venv/lib/python3.9/site-packages/httpx_sse/_api.py:28\u001b[0m, in \u001b[0;36mEventSource.iter_sse\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 27\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21miter_sse\u001b[39m(\u001b[38;5;28mself\u001b[39m) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m Iterator[ServerSentEvent]:\n\u001b[0;32m---> 28\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_check_content_type\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 29\u001b[0m decoder \u001b[38;5;241m=\u001b[39m SSEDecoder()\n\u001b[1;32m 30\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m line \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_response\u001b[38;5;241m.\u001b[39miter_lines():\n", "File \u001b[0;32m~/Documents/Hackathon/FitnessEquation/venv/lib/python3.9/site-packages/httpx_sse/_api.py:18\u001b[0m, in \u001b[0;36mEventSource._check_content_type\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 16\u001b[0m content_type \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_response\u001b[38;5;241m.\u001b[39mheaders\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcontent-type\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m\"\u001b[39m)\u001b[38;5;241m.\u001b[39mpartition(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m;\u001b[39m\u001b[38;5;124m\"\u001b[39m)[\u001b[38;5;241m0\u001b[39m]\n\u001b[1;32m 17\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtext/event-stream\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;129;01min\u001b[39;00m content_type:\n\u001b[0;32m---> 18\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m SSEError(\n\u001b[1;32m 19\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mExpected response header Content-Type to contain \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtext/event-stream\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m, \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 20\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mgot \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mcontent_type\u001b[38;5;132;01m!r}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 21\u001b[0m )\n", "\u001b[0;31mSSEError\u001b[0m: Expected response header Content-Type to contain 'text/event-stream', got 'application/json'" ] } ], "source": [ "input_=f\"Is my squat correct? {keypoints}\"\n", "agent_executor.invoke({\"input\": input_})" ] } ], "metadata": { "kernelspec": { "display_name": "venv", "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.9.6" } }, "nbformat": 4, "nbformat_minor": 2 }