OpenCV 4.0.0 SystemError: <class 'cv2.CascadeClassifier'> returned a result with an error set

OpenCV 4.0.0 SystemError: <class 'cv2.CascadeClassifier'> returned a result with an error set

你好,我正在尝试创建一个面部识别程序,但我遇到了一个奇怪的错误: 这是我的代码:

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
face_cascade = cv2.CascadeClassifier("lbpcascade_frontalface.xml")
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.2, minNeighbors=5);

这个错误就是输出

SystemError: <class 'cv2.CascadeClassifier'> returned a result with an error set

我在工作目录中有 "lbpcascade_frontalface.xml",所以这应该不是问题

如果对我输入有帮助

cv2.__version__

我明白了

'4.0.0'

新答案 OpenCV 现在似乎有一个专用于级联的目录,它们位于 data 中,我现在在教程中看到类似这样的内容 haar_cascade_face = cv2.CascadeClassifier('data/haarcascade/haarcascade_frontalface_default.xml') 您可能需要找到 data 在您的机器上或上面我的工作的位置。自从我在 2019 年初完成这个项目以来,我就没有接触过这个项目。 请记住,这仅适用于正面,如果您想将 Haar 的 Cascade 用于作为单独文件的眼睛。

旧答案 事实证明我不需要下载另一个文件并使用它,因为 opencv 附带了这一点代码

cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")

正如上面@TylerStrouth 所解释的那样,opencv 有一个级联目录,其中级联文件可用,我也遇到了同样的问题,而 运行 Ubuntu 16.04 上的人脸检测代码和解决方法如下

  1. 使用

    获取opencv的位置

    whereis opencv

  2. 我的在 /usr/share/opencv

  3. 检查级联是否存在于该位置并复制粘贴 cv2.CascadeClassifier 中的位置以及所需的 haarcascade

我遇到过同样的问题,但方式略有不同。 我正在使用 Jupiter notebook 来执行代码 here

我从 here 复制了 XML 文件并在当前 Jupiter 目录中创建了一个 XML 文件,当使用以下方法加载此文件时:

classifier = CascadeClassifier('haarcascade_frontalface_default.xml')

它返回给我错误:

SystemError: <class 'cv2.CascadeClassifier'> returned a result with an error set

所以,我尝试了其他方法,删除了这个文件,并在当前目录中下载了 XML 格式的实际文件,这解决了我的问题。

好吧,我遇到了同样的问题,因为@TylerStrouth 提到这个代码片段不起作用:

cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")

因为如果你刚刚以pip install opencv-pythonsudo apt-get install python3-opencv[=16=的标准格式安装opencv,数据目录中没有haarcascades文件]

你会得到一个类似于 this Whosebug question 的错误,其中提到的解决方案对我有用,也就是说,如果你使用 python3 那么你还需要安装 opencv-contrib-python 在 运行 上面的代码片段之前。

pip install opencv-contrib-python

有完整的包装(包含两个 main modules and contrib/extra modules

当我使用 hogcascade_pedestrians.xml 从本地视频中检测行人时,我遇到了同样的错误 ,我正在阅读 hogcascade_pedestrians.xml 如下:

pedestrainsClassifier = cv2.CascadeClassifier("hogcascade_pedestrians.xml")

其中阅读内容如下:

pedestrainsClassifier = cv2.CascadeClassifier(f"{cv2.data.haarcascades}hogcascade_pedestrians.xml")

或者您可以按如下方式进行:

pedestrainsClassifier = cv2.CascadeClassifier(cv2.data.haarcascades +"hogcascade_pedestrians.xml")

祝你好运

按如下方式更改您的代码,这对我有用

har_cascade = cv2.CascadeClassifier(cv2.data.haarcascades +'har.xml')

在版本 3.4.9.33 的 opencv-python (pip show opencv-python, Windows) 下行工作正常:trained_face_data = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')