[
  {
    "path": ".ipynb_checkpoints/Media Pipe Pose Tutorial-checkpoint.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# 0. Install and Import Dependencies\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"!pip install mediapipe opencv-python\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import cv2\\n\",\n    \"import mediapipe as mp\\n\",\n    \"import numpy as np\\n\",\n    \"mp_drawing = mp.solutions.drawing_utils\\n\",\n    \"mp_pose = mp.solutions.pose\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# VIDEO FEED\\n\",\n    \"cap = cv2.VideoCapture(0)\\n\",\n    \"while cap.isOpened():\\n\",\n    \"    ret, frame = cap.read()\\n\",\n    \"    cv2.imshow('Mediapipe Feed', frame)\\n\",\n    \"    \\n\",\n    \"    if cv2.waitKey(10) & 0xFF == ord('q'):\\n\",\n    \"        break\\n\",\n    \"        \\n\",\n    \"cap.release()\\n\",\n    \"cv2.destroyAllWindows()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# 1. Make Detections\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"cap = cv2.VideoCapture(0)\\n\",\n    \"## Setup mediapipe instance\\n\",\n    \"with mp_pose.Pose(min_detection_confidence=0.5, min_tracking_confidence=0.5) as pose:\\n\",\n    \"    while cap.isOpened():\\n\",\n    \"        ret, frame = cap.read()\\n\",\n    \"        \\n\",\n    \"        # Recolor image to RGB\\n\",\n    \"        image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)\\n\",\n    \"        image.flags.writeable = False\\n\",\n    \"      \\n\",\n    \"        # Make detection\\n\",\n    \"        results = pose.process(image)\\n\",\n    \"    \\n\",\n    \"        # Recolor back to BGR\\n\",\n    \"        image.flags.writeable = True\\n\",\n    \"        image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)\\n\",\n    \"        \\n\",\n    \"        # Render detections\\n\",\n    \"        mp_drawing.draw_landmarks(image, results.pose_landmarks, mp_pose.POSE_CONNECTIONS,\\n\",\n    \"                                mp_drawing.DrawingSpec(color=(245,117,66), thickness=2, circle_radius=2), \\n\",\n    \"                                mp_drawing.DrawingSpec(color=(245,66,230), thickness=2, circle_radius=2) \\n\",\n    \"                                 )               \\n\",\n    \"        \\n\",\n    \"        cv2.imshow('Mediapipe Feed', image)\\n\",\n    \"\\n\",\n    \"        if cv2.waitKey(10) & 0xFF == ord('q'):\\n\",\n    \"            break\\n\",\n    \"\\n\",\n    \"    cap.release()\\n\",\n    \"    cv2.destroyAllWindows()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"mp_drawing.DrawingSpec??\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# 2. Determining Joints\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"<img src=\\\"https://i.imgur.com/3j8BPdc.png\\\" style=\\\"height:300px\\\" >\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"cap = cv2.VideoCapture(0)\\n\",\n    \"## Setup mediapipe instance\\n\",\n    \"with mp_pose.Pose(min_detection_confidence=0.5, min_tracking_confidence=0.5) as pose:\\n\",\n    \"    while cap.isOpened():\\n\",\n    \"        ret, frame = cap.read()\\n\",\n    \"        \\n\",\n    \"        # Recolor image to RGB\\n\",\n    \"        image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)\\n\",\n    \"        image.flags.writeable = False\\n\",\n    \"      \\n\",\n    \"        # Make detection\\n\",\n    \"        results = pose.process(image)\\n\",\n    \"    \\n\",\n    \"        # Recolor back to BGR\\n\",\n    \"        image.flags.writeable = True\\n\",\n    \"        image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)\\n\",\n    \"        \\n\",\n    \"        # Extract landmarks\\n\",\n    \"        try:\\n\",\n    \"            landmarks = results.pose_landmarks.landmark\\n\",\n    \"            print(landmarks)\\n\",\n    \"        except:\\n\",\n    \"            pass\\n\",\n    \"        \\n\",\n    \"        \\n\",\n    \"        # Render detections\\n\",\n    \"        mp_drawing.draw_landmarks(image, results.pose_landmarks, mp_pose.POSE_CONNECTIONS,\\n\",\n    \"                                mp_drawing.DrawingSpec(color=(245,117,66), thickness=2, circle_radius=2), \\n\",\n    \"                                mp_drawing.DrawingSpec(color=(245,66,230), thickness=2, circle_radius=2) \\n\",\n    \"                                 )               \\n\",\n    \"        \\n\",\n    \"        cv2.imshow('Mediapipe Feed', image)\\n\",\n    \"\\n\",\n    \"        if cv2.waitKey(10) & 0xFF == ord('q'):\\n\",\n    \"            break\\n\",\n    \"\\n\",\n    \"    cap.release()\\n\",\n    \"    cv2.destroyAllWindows()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"len(landmarks)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"for lndmrk in mp_pose.PoseLandmark:\\n\",\n    \"    print(lndmrk)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"landmarks[mp_pose.PoseLandmark.LEFT_SHOULDER.value].visibility\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"landmarks[mp_pose.PoseLandmark.LEFT_ELBOW.value]\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"landmarks[mp_pose.PoseLandmark.LEFT_WRIST.value]\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# 3. Calculate Angles\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def calculate_angle(a,b,c):\\n\",\n    \"    a = np.array(a) # First\\n\",\n    \"    b = np.array(b) # Mid\\n\",\n    \"    c = np.array(c) # End\\n\",\n    \"    \\n\",\n    \"    radians = np.arctan2(c[1]-b[1], c[0]-b[0]) - np.arctan2(a[1]-b[1], a[0]-b[0])\\n\",\n    \"    angle = np.abs(radians*180.0/np.pi)\\n\",\n    \"    \\n\",\n    \"    if angle >180.0:\\n\",\n    \"        angle = 360-angle\\n\",\n    \"        \\n\",\n    \"    return angle \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"shoulder = [landmarks[mp_pose.PoseLandmark.LEFT_SHOULDER.value].x,landmarks[mp_pose.PoseLandmark.LEFT_SHOULDER.value].y]\\n\",\n    \"elbow = [landmarks[mp_pose.PoseLandmark.LEFT_ELBOW.value].x,landmarks[mp_pose.PoseLandmark.LEFT_ELBOW.value].y]\\n\",\n    \"wrist = [landmarks[mp_pose.PoseLandmark.LEFT_WRIST.value].x,landmarks[mp_pose.PoseLandmark.LEFT_WRIST.value].y]\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"shoulder, elbow, wrist\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"calculate_angle(shoulder, elbow, wrist)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"tuple(np.multiply(elbow, [640, 480]).astype(int))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"cap = cv2.VideoCapture(0)\\n\",\n    \"## Setup mediapipe instance\\n\",\n    \"with mp_pose.Pose(min_detection_confidence=0.5, min_tracking_confidence=0.5) as pose:\\n\",\n    \"    while cap.isOpened():\\n\",\n    \"        ret, frame = cap.read()\\n\",\n    \"        \\n\",\n    \"        # Recolor image to RGB\\n\",\n    \"        image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)\\n\",\n    \"        image.flags.writeable = False\\n\",\n    \"      \\n\",\n    \"        # Make detection\\n\",\n    \"        results = pose.process(image)\\n\",\n    \"    \\n\",\n    \"        # Recolor back to BGR\\n\",\n    \"        image.flags.writeable = True\\n\",\n    \"        image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)\\n\",\n    \"        \\n\",\n    \"        # Extract landmarks\\n\",\n    \"        try:\\n\",\n    \"            landmarks = results.pose_landmarks.landmark\\n\",\n    \"            \\n\",\n    \"            # Get coordinates\\n\",\n    \"            shoulder = [landmarks[mp_pose.PoseLandmark.LEFT_SHOULDER.value].x,landmarks[mp_pose.PoseLandmark.LEFT_SHOULDER.value].y]\\n\",\n    \"            elbow = [landmarks[mp_pose.PoseLandmark.LEFT_ELBOW.value].x,landmarks[mp_pose.PoseLandmark.LEFT_ELBOW.value].y]\\n\",\n    \"            wrist = [landmarks[mp_pose.PoseLandmark.LEFT_WRIST.value].x,landmarks[mp_pose.PoseLandmark.LEFT_WRIST.value].y]\\n\",\n    \"            \\n\",\n    \"            # Calculate angle\\n\",\n    \"            angle = calculate_angle(shoulder, elbow, wrist)\\n\",\n    \"            \\n\",\n    \"            # Visualize angle\\n\",\n    \"            cv2.putText(image, str(angle), \\n\",\n    \"                           tuple(np.multiply(elbow, [640, 480]).astype(int)), \\n\",\n    \"                           cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 2, cv2.LINE_AA\\n\",\n    \"                                )\\n\",\n    \"                       \\n\",\n    \"        except:\\n\",\n    \"            pass\\n\",\n    \"        \\n\",\n    \"        \\n\",\n    \"        # Render detections\\n\",\n    \"        mp_drawing.draw_landmarks(image, results.pose_landmarks, mp_pose.POSE_CONNECTIONS,\\n\",\n    \"                                mp_drawing.DrawingSpec(color=(245,117,66), thickness=2, circle_radius=2), \\n\",\n    \"                                mp_drawing.DrawingSpec(color=(245,66,230), thickness=2, circle_radius=2) \\n\",\n    \"                                 )               \\n\",\n    \"        \\n\",\n    \"        cv2.imshow('Mediapipe Feed', image)\\n\",\n    \"\\n\",\n    \"        if cv2.waitKey(10) & 0xFF == ord('q'):\\n\",\n    \"            break\\n\",\n    \"\\n\",\n    \"    cap.release()\\n\",\n    \"    cv2.destroyAllWindows()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# 4. Curl Counter\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"cap = cv2.VideoCapture(0)\\n\",\n    \"\\n\",\n    \"# Curl counter variables\\n\",\n    \"counter = 0 \\n\",\n    \"stage = None\\n\",\n    \"\\n\",\n    \"## Setup mediapipe instance\\n\",\n    \"with mp_pose.Pose(min_detection_confidence=0.5, min_tracking_confidence=0.5) as pose:\\n\",\n    \"    while cap.isOpened():\\n\",\n    \"        ret, frame = cap.read()\\n\",\n    \"        \\n\",\n    \"        # Recolor image to RGB\\n\",\n    \"        image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)\\n\",\n    \"        image.flags.writeable = False\\n\",\n    \"      \\n\",\n    \"        # Make detection\\n\",\n    \"        results = pose.process(image)\\n\",\n    \"    \\n\",\n    \"        # Recolor back to BGR\\n\",\n    \"        image.flags.writeable = True\\n\",\n    \"        image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)\\n\",\n    \"        \\n\",\n    \"        # Extract landmarks\\n\",\n    \"        try:\\n\",\n    \"            landmarks = results.pose_landmarks.landmark\\n\",\n    \"            \\n\",\n    \"            # Get coordinates\\n\",\n    \"            shoulder = [landmarks[mp_pose.PoseLandmark.LEFT_SHOULDER.value].x,landmarks[mp_pose.PoseLandmark.LEFT_SHOULDER.value].y]\\n\",\n    \"            elbow = [landmarks[mp_pose.PoseLandmark.LEFT_ELBOW.value].x,landmarks[mp_pose.PoseLandmark.LEFT_ELBOW.value].y]\\n\",\n    \"            wrist = [landmarks[mp_pose.PoseLandmark.LEFT_WRIST.value].x,landmarks[mp_pose.PoseLandmark.LEFT_WRIST.value].y]\\n\",\n    \"            \\n\",\n    \"            # Calculate angle\\n\",\n    \"            angle = calculate_angle(shoulder, elbow, wrist)\\n\",\n    \"            \\n\",\n    \"            # Visualize angle\\n\",\n    \"            cv2.putText(image, str(angle), \\n\",\n    \"                           tuple(np.multiply(elbow, [640, 480]).astype(int)), \\n\",\n    \"                           cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 2, cv2.LINE_AA\\n\",\n    \"                                )\\n\",\n    \"            \\n\",\n    \"            # Curl counter logic\\n\",\n    \"            if angle > 160:\\n\",\n    \"                stage = \\\"down\\\"\\n\",\n    \"            if angle < 30 and stage =='down':\\n\",\n    \"                stage=\\\"up\\\"\\n\",\n    \"                counter +=1\\n\",\n    \"                print(counter)\\n\",\n    \"                       \\n\",\n    \"        except:\\n\",\n    \"            pass\\n\",\n    \"        \\n\",\n    \"        # Render curl counter\\n\",\n    \"        # Setup status box\\n\",\n    \"        cv2.rectangle(image, (0,0), (225,73), (245,117,16), -1)\\n\",\n    \"        \\n\",\n    \"        # Rep data\\n\",\n    \"        cv2.putText(image, 'REPS', (15,12), \\n\",\n    \"                    cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0,0,0), 1, cv2.LINE_AA)\\n\",\n    \"        cv2.putText(image, str(counter), \\n\",\n    \"                    (10,60), \\n\",\n    \"                    cv2.FONT_HERSHEY_SIMPLEX, 2, (255,255,255), 2, cv2.LINE_AA)\\n\",\n    \"        \\n\",\n    \"        # Stage data\\n\",\n    \"        cv2.putText(image, 'STAGE', (65,12), \\n\",\n    \"                    cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0,0,0), 1, cv2.LINE_AA)\\n\",\n    \"        cv2.putText(image, stage, \\n\",\n    \"                    (60,60), \\n\",\n    \"                    cv2.FONT_HERSHEY_SIMPLEX, 2, (255,255,255), 2, cv2.LINE_AA)\\n\",\n    \"        \\n\",\n    \"        \\n\",\n    \"        # Render detections\\n\",\n    \"        mp_drawing.draw_landmarks(image, results.pose_landmarks, mp_pose.POSE_CONNECTIONS,\\n\",\n    \"                                mp_drawing.DrawingSpec(color=(245,117,66), thickness=2, circle_radius=2), \\n\",\n    \"                                mp_drawing.DrawingSpec(color=(245,66,230), thickness=2, circle_radius=2) \\n\",\n    \"                                 )               \\n\",\n    \"        \\n\",\n    \"        cv2.imshow('Mediapipe Feed', image)\\n\",\n    \"\\n\",\n    \"        if cv2.waitKey(10) & 0xFF == ord('q'):\\n\",\n    \"            break\\n\",\n    \"\\n\",\n    \"    cap.release()\\n\",\n    \"    cv2.destroyAllWindows()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": []\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"mediapipe\",\n   \"language\": \"python\",\n   \"name\": \"mediapipe\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.7.3\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "Media Pipe Pose Tutorial.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# 0. Install and Import Dependencies\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"!pip install mediapipe opencv-python\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import cv2\\n\",\n    \"import mediapipe as mp\\n\",\n    \"import numpy as np\\n\",\n    \"mp_drawing = mp.solutions.drawing_utils\\n\",\n    \"mp_pose = mp.solutions.pose\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# VIDEO FEED\\n\",\n    \"cap = cv2.VideoCapture(0)\\n\",\n    \"while cap.isOpened():\\n\",\n    \"    ret, frame = cap.read()\\n\",\n    \"    cv2.imshow('Mediapipe Feed', frame)\\n\",\n    \"    \\n\",\n    \"    if cv2.waitKey(10) & 0xFF == ord('q'):\\n\",\n    \"        break\\n\",\n    \"        \\n\",\n    \"cap.release()\\n\",\n    \"cv2.destroyAllWindows()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# 1. Make Detections\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"cap = cv2.VideoCapture(0)\\n\",\n    \"## Setup mediapipe instance\\n\",\n    \"with mp_pose.Pose(min_detection_confidence=0.5, min_tracking_confidence=0.5) as pose:\\n\",\n    \"    while cap.isOpened():\\n\",\n    \"        ret, frame = cap.read()\\n\",\n    \"        \\n\",\n    \"        # Recolor image to RGB\\n\",\n    \"        image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)\\n\",\n    \"        image.flags.writeable = False\\n\",\n    \"      \\n\",\n    \"        # Make detection\\n\",\n    \"        results = pose.process(image)\\n\",\n    \"    \\n\",\n    \"        # Recolor back to BGR\\n\",\n    \"        image.flags.writeable = True\\n\",\n    \"        image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)\\n\",\n    \"        \\n\",\n    \"        # Render detections\\n\",\n    \"        mp_drawing.draw_landmarks(image, results.pose_landmarks, mp_pose.POSE_CONNECTIONS,\\n\",\n    \"                                mp_drawing.DrawingSpec(color=(245,117,66), thickness=2, circle_radius=2), \\n\",\n    \"                                mp_drawing.DrawingSpec(color=(245,66,230), thickness=2, circle_radius=2) \\n\",\n    \"                                 )               \\n\",\n    \"        \\n\",\n    \"        cv2.imshow('Mediapipe Feed', image)\\n\",\n    \"\\n\",\n    \"        if cv2.waitKey(10) & 0xFF == ord('q'):\\n\",\n    \"            break\\n\",\n    \"\\n\",\n    \"    cap.release()\\n\",\n    \"    cv2.destroyAllWindows()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"mp_drawing.DrawingSpec??\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# 2. Determining Joints\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"<img src=\\\"https://i.imgur.com/3j8BPdc.png\\\" style=\\\"height:300px\\\" >\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"cap = cv2.VideoCapture(0)\\n\",\n    \"## Setup mediapipe instance\\n\",\n    \"with mp_pose.Pose(min_detection_confidence=0.5, min_tracking_confidence=0.5) as pose:\\n\",\n    \"    while cap.isOpened():\\n\",\n    \"        ret, frame = cap.read()\\n\",\n    \"        \\n\",\n    \"        # Recolor image to RGB\\n\",\n    \"        image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)\\n\",\n    \"        image.flags.writeable = False\\n\",\n    \"      \\n\",\n    \"        # Make detection\\n\",\n    \"        results = pose.process(image)\\n\",\n    \"    \\n\",\n    \"        # Recolor back to BGR\\n\",\n    \"        image.flags.writeable = True\\n\",\n    \"        image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)\\n\",\n    \"        \\n\",\n    \"        # Extract landmarks\\n\",\n    \"        try:\\n\",\n    \"            landmarks = results.pose_landmarks.landmark\\n\",\n    \"            print(landmarks)\\n\",\n    \"        except:\\n\",\n    \"            pass\\n\",\n    \"        \\n\",\n    \"        \\n\",\n    \"        # Render detections\\n\",\n    \"        mp_drawing.draw_landmarks(image, results.pose_landmarks, mp_pose.POSE_CONNECTIONS,\\n\",\n    \"                                mp_drawing.DrawingSpec(color=(245,117,66), thickness=2, circle_radius=2), \\n\",\n    \"                                mp_drawing.DrawingSpec(color=(245,66,230), thickness=2, circle_radius=2) \\n\",\n    \"                                 )               \\n\",\n    \"        \\n\",\n    \"        cv2.imshow('Mediapipe Feed', image)\\n\",\n    \"\\n\",\n    \"        if cv2.waitKey(10) & 0xFF == ord('q'):\\n\",\n    \"            break\\n\",\n    \"\\n\",\n    \"    cap.release()\\n\",\n    \"    cv2.destroyAllWindows()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"len(landmarks)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"for lndmrk in mp_pose.PoseLandmark:\\n\",\n    \"    print(lndmrk)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"landmarks[mp_pose.PoseLandmark.LEFT_SHOULDER.value].visibility\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"landmarks[mp_pose.PoseLandmark.LEFT_ELBOW.value]\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"landmarks[mp_pose.PoseLandmark.LEFT_WRIST.value]\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# 3. Calculate Angles\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def calculate_angle(a,b,c):\\n\",\n    \"    a = np.array(a) # First\\n\",\n    \"    b = np.array(b) # Mid\\n\",\n    \"    c = np.array(c) # End\\n\",\n    \"    \\n\",\n    \"    radians = np.arctan2(c[1]-b[1], c[0]-b[0]) - np.arctan2(a[1]-b[1], a[0]-b[0])\\n\",\n    \"    angle = np.abs(radians*180.0/np.pi)\\n\",\n    \"    \\n\",\n    \"    if angle >180.0:\\n\",\n    \"        angle = 360-angle\\n\",\n    \"        \\n\",\n    \"    return angle \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"shoulder = [landmarks[mp_pose.PoseLandmark.LEFT_SHOULDER.value].x,landmarks[mp_pose.PoseLandmark.LEFT_SHOULDER.value].y]\\n\",\n    \"elbow = [landmarks[mp_pose.PoseLandmark.LEFT_ELBOW.value].x,landmarks[mp_pose.PoseLandmark.LEFT_ELBOW.value].y]\\n\",\n    \"wrist = [landmarks[mp_pose.PoseLandmark.LEFT_WRIST.value].x,landmarks[mp_pose.PoseLandmark.LEFT_WRIST.value].y]\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"shoulder, elbow, wrist\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"calculate_angle(shoulder, elbow, wrist)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"tuple(np.multiply(elbow, [640, 480]).astype(int))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"cap = cv2.VideoCapture(0)\\n\",\n    \"## Setup mediapipe instance\\n\",\n    \"with mp_pose.Pose(min_detection_confidence=0.5, min_tracking_confidence=0.5) as pose:\\n\",\n    \"    while cap.isOpened():\\n\",\n    \"        ret, frame = cap.read()\\n\",\n    \"        \\n\",\n    \"        # Recolor image to RGB\\n\",\n    \"        image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)\\n\",\n    \"        image.flags.writeable = False\\n\",\n    \"      \\n\",\n    \"        # Make detection\\n\",\n    \"        results = pose.process(image)\\n\",\n    \"    \\n\",\n    \"        # Recolor back to BGR\\n\",\n    \"        image.flags.writeable = True\\n\",\n    \"        image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)\\n\",\n    \"        \\n\",\n    \"        # Extract landmarks\\n\",\n    \"        try:\\n\",\n    \"            landmarks = results.pose_landmarks.landmark\\n\",\n    \"            \\n\",\n    \"            # Get coordinates\\n\",\n    \"            shoulder = [landmarks[mp_pose.PoseLandmark.LEFT_SHOULDER.value].x,landmarks[mp_pose.PoseLandmark.LEFT_SHOULDER.value].y]\\n\",\n    \"            elbow = [landmarks[mp_pose.PoseLandmark.LEFT_ELBOW.value].x,landmarks[mp_pose.PoseLandmark.LEFT_ELBOW.value].y]\\n\",\n    \"            wrist = [landmarks[mp_pose.PoseLandmark.LEFT_WRIST.value].x,landmarks[mp_pose.PoseLandmark.LEFT_WRIST.value].y]\\n\",\n    \"            \\n\",\n    \"            # Calculate angle\\n\",\n    \"            angle = calculate_angle(shoulder, elbow, wrist)\\n\",\n    \"            \\n\",\n    \"            # Visualize angle\\n\",\n    \"            cv2.putText(image, str(angle), \\n\",\n    \"                           tuple(np.multiply(elbow, [640, 480]).astype(int)), \\n\",\n    \"                           cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 2, cv2.LINE_AA\\n\",\n    \"                                )\\n\",\n    \"                       \\n\",\n    \"        except:\\n\",\n    \"            pass\\n\",\n    \"        \\n\",\n    \"        \\n\",\n    \"        # Render detections\\n\",\n    \"        mp_drawing.draw_landmarks(image, results.pose_landmarks, mp_pose.POSE_CONNECTIONS,\\n\",\n    \"                                mp_drawing.DrawingSpec(color=(245,117,66), thickness=2, circle_radius=2), \\n\",\n    \"                                mp_drawing.DrawingSpec(color=(245,66,230), thickness=2, circle_radius=2) \\n\",\n    \"                                 )               \\n\",\n    \"        \\n\",\n    \"        cv2.imshow('Mediapipe Feed', image)\\n\",\n    \"\\n\",\n    \"        if cv2.waitKey(10) & 0xFF == ord('q'):\\n\",\n    \"            break\\n\",\n    \"\\n\",\n    \"    cap.release()\\n\",\n    \"    cv2.destroyAllWindows()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# 4. Curl Counter\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"cap = cv2.VideoCapture(0)\\n\",\n    \"\\n\",\n    \"# Curl counter variables\\n\",\n    \"counter = 0 \\n\",\n    \"stage = None\\n\",\n    \"\\n\",\n    \"## Setup mediapipe instance\\n\",\n    \"with mp_pose.Pose(min_detection_confidence=0.5, min_tracking_confidence=0.5) as pose:\\n\",\n    \"    while cap.isOpened():\\n\",\n    \"        ret, frame = cap.read()\\n\",\n    \"        \\n\",\n    \"        # Recolor image to RGB\\n\",\n    \"        image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)\\n\",\n    \"        image.flags.writeable = False\\n\",\n    \"      \\n\",\n    \"        # Make detection\\n\",\n    \"        results = pose.process(image)\\n\",\n    \"    \\n\",\n    \"        # Recolor back to BGR\\n\",\n    \"        image.flags.writeable = True\\n\",\n    \"        image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)\\n\",\n    \"        \\n\",\n    \"        # Extract landmarks\\n\",\n    \"        try:\\n\",\n    \"            landmarks = results.pose_landmarks.landmark\\n\",\n    \"            \\n\",\n    \"            # Get coordinates\\n\",\n    \"            shoulder = [landmarks[mp_pose.PoseLandmark.LEFT_SHOULDER.value].x,landmarks[mp_pose.PoseLandmark.LEFT_SHOULDER.value].y]\\n\",\n    \"            elbow = [landmarks[mp_pose.PoseLandmark.LEFT_ELBOW.value].x,landmarks[mp_pose.PoseLandmark.LEFT_ELBOW.value].y]\\n\",\n    \"            wrist = [landmarks[mp_pose.PoseLandmark.LEFT_WRIST.value].x,landmarks[mp_pose.PoseLandmark.LEFT_WRIST.value].y]\\n\",\n    \"            \\n\",\n    \"            # Calculate angle\\n\",\n    \"            angle = calculate_angle(shoulder, elbow, wrist)\\n\",\n    \"            \\n\",\n    \"            # Visualize angle\\n\",\n    \"            cv2.putText(image, str(angle), \\n\",\n    \"                           tuple(np.multiply(elbow, [640, 480]).astype(int)), \\n\",\n    \"                           cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 2, cv2.LINE_AA\\n\",\n    \"                                )\\n\",\n    \"            \\n\",\n    \"            # Curl counter logic\\n\",\n    \"            if angle > 160:\\n\",\n    \"                stage = \\\"down\\\"\\n\",\n    \"            if angle < 30 and stage =='down':\\n\",\n    \"                stage=\\\"up\\\"\\n\",\n    \"                counter +=1\\n\",\n    \"                print(counter)\\n\",\n    \"                       \\n\",\n    \"        except:\\n\",\n    \"            pass\\n\",\n    \"        \\n\",\n    \"        # Render curl counter\\n\",\n    \"        # Setup status box\\n\",\n    \"        cv2.rectangle(image, (0,0), (225,73), (245,117,16), -1)\\n\",\n    \"        \\n\",\n    \"        # Rep data\\n\",\n    \"        cv2.putText(image, 'REPS', (15,12), \\n\",\n    \"                    cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0,0,0), 1, cv2.LINE_AA)\\n\",\n    \"        cv2.putText(image, str(counter), \\n\",\n    \"                    (10,60), \\n\",\n    \"                    cv2.FONT_HERSHEY_SIMPLEX, 2, (255,255,255), 2, cv2.LINE_AA)\\n\",\n    \"        \\n\",\n    \"        # Stage data\\n\",\n    \"        cv2.putText(image, 'STAGE', (65,12), \\n\",\n    \"                    cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0,0,0), 1, cv2.LINE_AA)\\n\",\n    \"        cv2.putText(image, stage, \\n\",\n    \"                    (60,60), \\n\",\n    \"                    cv2.FONT_HERSHEY_SIMPLEX, 2, (255,255,255), 2, cv2.LINE_AA)\\n\",\n    \"        \\n\",\n    \"        \\n\",\n    \"        # Render detections\\n\",\n    \"        mp_drawing.draw_landmarks(image, results.pose_landmarks, mp_pose.POSE_CONNECTIONS,\\n\",\n    \"                                mp_drawing.DrawingSpec(color=(245,117,66), thickness=2, circle_radius=2), \\n\",\n    \"                                mp_drawing.DrawingSpec(color=(245,66,230), thickness=2, circle_radius=2) \\n\",\n    \"                                 )               \\n\",\n    \"        \\n\",\n    \"        cv2.imshow('Mediapipe Feed', image)\\n\",\n    \"\\n\",\n    \"        if cv2.waitKey(10) & 0xFF == ord('q'):\\n\",\n    \"            break\\n\",\n    \"\\n\",\n    \"    cap.release()\\n\",\n    \"    cv2.destroyAllWindows()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": []\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"mediapipe\",\n   \"language\": \"python\",\n   \"name\": \"mediapipe\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.7.3\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  }
]