MediaPipe Hands:如何从摄像头实时追踪 21 个手部关键点
【免费下载链接】mediapipeCross-platform, customizable ML solutions for live and streaming media.项目地址: https://gitcode.com/GitHub_Trending/med/mediapipe
打开笔记本摄像头,屏幕上你的手背上立刻亮起 21 个带连线的点——手腕 1 个,每根手指 4 个,指尖、指节一个不少。这就是 MediaPipe Hands 在本地做的事:逐帧分析摄像头画面,输出每只手的 21 个 3D 关键点坐标。它不需要 GPU 服务器,Python 装个包就能跑,Android、iOS、桌面端都有现成示例工程。
先看效果
下图来自仓库内手势识别数据集,MediaPipe Hands 会在这样的画面上输出双手的 21 个关键点,z 值表示深度,可以区分前后手指。
几个关键数据:
- 每只手 21 个关键点,输出含 x、y、z 三维坐标(x、y 归一化到 [0,1],z 以手腕为原点)
- 掌部检测平均精度 95.7%,默认最多同时跟踪 2 只手
- 检测置信度默认 0.5;移动端 GPU 上可实时运行
3 分钟跑通手势识别
先用 pip 装好包,然后十几行 Python 就能让摄像头里的关键点动起来。
安装依赖:
pip install mediapipe opencv-python打开摄像头并绘制手部关键点:
import cv2, mediapipe as mp hands = mp.solutions.hands.Hands(max_num_hands=2, min_detection_confidence=0.5) cap = cv2.VideoCapture(0) while cap.isOpened(): ok, img = cap.read() if not ok: break r = hands.process(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)) if r.multi_hand_landmarks: mp.solutions.drawing_utils.draw_landmarks(img, r.multi_hand_landmarks, mp.solutions.hands.HAND_CONNECTIONS) cv2.imshow('MediaPipe Hands', cv2.flip(img, 1)) if cv2.waitKey(5) & 0xFF == 27: break完整工程(Android、iOS、桌面 C++ 三端)可直接看仓库里的示例目录 mediapipe/examples/desktop/hand_tracking/。
它是怎么工作的
关键点在单帧图像上就能算出来,整条管线是两级结构:
- 掌部检测:一个 SSD 单发检测器先在全图上找手掌框。官方论文里说,检测"刚性的手掌"比检测张开手指的手要稳得多,双手握手这种自遮挡场景也压得住
- 关键点回归:在手部裁剪区上,另一个模型直接回归出 21 个 3D 坐标;训练用了约 3 万张人工标注图加合成手部渲染图
- 跟踪复用:视频模式下,后一帧优先用上一帧关键点位置裁剪局部区域继续跟踪,跟丢了才重新跑掌部检测——这是延迟低的关键
- 图化管线:整条流程由 pbtxt 图文件定义,见 mediapipe/graphs/hand_tracking/hand_tracking_mobile.pbtxt,Android/iOS 上可切到 GPU 执行
能拿它做什么
手势识别:把 21 个点的相对位置喂给分类器,就能把画面判成"石头/剪刀/布/数字 4"这类离散手势。
隔空操作:指尖坐标可以直接驱动光标或虚拟键盘按键,手指弯曲程度(用关节角度算)对应按键区。
手语转文字:连续帧的 21 点序列 + 手部朝向,是手语识别系统最基础的输入特征。
自定义手势模型:自带手势不够用?用 Model Maker 录几组照片就能微调出自己的识别器,样本目录 mediapipe/model_maker/python/vision/gesture_recognizer/ 自带完整数据集和教程。
进阶玩法:参数与图文件在哪改
常用调参项(Python 里就是Hands()的入参):
max_num_hands:跟几只手,默认 2model_complexity:0 或 1,越高越准也越慢min_detection_confidence/min_tracking_confidence:丢手时机,调高更稳、丢得更快static_image_mode:处理静态图设true,每帧都跑检测
底层管线想动结构,改图文件:移动端 hand_tracking_mobile.pbtxt、桌面端hand_tracking_desktop_live.pbtxt都在 mediapipe/graphs/hand_tracking/ 目录;关键点模型子图在 mediapipe/modules/hand_landmark/。
写在最后
如果你要的是"摄像头进、21 个 3D 点出"、数据全在本地、还要覆盖 Android/iOS/桌面三端,MediaPipe Hands 目前几乎没有更省事的选择。两种情况可以不用它:只是想在 iPhone 上取手部位图,系统自带框架就够了;要的是全身关节,直接看同仓库的 Pose 或 Holistic 方案更合适。
【免费下载链接】mediapipeCross-platform, customizable ML solutions for live and streaming media.项目地址: https://gitcode.com/GitHub_Trending/med/mediapipe
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考