MediaPipe实时机器学习框架

发布于:2025-03-25 ⋅ 阅读:(34) ⋅ 点赞:(0)

📌 MediaPipe

MediaPipe 是 Google 推出的一个 实时机器学习框架,主要用于 手势识别、人体姿态追踪、人脸检测 等计算机视觉任务。

跨平台支持(可在 PC、Android、iOS 上运行)
轻量级(可在移动设备上实时运行)
无需深度学习背景(简单调用 API 就能实现复杂的 AI 视觉任务)


🚀 MediaPipe 能做什么?

📌 模块 💡 作用 🎯 应用场景
Hands 手部关键点检测(21 关键点) 手势识别、手语翻译、虚拟鼠标
Pose 人体姿态估计(33 关键点) 健身动作分析、舞蹈训练、AR 滤镜
Face Detection 人脸检测 解锁屏幕、面部表情分析
Face Mesh 3D 面部关键点(468 关键点) 虚拟化妆、表情动画、3D 滤镜
Holistic 综合人体检测(脸、手、姿势) 虚拟主播、AI 健身教练
Objectron 3D 物体检测 识别 3D 物品,如鞋子、家具
Selfie Segmentation 背景分割 视频会议背景虚化
Hair Segmentation 头发分割 头发颜色替换、美颜应用

🛠 安装 MediaPipe

pip install mediapipe opencv-python

🔥 1️⃣ MediaPipe 手部识别(Hands)

📌 识别手势、手语、虚拟鼠标

import cv2
import mediapipe as mp

# 初始化 MediaPipe Hands
mp_hands = mp.solutions.hands
hands = mp_hands.Hands()
mp_draw = mp.solutions.drawing_utils

# 打开摄像头
cap = cv2.VideoCapture(0)

while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        break

    # 转换颜色 (BGR → RGB)
    rgb_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)

    # 处理手部
    result = hands.process(rgb_frame)

    if result.multi_hand_landmarks:
        for hand_landmarks in result.multi_hand_landmarks:
            mp_draw.draw_landmarks(frame, hand_landmarks, mp_hands.HAND_CONNECTIONS)

    cv2.imshow("Hand Tracking", frame)

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

功能:检测手部并绘制 21 个关键点
应用:手势控制、虚拟键盘、手语识别


🔥 2️⃣ MediaPipe 人体姿态估计(Pose)

📌 识别人体关键点(33 个),分析健身、瑜伽、舞蹈动作

import cv2
import mediapipe as mp

# 初始化 Pose 模块
mp_pose = mp.solutions.pose
pose = mp_pose.Pose()
mp_draw = mp.solutions.drawing_utils

cap = cv2.VideoCapture(0)

while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        break

    rgb_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
    result = pose.process(rgb_frame)

    if result.pose_landmarks:
        mp_draw.draw_landmarks(frame, result.pose_landmarks, mp_pose.POSE_CONNECTIONS)

    cv2.imshow("Pose Estimation", frame)

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

功能:检测人体 33 个关键点
应用:瑜伽姿势纠正、健身训练、AI 体感游戏


🔥 3️⃣ MediaPipe 3D 人脸检测(Face Mesh)

📌 检测 468 个面部关键点,生成 3D 面部模型

import cv2
import mediapipe as mp

# 初始化 Face Mesh
mp_face_mesh = mp.solutions.face_mesh
face_mesh = mp_face_mesh.FaceMesh()
mp_draw = mp.solutions.drawing_utils

cap = cv2.VideoCapture(0)

while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        break

    rgb_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
    result = face_mesh.process(rgb_frame)

    if result.multi_face_landmarks:
        for face_landmarks in result.multi_face_landmarks:
            mp_draw.draw_landmarks(frame, face_landmarks, mp_face_mesh.FACEMESH_TESSELATION)

    cv2.imshow("Face Mesh", frame)

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

功能:检测 468 个 3D 关键点
应用:虚拟化妆、AR 滤镜、3D 表情动画


🔥 4️⃣ MediaPipe 背景分割(Selfie Segmentation)

📌 将人物和背景分开,实现背景虚化、替换背景

import cv2
import mediapipe as mp
import numpy as np

mp_selfie_segmentation = mp.solutions.selfie_segmentation
segmentation = mp_selfie_segmentation.SelfieSegmentation()

cap = cv2.VideoCapture(0)

while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        break

    rgb_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
    result = segmentation.process(rgb_frame)

    mask = result.segmentation_mask
    mask = np.where(mask > 0.5, 255, 0).astype(np.uint8)  # 生成二值化掩码

    # 替换背景为纯白色
    bg = np.ones_like(frame, np.uint8) * 255
    output = np.where(mask[..., None], frame, bg)

    cv2.imshow("Background Removal", output)

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

功能:分割人物和背景,替换背景
应用:视频会议背景虚化、AI 抠图、抖音绿幕特效


🌟 MediaPipe VS OpenCV

MediaPipe OpenCV
目标 机器学习模型(人体、手势、面部) 传统计算机视觉(边缘检测、滤波)
开发难度 易上手(提供预训练模型) 需要编写更多代码
性能 适合移动端和实时处理 适合低级图像处理
应用场景 AI 识别、手势交互 目标检测、OCR 识别

✅ 总结

  1. MediaPipe 是 Google 开源的 AI 视觉库,支持 手势、人脸、姿态、背景分割等
  2. 安装简单,API 友好,适合实时检测,可用于 Python、Android、iOS
  3. 广泛应用手势交互、虚拟主播、健身 AI、AR 滤镜 等领域。