在 django(使用 python-opencv)项目中找不到人脸(人脸检测)

Posted

技术标签:

【中文标题】在 django(使用 python-opencv)项目中找不到人脸(人脸检测)【英文标题】:Not able to find faces(face-detection) in django (using python-opencv) project 【发布时间】:2016-03-13 01:03:29 【问题描述】:

这段代码(在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
)

现在是“寻找面孔数量”的关键部分

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

终端中的输出:

Found 0 faces!

为什么会这样?

我已经尝试通过在终端中打印进行调试。我在 cmets 中提到了它们。正在使用的相机是我的笔记本电脑 (HP envy) 相机,它可以提供分辨率为 640x480 的快照。

我怀疑faceCascade.detectMultiScale(..) 块中需要调整一些东西。(参数)。我尝试使用scalefactor = 1.000001minNeighbors = 3 无济于事。

【问题讨论】:

您似乎只包含了您的问题的一小部分。请包含其余部分,希望连同您迄今为止尝试/研究的内容以及为什么没有奏效 我正在编辑问题。旧问题被错误地发布了。请看一下新问题。 您是否检查过图片是否正确创建?应该是一张脸的照片中是否有明显的区别? (图片中的照明等) 正脸开图完美。我试过很多次了。 但是当我尝试使用简单的“python caminit.py”运行相同的代码(在 def caminit 内)而不与 Django 集成时,没有出现错误,检测到 FACE。 这就是为什么我很好奇图片是否真的正确创建(在 django 中)我知道的每个服务器都没有相机所以我不确定它应该如何能够拍照(它当然无权访问用户机器)。我原以为您需要在客户端拍照并将其发送到您的视图 【参考方案1】:

根据我的经验,预测最好的分类器是这样的: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)。

【讨论】:

以上是关于在 django(使用 python-opencv)项目中找不到人脸(人脸检测)的主要内容,如果未能解决你的问题,请参考以下文章

Python-OpenCV中的图像轮廓检测

python-opencv-图像的叠加

python-opencv boundingRect使用注意

python-opencv-图片的裁剪

python-opencv-图像的融合

Python-OpenCV中的图像模糊