RepoPilot

what license does this use

About cmu-perceptual-computing-lab/openpose · 4 messages · last activity 8/29/2026

Question

what license does this use

RepoPilot

The search didn't return the LICENSE file content. Based on the repository metadata shown in the README excerpt, OpenPose has a License section referenced in its README, but the specific license terms are not included in the data I have access to.

The README mentions there is a License section, which suggests the full license text would be found in the repository's root LICENSE file or within the README itself. However, without that specific excerpt, I cannot definitively state which license OpenPose uses from the available data.

For the authoritative license information, you would need to check the LICENSE file directly in the repository root or the full README at the project's GitHub page.

FOLLOW_UPS:

  • What are OpenPose's main architectural components?
  • How does the hand detection system work?
  • What GPU acceleration options are supported?
Question

How does the hand detection system work?

RepoPilot

OpenPose's hand detection system has two distinct stages, handled by separate classes:

1. Hand region detection (HandDetector)

Before hand keypoints can be estimated, OpenPose needs to know where in the image each hand roughly is. This is done in [src/openpose/hand/handDetector.cpp:L141-L156], where HandDetector::detectHands():

  • Takes body pose keypoints (poseKeypoints) as input.
  • For each detected person, computes a rectangle for the left and right hand using getHandFromPoseIndexes, based on the wrist, elbow, and shoulder keypoints (LWrist, LElbow, LShoulder, RWrist, RElbow, RShoulder) — essentially extrapolating a plausible hand-region box outward from the wrist along the forearm direction, gated by a confidence threshold of 0.03.
  • If no pose keypoints exist, no hand rectangles can be generated.

There is also a tracking mode, HandDetector::trackHands() [src/openpose/hand/handDetector.cpp:L166-L186], which:

  1. Runs the baseline detectHands() to get fresh rectangles from the current pose.
  2. Calls trackHand() against previously stored hand rectangles (mHandLeftPrevious / mHandRightPrevious) to smooth/stabilize the rectangle across frames instead of relying purely on the current frame's pose.

The tracker's state is updated via updateTracker() [src/openpose/hand/handDetector.cpp:L188-L227], which takes actual hand keypoint results back in, computes an average confidence score per hand (getAverageScore), and — if the score exceeds a scoreThreshold of 0.667 — recomputes a bounding rectangle from the hand keypoints themselves (getKeypointsRectangle) to use as the prior for the next frame. This lets the detector fall back on temporal consistency rather than solely on body-pose-derived boxes, which is useful when the arm pose is ambiguous or the wrist detection is noisy.

There's also an alternate, file-based path: HandDetectorFromTxt [src/openpose/hand/handDetectorFromTxt.cpp:L26-L40], which reads pre-computed hand bounding boxes from .txt files in a directory rather than deriving them from body pose — useful for evaluation against ground-truth hand boxes.

2. Hand keypoint extraction (HandExtractorNet / HandExtractorCaffe)

Once rectangles are known, the actual keypoint estimation is a separate deep-net stage:

  • HandExtractorNet [src/openpose/hand/handExtractorNet.cpp:L1-L47] is the base class. Its constructor validates that net input/output sizes match and are square [L18-L30], and stores heatmap configuration. initializationOnThread() calls a virtual netInitializationOnThread() to set up the network per-thread (each worker thread gets its own net instance), consistent with OpenPose's producer-consumer threading model.

  • HandExtractorCaffe [src/openpose/hand/handExtractorCaffe.cpp:L421-L460] implements the Caffe-backed version. For each detected hand rectangle it:

    • Crops/resizes the hand region into mHandImageCrop and runs it through the network via detectHandKeypoints(), which chains together NetCaffe (forward pass), ResizeAndMergeCaffe (upsampling heatmaps), and MaximumCaffe (peak/keypoint extraction from heatmaps).
    • Supports multi-scale estimation: it can run several scaled crops and keep whichever produces the highest average confidence score (getAverageScore) [L427-L430].
    • Optionally stores heatmaps per person via updateHandHeatMapsForPerson, pulling data from either GPU or CPU blob memory depending on build flags [L433-L440].
    • If a person's hand rectangle isn't valid, keypoints are reset to empty [L448-L451].

In short: HandDetector figures out where to look (a bounding box per hand, derived from body pose or previous-frame tracking), and HandExtractorNet/HandExtractorCaffe runs the actual CNN forward pass on each cropped region to produce the 21-keypoint

Public Q&A. Generated by RepoPilot from the actual source of cmu-perceptual-computing-lab/openpose. AI answers can be incomplete or stale — verify before relying on them.