You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenCV 4.7.0中CascadeClassifier初始化报错求助

Haar级联文件加载失败:SystemError与cv2.error(-215)问题解决

当使用OpenCV 4.7.0加载haarcascade_frontalface_default.xml时出现SystemError: <class 'cv2.CascadeClassifier'> returned a result with an exception set,底层关联cv2.error: (-215:Assertion failed) buf in function 'open'错误,即便确认路径正确,也可以尝试以下几种排查和解决方法:

1. 验证文件完整性与路径有效性

  • 手动打开xml文件,确认内容完整无损坏(若文件为空或乱码,说明下载过程中出现问题,需重新获取)。
  • 在代码中添加路径验证代码,确认文件确实存在:
    import os
    cascade_path = '/Users/*********/workspace/Facial Recognition Project/haarcascade_frontalface_default.xml'
    print(os.path.exists(cascade_path))
    
    若输出False,说明路径存在问题:
    • 尝试将路径改为原始字符串(前缀加r),避免特殊字符转义问题:r'/Users/*********/workspace/Facial Recognition Project/haarcascade_frontalface_default.xml'
    • 检查路径中的空格或特殊字符是否被正确识别,可尝试将文件移动到无空格的目录下。

2. 使用OpenCV自带的Haar级联文件

OpenCV安装包中自带了官方的Haar级联模型文件,直接调用可避免路径错误:

face_detector = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')

这种方式无需手动指定绝对路径,兼容性更强。

3. 重新下载官方Haar级联文件

若当前使用的xml文件存在版本兼容问题,可重新获取官方最新的haarcascade_frontalface_default.xml文件,替换现有文件后重试。

4. 检查文件读取权限

在macOS或Linux系统中,确认当前用户对该xml文件拥有读取权限:

  • 右键文件选择「显示简介」,在「共享与权限」中添加当前用户的读取权限;
  • 或通过终端执行命令:chmod +r /Users/*********/workspace/Facial Recognition Project/haarcascade_frontalface_default.xml

修改后的示例代码

import cv2
import os

cam = cv2.VideoCapture(0)
cam.set(3, 640) # 设置视频宽度
cam.set(4, 480) # 设置视频高度

# 调用OpenCV自带的Haar级联文件
face_detector = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')

# 输入用户ID
face_id = input('\n 输入用户ID后按回车 ==>  ')

print("\n [提示] 初始化人脸采集,请面向摄像头等待...")
count = 0

while(True):
    ret, img = cam.read()
    if not ret:
        print("无法读取摄像头画面")
        break
    img = cv2.flip(img, -1) # 垂直翻转视频画面
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    faces = face_detector.detectMultiScale(gray, 1.3, 5)

    for (x,y,w,h) in faces:
        cv2.rectangle(img, (x,y), (x+w,y+h), (255,0,0), 2)     
        count += 1

        # 自动创建dataset目录(若不存在)
        os.makedirs("dataset", exist_ok=True)
        # 保存采集到的人脸图像
        cv2.imwrite(f"dataset/User.{face_id}.{count}.jpg", gray[y:y+h,x:x+w])

        cv2.imshow('image', img)

    k = cv2.waitKey(100) & 0xff # 按ESC键退出视频采集
    if k == 27:
        break
    elif count >= 30: # 采集30张人脸样本后停止
         break

# 清理资源
print("\n [提示] 退出程序,清理资源")
cam.release()
cv2.destroyAllWindows()

内容的提问来源于stack exchange,提问作者Sashu Ponnaganti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 03:35:29