You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 13:45:32