MediaPipe

关注
义项:机器学习视觉处理框架
MediaPipe

MediaPipe是谷歌(Google)开发并开源的一套跨平台机器学习流水线框架,用于构建处理视频、音频等感知数据的应用,让开发者把预训练的模型以较低代码量部署到移动端、网页端、桌面端和边缘设备上。它由底层框架与上层解决方案两部分组成,前者以「图」的方式组织可复用的计算组件,后者提供人脸检测、手势识别、姿态估计等现成能力[1]。其数据默认在设备本地处理,输入不上传至谷歌服务器,因而适合对延迟和隐私有要求的实时场景[1]。

百科 图文
目录
  1. 定义
  2. 原理
  3. 发展历程
  4. 应用
  5. 局限
  6. 参见

定义

MediaPipe是谷歌研究(Google Research)于 2019 年 6 月开源的一套跨平台框架,用于搭建处理感知数据的机器学习流水线,可处理视频、音频等不同模态的数据[2]。它既包含用于构建流水线的底层框架,也提供封装好的任务接口与预训练模型,支持 Android、iOS、网页 JavaScript 和 Python 等平台[1]。按用途划分,MediaPipe 分为框架与解决方案两层:框架是搭建高效端侧流水线的底层组件,解决方案则把视觉、文本、音频任务打包成可直接调用的接口,并配套模型定制与可视化评估工具。

该框架的一个特点是推理在设备本地完成。官方文档说明,使用 MediaPipe Tasks 时输入的图像、视频、文本等数据均在设备上处理,不会发送到谷歌服务器,因此可用于处理不宜离开设备的数据;同时相关接口会向谷歌回传性能与使用情况的指标数据[1]。

原理

MediaPipe 的流水线以有向图的形式描述,图中的节点称为计算器(Calculator),节点之间通过数据流(stream)连接,数据包(packet)沿流传递[3]。图可以有任意数量的输入与输出,数据流既能分支也能合并,通常向前流动,也允许反向回路[3]。计算器承担模型推理、媒体处理算法和数据变换等任务,裁剪、渲染与神经网络运算可以全部放在 GPU 上执行,例如多数手机上使用 TFLite 的 GPU 推理。

调度方面,框架维护一个线程池,只要某个计算器的全部输入就绪且有空闲线程,就立即运行它;同一计算器实例在同一时刻只处理一组输入,因此大多数计算器只需做到线程兼容而不必线程安全[4]。实时处理要求数据包带有单调递增的时间戳,通常取帧的录制时间或呈现时间,以 1970 年 1 月 1 日以来的微秒数表示,从而让不同来源的数据包按统一顺序处理[5]。当某一时间戳上没有数据包产生时,计算器可以输出「时间戳上界」,告诉下游节点不必等待,以便即时开始处理[5]。

为便于复用,一张图可以被定义为子图(Subgraph),对外暴露输入输出流,像普通计算器一样被其他图引用;加载时每个子图节点会被替换成对应的计算器图,语义与性能保持一致[6]。框架还带有追踪与可视化工具:追踪模块记录数据包在图中流动的时间事件,可视化器则提供时间线视图和图形视图,用于查看各计算器的状态、定位实时延迟与内存堆积等问题[7]。

发展历程

MediaPipe 在正式开源前已在谷歌内部长期使用。维基百科记载,自 2012 年起它就被用于 YouTube 上视频与音频的实时分析,此后逐步进入 Gmail、Google Home 等更多产品[2]。2019 年 6 月,谷歌研究在美国长滩举行的计算机视觉与模式识别会议(CVPR)上将其开源,首个版本包含目标检测、人脸检测、手部追踪、多手追踪和头发分割五个流水线示例[2]。同年 8 月,谷歌研究公布了基于该框架的实时手部追踪方案,用机器学习从单帧图像推断出手部的 21 个三维关键点,可在手机上实时运行并同时追踪多只手。

此后框架持续扩充流水线,2023 年 3 月 1 日,谷歌终止了对一批旧版解决方案的支持,其中人脸检测、人脸网格、手部、姿态、整体检测、自拍分割、头发分割、目标检测等被升级为新的解决方案,Box Tracking、Instant Motion Tracking、Objectron、KNIFT、AutoFlip、MediaSequence 等的支持则直接结束。同年 4 月 3 日,开发者文档主站迁移至谷歌开发者站点[8]。维基百科还记载,框架的首个稳定版本为 0.5.0,2025 年 5 月推出 MediaPipe Solutions,该框架现隶属于谷歌旗下部门 Google AI Edge[2]。

应用

官方提供的解决方案覆盖视觉、文本与音频三大类任务。视觉方向包括人脸检测、人脸关键点检测、手势识别、图像分类、图像分割、目标检测、姿态关键点检测等;文本与音频方向则提供相应任务的接口。这些接口可在 Android、网页 JavaScript、Python 和 iOS 上调用,Android 端以 tasks-vision、tasks-text、tasks-audio 等依赖包的形式引入,Python 端通过安装 mediapipe 包并使用 tasks 模块调用[1]。

在手部追踪这一典型用例中,流水线由三个模型串联:手掌检测模型 BlazePalm 在整幅图像上给出带有方向的手部边界框,手部关键点模型在裁剪出的手部区域内回归出 21 个三维关键点,手势识别器再把关键点配置归类为离散手势。谷歌研究公布的数据显示,该手掌检测的平均精度为 95.7%,而使用普通交叉熵损失且不加解码器的基线仅为 86.22%;关键点模型训练时人工标注了约 3 万张真实图像,并补充渲染了不同背景下的合成手部模型。为降低算力消耗,手掌检测只在必要时运行,后续帧的手部位置由已算出的关键点推断,仅当置信度低于阈值时才重新对整帧做检测。

研究文献中也出现了该框架的其他用途。有论文把 MediaPipe 检测出的 33 个关键点(每个含 x、y、z 三个坐标)共 99 个特征作为输入,用于视频中人体动作的识别[9]。也有工作将基于特征的检测算法与 MediaPipe 结合,利用其深度学习能力从运动的手部提取视觉特征,用于机器人手臂的手势控制[10]。

局限

框架的能力受其运行环境的约束。官方常见问题说明,并行运行的计算器无法像普通顺序计算器那样维护内部状态,需要开发者自行处理;使用 ImmediateInputStreamHandler 时,数据包可能在时间戳顺序上交错到达,若同一输出流混用这些时间戳,会被判定为时间戳非单调递增并报错[4]。运行中修改图设置也只有两种途径:用修改后的配置重启计算器图,或者通过图输入流以数据包形式下发新的计算器选项,而重启之外的方案仍在探索[4]。

在实时处理场景下,为跟上输入帧的到达速度往往必须丢弃部分数据包,官方推荐的做法是使用 FlowLimiterCalculator、PacketClonerCalculator 等专门的计算器[5]。此外,第三方集成也暴露出一些限制:有集成文档指出,MediaPipe 图目前仅支持 gRPC 的 KServe 接口,其公共镜像中的计算器只支持 CPU 执行,节点间交换的是主机内存中的对象与缓冲区,完整流水线在 GPU 上执行尚待后续版本实现。同处还提到,图配置不会校验收输入处理器的设置,也不校验图定义中的所有计算器是否都已编译进服务端,实际部署前需要先用示例请求测试。

使用该框架还可能涉及合规责任。官方说明,MediaPipe Tasks 的接口会向谷歌发送应用中的性能与使用指标,开发者需要依照适用法律取得用户对这类数据处理的知情同意[11]。

参见

  • TensorFlow —— MediaPipe 的推理常借助其轻量运行时 TFLite 完成,两者同属谷歌的机器学习技术栈。

  • 计算机视觉 —— MediaPipe 的多数解决方案服务于这一领域的人脸、手势、姿态等任务。

  • 增强现实 —— 该框架的手部与人脸追踪能力被用于把数字内容叠加到现实画面上。

  • 机器学习 —— MediaPipe 是部署预训练模型与搭建推理流水线的工程框架。

  • 边缘计算 —— 该框架强调在手机、网页和边缘设备上本地完成推理。

参考资料

  1. MediaPipe Tasks | Google AI Edge | Google for Developers [引用日期2026-10-14]
  2. MediaPipe [引用日期2026-10-14]
  3. CalculatorGraph [引用日期2026-10-14]
  4. faq [引用日期2026-10-14]
  5. realtime_streams [引用日期2026-10-14]
  6. readthedocs.org 上的文件 [引用日期2026-10-14]
  7. MediaPipe: A Framework for Building Perception Pipelines [引用日期2026-10-14]
  8. pypi.org 上的网页 [引用日期2026-10-14]
  9. ieee.org 上的网页 [引用日期2026-10-14]
  10. figures [引用日期2026-10-14]
  11. mediapipe-nightly [引用日期2026-10-14]
词条评价
词条统计

浏览次数:2 次

阅读量:0 次 · 阅读完成量:0 次

最近更新:2026-10-13T21:55:22Z

历史版本

本条目引用的词条
TensorFlow 计算机视觉 增强现实 机器学习 边缘计算