【问题标题】:OpenCV 4.0.0 SystemError: <class 'cv2.CascadeClassifier'> returned a result with an error setOpenCV 4.0.0 SystemError: <class 'cv2.CascadeClassifier'> 返回了带有错误集的结果
【发布时间】:2019-06-13 20:16:03
【问题描述】:

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

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'

【问题讨论】:

    标签: python opencv cv2 facial-identification


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        我在使用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")
        

        祝你好运

        【讨论】:

          【解决方案4】:

          好吧,我也遇到了同样的问题,因为@TylerStrouth 提到此代码 sn-p 不起作用:

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

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

          您将收到类似于this stackoverflow question 的错误,其中提到的解决方案对我有用,也就是说,如果您使用的是 python3,那么您还需要安装 opencv-contrib-python 在运行上面的代码 sn -p 之前。

          pip install opencv-contrib-python
          

          包含完整包(包含main modules and contrib/extra modules

          【讨论】:

            【解决方案5】:

            我以不同的方式遇到了同样的问题。 我使用 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 格式,这解决了我的问题。

            【讨论】:

              【解决方案6】:

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

              1. 使用opencv获取位置

                opencv 在哪里

              2. 我的在 /usr/share/opencv

              3. 检查该位置是否存在级联,并将该位置与所需的 haarcascade 一起复制粘贴到 cv2.CascadeClassifier 中

              【讨论】:

                【解决方案7】:

                新答案 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")
                

                【讨论】:

                • AttributeError: module 'cv2' has no attribute 'data'
                • 我否决了这个答案,我得到的答案与上面评论中列出的相同。
                • 经过一番研究,我编辑了答案,很抱歉你们两个有我没有早点解决的错误,但自去年以来我几乎没有接触过 OpenCV。
                • 就我而言,opencv 库中没有名为“data”的文件夹;相反,在 Win10 操作系统中搜索名为“etc”的文件夹中的文件夹“haarcascades”。
                • 工作,windows10,cv2 版本4.5.1,使用pip install opencv-python。谢谢。
                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2019-05-16
                • 2017-09-24
                • 2020-09-02
                • 1970-01-01
                • 1970-01-01
                • 2013-05-03
                相关资源
                最近更新 更多