Task API 全家桶与 Calculator 图解析

知识库
知识库文档
/tech-stacks/mediapipe/tutorial/Task API 全家桶与 Calculator 图解析.md

文档

MediaPipe 入门教程:Task API 全家桶

1. MediaPipe 的架构哲学

MediaPipe 核心理念:ML 推理是一个 Pipeline 图

摄像头 → [人脸检测] → [关键点] → [表情分类] → UI 渲染
                ↘ [背景虚化] ↗

每个节点叫 Calculator,图结构叫 Graph。MediaPipe 自带了 200+ Calculators。

2. Task API 全家桶

Task API 功能 延迟(移动端)
Face Detector 人脸检测 ~2ms
Face Mesh 468 个面部关键点 ~3ms
Hand Landmarker 21 个手掌关键点 ~3ms
Pose Landmarker 33 个人体关键点 ~4ms
Object Detector 目标检测 ~5ms
Image Segmenter 人像分割 ~5ms
Gesture Recognizer 手势分类 ~2ms

3. 人脸 468 点 Mesh

import mediapipe as mp

mp_face_mesh = mp.solutions.face_mesh
face_mesh = mp_face_mesh.FaceMesh(
    max_num_faces=1,
    refine_landmarks=True,  # 眼部和嘴唇精细关键点
    min_detection_confidence=0.5,
)

results = face_mesh.process(rgb)
if results.multi_face_landmarks:
    for landmark in results.multi_face_landmarks[0].landmark:
        # 468 个点 (x, y, z)
        pass

应用场景:AR 滤镜、虚拟化妆、3D 头像驱动。

4. 姿态 33 点 Landmark

mp_pose = mp.solutions.pose
pose = mp_pose.Pose(
    min_detection_confidence=0.5,
    min_tracking_confidence=0.5,
    model_complexity=2,  # 0=轻量, 1=中等, 2=高精度
)

results = pose.process(rgb)
if results.pose_landmarks:
    left_wrist = results.pose_landmarks.landmark[mp_pose.PoseLandmark.LEFT_WRIST]
    right_wrist = results.pose_landmarks.landmark[mp_pose.PoseLandmark.RIGHT_WRIST]

33 个关键点覆盖全身,可做俯卧撑计数、瑜伽姿势纠正等。

5. 实时人像分割(背景虚化)

mp_selfie_seg = mp.solutions.selfie_segmentation
segmenter = mp_selfie_seg.SelfieSegmentation(model_selection=1)  # 0=通用, 1=风景

results = segmenter.process(rgb)
mask = results.segmentation_mask > 0.5  # 二值化

# 替换背景
blurred_bg = cv2.GaussianBlur(frame, (55, 55), 0)
output = np.where(mask[..., None], frame, blurred_bg)

只需 5ms,视频会议级别实时虚化。

6. Web 端使用(无需后端!)

import { HandLandmarker, FilesetResolver } from "@mediapipe/tasks-vision";

const vision = await FilesetResolver.forVisionTasks(
    "https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@0.10.9/wasm"
);
const handLandmarker = await HandLandmarker.createFromOptions(vision, {
    baseOptions: {
        modelAssetPath: "https://storage.googleapis.com/mediapipe-models/hand_landmarker/hand_landmarker/float16/latest/hand_landmarker.task",
    },
    runningMode: "VIDEO",
});

const results = handLandmarker.detectForVideo(videoElement, timestamp);

浏览器里跑!无需 GPU 服务器,隐私数据不出设备。

7. MediaPipe vs OpenCV vs YOLO 端侧

维度 MediaPipe OpenCV DNN YOLOv8-ncnn
安装难度 ⭐⭐⭐ 极简 ⭐⭐
预置模型 ⭐⭐⭐ 33 个 ⭐ 有限
自定义模型 ⭐⭐ ⭐⭐ ⭐⭐⭐
Web/移动端 ⭐⭐⭐ ⭐⭐ ⭐⭐
实时性 ⭐⭐⭐ ⭐⭐ ⭐⭐⭐

思考题

  1. MediaPipe 在手机上跑得快的秘诀是什么?与普通 TF Lite 推理有何不同?
  2. Hands 检测 21 个关键点和 Pose 检测 33 个关键点的模型架构有何区别?
  3. 为什么 MediaPipe 选择 Calculator 图架构而不是简单的顺序 Pipeline?

信息

路径
/tech-stacks/mediapipe/tutorial/Task API 全家桶与 Calculator 图解析.md
更新时间
2026/5/31