3 步跑通 MediaPipe Hands 手势追踪:从摄像头到 21 个关键点

【免费下载链接】mediapipe Cross-platform, customizable ML solutions for live and streaming media. 【免费下载链接】mediapipe 项目地址: https://gitcode.com/GitHub_Trending/med/mediapipe

写一个"挥手切歌、抬手锁屏"的功能,最难的往往不是 UI,而是把手稳定地从画面里找出来:手指会挡住手掌、手会快速抖动,摄像头拍到的画面还没有明显特征。MediaPipe Hands 就是专门解决这个问题的:输入视频流或图片,输出每只手 21 个 3D 关键点的坐标,本地实时完成,图片本身不用出设备。

它是什么,硬指标有哪些

MediaPipe Hands 是 MediaPipe 框架里的手部检测与跟踪方案,内部由两个模型接力:先用手掌检测模型在整帧图里框出手掌区域,再用手部关键点模型在裁剪区域里回归出 21 个 3D 关节坐标。

  • 单张图片即可推断出 21 个 3D 关键点,手掌检测平均精度(AP)95.7%
  • 在手机端可实时运行,默认同时跟踪 2 只手,参数 max_num_hands 可调
  • 覆盖 Android、iOS、桌面(C++)、Web(JavaScript)、Python,边缘设备(如 Coral TPU)也有量化版本
  • 关键点分两种输出:归一化坐标(0~1)和以米为单位的真实 3D 世界坐标,可直接用于手势判定

输入一帧画面,能拿到什么

手势控制应用。 输入是摄像头实时帧,得到的是每帧 21 个关键点加左右手判定(multi_handedness 输出 "Left"/"Right" 及置信分)。典型用法:比较指尖与手腕的相对位置判断手指弯曲程度,就能区分"石头/剪刀/布",再映射到切歌、缩放这类动作上。

手语与无障碍场景。 输入一段视频,得到连续轨迹上的关键点序列,外加以手部几何中心为原点的世界坐标。由于跟踪模式(static_image_mode=false 时默认启用)在手已定位后不再每帧重跑检测,延迟比逐帧检测低,适合做连续手势序列识别。

自定义手势识别模型。 仓库里的 Model Maker 手势识别器(gesture_recognizer)自带 4 个手势类别的示例数据集(call、four、none、rock),按"一个手势一个文件夹"组织图片,即可训练并导出自己的分类模型。

手势识别训练数据集示例:比出数字 four 的手势图片

最短上手路径

第一步:装 Python 包,跑通追踪。

pip install mediapipe

然后用 docs/solutions/hands.md 里的 Python 示例代码:mp.solutions.handsHands 对象接上 OpenCV 摄像头帧,process() 之后从 results.multi_hand_landmarks 读关键点,draw_landmarks 画到手部骨架上,示例里连显示和翻转都写好了。

第二步:想看桌面原生效果,编译官方示例。 桌面版示例在 mediapipe/examples/desktop/hand_tracking/,用 Bazel 构建 hand_tracking_tflite 目标,再指定输入视频路径即可输出标注了关键点的视频。

第三步:按需扩展。 只需要手部检测框不需要关键点,换用 hand_detection_mobile.pbtxt 对应的图;要识别特定手势,就用 Model Maker 的 gesture_recognizer 重新训练。

手势识别训练数据集示例:比出 rock(石头)的手势图片

常见疑问

精度够上生产吗? 手掌检测 AP 95.7%,关键点模型对部分遮挡和自遮挡(手指挡手掌)做过专门训练,手机端可实时跑,常规交互场景够用。对精度敏感时把 model_complexity 从 0 调到 1,精度和延迟都会上去,属于用延迟换精度的取舍。

换平台要重写吗? API 参数在各平台语义一致(max_num_handsmin_detection_confidence 等,命名风格略有差异),但各平台调用方式不同:Python/Android/iOS/Web 各有独立示例,核心逻辑是"送帧进去、取关键点出来",业务层手势判定代码可复用,平台接入层需要按对应示例写。

Legacy Solutions 还能用吗? 仓库文档注明 Legacy Solutions 于 2023 年 3 月 1 日起结束支持,新开发建议走 MediaPipe Tasks 的 Hand Landmarker API;本仓库的 Legacy 代码和预编译产物仍按"原样可用"维护,学习和参考不受影响。

下一步建议:先按 Python 示例把摄像头关键点跑起来,确认输出格式符合需求,再决定是否引入 Model Maker 定制手势类别。

【免费下载链接】mediapipe Cross-platform, customizable ML solutions for live and streaming media. 【免费下载链接】mediapipe 项目地址: https://gitcode.com/GitHub_Trending/med/mediapipe

更多推荐