Attribute error while using opencv for face recognition

末鹿安然 提交于 2019-12-08 21:43:22

问题


I am teaching myself how to use openCV by writing a simple face recognition program I found on youtube. I have installed opencv version 2 as well as numpy 1.8.0. I am using python2.7.

I copyed this code exactly how it was done in the video and article links below, yet I keep getting errors. AttributeError: 'module' object has no attribute 'cv' What am I doing wrong?

Here is the code I'm using.

import cv2
import sys

# Get user supplied values
imagePath = sys.argv[1]
cascPath = sys.argv[2]

# Create the haar cascade
faceCascade = cv2.CascadeClassifier(cascPath)

# Read the image
image = cv2.imread(imagePath)
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))

# Draw a rectangle around the faces
for (x, y, w, h) in faces:
    cv2.rectangle(image, (x, y), (x+w, y+h), (0, 255, 0), 2)

cv2.imshow("Faces found", image)
cv2.waitKey(0)

https://www.youtube.com/watch?v=IiMIKKOfjqE

https://realpython.com/blog/python/face-recognition-with-python/


回答1:


The latest openCV no longer allows importing the legacy cv module. Furthermore the naming convention of the constants generally does away with the leading "CV_..." and several/many of the names have been altered somewhat. I think you are running into both problems.

Specifically, the error you are reporting is in regards to this expression in your code: cv2.cv.CV_HAAR_SCALE_IMAGE. This expression is trying to find the named constant CV_HAAR_SCALE_IMAGE within the cv submodule of the cv2 package you imported. But alas, there is no cv2.cv anymore.

In openCV 3, I believe this constant is now referenced as follows: cv2.CASCADE_SCALE_IMAGE

Also, you may find this link useful. It is to the facedetect.py sample script found in the OpenCV source code. You can see the usage of the new constant name in this example, and you may also inspect it for other changes from older sources/tutorials.




回答2:


Here is the updated code which works into jupyter notebook with OpenCV3:

[]
import cv2
import matplotlib.pyplot as plt
%matplotlib inline 

[]
# Get user supplied values
imagePath = "abba.png"
cascPath = "haarcascade_frontalface_default.xml"

[]
# Create the haar cascade
faceCascade = cv2.CascadeClassifier(cascPath)

[]
# Create the haar cascade
faceCascade = cv2.CascadeClassifier(cascPath)

[]
# Read the image
image = cv2.imread(imagePath)

[]
plt.imshow(image)
plt.show()

[]
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.CASCADE_SCALE_IMAGE #flags = cv2.cv.CV_HAAR_SCALE_IMAGE
)

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


[]
# Draw a rectangle around the faces
for (x, y, w, h) in faces:
    cv2.rectangle(image, (x, y), (x+w, y+h), (0, 255, 0), 2)

[]
plt.imshow(image)
plt.show()


来源:https://stackoverflow.com/questions/36242860/attribute-error-while-using-opencv-for-face-recognition

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!