手势识别任务指南

借助 MediaPipe 手势识别器任务,你可以实时识别手势; 提供识别出的手势结果以及 检测到手部设备。您可以使用此任务从 用户,并调用与这些手势对应的应用功能。

此任务使用机器学习 (ML) 模型对图片数据进行操作,并接受 静态数据或连续流。该任务以 图片坐标, 世界坐标中的手形地标, 用手习惯 (左/右)以及多只手的手势类别。

<ph type="x-smartling-placeholder"></ph> 试试看!

开始使用

使用此任务时,请先按照以下某个实施指南操作 目标平台这些针对具体平台的指南将向您介绍 使用推荐的模型来实现此任务,并提供代码示例 以及建议的配置选项:

任务详情

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

功能

  • 输入图像处理 - 处理包括图像旋转、大小调整 标准化和颜色空间转换。
  • 得分阈值 - 根据预测得分过滤结果。
  • 标签许可名单和拒绝名单 - 指定手势类别 模型识别的字词。
任务输入 任务输出
手势识别器接受以下某种数据类型的输入:
<ph type="x-smartling-placeholder">
    </ph>
  • 静态图片
  • 已解码的视频帧
  • 实时视频画面
手势识别程序输出以下结果:
<ph type="x-smartling-placeholder">
    </ph>
  • 手势类别
  • 检测到的手的用手程度
  • 图片坐标中检测到的手的地标
  • 在世界坐标上检测到的手的地标

配置选项

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

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

IMAGE:单图输入的模式。

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

LIVE_STREAM:输入流媒体直播模式 例如来自相机的数据。在此模式下,resultListener 必须为 调用以设置监听器以接收结果 异步执行。
{IMAGE, VIDEO, LIVE_STREAM} IMAGE
num_hands 最多能检测出手的数量 GestureRecognizer 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
canned_gestures_classifier_options 用于配置预设手势分类器行为的选项。预设的手势为 ["None", "Closed_Fist", "Open_Palm", "Pointing_Up", "Thumb_Down", "Thumb_Up", "Victory", "ILoveYou"]
  • 显示名称语言区域:通过 TFLite 模型元数据指定的显示名称(如果有)的语言区域。
  • 结果数上限:要返回的评分最高的分类结果的数量上限。如果 <0,则返回所有可用的结果。
  • 分数阈值:低于此分数的结果将被拒绝。如果设置为 0,则返回所有可用的结果。
  • 类别许可名单:类别名称许可名单。如果为非空值,则类别不在此集合中的分类结果将被滤除。与拒绝名单相互排斥。
  • 类别拒绝名单:类别名称的拒绝名单。如果为非空值,则此集合中的类别将被滤除。与许可名单相互排斥。
    • 显示名称语言区域:any string
    • 结果数上限:any integer
    • 分数阈值:0.0-1.0
    • 类别许可名单:vector of strings
    • 类别拒绝名单:vector of strings
    • 显示名称语言区域:"en"
    • 结果数上限:-1
    • 分数阈值:0
    • 类别许可名单:空
    • 类别拒绝名单:空
    custom_gestures_classifier_options 用于配置自定义手势分类器行为的选项。
  • 显示名称语言区域:通过 TFLite 模型元数据指定的显示名称(如果有)的语言区域。
  • 结果数上限:要返回的评分最高的分类结果的数量上限。如果 <0,则返回所有可用的结果。
  • 分数阈值:低于此分数的结果将被拒绝。如果设置为 0,则返回所有可用的结果。
  • 类别许可名单:类别名称许可名单。如果为非空值,则类别不在此集合中的分类结果将被滤除。与拒绝名单相互排斥。
  • 类别拒绝名单:类别名称的拒绝名单。如果为非空值,则此集合中的类别将被滤除。与许可名单相互排斥。
    • 显示名称语言区域:any string
    • 结果数上限:any integer
    • 分数阈值:0.0-1.0
    • 类别许可名单:vector of strings
    • 类别拒绝名单:vector of strings
    • 显示名称语言区域:"en"
    • 结果数上限:-1
    • 分数阈值:0
    • 类别许可名单:空
    • 类别拒绝名单:空
    result_callback 设置结果监听器以接收分类结果 在手势识别器处于直播模式时异步执行。 仅在跑步模式设为“LIVE_STREAM”时才能使用 ResultListener 不适用 不适用

    模型

    手势识别程序使用的模型包和两个预封装的模型包: 手势分类模型包和手势分类模型包。通过 地标模型可以检测到手部和手部几何图形的存在, 识别模型根据手部几何形状来识别手势。

    <ph type="x-smartling-placeholder">
    模型名称 输入形状 量化类型 模型卡片 版本
    <ph type="x-smartling-placeholder"></ph> HandGestureClassifier 192 x 192、224 x 224 浮点数 16 <ph type="x-smartling-placeholder"></ph> 信息 <ph type="x-smartling-placeholder"></ph> 最新

    此任务还支持使用 Model Maker 修改模型包。 如需详细了解如何使用 Model Maker 为这项任务自定义模型, 请参阅为手势识别器自定义模型页面。

    手部特征点模型包

    手部特征点模型包检测 21 只手关节的关键点定位 坐标。该模型是使用 大约 3 万张真实图像,以及几张已渲染的合成手部 不同背景下的 Transformer 模型。请参阅以下 21 个地标的定义:

    手部地标模型包包含手掌检测模型和 手势特征的检测模型。手掌检测模型可以根据 从整个输入图片中选取的手,而手部特征点检测模型 由手掌检测模型定义的已剪裁手部图像上的特征点。

    由于手掌检测模型要比较耗时,因此在“视频”模式或“实时”模式下 手势识别器会使用由检测到的手定义的边界框 用于定位下一个帧中的手部区域 帧。这样可以减少手势识别器触发手掌检测模型的次数。 仅当手部特征点模型无法再识别足够的必需元素时 或手部跟踪失败,手掌检测模型 来重新定位指针位置。

    手势分类模型包

    手势分类模型包可以识别以下常见的手势:

    0 - Unrecognized gesture, label: Unknown
    1 - Closed fist, label: Closed_Fist
    2 - Open palm, label: Open_Palm
    3 - Pointing up, label: Pointing_Up
    4 - Thumbs down, label: Thumb_Down
    5 - Thumbs up, label: Thumb_Up
    6 - Victory, label: Victory
    7 - Love, label: ILoveYou
    

    如果模型检测到手,但无法识别手势,相应手势 识别器返回“None”的结果。如果模型未检测到手, 手势识别器返回空值。

    手势分类模型包包含两步神经网络流水线 一个手势嵌入模型,然后是一个手势分类模型。 如需了解详情,请参阅手势分类模型卡片

    手势嵌入模型将图片特征编码为特征向量, 分类模型是一个轻量级手势分类器, 作为输入。提供的手势分类模型包包含 预设手势分类器,用于检测引入的 7 种常用手势 。你可以通过训练来扩展模型包,从而识别更多手势 自定义手势分类器。如需了解详情,请参阅以下内容 自定义模型部分。

    包含预设手势分类器和自定义手势分类器的手势识别器 如果两个分类器都识别出同一手势,则优先选择自定义手势 其类别。如果只有一个手势分类器识别出该手势, 手势识别程序会直接输出识别出的手势。

    任务基准

    以下是根据上述内容确定的整个流水线的任务基准 预先训练的模型。延迟时间结果是使用以下参数在 Pixel 6 上的平均延迟时间: CPU / GPU。

    模型名称 CPU 延迟时间 GPU 延迟时间
    GestureRecognizer 16.76 毫秒 20.87 毫秒

    自定义模型

    如果您想改进或更改本演示文稿中提供的模型功能, 您可以使用 Model Maker 修改现有模型。使用的自定义模型 必须采用 .task 格式,这是一个模型软件包文件。您 应考虑使用 Model Maker 修改为完成此任务提供的模型 然后再自行构建

    如需详细了解如何为此任务自定义模型,请参阅 为手势识别器自定义模型