Pose Recognition

Parses Bodypose model output and augments metadata

Overview

This node parses the output of "Pose Detection" model to extract the human pose keypoints and line segments.

Requires Model Inference Node (Pose Detection) prior to it in order to function properly.

Inputs & Outputs

  • Inputs : 1, Media Format : Raw Video
  • Outputs : 1, Media Format: Raw Video
  • Output Metadata : None

Properties

PropertyValue
draw_posesIf true, human pose points and body joints connections will be drawn on video
ex. true / false
draw_labelsIf true, the text labels for body joints will be overlaid on video
ex. true / false

Metadata

Metadata PropertyDescription
nodes.<node_id>Body poses information as described in the JSON below.

<node_id> for Pose Recognition Nodes is of the form annotate_poseX (ex. annotate_pose1)
{
    "nodes":{
        "parse_bodypose*":{
            "type":"annotate_pose",
            "poses_count":<int>,
            "poses":{
                "<pose_id>":{
                    "keypoints":{
                        "l_ank":{"x":<int>, "y":<int>},
                        "l_ear":{"x":<int>, "y":<int>},
                        "l_elb":{"x":<int>, "y":<int>},
                        "l_eye":{"x":<int>, "y":<int>},
                        "l_hip":{"x":<int>, "y":<int>},
                        "l_knee":{"x":<int>, "y":<int>},
                        "l_sho":{"x":<int>, "y":<int>},
                        "l_wri":{"x":<int>, "y":<int>},
                        "neck":{"x":<int>, "y":<int>},
                        "nose":{"x":<int>, "y":<int>},
                        "r_ank":{"x":<int>, "y":<int>},
                        "r_ear":{"x":<int>, "y":<int>},
                        "r_elb":{"x":<int>, "y":<int>},
                        "r_eye":{"x":<int>, "y":<int>},
                        "r_hip":{"x":<int>, "y":<int>},
                        "r_knee":{"x":<int>, "y":<int>},
                        "r_sho":{"x":<int>, "y":<int>},
                        "r_wri":{"x":<int>, "y":<int>}
                    },
                    "rect":[<int>, <int>, <int>, <int>],
                    "segments":[
                        ["neck", "r_sho"],
                        ["neck", "l_sho"],
                        ["r_sho", "r_elb"],
                        ["r_elb", "r_wri"],
                        ["l_sho", "l_elb"],
                        ["l_elb", "l_wri"],
                        ["neck", "r_hip"],
                        ["r_hip", "r_knee"],
                        ["r_knee", "r_ank"],
                        ["neck", "l_hip"],
                        ["l_hip", "l_knee"],
                        ["l_knee", "l_ank"],
                        ["neck", "nose"],
                        ["nose", "r_eye"],
                        ["r_eye", "r_ear"],
                        ["nose", "l_eye"],
                        ["l_eye", "l_ear"]
                    ]
                }
            }
        }
    }
}

Format

KeyTypeDescription
poses_countIntegerTotal number of poses in the view right now
posesDict of pose IDsInformation about each detected human pose.

keypoints : The x,y position on image for each detected human joint.

The abbreviations on keypoints IDs translates to the following:
"l_ank" => left ankle
"l_ear" => left ear
"l_elb" => left elbow
"l_eye" => left eye
"l_hip" => left hip
"l_knee" => left knee
"l_sho" => left shoulder
"l_wri" => left wrist
"neck" => neck
"nose" => nose
"r_ank" => right ankle
"r_ear" => right ear
"r_elb" => right elbow
"r_eye" => right eye
"r_hip" => right hip
"r_knee" => right knee
"r_sho" => right shoulder
"r_wri" => right wrist

rect: The person bounding box that contains all the detected keypoints

segments: Relations between the detected keypoints to draw line segments

Please check the json example for more details.