You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用MediaPipe仅绘制身体关键点及连接,排除面部关键点与连接

如何用MediaPipe仅绘制身体关键点及连接(移除面部关键点)

要实现只绘制身体的关键点和连接,你需要自定义过滤面部的关键点ID和对应的连接关系——因为MediaPipe Pose默认包含了头部/面部的标记点(ID 0-10)。以下是修改后的代码和说明:

核心思路

MediaPipe Pose的面部关键点ID范围是0-10(包含鼻子、眼睛、耳朵等),我们只保留从11开始的身体部位关键点,并过滤掉涉及面部的连接关系。

修改后的完整代码

import cv2            
import mediapipe as mp  

mpDraw = mp.solutions.drawing_utils 
mpPose = mp.solutions.pose  
pose = mpPose.Pose()       

# 定义要保留的身体关键点ID(排除面部0-10)
BODY_LANDMARKS_IDS = list(range(11, 33))

# 过滤出仅涉及身体关键点的连接关系
BODY_CONNECTIONS = [conn for conn in mpPose.POSE_CONNECTIONS 
                    if conn[0] in BODY_LANDMARKS_IDS and conn[1] in BODY_LANDMARKS_IDS]

# 自定义绘制样式(可选,调整关键点和连线的视觉效果)
landmark_style = mpDraw.DrawingSpec(color=(0,255,0), thickness=2, circle_radius=3)
connection_style = mpDraw.DrawingSpec(color=(255,0,0), thickness=2)

cap = cv2.VideoCapture("segment4_pumping_and_foiling.mp4") 

while True:    
    success, img = cap.read()  
    if not success:
        break  # 视频读取完毕后退出循环
  
    results = pose.process(img) 

    if results.pose_landmarks:
        # 仅绘制身体关键点和对应连接
        mpDraw.draw_landmarks(
            img, 
            results.pose_landmarks, 
            BODY_CONNECTIONS,
            landmark_drawing_spec=landmark_style,
            connection_drawing_spec=connection_style
        )

    cv2.imshow("video", img)  
    if cv2.waitKey(1) & 0xFF == ord('q'): 
        break   

cv2.destroyAllWindows() 
cap.release()      

关键改动说明

  • 过滤关键点ID:BODY_LANDMARKS_IDS 明确列出了所有身体部位的关键点ID,直接排除了0-10的面部标记。
  • 过滤连接关系:BODY_CONNECTIONS 从MediaPipe默认的POSE_CONNECTIONS中筛选出仅涉及身体关键点的连接,确保不会绘制面部相关的连线。
  • 冗余代码清理:你原代码中导入的from cvzone.PoseModule import PoseDetector并未实际使用,已直接删除。

内容的提问来源于stack exchange,提问作者Luis Delbergue Chico

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 07:10:12