无法在django中找到面部(面部检测)(使用python-opencv)项目

时间:2015-12-08 07:31:44

标签: django python-2.7 opencv haar-classifier

此代码块(在views.py中)由URL触发。导入cv2时没有问题。(使用virtualenvwrapper尝试相同的结果显示相同的结果(添加所有必需的库之后)相机初始化和....

def caminit(request):  
  cam.open(0)
  img=cam.read()
  cv2.imwrite("snap"+".jpg",img[1])
  cam.release()                                #takes the instant pic

  faceCascade =cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
  eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')

检查print type(faceCascade)时是否<type 'cv2.CascadeClassifier'>。对象已创建。

在同一caminit

中继续前进
image = cv2.imread("snap.jpg")

# when checked with image.dtype it shows correct uint8 also image.shape shows correct data {Eg: (480, 640, 3)}

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# Detect faces in the image
faces = faceCascade.detectMultiScale(
    gray,
    scaleFactor=1.1,
    minNeighbors=5,
    minSize=(30, 30),
    flags = cv2.cv.CV_HAAR_SCALE_IMAGE
)

现在关键部分&#34;找到没有。面孔&#34;

print "Found {0} faces!".format(len(faces))

TERMINAL的输出:

Found 0 faces!

为什么会这样?

我已尝试通过在终端打印进行调试。我在评论中提到过它们。正在使用的相机是我的笔记本电脑(HP羡慕​​)相机,其分辨率为640x480。

我怀疑需要在faceCascade.detectMultiScale(..)块中调整某些内容。(参数)。我尝试使用scalefactor = 1.000001minNeighbors = 3无效。

1 个答案:

答案 0 :(得分:0)

根据我的经验,预测最好的分类器是:haarcascade_frontalface_alt2.xml,您可以尝试使用它。

这是适用于我的代码:

min_face_size=30
max_face_size=100
face_cascade = cv2.CascadeClassifier("haarcascade_frontalface_alt2.xml")
faces = face_cascade.detectMultiScale(img_gray, 1.05,1,0| cv2.cv.CV_HAAR_SCALE_IMAGE,(min_face_size,min_face_size),(max_face_size,max_face_size))

除了尝试这个,你应该确保你正在加载一个真实的图像。可能会出现您正在加载黑色图像,然后它可以返回类似您所说的内容(480,640,3)。