
OpenCV 4.x版本中,人脸识别相关类已移至cv2.face子模块(小写face),而非cv2.Face(首字母大写),直接调用会触发AttributeError。本文详解正确导入方式、依赖安装及常见避坑要点。
opencv 4.x版本中,人脸识别相关类已移至`cv2.face`子模块(小写face),而非`cv2.face`(首字母大写),直接调用会触发attributeerror。本文详解正确导入方式、依赖安装及常见避坑要点。
在使用OpenCV进行基于LBPH的人脸识别时,常见的错误代码如下:
import cv2
faceCascade = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
clf = cv2.Face.LBPHFaceRecognizer_create() # ❌ 错误:cv2.Face 不存在
clf.read("clf.xml")运行后将报错:
AttributeError: module 'cv2' has no attribute 'Face'
根本原因:自OpenCV 3.3起,cv2.face模块被拆分为独立扩展包,且其命名空间为全小写 face(非 Face)。该模块不包含在主opencv-python包中,需额外安装支持人脸识别的扩展版本。
✅ 正确做法如下:
1. 安装正确的OpenCV扩展包
卸载默认版本,并安装带contrib模块的完整版(含face子模块):
pip uninstall opencv-python opencv-contrib-python pip install opencv-contrib-python
⚠️ 注意:必须同时安装 opencv-contrib-python,且不能与opencv-python共存(二者冲突),contrib包已内置核心cv2功能。
2. 修正代码:使用 cv2.face(全小写)
import cv2
# 加载分类器(无需修改)
faceCascade = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
# ✅ 正确调用:cv2.face.LBPHFaceRecognizer_create()
clf = cv2.face.LBPHFaceRecognizer_create()
clf.read("clf.xml") # 加载训练好的模型3. 验证模块可用性(调试建议)
运行以下代码确认face模块已就绪:
import cv2 print(hasattr(cv2, 'face')) # 应输出 True print(dir(cv2.face)) # 查看可用识别器类,如 LBPHFaceRecognizer_create
补充说明
- cv2.face 还提供 EigenFaceRecognizer_create() 和 FisherFaceRecognizer_create(),用法一致;
- Haar级联文件(如haarcascade_frontalface_default.xml)需确保路径正确,推荐使用cv2.data.haarcascades获取标准路径:
cascade_path = cv2.data.haarcascades + "haarcascade_frontalface_default.xml" faceCascade = cv2.CascadeClassifier(cascade_path)
遵循以上步骤,即可彻底解决 AttributeError: module 'cv2' has no attribute 'Face' 问题,顺利启用OpenCV人脸检测与识别功能。

















