gpt4 book ai didi

python - OpenCV的Cascade分类器面部检测卡住

转载 作者:行者123 更新时间:2023-12-02 17:53:00 25 4
gpt4 key购买 nike

我一直在开发一个人脸检测脚本,该脚本可让您使用OpenCV(cv2)Haar Cascade分类器一次检测多个人脸,但是,每次我调用此函数时,程序都会无限期冻结,而不会显示任何错误迹象,这是我的功能代码:

 import cv2
import cv2.cv
def detect(img, cascade_fn='haarcascade_frontalface_alt2.xml',
scaleFactor=1.3, minNeighbors=4, minSize=(20, 20),
flags=cv.CV_HAAR_SCALE_IMAGE):
cascade = cv2.CascadeClassifier(cascade_fn)
faces = list()
test = True
while test == True:
rect = cascade.detectMultiScale(img, scaleFactor=scaleFactor,
minNeighbors=minNeighbors,
minSize=minSize, flags=flags)
if len(rect) == 0:
test = False
else:
for x1, y1, x2, y2 in rect:
faces.append(img[y1:y2, x1:x2])
cv2.rectangle(img, (x1, y1), (x2, y2), color, (0, 0, 0))
return faces

因此,请有人指出我遇到此错误的原因,谢谢。

最佳答案

如果detectMultiScale找不到任何面孔,则为test分配False,然后循环结束。如果它确实检测到面部,则将它们添加到列表faces中,并按照您(大概)的意图绘制一个矩形。

但是test仍然是True,这意味着您的循环将再次执行。并且由于其输入变量均未更改,因此detectMultiScale将检测到相同的面孔并将其再次添加到列表faces中。因此,在这种情况下,循环将永远不会结束。

您可能要这样做:

import cv2
def detect(img, cascade_fn='haarcascade_frontalface_alt2.xml',
scaleFactor=1.3, minNeighbors=4, minSize=(20, 20),
flags=cv2.cv.CV_HAAR_SCALE_IMAGE):
cascade = cv2.CascadeClassifier(cascade_fn)
faces = list()
rect = cascade.detectMultiScale(img, scaleFactor=scaleFactor,
minNeighbors=minNeighbors,
minSize=minSize, flags=flags)
for x1, y1, x2, y2 in rect:
faces.append(img[y1:y2, x1:x2])
cv2.rectangle(img, (x1, y1), (x2, y2), color, (0, 0, 0))
return faces

关于python - OpenCV的Cascade分类器面部检测卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15606515/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com