Python opencv人脸检测中的分类器置信度
我在python中使用opencv的har级联人脸检测器(cv.HaarDetectObjects) 例如: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),
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)
可能有用: