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

运行Mediapipe姿态检测代码报findPose()缺少self参数如何解决?

错误原因

你遇到的报错是Python基础语法错误,和PyCharm无关,你搜到的「PyCharm仅支持列表、元组等类型参数传入」的说法完全错误,具体问题出在两处:

  1. 类未实例化导致self参数缺失:你写的detector = poseDetector是将类本身赋值给了变量,没有创建类的实例,调用实例方法findPose时Python无法自动传入实例对象self,因此触发参数缺失报错。
  2. 全局变量滥用导致img参数缺失:你通过声明全局变量解决img找不到的问题属于临时补丁,不符合代码封装逻辑,也容易引发后续变量冲突问题。

修正步骤

  • 实例化poseDetector类,创建实例对象后再调用实例方法
  • 修改findPose方法,将img作为入参传入,去掉所有全局变量声明
  • 调用findPose时传入每帧读取到的img对象

修正后完整代码

import cv2 
import time
import mediapipe as mp

def main():
    cap = cv2.VideoCapture(0)
    pTime = 0  # Previous time
    # 实例化poseDetector类
    detector = poseDetector()
    while True:
        success, img = cap.read()
        # 传入当前帧img调用姿态检测方法
        detector.findPose(img)
        cTime = time.time()
        fps = 1 / (cTime - pTime)
        pTime = cTime
        cv2.putText(img, str(int(fps)), (70, 50), cv2.FONT_HERSHEY_SCRIPT_COMPLEX, 3, (255, 0, 0), 3)
        cv2.imshow("Image", img)
        cv2.waitKey(1)

class poseDetector():
    def __init__(self, mode=True, complexity=1, smooth=True, detectionCon=0.5, trackCon=0.5):
        self.mode = mode
        self.complexity = complexity
        self.smooth = smooth
        self.detectionCon = detectionCon
        self.trackCon = trackCon
        self.mpDraw = mp.solutions.drawing_utils
        self.mpPose = mp.solutions.pose
        # 如果你使用的是较新版本的mediapipe,此处可以改为关键字参数避免顺序错误:
        # self.pose = self.mpPose.Pose(static_image_mode=self.mode, model_complexity=self.complexity, 
        #                              smooth_landmarks=self.smooth, min_detection_confidence=self.detectionCon, 
        #                              min_tracking_confidence=self.trackCon)
        self.pose = self.mpPose.Pose(self.mode, self.complexity, self.smooth,
                                     self.detectionCon, self.trackCon)
    # 添加img参数
    def findPose(self, img, draw=True):
        imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
        results = self.pose.process(imgRGB)
        if results.pose_landmarks and draw:
            self.mpDraw.draw_landmarks(img, results.pose_landmarks, self.mpPose.POSE_CONNECTIONS)

if __name__ == "__main__":
    main()

内容的提问来源于stack exchange,提问作者Aditya Deshpande

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 00:00:03