手部特征点检测指南

一只手拿着一个鸡蛋。手的形状用线框标记,表示已识别出的结构

借助 MediaPipe Hand Landmarker 任务,您可以检测图片中的手的特征点。 您可以使用此任务来定位手部的关键点,并基于这些点来渲染视觉效果。此任务使用机器学习 (ML) 模型作为静态数据或连续数据流来处理图像数据,并输出图像坐标中的手部地标、世界坐标中的手部地标以及多个检测到的手的左右手性。

试试吧!

开始使用

如需开始使用此任务,请按照适用于目标平台的以下任一实现指南操作。以下平台专用指南将引导您完成此任务的基本实现,包括推荐的模型,以及包含推荐配置选项的代码示例:

任务详情

本部分介绍了此任务的功能、输入、输出和配置选项。

功能

  • 输入图片处理 - 处理包括图片旋转、调整大小、归一化和颜色空间转换。
  • 得分阈值 - 根据预测得分过滤结果。
任务输入 任务输出
手部地标检测器接受以下任一数据类型的输入:
  • 静态图片
  • 解码后的视频帧
  • 实时视频画面
手部地标检测器会输出以下结果:
  • 检测到的手的惯用手
  • 检测到的手的地标(以图片坐标表示)
  • 以世界坐标表示的检测到的手的特征点

配置选项

此任务具有以下配置选项:

选项名称 说明 值范围 默认值
running_mode 设置任务的运行模式。共有三种模式:

IMAGE:适用于单张图片输入的模式。

视频:视频的解码帧的模式。

LIVE_STREAM:输入数据(例如来自摄像头)的直播模式。在此模式下,必须调用 resultListener 以设置监听器以异步接收结果。
{IMAGE, VIDEO, LIVE_STREAM} IMAGE
num_hands 手部特征点检测器检测到的手的数量上限。 Any integer > 0 1
min_hand_detection_confidence 在手掌检测模型中,手检测被视为成功所需的最低置信度得分。 0.0 - 1.0 0.5
min_hand_presence_confidence 手掌地标检测模型中手掌存在得分的最小置信度得分。在视频模式和直播模式下,如果手部地标模型的手部存在置信度得分低于此阈值,手部地标定位器会触发手掌检测模型。否则,轻量级手部跟踪算法会确定手的具体位置,以便进行后续的特征点检测。 0.0 - 1.0 0.5
min_tracking_confidence 手部跟踪被视为成功所需的最低置信度得分。这是当前帧和上一帧中手部之间的边界框 IoU 阈值。在手部特征点检测器的“视频”模式和“流式传输”模式下,如果跟踪失败,手部特征点检测器会触发手部检测。否则,它会跳过手部检测。 0.0 - 1.0 0.5
result_callback 设置结果监听器,以便在手部地标检测器处于实时流式传输模式时异步接收检测结果。 仅在运行模式设置为 LIVE_STREAM 时适用 不适用 不适用

模型

Hand Landmarker 使用包含两个打包模型的模型软件包:手掌检测模型和手部地标检测模型。您需要一个包含这两个模型的模型包才能运行此任务。

模型名称 输入形状 量化类型 模型卡片 版本
HandLandmarker(完整版) 192 x 192、224 x 224 float 16 信息 最新

手部特征点模型软件包可检测检测到的手部区域内 21 个手指关节坐标的关键点定位。该模型是基于约 3 万张真实图片以及叠加在各种背景上的多个渲染合成手部模型进行训练的。

手部地标模型软件包包含一个手掌检测模型和一个手部地标检测模型。手掌检测模型会在输入图片中定位手部,而手部地标检测模型会在手掌检测模型定义的剪裁手部图片上识别特定的手部地标。

由于运行手掌检测模型非常耗时,因此在视频或直播运行模式下,手部地标检测器会使用手部地标模型在一个帧中定义的边界框来定位后续帧的手部区域。只有当手部特征点模型不再检测到手的存在或无法跟踪画面中的手时,手部特征点检测器才会重新触发手掌检测模型。这样可以减少 Hand Landmarker 触发手掌检测模型的次数。

任务基准

以下是基于上述预训练模型的整个流水线的任务基准。延迟时间结果是使用 CPU / GPU 在 Pixel 6 上的平均延迟时间。

模型名称 CPU 延迟时间 GPU 延迟时间
HandLandmarker(完整版) 17.12 毫秒 12.27 毫秒