distance2d(a, b)计算两个二维点的欧氏距离。
DOCUMENTATION / ALPHA
01 / START UP
安装包,传入屏幕坐标控制点,再用 CSS 定义它们的视觉反馈。
npm install vision-gesture-kitimport { GesturePointOverlay } from "vision-gesture-kit";
export function GestureLayer({ hands }) {
const points = hands.flatMap((hand, handIndex) => [
{ id: `${handIndex}-index`, ...hand.index },
{ id: `${handIndex}-thumb`, ...hand.thumb }
]);
return (
<GesturePointOverlay
points={points}
pointClassName="gesture-point"
/>
);
}.gesture-point {
border: 2px solid rgba(255, 255, 255, 0.85);
border-radius: 50%;
background: rgba(255, 255, 255, 0.18);
}组件使用 fixed 定位,因此 x/y 应是相对于当前视口的像素坐标。运行页面后,数组中的每个点都会显示在页面最上层。
02 / INPUT
识别模型通常返回 0 到 1 的归一化坐标。渲染前先映射到屏幕,并根据镜像摄像头决定是否翻转 x。
idstring稳定且唯一的控制点标识
x / ynumber相对视口左上角的像素坐标
hand"left" | "right"可选的手别元数据
kindstring可选的 landmark 语义,例如 index 或 thumb
03 / REACT
一个透明、固定定位且不截获指针事件的覆盖层。它渲染控制点,并允许把滚动槽、章节轨道等自定义工具作为 children 放入同一顶层坐标空间。
pointsGestureControlPoint[]必填。需要渲染的屏幕坐标点。
classNamestring覆盖层容器类名。
pointClassNamestring每个控制点的类名。
pointSizenumber点的直径,默认 44px。
zIndexnumber覆盖层层级,默认 10。
childrenReactNode与控制点共享屏幕坐标系的工具 UI。
04 / CORE
框架无关函数可以在 React、Vue、Svelte 或原生 DOM 中直接使用,并同时支持 ESM 与 CJS。
import {
distance2d,
getPinchCenter,
findNearestPointIndex,
getAdaptiveRadius
} from "vision-gesture-kit";distance2d(a, b)计算两个二维点的欧氏距离。
getPinchCenter(hand)返回食指与拇指的中点,建议用它计算工具距离和投影。
findNearestPointIndex(point, candidates)返回与输入点距离最近的候选点下标。
getAdaptiveRadius(options)根据接近距离扩大捕获反馈,同时限制最大倍数。
05 / INTERACTION
不要让 landmark 直接触发业务操作。先让输入点捕获一个可见工具,再由工具输出业务事件。
06 / DETECTOR
首页演示使用 @mediapipe/tasks-vision 的 HandLandmarker。将 landmark 8 作为食指尖、4 作为拇指尖,映射为屏幕坐标后传入覆盖层。建议使用张开/闭合双阈值和短暂释放延时,避免临界抖动。
07 / PRODUCTION