繁中摘要:本文說明 67 極速挑戰如何在瀏覽器本機用 MediaPipe 估測雙手 21 個關鍵點,再以波峰/波谷邏輯計算次數,並解釋為何燈光與手掌朝向比「鏡頭貴不貴」更重要。遊戲影像不會為了辨識而上傳伺服器。

67 Speed Challenge counts alternating hand pumps in roughly 20 seconds using a webcam—or falls back to keys 6 and 7. The webcam path is not magic: it is a short pipeline from camera pixels → machine-learning landmarks → geometry filters → scored reps. This article documents how that pipeline works in the shipping site, so players understand missed reps and developers can see what “browser vision game” actually means in 2026.

1. End-to-end pipeline

When you choose webcam mode, the browser requests camera permission and streams video into an HTML5 <video> element. A MediaPipe Hand Landmarker model (loaded as a .task asset) runs in the page via the Tasks Vision package. Inference is accelerated with WebGL / WASM on supported devices. Each successful frame yields zero, one, or two hands with landmark coordinates in image space.

The game mirrors the video for a natural “selfie” feel, draws a neon skeleton overlay for feedback, and feeds palm position into a custom HandTracker object—one tracker per hand. That tracker decides whether a vertical oscillation cycle has completed. Completed cycles call registerRep(), which updates score, combo UI, particles, and sound.

Camera MediaPipe Landmarks Peak/Valley Score

2. Twenty-one landmarks—and which ones matter here

MediaPipe’s classic hand model estimates 21 points per hand: wrist, thumb (CMC–TIP), index, middle, ring, and pinky joints. For counting pumps we care most about a stable palm center proxy (derived from wrist and metacarpals) and a rough hand size in normalized coordinates. Hand size drives the motion amplitude threshold: larger apparent hands require a larger up/down travel before a turn counts as a rep. That keeps the detector proportional whether you sit 60 cm or 100 cm from the lens.

Open palms facing the camera give the model the clearest silhouette of fingers and palm. Edge-on hands, fists, or hands leaving the frame produce landmark jitter or complete dropouts—players experience this as “WAITING” status chips or silent missed pumps.

3. Peak–valley rep detection (engine truth)

Each hand runs an independent oscillator tracker. Vertical position is low-pass filtered so single-frame noise does not spam reps:

smoothedY = smoothedY × 0.35 + palmY × 0.65

Direction starts as “moving down” (increasing image Y). When the hand reverses and travels more than handSize × 0.33 from the last extreme, the tracker flips direction and fires a rep. The same rule applies on the opposite turn. In plain language: you need a clear enough up or down leg relative to your hand size, not a theatrical full-arm windmill.

Lab note: During internal playtests, huge shoulder-driven swings often lowered counted reps because hands left the frame at the top of each pump and the model re-acquired mid-cycle. Compact wrist-driven pumps kept both hands visible and scored higher on the same player.

Constants in the shipped build include a minimum hand size clamp (MIN_NORMALIZED_HAND_SIZE = 0.06) so tiny or distant hands do not make the threshold impossibly small and noisy.

4. Combo levels from rolling reps-per-second

Score is not “1 point per rep.” Each registered rep awards base points scaled by the current combo level, which is derived from a rolling 2-second window of rep timestamps:

Combo levelRPS (approx.)UI labelPoints per rep
0< 3.5PUMPING…10
1≥ 3.5HYPER!20
2≥ 6.0GODLIKE!35
3≥ 8.5SUPER 67!!!60

That is why a smooth high-frequency stretch beats a frantic start that collapses after three seconds: dropping out of the high RPS band collapses the multiplier even if total reps look okay. Keyboard mode uses the same scoring math; only the input source differs.

5. Failure modes (sensor reality, not “bugs”)

  • Backlight: Face and hands silhouetted against a bright window → low contrast → landmarks jump.
  • Motion blur: Very large amplitude at high speed on a slow sensor → peaks smear.
  • Occlusion: Hands crossing or stacked → one hand disappears for several frames.
  • Thermal throttle: Long sessions on thin laptops drop inference FPS; the detector sees fewer samples per second.
  • Multi-person frame: Extra hands confuse assignment; clear the background when competing seriously.

Practical fixes live in our merged setup guide: Webcam lighting, framing, and troubleshooting.

6. On-device privacy model

Landmark inference for gameplay is designed to run inside your browser session using the local model asset. We do not need to upload camera frames to a server to count pumps. Optional leaderboard submissions store callsign and score-related stats—not your video. Full wording is in the Privacy Policy. If a workplace or school forbids cameras entirely, use keyboard mode.

7. Performance expectations

Device classTypical experienceTip
Recent desktop / laptop + ChromeSmooth skeleton, reliable countsClose heavy tabs
Mid-range phonePlayable, occasional dropsLandscape, bright light, rest phone
Older integrated GPULower FPS, laggy overlayPrefer keyboard mode for fair scores

Browser support is strongest on current Chromium builds; Safari and Firefox work on many devices but camera permission UX differs. See the beginner guide for first-run steps.

8. What this system is not

67 Speed Challenge is an arcade measurement of a meme gesture—not a clinical motor assessment, not laboratory motion capture, and not a guarantee that two different webcams produce identical absolute numbers. Improve relative to your setup, compare leaderboards within the same input mode, and treat social-media “faster than you” clips with skepticism (editing and angles exist).

Related reading