使用opencv-contrib-python触发Assertion failed错误的解决求助
OpenCV LBPHRecognizer读取训练文件报错解决方案
问题描述
使用最新版opencv-contrib-python,通过cv2.face.LBPHFaceRecognizer_create()创建的recognizer执行recognizer.read("face-trainer.yml")时触发如下错误:
Traceback (most recent call last): File "/home/sxvxge/Desktop/My Files/Code Projects/Python/Face recognition/FaceRecognitionRevamped.py", line 24, in <module> recognizer.read("face-trainer.yml") cv2.error: OpenCV(4.6.0) /io/opencv/modules/core/src/persistence.cpp:2145: error: (-215:Assertion failed) isMap() in function 'operator[]'
已知条件:
- 无法降级到OpenCV 2.4
- 无C++编译环境重新编译opencv-contrib-python
- 仅安装
opencv-contrib-python(避免版本冲突) face-trainer.yml与脚本路径一致
解决方法
1. 重新生成适配当前OpenCV版本的训练文件
该报错大多是因为face-trainer.yml由旧版OpenCV生成,和4.x版本的LBPHFaceRecognizer不兼容。直接用当前版本的OpenCV重新训练:
- 确保训练代码使用
cv2.face.LBPHFaceRecognizer_create()创建识别器 - 运行训练脚本生成新的
face-trainer.yml,替换原文件
2. 检查训练文件完整性
打开face-trainer.yml确认:
- 无乱码、内容缺失或YAML语法错误
- 若文件损坏,重新生成是唯一可行方案
3. 使用绝对路径读取文件
避免路径解析问题,用绝对路径指定文件位置:
import os trainer_path = os.path.abspath("face-trainer.yml") recognizer.read(trainer_path)
4. 安装稳定版opencv-contrib-python
确保使用的是稳定发行版,而非开发版,可重新安装指定版本:
pip uninstall opencv-contrib-python pip install opencv-contrib-python==4.8.0.76 # 可替换为最新稳定版
内容的提问来源于stack exchange,提问作者Sxvxgeness
相关产品推荐
相关产品推荐

