📌 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 识别 |
✅ 总结
- MediaPipe 是 Google 开源的 AI 视觉库,支持 手势、人脸、姿态、背景分割等。
- 安装简单,API 友好,适合实时检测,可用于 Python、Android、iOS。
- 广泛应用 于 手势交互、虚拟主播、健身 AI、AR 滤镜 等领域。