Python 输入上出现两个面时出现UnboundLocalError
我使用dlib_人脸检测器的上述功能,并使用OpenCV haar eyecascade的eye_检测功能在检测到的人脸中循环查找眼睛。输入是来自OpenCV的VideoCapture输入。所有函数的输出都是一个numpy数组,其中包含检测到的特征的最小x、最小y、最大x、最大y 如果只有一个面,代码可以正常工作。但一旦第二张脸出现,它就会抛出 UnboundLocalError:赋值前引用的局部变量“eyeFix”Python 输入上出现两个面时出现UnboundLocalError,python,dlib,opencv-python,Python,Dlib,Opencv Python,我使用dlib_人脸检测器的上述功能,并使用OpenCV haar eyecascade的eye_检测功能在检测到的人脸中循环查找眼睛。输入是来自OpenCV的VideoCapture输入。所有函数的输出都是一个numpy数组,其中包含检测到的特征的最小x、最小y、最大x、最大y 如果只有一个面,代码可以正常工作。但一旦第二张脸出现,它就会抛出 UnboundLocalError:赋值前引用的局部变量“eyeFix” 我希望它只检测现有人脸上的眼睛,而不是新人脸上的眼睛。如何改进此代码?如果fa
我希望它只检测现有人脸上的眼睛,而不是新人脸上的眼睛。如何改进此代码?如果
faces
为空,则循环中不会运行任何内容,因此您从未设置eyeFix
我不知道如何使用两个面来获得该错误。只有当面
为空时,才会发生此情况。
def face_detect(img):
hog_rects = hog_detector(img, 0)
hog_faces = np.zeros((0, 4), dtype=int)
for (i, rect) in enumerate(hog_rects):
(x, y, w, h) = rect_to_bb(rect)
face = np.asarray((x, y, w, h), dtype=int)
hog_faces = np.append(hog_faces, [face], axis=0)
return hog_faces
def detect(img, cascade, minimumFeatureSize=(20, 20)):
if cascade.empty():
raise (Exception("There was a problem loading your Haar Cascade xml file."))
rects = cascade.detectMultiScale(img, scaleFactor=1.3, minNeighbors=1, minSize=minimumFeatureSize)
if len(rects) == 0:
return []
rects[:, 2:] += rects[:, :2] # convert last coord from (width,height) to (maxX, maxY)
return rects
def eye_detect(faces, gray, minEyeSize):
# eyes = np.zeros((0, 4), dtype=int)
for (x, y, w, h) in faces:
roi_gray = gray[y:h, x:w]
detected_eyes = detect(roi_gray, haarEyeCascade, minEyeSize)
eyeFix = detected_eyes + [x, y, x, y]
# eyes = np.append(eyes, eyeFix, axis=0)
return eyeFix