使用opencv检测没有眉毛和下巴的人脸

2024-04-25 21:15:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用OpenCV haar级联分类器检测人脸(特别是睁开眼睛的人脸)。但是,我在检测没有眉毛和/或下巴的脸时遇到了问题,如下图所示。我曾尝试过许多用于人脸检测的haar级联,如haarcascade\u frontalface\u default.xmlhaarcascade\u frontalface\u alt\u tree.xml,但所有这些都不起作用

enter image description hereenter image description here

这是我的密码:

import cv2
import os
import glob

face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier('haarcascade_eye_tree_eyeglasses.xml')

count = 0
path = "./test/*.png"
for index, filename in enumerate(glob.glob(path)):
    img = cv2.imread(filename)
    basename = os.path.splitext(os.path.basename(filename))[0]

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

    faces = face_cascade.detectMultiScale(gray, 1.3, 5)

    for (x,y,w,h) in faces:
        # cv2.rectangle(img,(x,y),(x+w, y+h),(255,0,0), 2)
        roi_gray = gray[y:y+h, x:x+w]
        roi_color = img[y:y+h, x:x+w]
        eyes = eye_cascade.detectMultiScale(roi_gray)

        if len(eyes) >= 2:
            count = count + 1
            output_dir = './test/output'
            cv2.imwrite(f'{output_dir}/{basename}.png', img)

cv2.waitKey(0)
cv2.destroyAllWindows()

提前谢谢你


Tags: pathimportimgoscountxmlfilenamecv2
2条回答

如果您安装了tensorflow,您可以使用神经网络来检测人脸,这比简单的haar分类器具有更好的准确性

下面是一个使用MTCNN检测器的示例,它使用tensorflow作为后端

from mtcnn.mtcnn import MTCNN
from PIL import Image
import numpy as np

img = Image.open('6qNFu.png') # load the image
img = np.asarray(img, dtype='uint8') # convert to numpy array
img = img[:,:,0:3] # drop the alpha channel

detector = MTCNN() # initialize MTCNN detector
print(detector.detect_faces(img)) # use MTCNN detector to return bounding box and face metrics

使用边界框可以从图像中提取面。注意:如果面像上面的例子一样被截断,它可能会返回一个负坐标,这是它认为面的位置的外推

以下是关于MTCNN库的文档:https://pypi.org/project/mtcnn/ 它还告诉您如何安装它

将面部地标与dlib一起使用,此方法可能适用于您,请参见以下两个链接:

此外,请参见此链接:

相关问题 更多 >