Hand tracking

Egocentric Hand Tracking Data Collection

Robot hands and dexterous policies learn from where the fingers actually are in 3D space, not a bounding box around the hand. We capture egocentric hand tracking data on a synchronized rig — 3D hand joints, a visibility flag per joint, and depth aligned to the same clock — so occlusion is marked rather than guessed, and the data is trainable the day it arrives.
Hands
21 joints per hand, 3D
Units
Metres, head-camera frame
Occlusion
Per-joint visibility flag
License
Buyer-owned
A contributor wearing a head-mounted capture rig performs a manual task, beside a graphic of synchronized hand-tracking and depth annotation layers.
Hand joints are tracked in 3D against the depth captured on the same clock, not estimated from one 2D frame.

What gets tracked

What egocentric hand tracking data delivers.

01

3D hand joints, both hands

hand_joints is a float32 array of shape [T, 2, 21, 3]: two hands, 21 joints each, three coordinates in metres, expressed in the head-camera frame on the same timeline as the video.

02

Visibility on every joint

hand_visible flags each joint, so a finger occluded by the object or by the hand itself is marked occluded rather than hallucinated by a tracker.

03

Depth-aligned, not estimated from RGB alone

Hand joints are tracked against the same depth stream the video was captured on, so 3D position reflects measured geometry rather than a monocular estimate.

04

Rights you can ship on

A perpetual, buyer-owned commercial license backed by a documented consent chain, so a policy trained on the data can go into a product.

What it is

What is egocentric hand tracking data?

Egocentric hand tracking data is first-person video with the 3D position of every hand and finger joint tracked frame by frame, delivered as a per-frame joint skeleton rather than a bounding box or a single wrist keypoint. The viewpoint is first-person because that is the viewpoint a robot’s own camera, or a head-mounted capture rig standing in for it, actually sees from during manipulation.

The distinction from hand pose estimation in general is narrow but matters for sourcing: hand pose estimation is the capability, egocentric hand tracking data is that capability’s output captured specifically from the operating viewpoint a manipulation policy will be deployed with, rather than from a fixed external camera watching the scene from the side.

Why it matters

Why do robot learning teams need first-person hand tracking data?

Manipulation and dexterous-hand policies condition on where the fingers are relative to the object being handled, not just that a hand is present in frame. A 2D bounding box or a single wrist keypoint throws away exactly the signal a grasp, regrasp, or in-hand reorientation needs to learn from: which fingers are in contact, how the hand is curled around the object, and how that shape changes through the motion.

First-person capture keeps the hand and the object it is manipulating in frame from the viewpoint a policy will actually operate in, which third-person footage and most public hand-pose datasets, captured from a fixed external camera, do not provide. A model trained on third-person hand pose has to additionally learn the viewpoint transform at inference time; training on egocentric hand tracking data removes that gap.

This matters most for VLA and dexterous-hand pretraining, where the policy’s action space is defined in terms of finger and wrist motion rather than a coarse end-effector pose, and for any manipulation task where grasp quality rather than just reach-and-place success is being measured.

Capture setup

How are hands captured in an egocentric rig?

A head-mounted camera keeps the hands and the manipulated object in frame through the full reach-grasp-adjust cycle. Depth, IMU, and hand pose are captured on one hardware-triggered clock, so every stream lines up to the same timeline rather than being stitched together after the fact from separately timestamped sensors.

A wrist-mounted camera can be added alongside the head view for close-range detail when the grasp itself, rather than the full-arm reach, is what matters to the policy. Pairing head and wrist views is the same setup used across this site’s manipulation and keypoint collections, so a buyer ordering hand tracking data can add the same wrist view they would order for any other manipulation dataset without a separate rig.

Stereo capture adds binocular depth for finer 3D geometry at contact, which is useful when the policy needs to reason about fine finger-to-surface distance rather than coarse hand position. Whether to include wrist camera, stereo, or both is a spec decision made before capture starts, not a fixed default.

Occlusion

How do you handle occlusion and hand visibility?

Hands occlude themselves and are occluded by the objects they manipulate constantly during real tasks: a finger curled behind the object it is gripping, or one hand passing behind the other during a bimanual task, is the normal case rather than the exception. Rather than letting a tracker interpolate or hallucinate a pose for a hidden joint, each joint carries a visibility flag (hand_visible) so a model can distinguish an observed position from an occluded one.

This is the same per-joint visibility flag used across every hand-pose and keypoint annotation on this site, so hand tracking data is consistent with the hand pose, contact, and keypoint annotation layers a buyer might also order, and the two can be combined in the same dataset without reconciling two different occlusion conventions.

Marking occlusion explicitly, rather than silently filling it in, is also what makes the data usable for training rather than just visualization: a policy learning from a position that was actually hallucinated through occlusion learns a wrong signal with no way to tell it apart from a real observation.

Quality

How is hand tracking accuracy checked in QA?

Hand tracking labels go through the same QA process every annotation layer on this site goes through: review against the synchronized depth and video it was tracked from, with clips that fail acceptance criteria rejected and recaptured rather than shipped with a flagged caveat. Acceptance criteria are agreed as part of the spec before capture scales, so both sides know what "passes" means before volume is committed.

Because hand joints are tracked against depth rather than estimated from RGB alone, reviewers can check 3D plausibility — does the joint position make geometric sense against the depth map, is the hand the right size and distance from the camera — not just whether a skeleton looks reasonable on a 2D frame. That is a stronger check than most RGB-only hand pose pipelines can run, because there is a second, independent measurement (depth) to validate the tracked joints against.

Buy vs. build

Custom vs public hand tracking datasets: when should you collect your own?

Public hand-pose and egocentric datasets are useful for establishing a general prior, but they were collected for someone else’s tasks, scenes, and camera setup. A custom hand tracking collection lets you specify the exact tasks, objects, environments, and contributor diversity a policy needs, with depth and visibility flags matched to your own capture rig rather than a published dataset’s.

Custom collection is the better fit when a program needs coverage of a specific task set, a particular hand or tool, or occlusion patterns that a general-purpose public dataset does not represent well, or when the license terms of a public dataset do not permit the downstream commercial use a policy is being trained for.

The two are not mutually exclusive: a common pattern is to pretrain on a broad public prior for general hand-motion statistics, then fine-tune on a smaller custom collection scoped tightly to the target task set, objects, and environment, which is how this site’s pretraining-data-collection pages frame the general pattern.

Delivery

Which formats is hand tracking data delivered in?

Hand tracking data ships in RLDS, LeRobot, WebDataset, or HDF5, matching the training stack a buyer already uses. In the LeRobot v2.1 layout, hand joints are flattened and packed into observation.state, hands first, then body joints if ordered, in a fixed documented ordering. In RLDS and WebDataset, hand_joints and hand_visible are carried as explicit per-step fields alongside RGB, depth, and action labels.

Because the same underlying hand_joints and hand_visible fields are reused across every format, a buyer who starts in one training stack and later moves to another is not locked into re-collecting data; the export layout changes, the underlying 3D joint data does not.

How to order

How do you order a custom egocentric hand tracking dataset?

Ordering starts the same way any custom collection on this site is scoped: a written spec covering the tasks, objects, and environments the hand tracking data needs to cover, which hand or hands are involved, contributor diversity targets, and whether wrist camera, stereo depth, body pose, or contact events should be added alongside the base head-mounted capture.

From there the engagement follows the same pilot-then-scale pattern used across this site’s custom collection: a small first batch proves the spec and acceptance criteria before volume is committed, and scaling happens on demand against the agreed spec rather than as a single fixed-size delivery.

At a glance

What you get.

Basis
Synchronized RGB + depth + IMU
Hand labels
3D joint pose (21 per hand) · per-joint visibility
Sync
Hardware-triggered, one clock domain
Optional
Wrist camera · stereo depth · body pose · contact events
Delivery
RLDS �� LeRobot · WebDataset · HDF5
License
Perpetual, buyer-owned, backed by a documented consent chain

Every collection runs through the same seven-stage end-to-end custom collection pipeline. End-to-end custom data collection is a managed service that takes an AI data need from problem to owned dataset in a single accountable pipeline.

Deliverables

What fields ship in an egocentric hand tracking dataset?

Hand tracking labels and streams delivered
FieldFormatNotes
hand_jointsfloat32 [T, 2, 21, 3], metres, head-camera frameTwo hands, 21 joints each, per frame
hand_visiblebool/flag per joint, per frameMarks occluded joints instead of guessing a position
depthPer-pixel metric depth, aligned to RGB and hand jointsBasis for 3D tracking rather than monocular estimation
contact_events (optional)Timestamped onset/offset against the same clockMarks when fingers make and break contact with an object

Capture setup

What does each capture component contribute to hand tracking?

Capture setup contribution to hand tracking
ComponentContributionWhen to include it
Head-mounted cameraKeeps hands and object in frame from the operating viewpointAlways, as the base egocentric view
Depth sensorGives 3D joint positions a measured basis, not an RGB-only estimateAlways, for 3D hand tracking
Wrist-mounted cameraClose-range view of the grasp detailWhen fine manipulation matters more than full-arm reach
Stereo pairBinocular depth for finer contact-level geometryWhen manipulation precision requirements are high

Buy vs. build

How does custom hand tracking collection compare with public datasets?

Custom hand tracking collection vs public hand-pose datasets
Custom collectionPublic dataset
Task and scene coverageSpecified to the buyer’s specFixed to what was already collected
Camera setupMatched to the buyer’s rig (head, wrist, stereo)Fixed to the dataset’s original setup
Occlusion handlingPer-joint visibility flag, reviewed in QAVaries by dataset; not guaranteed
LicensePerpetual, buyer-owned, exclusive on requestGoverned by the dataset’s own license terms

FAQ

Egocentric hand tracking data, answered.

What is the difference between egocentric hand tracking data and hand pose estimation?
They describe the same underlying capability. Hand pose estimation is the general term for recovering 3D hand and finger joint positions from video; egocentric hand tracking data is that same joint data captured specifically from a first-person viewpoint, which is the viewpoint most manipulation and dexterous-hand policies are trained to use.
How many joints are tracked per hand?
21 joints per hand, in 3D, delivered as hand_joints with shape [T, 2, 21, 3] in metres in the head-camera frame.
What happens when a finger is occluded?
Each joint carries a visibility flag (hand_visible). An occluded joint is marked as occluded rather than filled in with a guessed position, so a model trained on the data can distinguish observed geometry from a gap.
Is hand tracking data captured with depth, or estimated from RGB alone?
Hand joints are tracked against the depth stream captured on the same hardware clock as the video, so 3D position reflects measured geometry rather than a monocular RGB-only estimate.
Can hand tracking data include contact events and body pose as well?
Yes. Contact events and body pose are optional additions captured on the same clock and delivered alongside hand joints, for programs where contact timing or whole-body motion also matters.
What formats is egocentric hand tracking data delivered in?
RLDS, LeRobot, WebDataset, or HDF5. In LeRobot’s v2.1 layout, hand joints are flattened into observation.state; in RLDS and WebDataset they are explicit per-step fields.
Who owns a custom egocentric hand tracking dataset?
The buyer. Delivery is under a perpetual, buyer-owned commercial license backed by a documented consent chain, with exclusivity available on request.
How do I start a custom hand tracking collection?
Start from a written spec covering the tasks, objects, hand(s) involved, and whether wrist, stereo, or body pose should be added, the same way any custom collection on this site is scoped.

Sources

Where are the delivery formats documented?

Brief the gap. Get data back fast.

Tell us what your model is missing. We will quote reach, timeline, and price against a written spec, with a first validated batch in a median of 48 hours where coverage is deep.