web-dev-qa-db-fra.com

Erreur d'attribut lors de l'utilisation d'opencv pour la reconnaissance faciale

J'apprends moi-même à utiliser openCV en écrivant un programme de reconnaissance faciale simple que j'ai trouvé sur youtube. J'ai installé opencv version 2 ainsi que numpy 1.8.0. J'utilise python2.7.

J'ai copié ce code exactement comme cela a été fait dans les liens vidéo et article ci-dessous, mais je continue à recevoir des erreurs. AttributeError: l'objet 'module' n'a pas d'attribut 'cv' Qu'est-ce que je fais mal?

Voici le code que j'utilise.

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/

8
RatstabOfficial

Le dernier openCV ne permet plus d'importer l'ancien module cv. De plus, la convention de dénomination des constantes supprime généralement le premier "CV _..." et plusieurs/plusieurs des noms ont été quelque peu modifiés. Je pense que vous rencontrez les deux problèmes.

Plus précisément, l'erreur que vous signalez concerne cette expression dans votre code: cv2.cv.CV_HAAR_SCALE_IMAGE. Cette expression tente de trouver la constante nommée CV_HAAR_SCALE_IMAGE dans le sous-module cv du cv2 package que vous avez importé. Mais hélas, il n'y a plus de cv2.cv.

Dans openCV 3, je crois que cette constante est maintenant référencée comme suit: cv2.CASCADE_SCALE_IMAGE

En outre, vous pouvez trouver ce lien utile. C'est à l'exemple de script facesetect.py trouvé dans le code source OpenCV. Vous pouvez voir l'utilisation du nouveau nom de constante dans cet exemple, et vous pouvez également l'inspecter pour d'autres modifications provenant de sources/tutoriels plus anciens.

33
svohara