2016-03-27 4 views
3

Я преподаю, как использовать openCV, написав простую программу распознавания лиц, которую я нашел на youtube. Я установил opencv версии 2, а также numpy 1.8.0. Я использую python2.7.Ошибка атрибута при использовании opencv для распознавания лиц

Я скопировал этот код именно так, как это было сделано в видео и ссылках статьи ниже, но я все время получаю ошибки. AttributeError: объект 'module' не имеет атрибута 'cv' Что я делаю неправильно?

Вот код, который я использую.

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/

+0

С ошибки вы получаете, это, казалось бы, вы используете OpenCV 3.x, не OpenCV 2.x. В интерпретаторе python выведите команду 'cv2 .__ version__' для проверки. – svohara

ответ

12

Последняя OpenCV больше не позволяет импортировать наследие cv модуль. Кроме того, соглашение об именах констант обычно отменяет ведущее «CV _...», и несколько/несколько названий несколько изменены. Я думаю, что вы столкнулись с обеими проблемами.

В частности, ошибка, о которой вы сообщаете, относится к этому выражению в вашем коде: cv2.cv.CV_HAAR_SCALE_IMAGE. Это выражение пытается найти именованную константу CV_HAAR_SCALE_IMAGE в подмодуле cv импортированного вами пакета cv2. Но, увы, cv2.cv больше нет.

В OpenCV 3, я считаю, что это константа теперь ссылается следующим образом: cv2.CASCADE_SCALE_IMAGE

Кроме того, вы можете найти this link полезным. Это пример скрипта faceetect.py, найденного в исходном коде OpenCV. Вы можете увидеть использование нового имени константы в этом примере, и вы также можете проверить его для других изменений из более старых источников/учебников.

0

Вот обновленный код, который работает в jupyter ноутбук с 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() 
Смежные вопросы