无法在 Django(使用 Python-OpenCV)项目中找到人脸(人脸识别)

8

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

为什么会出现这种情况?

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

我怀疑在faceCascade.detectMultiScale(..)块中需要调整一些内容(参数)。我尝试过scalefactor = 1.000001minNeighbors = 3,但都没有成功。


1
你似乎只包含了你问题的一小部分.. 请包括剩下的部分,希望能够附上你已经尝试/研究过的内容以及为什么那些方法没有奏效。 - Sayse
我正在编辑这个问题。旧的问题是错误发布的,请查看新的问题。 - Mohit Kumar
你检查过图片是否正确创建了吗?照片中应该有清晰的面部区分吗?(例如照片中的光照等) - Sayse
图片已经完美地打开并检测到了人脸。我尝试了很多次。但是当我尝试运行相同的代码(在def caminit内部)并简单地使用“python caminit.py”而不与Django集成时,没有错误出现,也检测到了人脸。 - Mohit Kumar
这就是我为什么好奇图片是否实际上已经在 Django 中正确创建(每个我知道的服务器都没有摄像头,所以我不确定它应该如何拍照(它肯定无法访问用户的机器)。我认为您需要在客户端拍照并将其发送到视图。 - Sayse
显示剩余5条评论
1个回答

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)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接