mediapipe
Google开源的跨平台端侧ML框架,实时处理人脸/手势/姿态/音频/文本五大感知任务
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
Google开源的跨平台端侧ML框架,实时处理人脸/手势/姿态/音频/文本五大感知任务
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
2019 年,一款 AR 试妆应用需要在手机上实时追踪 21 个手势节点、468 个面部特征点,还要同时运行姿态估计——传统方案要么在服务器端跑 AI(延迟高、隐私差),要么用纯 CV 算法(精度差)。Google 的团队用一个框架同时解决了这三个问题,这便是 MediaPipe。
今天,MediaPipe 已在全球超过 36,000 个 GitHub Stars,被 YouTube AR 滤镜、Google Lens、Pixel 手机相机、Google Meet 虚拟背景等数十款产品深度使用,成为端侧机器学习领域最具影响力的开源框架之一。

图1:MediaPipe 项目官方标识
MediaPipe 由 Google Research(现 Google DeepMind)于 2019 年在 GitHub 开源,最初作为内部项目服务于 Google 自家产品。其设计理念来自 Google 内部积累多年的多媒体感知管线经验,核心目标只有一个:让 AI 在手机、浏览器、嵌入式设备上实时运行,而不需要服务器。
与很多学术开源项目不同,MediaPipe 的生命力来自于 Google 内部产品的持续使用和反馈。每当 YouTube 新增一个 AR 滤镜、Google Maps 推出一个新的 AR 导航特性,背后往往都有 MediaPipe 的影子。这种"内部验证 → 开源迭代"的模式保证了项目的稳定性和真实场景适配性。
2023 年,MediaPipe 正式整合进 Google AI Edge 品牌,迎来了新一轮迭代:全新 MediaPipe Solutions 套件提供了跨平台统一 API,MediaPipe Tasks 让开发者用几行代码就能集成复杂 AI 能力,而 Model Maker 则允许用户用自己的数据微调预训练模型。
MediaPipe 的核心创新在于数据流图(Dataflow Graph)架构。
整个感知管线被建模为一个有向图,图的节点叫做 Calculator(计算器),边代表数据流(Packet)。每个 Calculator 是独立的 C++ 类,负责某一特定计算任务——比如"加载 TensorFlow 模型推理"、"图像格式转换"、"绘制关键点"。开发者只需将 Calculator 串联起来,就能构建出完整的 ML 管线。
这种架构带来了几个显著优势:
.pbtxt)可以在 Android、iOS、Web、Desktop、Edge 设备上运行,平台差异被封装在 Calculator 内部GpuBuffer 等抽象,GPU 端到端传输绕过 CPU 内存拷贝,实现极低延迟以下是 MediaPipe 核心 Calculator 分类:
| 类别 | 目录 | 典型功能 |
|---|---|---|
| 图像处理 | calculators/image/ | 图像缩放、裁剪、旋转、色彩空间转换 |
| 张量处理 | calculators/tensor/ | TFLite/TensorFlow 推理封装、GPU 内存管理 |
| 人脸感知 | calculators/tflite/ | BlazeFace 人脸检测、TFLite 模型加载 |
| 手势追踪 | calculators/tflite/ | Hand Landmarker、21 点手势检测 |
| 姿态估计 | calculators/tflite/ | BlazePose 人体 33 点姿态 |
| 音频处理 | calculators/audio/ | 音频帧提取、Mel 频谱计算 |
MediaPipe Tasks 是 2023 年全新设计的上层 API,将底层 Graph 封装为简洁的跨平台调用接口。当前支持四大类任务:
视觉任务(Vision):
FaceDetector:高速人脸检测,基于 BlazeFace 模型,支持 Android/iOS/Web/PythonFaceLandmarker:468 点面部特征点检测,可选 478 点(含眼角细节),配合 Face Transform 模块可估算头部 3D 朝向和光照HandLandmarker:21 点双手追踪,支持同时追踪两只手,延迟低于 20msPoseLandmarker:33 点人体姿态(25 个躯干点 + 21 双手 + 6 足部参考点)Holistic:同时输出人脸 + 手势 + 姿态的全景感知ImageClassifier / ObjectDetector:图像分类和物体检测,支持自定义 TFLite 模型ImageSegmenter:图像分割(人像抠图、自拍背景替换)音频任务(Audio):
AudioClassifier:音频分类(音乐流派、环境声音等)GestureRecognizer:手势识别(比 HandLandmarker 更高层,直接输出"石头剪刀布"等手势标签)文本任务(Text):
TextClassifier、NLClassifier、BERTQuestionAnswerer 等语言模型接口Model Maker 是 MediaPipe 的模型微调工具,允许开发者用自己的数据集对预训练模型进行迁移学习。当前支持的场景包括:
训练流程高度自动化:上传标注数据 → 选择预训练模型 → 配置训练参数 → 导出 TFLite 模型。训练产物可直接通过 MediaPipe Tasks API 加载使用,无需额外适配层。
MediaPipe 配套维护了一个丰富的预训练模型库(mediapipe/models/),涵盖:
| 模型 | 输入 | 输出 | 适用场景 |
|---|---|---|---|
| BlazeFace | RGB 图像 | 人脸边界框 | 移动端人脸检测 |
| BlazePose | RGB 图像 | 33 点 3D 姿态 | 人体姿态估计 |
| Hand Landmark | RGB 图像 | 21 点手势 | AR 交互、手语识别 |
| Face Mesh | RGB 图像 | 468/478 点面捕 | 虚拟形象、试妆 |
| Iris | RGB 图像 | 虹膜 + 视线 | 注视估计、AR 渲染 |
这些模型均由 Google 研究院使用大规模数据训练,在精度和推理速度之间做了精心权衡。以 BlazePose 为例,在 Pixel 4 手机上可达到 30+ FPS 的实时姿态估计。
MediaPipe 在 Web 端的实现尤其值得关注。2020 年,Google 团队与 TensorFlow.js 合作,将 MediaPipe 的核心能力移植到浏览器中。
Web 版本的核心是 WASM + WebAssembly SIMD + WebGL 三层加速:
这使得在浏览器中运行实时手部追踪成为可能——无需服务器,用户打开网页就能体验。有开发者基于此做了在线版的石头剪刀布游戏、手写识别、AR 虚拟试衣等 Demo。

图2:Face Mesh 468 点面部特征点可视化(来源:MediaPipe 官方文档)

图3:MediaPipe 手部 21 点 Landmarker 模型输出示意(来源:MediaPipe 官方文档)
mediapipe/
├── calculators/ # 核心计算器(节点)
│ ├── core/ # 基础 Calculator 基类
│ ├── image/ # 图像处理
│ ├── tensor/ # 张量/GPU 管理
│ ├── tflite/ # TFLite 推理封装
│ ├── tensorflow/ # TF 原生推理
│ ├── audio/ # 音频处理
│ └── video/ # 视频处理
├── graphs/ # 预定义 Graph 配置 (.pbtxt)
│ ├── face_detection/
│ ├── hand_tracking/
│ ├── pose_tracking/
│ └── ...
├── framework/ # 核心框架(C++)
│ ├── calculator_graph.cc
│ ├── packet.cc
│ └── ...
├── gpu/ # GPU 加速层
├── tasks/ # MediaPipe Tasks(跨平台 API)
│ ├── python/ # Python SDK
│ ├── web/ # JavaScript SDK
│ └── cc/ # C++ SDK
├── model_maker/ # 自定义模型训练工具
├── python/ # Python 绑定
└── examples/ # 各平台示例代码
├── android/
├── ios/
├── desktop/
└── web/
MediaPipe 的代码质量可圈可点:
_test.py / _test.cc),覆盖边界条件和异常输入build_android_examples.sh、build_desktop_examples.sh 等一站式构建脚本,降低入门门槛不过值得注意的是:代码以 Bazel 构建系统为核心依赖,Bazel 的学习曲线较陡(.bazelrc、WORKSPACE、BUILD.bazel 配置文件对新手不友好)。此外,C++ 源码中大量使用 Google 内部风格的宏和模板,代码阅读门槛较高。
pip install mediapipe
import mediapipe as mp
mp_drawing = mp.solutions.drawing_utils
mp_hands = mp.solutions.hands
with mp_hands.Hands() as hands:
# 读取图像并处理
results = hands.process(image)
# results.multi_hand_landmarks 包含 21 点坐标
这种方式适合快速验证想法,但底层调用的是预编译的 wheel 包,无法修改核心行为。
完整编译 MediaPipe 的步骤:
./setup_opencv.sh(或手动安装 OpenCV)bazel build -c opt --define MEDIAPIPE_DISABLE_GPU=1 mediapipe/examples/desktop/demo:hand_tracking_tensorflow_demo
官方 Dockerfile(Ubuntu 22.04)已经内置了所有构建依赖,包含 Bazel、Clang 16、OpenCV、TensorFlow 等,适合在 Docker 环境中完整构建。
MediaPipe 也提供了 npm 包 @mediapipe/tasks-vision,在支持 WebAssembly 的现代浏览器中直接加载:
npm install @mediapipe/tasks-vision
import { Hands } from '@mediapipe/tasks-vision';
const hands = await Hands.createFromOptions(vision, {
baseOptions: { modelAssetPath: 'path/to/model.tflite' },
numHands: 2
});
MediaPipe 的预训练模型以 .tflite 格式分发,模型权重不开源。这与 PyTorch、TensorFlow 等完全开源的框架不同,开发者无法深入理解模型内部细节,也无法对模型结构进行修改。这在学术研究场景中是一大限制。
Bazel 是 Google 内部标准构建工具,但对于外部贡献者而言:
虽然 MediaPipe 官方声称支持 Android/iOS/Web/Desktop,但各平台的 API 设计和功能覆盖存在细微差异。例如,某些 Task 在 Web 端暂时不可用,某些 Calculator 仅在 C++ 层暴露。这要求开发者在跨平台时额外注意 API 兼容性。
MediaPipe 的核心贡献在于降低了端侧 AI 的工程门槛。它将原本需要专业团队数月才能完成的感知系统开发,压缩为几行 API 调用,使得独立开发者和小团队也能在移动端/Web 端构建实时 AI 应用。
从行业影响来看:
展望未来,随着 Google AI Edge 战略的推进,MediaPipe 有望进一步整合 Gemini 系列模型的能力,从"感知"(看、听)扩展到"理解"(推理、生成),成为移动端多模态 AI 的基础设施。
| 维度 | 评分 | 说明 |
|---|---|---|
| 功能完整性 | ⭐⭐⭐⭐⭐ | 覆盖人脸/手势/姿态/音频/文本五大类感知任务 |
| 跨平台能力 | ⭐⭐⭐⭐⭐ | Android/iOS/Web/Desktop/Edge 全覆盖 |
| 部署难度 | ⭐⭐ | Bazel 复杂,Docker 可缓解但不能完全解决 |
| 代码质量 | ⭐⭐⭐⭐ | Google 标准,测试完善,但 Bazel 配置复杂 |
| 文档质量 | ⭐⭐⭐⭐ | 官方文档详尽,但部分 API 版本间存在差异 |
| 开源程度 | ⭐⭐⭐ | 框架代码开源,核心预训练模型权重未开源 |
一句话评价:MediaPipe 是目前最成熟、商用案例最丰富的端侧 ML 感知框架,适合需要快速在移动端或 Web 端集成实时人脸/手势/姿态等 AI 能力的团队;若需要深度定制模型结构或进行学术研究,其封闭的模型生态和复杂的 Bazel 构建体系会带来额外挑战。