Computer vision visualizer
Hand Landmarks Visualizer
Detect 21 hand landmarks, handedness, finger joints, and browser-side measurements with MediaPipe.
Controls
Detection settings
Overlay
Measurements
Preview
Landmark Coordinates
| ID | Name | x | y | z | visibility |
|---|---|---|---|---|---|
| 0 | Wrist | -- | -- | -- | 1 |
| 4 | Thumb Tip | -- | -- | -- | 1 |
| 8 | Index Tip | -- | -- | -- | 1 |
| 12 | Middle Tip | -- | -- | -- | 1 |
| 16 | Ring Tip | -- | -- | -- | 1 |
| 20 | Pinky Tip | -- | -- | -- | 1 |
What you can inspect
Pinch distance is the Euclidean distance between Thumb Tip (4) and Index Tip (8). Small values can trigger a click, grab, zoom, or drawing interaction.
What this visualizer does
This page runs MediaPipe HandLandmarker directly in the browser. You can upload an image, use the webcam, or try a sample guide, then inspect hand landmarks, handedness, connections, bounding boxes, and gesture-style measurements.
What MediaPipe detects
MediaPipe returns 21 normalized landmarks for each hand, world landmarks for 3D reasoning, and a left/right handedness score. The wrist is landmark 0; fingertips are 4, 8, 12, 16, and 20.
How the model works
The hand pipeline first localizes a palm or hand region, then a landmark model estimates key finger joints inside that crop. Video mode reuses tracking across frames so webcam inference stays responsive.
Controls explanation
Max hands limits how many hands are returned. Confidence filters weak detections. Overlay switches control what is drawn on the canvas, and measurement switches control which derived values are shown.
Output explanation
Coordinates are normalized to image size: x and y are in the range 0 to 1, while z is relative depth where smaller values are closer to the camera. Measurements are derived from those landmarks and are meant for interaction logic.
Common use cases
- Gesture control for browser apps and demos.
- Pinch, grab, and drawing interactions.
- Hand pose analysis for education or accessibility tools.
- AR overlays that follow fingers or palms.
import { FilesetResolver, HandLandmarker } from '@mediapipe/tasks-vision';const vision = await FilesetResolver.forVisionTasks('/wasm');const detector = await HandLandmarker.createFromOptions(vision, {baseOptions: { modelAssetPath: '/hand_landmarker.task' },runningMode: 'IMAGE',numHands: 2,minHandDetectionConfidence: 0.5,});const result = detector.detect(imageElement);console.log(result.landmarks, result.handedness);
FAQ
Why are no hands detected in a sample?
The built-in samples are lightweight guide images. For model accuracy, upload a real photo or use webcam input with the full hand visible.
Does this upload images to a server?
No. Detection runs client-side in your browser with MediaPipe Tasks and WebAssembly.