运行OpenCV-Python手部追踪模块出现NameError错误如何修复
错误原因
- 核心报错
NameError: name 'results' is not defined由mediapipe版本与教程使用的旧版本不兼容导致:你参考的Murtaza教程使用的是0.8.x版本的mediapipe,该版本Hands类的构造参数顺序与现行0.9+版本不一致,新版本在参数列表第二位新增了model_complexity参数,你原代码按旧顺序传参导致Hands实例初始化失败,调用process方法时抛出异常,results变量未完成定义就进入了后续判断逻辑。 - 末尾的摄像头警告是Windows平台OpenCV默认使用MSMF后端的常见提示,不影响核心功能,可选择性修复。
修复方案
1. 修复NameError报错(二选一即可)
方案A:适配新版mediapipe(推荐,无需降级库)
修改handDetector类__init__方法中Hands实例化代码,显式指定参数名规避顺序错位问题:
# 替换原有的self.hands = self.mpHands.Hands(...) 行 self.hands = self.mpHands.Hands( static_image_mode=self.mode, max_num_hands=self.maxHands, min_detection_confidence=self.detectionCon, min_tracking_confidence=self.trackCon )
方案B:降级mediapipe到教程对应版本
在PyCharm终端执行以下命令安装旧版本:
pip install mediapipe==0.8.7
2. 修复摄像头警告(可选)
创建VideoCapture实例时指定使用DSHOW后端,替换原main函数中的初始化代码:
# 替换原cap = cv2.VideoCapture(0)行 cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)
验证效果
修改完成后运行代码,正常会调用本地摄像头,检测到人手时绘制关键点与骨骼连线,左上角实时显示FPS数值,无报错。
内容的提问来源于stack exchange,提问作者Aryan GS
相关产品推荐
相关产品推荐

