Экземпляр ‘module’ не имеет члена ‘lbphacerecognizer_create’

#python #opencv

#python #opencv

Вопрос:

 import os
import cv2
import numpy as np
from PIL import Image

recognizer = cv2.face.LBPHFaceRecognizer_create()
detector= cv2.CascadeClassifier("haarcascade_frontalface_default.xml")

def getImagesAndLabels(path):

imagePaths=[os.path.join(path,f) for f in os.listdir(path)] 

faceSamples=[]

Ids=[]

for imagePath in imagePaths:

    pilImage=Image.open(imagePath).convert('L')

    imageNp=np.array(pilImage,'uint8')

    Id=int(os.path.split(imagePath)[-1].split(".")[1])

    faces=detector.detectMultiScale(imageNp)

    for (x,y,w,h) in faces:
        faceSamples.append(imageNp[y:y h,x:x w])
        Ids.append(Id)
return faceSamples,Ids


faces,Ids = getImagesAndLabels('dataSet')
recognizer.train(faces, np.array(Ids))
recognizer.save('trainner/trainner.yml')
  

Когда я запускаю приведенный выше код, он выдает ошибку, в которой указано, что

Экземпляр модуля не имеет элемента LBHPFaceRecognizer_create()

Как мне исправить эту ошибку?

Ответ №1:

Попробуйте установить пакет opencv-contrib-python,

pip install opencv-contrib-python

Редактировать 1:

Используете ли вы более старую версию пакета, если да, изменилось ли имя модуля,https://github.com/opencv/opencv/issues/7187

Вы можете быстро проверить, какие модули доступны в cv2.face пакете.

 >>> import cv2
>>> dir(cv2.face)
['BIF_create', 'EigenFaceRecognizer_create', 'FisherFaceRecognizer_create', 'LBPHFaceRecognizer_create', 'MACE_create', 'MACE_load', 'StandardCollector_create', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'createFacemarkAAM', 'createFacemarkKazemi', 'createFacemarkLBF', 'drawFacemarks', 'getFacesHAAR', 'loadDatasetList', 'loadFacePoints', 'loadTrainingData']
  

Комментарии:

1. Я уже установил opencv-contrib-python, но проблема по-прежнему сохраняется.

2. Привет, спасибо. Функция lbphacerecognizer_create() присутствует в cv2.face, но все равно выдает ошибку, что экземпляр модуля не имеет элемента lbphacerecognizer_create()