分类器对opencv人脸检测器的信心
Posted
技术标签:
【中文标题】分类器对opencv人脸检测器的信心【英文标题】:Classifiers confidence in opencv face detector 【发布时间】:2011-12-18 09:11:28 【问题描述】:我在 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)(更重要)有没有办法为每个检测获得置信度分数?人脸分类器在多大程度上确定检测对应于真实人脸?
谢谢
【问题讨论】:
可能有用:haoxiang.org/2013/11/… 【参考方案1】:1) 检测代码对一个对象产生多个检测 - 例如。以不同的比例,稍微偏移等。然后对检测进行分组,并且这样的组中的邻居数是返回的数字。另请参阅 Viola Jones 论文第 5.6 段 (http://research.microsoft.com/en-us/um/people/viola/Pubs/Detect/violaJones_IJCV.pdf) 和 OpenCV 源代码。
2) 您可以使用邻居的数量作为置信度的某种度量。
【讨论】:
【参考方案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)
【讨论】:
以上是关于分类器对opencv人脸检测器的信心的主要内容,如果未能解决你的问题,请参考以下文章