名称错误:名称';x1和x27;未在OpenCV Python中定义

名称错误:名称';x1和x27;未在OpenCV Python中定义,python,opencv,Python,Opencv,用于检测对象的我的OpenCV(Python)代码: import ... face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') cap1 = cv2.VideoCapture(1) while True: ret1, img1 = cap1.read() gray = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY) faces = fac

用于检测对象的我的OpenCV(Python)代码:

import ...
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
cap1 = cv2.VideoCapture(1)

while True:
    ret1, img1 = cap1.read()

    gray = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)

    faces = face_cascade.detectMultiScale(gray, 1.3, 5)
    for (x1, y1, w1, h1) in faces:
            if x1 >0:
            detect_face1 = x1
            print 'face distance Camera 1: ', detect_face1
        else:
            pass

显示
faces
的调试器是
类型tuple:()
,可能是因为如果x1>0:NameError:name“x1”未定义,则显示
。因为如果在照相机中检测到面,则
是一个x1值大于0的数组。我知道这可能是一个非常简单的修复,但是非常感谢您的帮助。

Tuple
faces
为空,因此出现了
namererror

if faces==0:
    pass
else:
    detect_face=x1

解决了这个问题。

如果
faces
是一个元组,那么以您的方式对其进行迭代是很奇怪的。要使该循环工作,
faces
需要一个元组列表。在开始时,当没有检测到面时,
faces
没有
x1、y1、w1、h1
的值,因此我猜我得到了这个错误。当检测到人脸时,
faces=[10,20,30,40]
(比如说),我的循环就工作了。但当它为空时,我得到了这个错误。我怎样才能克服这个问题@下陷