1. MediaPipe Face Mesh
MediaPipe Face Mesh 是一个用于实时面部网格检测的模型,能够在图像或视频中识别并标记面部的468个3D关键点。这些关键点覆盖了面部的各个部位,如眼睛、鼻子、嘴巴等,适用于面部表情分析、虚拟化妆、AR滤镜等场景。
主要特点:提供468个3D关键点,精准捕捉面部细节。
2. MediaPipe Pose
MediaPipe Pose 是一个用于实时人体姿态估计的模型,能够在图像或视频中识别并标记人体的33个3D关键点,涵盖全身主要关节,适用于健身指导、动作捕捉、运动分析等场景。
主要特点:提供33个3D关键点,准确捕捉全身姿态。
以下是使用 MediaPipe Face Mesh 和 MediaPipe Pose 的示例代码,分别展示如何在 Python 中实现面部关键点检测和人体姿态估计。
1. MediaPipe Face Mesh 示例代码
import cv2
import mediapipe as mp
# 初始化MediaPipe Face Mesh
mp_face_mesh = mp.solutions.face_mesh
face_mesh = mp_face_mesh.FaceMesh(static_image_mode=False, max_num_faces=1, refine_landmarks=True, min_detection_confidence=0.5)
# 初始化绘图工具
mp_drawing = mp.solutions.drawing_utils
drawing_spec = mp_drawing.DrawingSpec(thickness=1, circle_radius=1, color=(0, 255, 0))
# 打开摄像头
cap = cv2.VideoCapture(0)
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
# 将图像转换为RGB格式
rgb_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
# 处理图像并获取面部关键点
results = face_mesh.process(rgb_frame)
# 如果检测到面部关键点,绘制到图像上
if results.multi_face_landmarks:
for face_landmarks in results.multi_face_landmarks:
mp_drawing.draw_landmarks(
image=frame,
landmark_list=face_landmarks,
connections=mp_face_mesh.FACEMESH_TESSELATION,
landmark_drawing_spec=drawing_spec,
connection_drawing_spec=drawing_spec
)
# 显示结果
cv2.imshow('MediaPipe Face Mesh', frame)
# 按下 'q' 键退出
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 释放资源
cap.release()
cv2.destroyAllWindows()
2. MediaPipe Pose 示例代码
import cv2
import mediapipe as mp
# 初始化MediaPipe Pose
mp_pose = mp.solutions.pose
pose = mp_pose.Pose(static_image_mode=False, model_complexity=1, enable_segmentation=False, min_detection_confidence=0.5)
# 初始化绘图工具
mp_drawing = mp.solutions.drawing_utils
# 打开摄像头
cap = cv2.VideoCapture(0)
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
# 将图像转换为RGB格式
rgb_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
# 处理图像并获取姿态关键点
results = pose.process(rgb_frame)
# 如果检测到姿态关键点,绘制到图像上
if results.pose_landmarks:
mp_drawing.draw_landmarks(
image=frame,
landmark_list=results.pose_landmarks,
connections=mp_pose.POSE_CONNECTIONS,
landmark_drawing_spec=mp_drawing.DrawingSpec(color=(0, 255, 0), thickness=2, circle_radius=2),
connection_drawing_spec=mp_drawing.DrawingSpec(color=(255, 0, 0), thickness=2)
)
# 显示结果
cv2.imshow('MediaPipe Pose', frame)
# 按下 'q' 键退出
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 释放资源
cap.release()
cv2.destroyAllWindows()
代码说明
-
Face Mesh:
-
使用
mp.solutions.face_mesh
检测面部关键点。 -
通过
mp_drawing.draw_landmarks
绘制面部网格。 -
支持多面部检测(
max_num_faces
参数)。
-
-
Pose:
-
使用
mp.solutions.pose
检测人体姿态关键点。 -
通过
mp_drawing.draw_landmarks
绘制姿态连接线。 -
支持不同模型复杂度(
model_complexity
参数)。
-
-
通用部分:
-
使用 OpenCV 捕获摄像头视频流。
-
按
q
键退出程序。
-