运行detect_main.py触发cv2无face属性AttributeError报错
报错说明
人脸项目操作流程:
- 执行
python train_face.py完成人脸数据录入 - 执行
python detect_main.py启动检测程序时运行失败,抛出如下错误:
File "detect_main.py", line 8, in <module> recognizer = cv2.face.LBPHFaceRecognizer_create() AttributeError: module 'cv2' has no attribute 'face'
故障原因
cv2.face命名空间下的所有人脸识别接口(包括用到的LBPHFaceRecognizer_create)不属于OpenCV基础发行版的内置内容,是存放在opencv-contrib-python扩展包中的附加模块。触发这个报错只有两种可能:一是当前Python环境没安装对应扩展包,二是安装的OpenCV主包和扩展包版本不匹配、存在多版本残留冲突。
修复步骤
- 先彻底卸载环境中所有残留的OpenCV相关包,避免版本冲突:
上述命令可以重复执行2-3次,直到提示没有对应安装包为止,确保旧版本完全清理干净。pip uninstall opencv-python opencv-contrib-python -y - 重新安装版本完全匹配的OpenCV主包和扩展包:
无特殊版本要求的话直接安装最新稳定版即可,执行命令:
如果项目指定了OpenCV版本,必须给两个包指定完全相同的版本号,例如指定4.8.0.74版本的命令为:pip install opencv-python opencv-contrib-pythonpip install opencv-python==4.8.0.74 opencv-contrib-python==4.8.0.74 - 安装完成后做功能验证:进入Python交互环境,依次执行以下代码,无报错即修复完成:
import cv2 recognizer = cv2.face.LBPHFaceRecognizer_create()
避坑提示
- 两个包版本强绑定,不要单独安装
opencv-contrib-python而不装对应版本的主包,版本不一致大概率还是会触发属性缺失报错。 - 如果使用conda虚拟环境,不要混用pip和conda源安装OpenCV相关包,统一使用同一种包管理工具安装,避免路径冲突导致模块加载失败。
内容的提问来源于stack exchange,提问作者Teddy Gideon Manik
相关产品推荐
相关产品推荐

