利用 MediaPipe 的手部追踪来控制您的 Mirru 机械手
Posted 谷歌开发者
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用 MediaPipe 的手部追踪来控制您的 Mirru 机械手相关的知识,希望对你有一定的参考价值。
客座博文 / 来自 Mirru 和 Tweag 工程团队
Mirru 应用是用来做什么的?
Mirru 是一款正在开发中的免费开源 android 应用,可以通过追踪手部 (Hand Tracking) 来控制机械手。通过这款应用,用户可以将其真手的抓握动作实时映射到机械手,而这种机械手可以通过 3D 打印和自行组装得到,成本低廉。通过 Mirru,我们希望为当前昂贵、繁琐的专有技术提供一种廉价、直观和开放的端到端替代方案。
图 1:通过 Mirru 应用和 MediaPipe 手部追踪移动机械手手指
Mirru 团队由 Violeta López 和 Vladimir Hermand 合作成立,这两位独立设计师和技术专家目前居住在巴黎。为了启动这个项目,该团队参加了 Tweag 的 Open Source Fellowship program 计划,从该计划的工程师之一 Dorran Howell 处获取资金支持、指导和数据工程专业知识。该计划帮助 Mirru 从基础开始启动项目。
Tweag
https://tweag.ioOpen Source Fellowship program 计划
https://www.tweag.io/blog/2020-02-14-os-fellowship/
我们这一计划为期 3 个月,旨在开发出一个可以利用计算机视觉技术控制任何蓝牙开源机械假肢的初版 Android 应用,并在 Google Play 商店免费提供,让用户可以根据自己的手打印机械手并进行组装,然后下载应用来操控。在 MediaPipe 的帮助下,我们无需构建自己的机器学习模型(因为没有相关资源或训练数据)即可快速构建应用原型。
为什么要使用手部追踪?
利用手机和带有手部追踪功能的前置摄像头,您能够用一种新颖实惠、简单易用且功能繁多的方式控制假肢。
假设我左手截肢,拥有一个机械假肢。每天,我都需要使用机械手来执行许多不同的抓握动作。例如,我需要使用双指张合或三点抓握的手势来拾取小物品,或需要用整个手拿起水果或杯子等物品。我通过肌电传感器来改换和执行这些抓握动作,例如,让我可以通过绷紧和放松上肢肌肉来张开手掌和进行抓握。这种肌电传感器在身体和机械手之间起主要的连接作用。
然而,借助传感器生活并不像看起来那么容易。人们可能需要很长时间才能适应如何控制肌电传感器,而且很多人永远都适应不了。同样,找假肢师安装这种传感器的费用也可能非常高,特别是对于发展中国家/地区或没有健康保险的人士。最后,目前市面上大多数设备的抓握动作仅有不到 10 种,仅少数型号能够创建自定义抓握动作,但通常比较麻烦。
Mirru 提供了一个替代方法。只需使用大众普及的手机,您就可以通过数字化方式将真手的动作实时映射到机械手上,用一种直观的方式控制机械手。如此一来,用户不再需要向假肢师支付昂贵的安装费用,也能够快速设置不限数量的抓握动作。目前,Mirru 完全不涉及肌电图,因为可靠的肌肉传感器价格昂贵。设置的抓握动作需要通过 Android 手机触发,所以,该应用的首个版本更适合扫地、手握书阅读、或者拿取杯子或购物袋这样的活动。在未来,我们希望将肌电传感器与手部追踪相结合,发挥二者的优势。
下面介绍了如何通过 Mirru 应用设置一个抓握动作:假设,我想用机械手抓住一个物品。我需要将机械手放到该物品前面,然后用健全的手在 Android 手机前面摆出相应的抓握动作,这时 Mirru 会将这个动作实时映射到机械手。然后,我可以锁定机械手的这一新抓握动作,收回健全的那只手。最后,我可以保存这个抓握动作供日后使用,并将其添加到我的抓握动作库中。
图 2:一位测试者使用手机上的手部追踪功能设置其机械手的抓握动作,即用机械手拿起卷尺并用另一只手测量
Brunel Hand 和 Mirru Arduino Sketch
我们的目标是让尽可能多的用户打印、组装和控制自己的机械手,为此我们设计了 Mirru 这个 Android 应用,可兼容通过支持蓝牙的 Arduino 板和伺服电机进行控制的机械手。
对于我们的项目,我们打印并组装了一个由 Open Bionics 制造的开源机械手 Brunel Hand。首先,我们 3D 打印了 Brunel Hand 的 可 3D 打印文件,这些文件依据 CC Attribution-Sharealike 4.0 国际许可的规定使用。然后,我们购买了必要的伺服电机、弹簧和螺丝来组装机械手。加上 3D 打印资料和购买伺服电机的费用,购买和组装机械手的成本大约为 500 欧元。
Brunel Hand
https://openbionicslabs.com/shop/brunel-hand可 3D 打印文件
https://www.thingiverse.com/thing:3000641
Brunel Hand 配备了基于肌电的固件和由 Open Bionics 开发的 PCB 板,但由于机械手只有 4 个伺服电机,对使用的微控制器类型没有限制。我们最终选择使用 Adafruit ESP32 Feather Board 开发板来实现蓝牙功能,并创建了 Arduino Sketch 供需要打印和组装机械手的用户下载、定制和上传。然后,用户可以下载 Mirru 应用,并将其用作打印机械手的控制台。
Arduino Sketch
https://github.com/mirru-app/mirru-android
用 MediaPipe 进行手部追踪
业内有一系列手部追踪计算机视觉解决方案可用于这个项目,但我们需要一个快速、开源的解决方案,不需要自行训练模型,并能够在便携式设备可靠运行,例如手机。
MediaPipe 为手部追踪提供了出色的开箱即用支持,由于我们没有可用的训练数据或资源从零开始创建模型,因此它非常适合我们的团队。我们能够轻松构建 Android 示例应用,同时应用的出色性能也令我们惊喜。更好的是,我们不需要对现成的手部追踪模型或图表进行任何调整,因为 Hand Landmark 模型为我们的原型提供了所有必要的输出。
MediaPipe
https://mediapipe.dev手部追踪
https://google.github.io/mediapipe/solutions/hands.html
在让真实用户测试机械手时,我们很高兴听到其中很多用户都对这款应用快速的动作转换效率感到印象深刻,而且市场上目前还没有任何应用能够如此迅速地支持用户自定义抓握方式。
图 3:一位测试者演示 MediaPipe 手部跟踪如何将她手指的移动快速转换为其机械手手指的移动
将3D MediaPipe点转换为机械手的输入
为实现 Mirru 应用的目标,我们需要使用手部追踪来实时、独立地控制 Brunel Hand 的每根手指。在 Brunel Hand 中,食指、中指和无名指通过伺服电机驱动,在 0-180 度的角度范围中移动;0 度表示手指完全竖直,180 度表示手指完全向下弯曲。由于缺乏足够的训练数据,我们无法从零开始创建模型来为我们计算这些伺服角度,所以我们选择使用一种启发式方法,将默认的手部追踪标志点输出与原型初始版本的硬件所需的输入相关联。
图 4:在实验室用该应用和原型测试输出到输入的转换
我们一开始不确定 3D 标志点中的估计深度 (Z) 坐标的精确度是否足以用于转换输入,或者该标志点是否仅用于二维。首先,我们记录了一个示例数据集,并在 Jupyter Notebook 中用 Plotly 使抓握点可视。鉴于这项技术只使用一个摄像头,没有任何深度传感器,坐标的质量和精度立刻给我们留下了深刻的印象。正如 MediaPipe 文档所述,Z 坐标与 X/Y 坐标的比例略有不同,但看起来这并没有对我们的原型构成重大挑战。
图 5:由 MediaPipe 提供的 21 个 3D 手部标志点组成的可视化手部数据图
由于 3D 标志点足够精确,我们选择使用 3D 计算关联标志点输出与机械手所需的输入。在我们的方法中,我们通过计算手指方向和手掌定义的平面法线之间的角度,来计算手指相对于手掌的锐角。角度为 0° 表示手指完全收回,角度为 180° 则表示手指完全伸出。我们能够通过计算从指根标志点到指尖标志点的向量来计算手指的方向。
图 6:3D 标志点图表,以及用来计算手指方向向量、手掌法线和两者所形成角度的标志点
我们通过选择手掌平面的三个点来计算手掌法线。使用标志点 0 作为参考点,我们计算边 1 和边 2 的向量,并计算这些向量的叉积以得到手掌法线。最后,我们计算手指方向与手掌法线的夹角。这将以弧度为单位返回用于计算度数的角度。
我们必须进行额外的处理来匹配机械手拇指的自由度。拇指的移动方式比其他手指更复杂。为使应用能够处理拇指的动作,我们对拇指方向和手掌法线进行了类似的计算,但使用了不同的标志点。
在 Android 手机上计算了伺服角度后,我们就可以通过蓝牙将相关值发送到 Arduino 板,Arduino 板驱使伺服电机移动到正确的位置。由于模型输出中存在一定的噪点,我们在管道中添加了一个平滑步骤,这一步骤非常重要,可以避免机械手指在运动时因为过于抖动而无法精确抓握。
图 7:一位测试者通过 Mirru 应用指示机械手执行双指张合动作
总结
Mirru 应用和 Mirru Arduino Sketch 的设计旨在帮助任何人用自己的真手和 Android 手机来控制一个开源的机械手。这是一种新颖和低成本的肌肉传感替代方案,MediaPipe 也已经证明这是完整应用中用于实现手部追踪组件的正确工具。Mirru 团队能够使用 MediaPipe 的现成解决方案快速启动项目,无需收集任何训练数据或从零开始设计模型。从手部追踪点到机械手的实时转换速度特别快,这让 Mirru 的用户感到非常高兴,这也为假肢的未来应用开辟了众多可能性。
我们很高兴看到 MediaPipe 手部追踪功能与现有肌电机械手结合蕴藏的巨大潜力,因为这将为实时创建和保存定制机械手抓握方式提供强大而先进的方法。另外,在 MediaPipe 的帮助下,我们能够提供一种开源的专有假肢替代方法,无需使用肌电传感器,也无需寻求假肢师的帮助,成本也要比市场中的已有方案要低得多,同时源代码可以由其他开发者定制和构建。我们非常期待听到开源社区的其他想法,以及手部追踪技术能够对假肢用户和制造商带来的助益。
对于 Mirru 应用的当前状态,我们尚不能够记录和保存序列长于静态抓握手点位置的移动手势。例如,记录手指在钢琴上弹奏低音线的连续动作,就像可循环的 gif 动图一样。机械手应用存在着诸多可能性,我们很高兴 MediaPipe 为我们的探索提供了支持。
我们期待着这一领域出现更多的贡献者。如果您对这一应用有任何想法或意见,请发送邮件至 mirruapp@gmail.com,或访问我们的 GitHub。
GitHub
https://github.com/mirru-app
本文由 Google AI 机器学习研究产品经理 Igor Kibalchich 策划。
更多 AI 相关阅读:
点击屏末 | 阅读原文 | 即刻访问 GitHub
以上是关于利用 MediaPipe 的手部追踪来控制您的 Mirru 机械手的主要内容,如果未能解决你的问题,请参考以下文章
利用 MediaPipe 和 TensorFlow.js 检测 3D 手部姿态
在 Python 3.7.9 中使用 opencv 和 mediapipe 制作手部跟踪模块时出错
SignAll SDK:基于 MediaPipe 的手语接口现已开放
MediaPipe Hands: On-device Real-time Hand Tracking 论文阅读笔记