Skip to content
intermediateimage

ViTPose Human Keypoint Annotation

Annotate human body keypoints and classify pose categories in images. Annotators place landmarks on visible anatomical joints using a simplified 13-point body model, draw bounding boxes around each person, and select the overall pose type. This is a generic keypoint-annotation template, not tied to a single published dataset.

Labels:outdoornatureurbanpeopleanimal+

Configuration Fileconfig.yaml

yaml
# Human Keypoint Annotation (generic template)
#
# This is a generic human-pose keypoint annotation template; it is not tied
# to a specific published dataset. (ViTPose, Xu et al. NeurIPS 2022, is a
# pose-estimation model, not an annotation scheme.) For a standard gold
# keypoint benchmark see COCO keypoints (Lin et al., ECCV 2014), which
# defines 17 keypoints including facial points.
#
# Annotate human body keypoints and pose categories in images.
# Annotators mark anatomical landmarks using the landmark tool,
# draw bounding boxes around detected people, and classify
# the overall body pose type.
#
# Keypoints use a simplified 13-point body model:
# Head, Shoulders (L/R), Elbows (L/R), Wrists (L/R),
# Hips (L/R), Knees (L/R), Ankles (L/R)
#
# Pose Categories:
# - Standing: Person is upright on their feet
# - Sitting: Person is seated on a surface
# - Lying Down: Person is horizontal or reclined
# - In Motion: Person is actively moving (walking, running, etc.)
# - Partially Occluded: Person is partially hidden by objects
#
# Annotation Guidelines:
# 1. Place landmarks on visible body keypoints
# 2. Draw a bounding box around each person
# 3. Classify the primary pose of the person
# 4. For occluded keypoints, estimate position if possible

annotation_task_name: "Human Keypoint Annotation"
task_dir: "."

data_files:
  - sample-data.json

item_properties:
  id_key: "id"
  text_key: "text"

output_annotation_dir: "annotation_output/"
output_annotation_format: "json"

port: 8000
server_name: localhost

annotation_schemes:
  - annotation_type: image_annotation
    name: pose_keypoints
    description: "Mark body keypoints using landmarks and draw bounding boxes around people"
    tools:
      - landmark
      - bbox
    labels:
      - "Head"
      - "Shoulder_L"
      - "Shoulder_R"
      - "Elbow_L"
      - "Elbow_R"
      - "Wrist_L"
      - "Wrist_R"
      - "Hip_L"
      - "Hip_R"
      - "Knee_L"
      - "Knee_R"
      - "Ankle_L"
      - "Ankle_R"

  - annotation_type: radio
    name: pose_category
    description: "What is the primary pose of the person in this image?"
    labels:
      - "Standing"
      - "Sitting"
      - "Lying Down"
      - "In Motion"
      - "Partially Occluded"
    keyboard_shortcuts:
      "Standing": "1"
      "Sitting": "2"
      "Lying Down": "3"
      "In Motion": "4"
      "Partially Occluded": "5"
    tooltips:
      "Standing": "Person is upright on their feet, stationary"
      "Sitting": "Person is seated on a chair, bench, ground, or other surface"
      "Lying Down": "Person is horizontal, reclined, or lying on a surface"
      "In Motion": "Person is actively moving -- walking, running, jumping, etc."
      "Partially Occluded": "Person is partially hidden behind objects or other people"

annotation_instructions: |
  You will annotate human body keypoints and classify poses in images.

  For each image:
  1. Use the **landmark** tool to place markers on visible body keypoints.
  2. Use the **bbox** tool to draw a bounding box around each person.
  3. Select the primary pose category for the person.

  Keypoint placement:
  - Place landmarks as precisely as possible on the center of each joint.
  - If a keypoint is occluded but its position can be estimated, mark the estimated location.
  - Skip keypoints that are completely invisible and cannot be estimated.
  - Left/Right refer to the person's left and right (not the viewer's).

  Pose classification:
  - Choose the dominant pose if the person is transitioning between poses.
  - Use "Partially Occluded" only when occlusion prevents reliable pose classification.

html_layout: |
  <div style="padding: 15px; max-width: 800px; margin: auto;">
    <div style="background: #f0fdf4; border: 1px solid #86efac; border-radius: 8px; padding: 16px; margin-bottom: 16px;">
      <strong style="color: #166534;">Scene Description:</strong>
      <p style="font-size: 15px; line-height: 1.6; margin: 8px 0 0 0;">{{text}}</p>
    </div>
    <div style="text-align: center; margin-bottom: 16px;">
      <img src="{{image_url}}" style="max-width: 100%; max-height: 600px; border-radius: 8px; border: 1px solid #e2e8f0;" />
    </div>
  </div>

allow_all_users: true
instances_per_annotator: 50
annotation_per_instance: 2
allow_skip: true
skip_reason_required: false

Sample Datasample-data.json

json
[
  {
    "id": "vitpose_001",
    "text": "A jogger running along a park path in the early morning. The person is mid-stride with arms swinging naturally. Trees and a bench are visible in the background.",
    "image_url": "https://example.com/images/vitpose/jogger_park.jpg"
  },
  {
    "id": "vitpose_002",
    "text": "A woman sitting at an outdoor cafe table, holding a coffee cup in her right hand. She is leaning slightly forward with her legs crossed under the table.",
    "image_url": "https://example.com/images/vitpose/cafe_sitting.jpg"
  }
]

// ... and 8 more items

Get This Design

View on GitHub

Clone or download from the repository

Quick start:

git clone https://github.com/davidjurgens/potato-showcase.git
cd potato-showcase/image/human-pose/vitpose-keypoint-annotation
potato start config.yaml

Details

Annotation Types

image_annotationradio

Domain

Computer VisionHuman Pose Estimation

Use Cases

Pose EstimationKeypoint DetectionActivity Recognition

Tags

pose-estimationkeypointvitposebody-landmarkneurips2022vision-transformer

Found an issue or want to improve this design?

Open an Issue