采用Haar Cascade(或LBP)或其他方法进行专业头像检测

2024-06-08 15:51:13 发布

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

问题

我正在寻找最好的Python目标检测方法来检测通常具有坚实背景的专业头像图像。我认为专业头像应该是人脸识别的最佳方案,并且对于不太理想的图像,其结果要比95%的成功率好得多。处理速度不得明显低于20秒内1000张图像。我在下面提供的代码可以在10秒内处理1000个图像。如果有任何建议,我将不胜感激

编辑:表现不佳是因为哈尔卡斯卡德在头像中发现了两张或更多的脸。我的代码拒绝只有一张脸的图像。另外一个“面”通常位于颈部。scaleFactor为1.3时,可以得到我所期望的最佳结果。提高或降低它会产生更多的假阴性

头像来自年鉴,下面是一幅示例图像:

我收集的样本的描述

我的样本集大约有1000张图像,其中有800张正样本(头像)和200张负样本(非头像)。阴性样本可以是一组人或一个人的全身图像。所有头像的大小约为160 x 200像素(高宽比为1.25)。负片图像大小不一,最大可达500 x 500像素

我的代码

face_cascade = cv2.CascadeClassifier('/haarcascade_frontalface_default.xml')
for img_file in img_files:
    img = cv2.imread(sample_dir + img_file)
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    height, width = img.shape[:2]
    # min size of face w.r.t. image (using max was intentional)
    min_size = int(max(0.4*width, 0.3*height))
    faces = face_cascade.detectMultiScale(gray,
                                          scaleFactor=1.3,
                                          minNeighbors=3,
                                          minSize=(min_size, min_size))
    if len(faces) == 1: # want only one face
        cv2.imwrite(positive_dir + img_file, img)
    else:
        cv2.imwrite(negative_dir + img_file, img)

来自代码的意外行为

  1. 随着我减少了时间,假阴性的数量增加了 缩放因子。1.3%给予2%,1.2%给予4%,1.1%给予6%左右。我 认为较高的值导致较少的检测(即更多的错误 负片)。我误解了吗
  2. 当我只运行正面示例时,结果对我来说要好得多 假阴性(仅占1%的4/10,这是一个极好的结果)。 这就好像detectMulitScale是在运行时训练的。 此外,当阴性样本在我的研究开始时 循环(我的典型情况),错误否定的数量和 与阴性样本相比,假阳性率有所下降 散布在环的末端或在环的末端。{}是否能够 运行时培训?无法复制

选择训练Haar或LBP

如果我训练HaarLBP,我希望如果我使用整个照片,而不仅仅是脸部(由于坚实的背景和肩部),我只能得到比haarcascade_frontalface_default.xml更好的结果。这有意义吗?只能按1:1的长宽比进行培训吗?如果可能的话,1.25会更好


Tags: 代码图像imgsize专业dirmincv2