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 opencv人脸检测中的分类器置信度_Python_Opencv_Machine Learning_Computer Vision_Face Detection - Fatal编程技术网

Python opencv人脸检测中的分类器置信度

Python opencv人脸检测中的分类器置信度,python,opencv,machine-learning,computer-vision,face-detection,Python,Opencv,Machine Learning,Computer Vision,Face Detection,我在python中使用opencv的har级联人脸检测器(cv.HaarDetectObjects) 例如: faces = cv.HaarDetectObjects(grayscale, cascade, storage, 1.2, 2, cv.CV_HAAR_DO_CANNY_PRUNING, (50,50)) for f in faces: print(f) 这将以以下形式打印检测列表: ((174, 54, 114, 114),

我在python中使用opencv的har级联人脸检测器(cv.HaarDetectObjects)

例如:

    faces = cv.HaarDetectObjects(grayscale, cascade, storage, 1.2, 2,
    cv.CV_HAAR_DO_CANNY_PRUNING, (50,50))

       for f in faces:
           print(f)
这将以以下形式打印检测列表:

 ((174, 54, 114, 114), 53)
 ((22, 51, 121, 121), 36)
 ((321, 56, 114, 114), 21)
 ((173, 263, 125, 125), 51)
 ((323, 272, 114, 114), 20)
 ((26, 271, 121, 121), 36)
其中每一行代表一个检测。前4个数字是左上角点的x、y位置以及边界框的高度和宽度。最后一个数字是(引用openCV文档)邻居的数量

我想我有两个问题:

1) 最后一个数字是什么意思?在谷歌搜索时,我找不到任何关于这一点的参考

2) (更重要的是)是否有办法获得每次检测的置信度分数?人脸分类器在多大程度上确定检测对应于真实人脸

感谢

1)检测代码为一个对象生成多个检测-例如,在不同的比例下,轻微移动等。然后对检测进行分组,并将该组中的邻居数作为返回数。另请参见Viola Jones论文第5.6段()和OpenCV源代码


2) 您可以使用邻居的数量作为信心的衡量标准。

非常感谢您的提问和回答,我已经寻找了一天具有信心分数的opencv人脸检测。你的问题和回答给了我一些解决问题的指导

正如Palmstrom所说,最后一个数字表示该簇中对象位置的数量。你可以用它作为信心分数

据我所知,在旧的python API中只有这样的API。新API没有此值(群集中的对象数)

我把我的代码放在这里,以防它会帮助其他人。这是一个很旧的python API,很难找到它的教程

import sys
import cv

def detect_face(image):
    image_size = cv.GetSize(image)
    # # create grayscale version
    grayscale = cv.CreateImage(image_size, 8, 1)
    cv.CvtColor(image, grayscale, cv.CV_BGR2GRAY)
    # # equalize histogram
    cv.EqualizeHist( grayscale,grayscale )

    #parameters to the detection function    
    cascade = cv.Load('haarcascade_frontalface_alt.xml')
    haar_scale = 1.1
    min_neighbors = 3
    haar_flags = cv.CV_HAAR_DO_CANNY_PRUNING
    min_size = (30,30)

    faces = cv.HaarDetectObjects(grayscale, cascade, cv.CreateMemStorage(0),
                                haar_scale, min_neighbors, haar_flags, min_size)

    print faces

    if len(faces) > 0:
        print '=> ' +  str(len(faces)) + ' face detected!'
        for ((x,y,width,height), n) in faces:
            pt1 = (x,y)
            pt2 = (x + width, y + height)
            cv.Rectangle(image, pt1, pt2, cv.RGB(255, 0, 0), 3, 8, 0) 


if __name__ == '__main__':

    filename = sys.argv[1]
    image = cv.LoadImage(filename,cv.CV_LOAD_IMAGE_COLOR);
    detect_face(image)

    cv.ShowImage("cam", image)
    cv.WaitKey(0)
可能有用: