手部特征点检测指南

MediaPipe 手部地标任务可让您检测图片中手部的特征点。您可以使用此任务定位关键手部点,并在这些手点上渲染视觉效果。此任务使用机器学习 (ML) 模型作为静态数据或连续流处理图片数据,并以图片坐标的形式输出手部地标,在世界坐标上输出手部地标,以及多只检测到的手的惯用手(左/右)。

试试吧!

开始使用

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

任务详情

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

特性

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

配置选项

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

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

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

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

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”时适用 N/A N/A

模型

手部特征点使用的模型包中包含两个打包的模型:手掌检测模型和手部特征点检测模型。您需要一个包含这两个模型的模型包才能运行此任务。

模型名称 输入形状 量化类型 模型卡片 Versions
Handmarker(完整) 192 x 192、224 x 224 浮点数 16 信息 最新动态

手部特征点模型包可检测已检测到的手部区域内 21 个手指节坐标的关键点定位。该模型基于大约 3 万张真实图像以及对各种背景施加的几个渲染的合成手部模型进行了训练。

手部特征点模型包包含一个手掌检测模型和一个手部特征点检测模型。手掌检测模型在输入图片中定位手部,手部特征点检测模型可识别手掌检测模型定义的被剪裁手掌图片上的特定手部特征点。

由于运行手掌检测模型非常耗时,因此在视频或直播跑步模式下,手部特征点会在一帧中使用手部特征点模型定义的边界框,以便为后续帧定位手部区域。仅当手部特征点模型不再识别出手部的存在或未能跟踪画面中的手部时,手部特征点才会重新触发手掌检测模型。这样可以减少手动标志器触发手掌检测模型的次数。

任务基准

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

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