运行MediaPipe Holistic代码报错:holistic模块无FACE_CONNECTIONS属性
报错原因
你使用的0.9及以上版本的MediaPipe已经移除了mediapipe.python.solutions.holistic模块下的FACE_CONNECTIONS属性,旧版本的示例代码无法直接在新版库中运行。
修复方法
方法一:修改代码适配新版MediaPipe(推荐)
替换原代码中对FACE_CONNECTIONS的调用即可,同时补全缺失的cv2导入:
- 所有
mp_holistic.FACE_CONNECTIONS替换为mp.solutions.face_mesh.FACEMESH_CONTOURS - 代码开头补充
import cv2
修改后的完整代码如下:
import cv2 import mediapipe as mp mp_drawing = mp.solutions.drawing_utils # 绘图工具 mp_holistic = mp.solutions.holistic # Mediapipe解决方案 mp_face_mesh = mp.solutions.face_mesh cap = cv2.VideoCapture(0) # 初始化holistic模型 with mp_holistic.Holistic(min_detection_confidence=0.5, min_tracking_confidence=0.5) as holistic: while cap.isOpened(): ret, frame = cap.read() if not ret: break # 重排图像通道 image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) image.flags.writeable = False # 执行关键点检测 results = holistic.process(image) # 通道换回BGR用于渲染 image.flags.writeable = True image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR) # 1. 绘制人脸关键点 mp_drawing.draw_landmarks(image, results.face_landmarks, mp_face_mesh.FACEMESH_CONTOURS, mp_drawing.DrawingSpec(color=(80,110,10), thickness=1, circle_radius=1), mp_drawing.DrawingSpec(color=(80,256,121), thickness=1, circle_radius=1) ) # 2. 绘制右手关键点 mp_drawing.draw_landmarks(image, results.right_hand_landmarks, mp_holistic.HAND_CONNECTIONS, mp_drawing.DrawingSpec(color=(80,22,10), thickness=2, circle_radius=4), mp_drawing.DrawingSpec(color=(80,44,121), thickness=2, circle_radius=2) ) # 3. 绘制左手关键点 mp_drawing.draw_landmarks(image, results.left_hand_landmarks, mp_holistic.HAND_CONNECTIONS, mp_drawing.DrawingSpec(color=(121,22,76), thickness=2, circle_radius=4), mp_drawing.DrawingSpec(color=(121,44,250), thickness=2, circle_radius=2) ) # 4. 绘制姿态关键点 mp_drawing.draw_landmarks(image, results.pose_landmarks, mp_holistic.POSE_CONNECTIONS, mp_drawing.DrawingSpec(color=(245,117,66), thickness=2, circle_radius=4), mp_drawing.DrawingSpec(color=(245,66,230), thickness=2, circle_radius=2) ) cv2.imshow('Raw Webcam Feed', image) if cv2.waitKey(10) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows()
方法二:回退到兼容的旧版本MediaPipe
如果不想修改原有代码,可以直接安装保留了FACE_CONNECTIONS属性的旧版本:
pip install mediapipe==0.8.11
安装完成后即可正常运行原有代码。
内容的提问来源于stack exchange,提问作者ysfjoe
相关产品推荐
相关产品推荐

