PyCharm下OpenCV LBPH人脸识别训练报空训练数据错误原因求解
人脸识别模型训练报错排查
运行报错信息:
cv2.error: OpenCV(4.5.4-dev) D:\a\opencv-python\opencv-python\opencv_contrib\modules\face\src\lbph_faces.cpp:362: error: (-210:Unsupported format or combination of formats) Empty training data was given. You'll need more than one sample to learn a model. in function 'cv::face::LBPH::train
该报错核心原因为训练时传入的人脸样本集x_train为空,没有有效数据供模型学习,可能的具体触发原因如下:
- 代码拼写错误:代码中
pil_image = Image.open(path).conver("L")存在方法名拼写错误,正确写法为convert。如果实际运行的代码确实存在该拼写错误,会直接导致图像灰度化步骤失败,后续人脸检测无法正常执行,最终没有样本存入训练集。如果运行时没有先抛出AttributeError相关报错,大概率是粘贴代码时手误,可优先核对该代码行。 - 人脸分类器加载失败:你使用的
haarcascade_frontalface_default.xml采用绝对路径配置,若路径填写错误、分类器文件损坏,会导致face_cascade初始化失败,后续检测流程无法识别到任何人脸,不会生成有效训练样本。你可在分类器初始化后添加代码print(face_cascade.empty())验证,输出True即代表分类器加载失败。 - 人脸检测参数过于严格:
detectMultiScale方法中设置的scaleFactor=1.5、minNeighbors=5参数阈值过高,若你的训练图片存在人脸角度偏移、分辨率过低、光照不均、面部有遮挡等情况,会导致所有图片都检测不到人脸,x_train最终为空。可尝试将scaleFactor调低至1.1、minNeighbors调低至2验证是否能正常检测人脸。 - 图片读取逻辑不匹配:首先确认
image_dir路径指向正确的训练图片存储目录,可添加print(image_dir)核对路径。其次你当前的后缀判断逻辑仅匹配小写的.png、.jpg,如果你的训练图片后缀为大写的.PNG、.JPG,会被过滤不会进入训练流程。 - 目录层级不符合预期:
os.walk遍历逻辑中,标签取自当前遍历目录的名称,如果你将图片直接存放在images根目录,或者人员子文件夹下又嵌套了一层目录才存放图片,会导致标签读取错误、图片未被正常遍历。可在文件遍历循环中添加print(path)核对所有训练图片是否被正常识别。
内容的提问来源于stack exchange,提问作者mar
相关产品推荐
相关产品推荐

