Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 采用Haar Cascade(或LBP)或其他方法进行专业头像检测 问题_Python_Opencv_Object Detection_Face Detection_Haar Classifier - Fatal编程技术网

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

Python 采用Haar Cascade(或LBP)或其他方法进行专业头像检测 问题,python,opencv,object-detection,face-detection,haar-classifier,Python,Opencv,Object Detection,Face Detection,Haar Classifier,我正在寻找最好的Python对象检测方法来检测通常具有坚实背景的专业头像图像。我认为专业的头像应该是人脸识别的最佳场景,对于不太理想的图像,它的效果要比95%的Haar成功率好得多。处理速度不得明显低于20秒内1000张图像。我在下面提供的代码可以在10秒内处理1000个图像。如果有任何建议,我将不胜感激 编辑:表现不佳是因为哈尔卡斯卡在头像中发现了两张或更多的脸。我的代码拒绝只有一张脸的图像。另外一个“面”通常位于颈部。scaleFactor为1.3时,可以得到我所期望的最佳结果。提高或降低它

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

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

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

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

我的代码 来自代码的意外行为
  • 随着我减少了时间,假阴性的数量增加了 缩放因子。1.3%给予2%,1.2%给予4%,1.1%给予6%左右。我 认为较高的值导致较少的检测(即更多的错误 负片)。我误解了吗
  • 当我只运行积极的例子时,结果对我来说要好得多 假阴性(仅占1%的4/10,这是一个极好的结果)。 这就好像
    detectMulitScale
    是在运行时训练的。 此外,当阴性样本在我的研究开始时 循环(我的典型情况),错误否定的数量和 与阴性样本相比,假阳性率有所下降 散布在环的末端或在环的末端。
    detectMulitScale
    是否能够 跑步训练?无法复制
  • 选择训练Haar或LBP
    如果我训练Haar或LBP,我希望如果我使用整个照片,而不仅仅是脸部(由于坚实的背景和肩部),我只能得到比haarcascade_frontalface_default.xml更好的结果。这有意义吗?只能按1:1的长宽比进行培训吗?如果可能的话,1.25会更好。

    没有在线培训,您的探测器应该对一张图像给出合理的结果,图像的顺序应该无关紧要。在培训期间,您可以选择任何aspecr比率。必须将阳性训练样本裁剪到要检测的区域。你应该尝试一下深入学习,微型的yolo v3探测器也非常快。米卡,在读了你的评论后,我做了更多的故障排除。我无法复制订单问题。查看我的编辑。我会按照你的建议试试Tiny YOLO。谢谢
    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)