调用haarcascade_mcs_mouth.xml时OpenCV Python报错求助
解决OpenCV CascadeClassifier加载失败的Assertion错误
这个错误我太熟悉了——本质是你的嘴部分类器没有成功加载,问题出在路径拼接逻辑错误上。
错误原因分析
你写了这行代码:
mouth_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + mouth_xml)
cv2.data.haarcascades是OpenCV自带级联分类器的默认路径(比如.../site-packages/cv2/data/),而你的mouth_xml已经是一个绝对路径(C:\Users\...),把这两个路径拼接在一起会生成一个完全无效的路径(比如../haarcascades/C:\Users\...),导致OpenCV找不到你的haarcascade_mcs_mouth.xml文件,最终触发!empty()断言错误。
修复方案
直接使用mouth_xml的绝对路径初始化分类器,不要拼接cv2.data.haarcascades——这个变量只适用于加载OpenCV自带的预训练模型,你的嘴部分类器是自定义路径的文件,不需要它。
修改后的完整代码:
import cv2 # 你的原始路径 face_xml = r'C:\Users\abdul\Desktop\Haar Cascade github\haarcascade_frontalface_default.xml' mouth_xml = r'C:\Users\abdul\Desktop\opencv project\Face Mask Detection\haarcascade_mcs_mouth.xml' # 加载人脸分类器(这里路径没问题,因为是直接用绝对路径) face_cascade = cv2.CascadeClassifier(face_xml) # 重点:直接使用mouth_xml的绝对路径加载嘴部分类器 mouth_cascade = cv2.CascadeClassifier(mouth_xml) # 先检查分类器是否加载成功,方便排查问题 if face_cascade.empty(): print("❌ 人脸分类器加载失败,请检查face_xml路径") if mouth_cascade.empty(): print("❌ 嘴部分类器加载失败,请检查mouth_xml路径") # 确保分类器加载成功后再执行检测 if not mouth_cascade.empty() and 'gray' in locals(): mouths = mouth_cascade.detectMultiScale(gray, 1.3, 10)
额外排查步骤
如果修改后还是报错,可以试试这几点:
- 复制
mouth_xml的路径到文件资源管理器,确认文件确实存在,没有拼写错误(比如大小写、空格、特殊字符)。 - 用文本编辑器打开
haarcascade_mcs_mouth.xml,确认文件没有损坏(应该是正常的XML格式内容,不是乱码或空文件)。 - 尝试把
haarcascade_mcs_mouth.xml放到你的Python脚本同一目录下,然后简化初始化代码:mouth_cascade = cv2.CascadeClassifier('haarcascade_mcs_mouth.xml')
内容的提问来源于stack exchange,提问作者Abdul Taufiq
相关产品推荐
相关产品推荐

