运行OpenCV人脸识别训练代码报错:cv2无face属性,如何解决?
问题描述
我运行名为trying.py的代码时出现如下错误,该怎么修复?
trying.py
import cv2, os 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 = [] # 初始化空的ID列表 ids = [] # 遍历所有文件路径 for imagePath in imagePaths: # 打开图像并转为灰度图 PIL_img = Image.open(imagePath).convert('L') # 将PIL图像转为numpy数组 img_numpy = np.array(PIL_img, 'uint8') # 获取图像对应的ID id = int(os.path.split(imagePath)[-1].split(".")[1]) print(id) # 从训练图像中检测人脸 faces = detector.detectMultiScale(img_numpy) # 遍历检测到的人脸,将其与对应ID关联 for (x, y, w, h) in faces: # 将人脸区域加入样本列表 faceSamples.append(img_numpy[y:y + h, x:x + w]) # 将对应ID加入ID列表 ids.append(id) # 返回人脸样本和ID数组 return faceSamples, ids # 获取人脸样本和ID faces, ids = getImagesAndLabels('dataset') # 使用人脸样本和ID训练模型 recognizer.train(faces, np.array(ids)) # 将训练好的模型保存为trainer.yml recognizer.save('trainer/trainer.yml')
错误信息:
Traceback (most recent call last):
File "C:\Users\HP\PycharmProjects\face_identificiation\trying.py", line 12, in
recognizer = cv2.face.LBPHFaceRecognizer_create()
AttributeError: module 'cv2' has no attribute 'face'
修复方案
这个错误的核心原因是:默认安装的opencv-python包不包含人脸识别相关的扩展模块,cv2.face属于opencv-contrib-python的内容。
解决步骤:
- 先卸载已有的OpenCV相关包(避免版本冲突):
pip uninstall opencv-python opencv-contrib-python -y - 安装包含人脸模块的完整扩展版:
pip install opencv-contrib-python - 若需要指定稳定版本(比如避免最新版兼容性问题),可以添加版本号:
pip install opencv-contrib-python==4.5.5.62
额外注意事项:
- 确认
haarcascade_frontalface_default.xml文件存在于当前代码运行目录,或者在代码中填写该文件的完整路径。 - 确保
dataset文件夹存在,且里面的图像文件名格式符合代码预期(比如xxx.1.xxx.jpg这类包含ID的命名),否则获取ID的代码会触发索引错误。
内容的提问来源于stack exchange,提问作者jacob
相关产品推荐
相关产品推荐

