错误:(-215)!函数 detectMultiScale 中的 empty()

2025-01-20 09:07:00
admin
原创
102
摘要:问题描述:我正在尝试在 python 2.7 中学习 cv2,但是当我运行代码时,在它的特定部分:face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') eye_cascade = cv2.CascadeClas...

问题描述:

我正在尝试在 python 2.7 中学习 cv2,但是当我运行代码时,在它的特定部分:

face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
 eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')


img = cv2.imread('2015-05-27-191152.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

faces = face_cascade.detectMultiScale(gray, 1.3, 5)
for (x,y,w,h) in faces:
    img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)

它返回这个:

File "face_detection.py", line 11, in <module>
    faces = face_cascade.detectMultiScale(gray, 1.3, 5)
cv2.error: /home/arthurckl/Desktop/opencv-3.0.0-rc1/modules/objdetect/src/cascadedetect.cpp:1595: error: (-215) !empty() in function detectMultiScale

我尝试在这里寻找答案,但我能找到的最好的答案是我必须以错误的方式加载 face_cascade...有什么帮助吗?


解决方案 1:

我遇到了同样的问题。

我不需要下载任何其他东西来解决这个问题。CV2 有我需要的一切。

我没有尝试找出.xml文件在哪里并对值进行硬编码,而是使用了 cv2 给出的属性。

来自 OP

face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')

成为

face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_eye.xml')

解决方案 2:

XML 或文件缺失,或其路径不正确,或者 create_capture 路径不正确。

opencv示例中的路径如下所示:

cascade_fn = args.get('--cascade', "../../data/haarcascades/haarcascade_frontalface_alt.xml")
nested_fn  = args.get('--nested-cascade', "../../data/haarcascades/haarcascade_eye.xml")

cam = create_capture(video_src, fallback='synth:bg=../data/lena.jpg:noise=0.05')

解决方案 3:

我运行了相同的代码。这里有两点需要注意。1. 给出 .xml 文件的完整路径。2. 在最后给出按键事件指令。

在末尾添加此代码块并运行您的文件,对我有用:

k = cv2.waitKey(0)
if k == 27:         # wait for ESC key to exit
    cv2.destroyAllWindows()
elif k == ord('s'): # wait for 's' key to save and exit
    cv2.imwrite('messigray.png',img)
    cv2.destroyAllWindows()

例如我的代码如下

import numpy as np
import cv2

face_cascade = cv2.CascadeClassifier('C:\\opencv\\build\\etc\\haarcascades\\haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier('C:\\opencv\\build\\etc\\haarcascades\\haarcascade_eye.xml')

img = cv2.imread('lena.jpg')

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

faces = face_cascade.detectMultiScale(gray, 1.3, 5)
#faces = face_cascade.detectMultiScale(gray)

for (x,y,w,h) in faces:
    cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
    roi_gray = gray[y:y+h, x:x+w]
    roi_color = img[y:y+h, x:x+w]
    eyes = eye_cascade.detectMultiScale(roi_gray)
    for (ex,ey,ew,eh) in eyes:
        cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)

cv2.imshow('img',img)

k = cv2.waitKey(0)
if k == 27:         # wait for ESC key to exit
    cv2.destroyAllWindows()
elif k == ord('s'): # wait for 's' key to save and exit
    cv2.imwrite('messigray.png',img)
    cv2.destroyAllWindows()

我的输出如下:

输出

解决方案 4:

您只需要添加haarcascade_frontalface_default.xml文件的正确路径,即您只需添加前缀(cv2.data.haarcascades

face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_eye.xml')

解决方案 5:

XML 文件缺失,您可以从 GitHub 存储库获取该文件并将其放在与项目相同的目录中。GitHub 上的文件夹链接在这里。只需下载名为haarcascade_frontalface_default.xml的文件即可。实际上,该文件存在于您的系统中。只需转到Python 安装文件夹的site-packages文件夹并检查 cv2/data 文件夹中的文件即可

解决方案 6:

使用完整的文件路径,并在 xml 文件路径中使用“\\”代替“\”。

文件路径应如下:

face_cascade = cv2.CascadeClassifier('C:\\opencv\\build\\etc\\haarcascades\\haarcascade_frontalface_default.xml')

而不是:

cascade_fn = args.get('--cascade', "....datahaarcascadeshaarcascade_frontalface_alt.xml")

解决方案 7:

无需更改代码

下载该 .xml 文件,然后输入该文件的路径

它将解决错误(100%)

解决方案 8:

此错误表示找不到 XML 文件。即使您可能只是使用 OpenCV 库附带的文件,库也需要您向其传递完整路径。

您可以使用内置pkg_resources模块自动为您确定这一点。以下代码查找模块cv2加载位置内文件的完整路径:

import pkg_resources
haar_xml = pkg_resources.resource_filename(
    'cv2', 'data/haarcascade_frontalface_default.xml')

对我来说是这样的'/Users/andrew/.local/share/virtualenvs/foo-_b9W43ee/lib/python3.7/site-packages/cv2/data/haarcascade_frontalface_default.xml';你的肯定不一样。只需让 python 的pkg_resources库来解决这个问题。

classifier = cv2.CascadeClassifier(haar_xml)
faces = classifier.detectMultiScale(frame)

成功!

解决方案 9:

如果您正在使用 Anaconda,您应该添加 Anaconda 路径。

new_path = 'C:/Users/.../Anaconda/Library/etc/haarcascades/'

face_cascade = cv2.CascadeClassifier(new_path + 'haarcascade_frontalface_default.xml')

解决方案 10:

在安装了 homebrew 的 OSX 上,opencv 文件夹的完整路径应该可以工作:

face_cascade = cv2.CascadeClassifier('/usr/local/Cellar/opencv/3.4.0_1/share/OpenCV/haarcascades/haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier('/usr/local/Cellar/opencv/3.4.0_1/share/OpenCV/haarcascades/haarcascade_eye.xml')

注意路径中的版本号。

解决方案 11:

可能face_cascade是空的。您可以通过输入以下命令来检查变量是否为空:

face_cascade.empty()

如果为空,您将得到True,这意味着您的文件在您指定的路径中不可用。尝试添加 xml 文件的完整路径,如下所示:

r'D:older Namehaarcascade_frontalface_default.xml'

解决方案 12:

“\Anaconda3\Lib\site-packages\cv2\data\”我在此路径中找到了 Anaconda 的 xml 文件

解决方案 13:

您可以通过将 XML 放在与主 Python 文件(您尝试包含此文件的位置)相同的目录中来解决此问题。现在下一步是使用完整路径。例如

这行不通

front_cascade = cv2.CascadeClassifier('./haarcascade_eye.xml')

使用完整路径,现在它可以正常工作

front_cascade = cv2.CascadeClassifier('/Users/xyz/Documents/project/haarcascade_eye.xml')

解决方案 14:

我在其他答案中发现了这一点,但当我添加这两个答案时,最终对我有用。

import cv2
from matplotlib import pyplot as plt
import numpy as np
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")
eye_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_eye.xml")

img = cv2.imread('image1.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.3, 5)

解决方案 15:

如果您没有定义 XML 文件的完整路径,则可能会发现此类错误。如果您在 raspberrypi 3 中使用 opencv3.1.0,请尝试以下方法:

faceCascade = cv2.CascadeClassifier('/home/pi/opencv-3.1.0/data/haarcascades/haarcascade_frontalface_default.xml')

解决方案 16:

未找到您的 XML 文件。请尝试使用绝对路径,例如:

/path/to/my/file (Mac, Linux)
C:\\path\\to\\my\\file (Windows)

解决方案 17:

错误可能是由于所需的 xml 文件未正确加载。haarcascade_frontalface_default.xml 使用操作系统的搜索引擎搜索该文件,获取完整路径并将其作为cv2.CascadeClassifier字符串的参数

解决方案 18:

请不要复制粘贴 xml 文件的内容,因为一旦将其粘贴到记事本中,它将被保存为文本文件。因此,请直接从给定的来源下载文件。

解决方案 19:

我遇到了同样的问题。但写了正确的位置。

face_cascade = cv2.CascadeClassifier('./model/haarcascade_frontalface_default.xml')

我发现我需要声明完整路径来消除错误。

face_cascade = cv2.CascadeClassifier('C:/pythonScript/Facial-Emotion-Detection/model/haarcascade_frontalface_default.xml')

解决方案 20:

该错误是由于缺少 xml 文件或 xml 文件的路径不正确而发生的。

请尝试以下代码,

import numpy as np
import cv2

face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')

cap = cv2.VideoCapture(0)

while 1:
    ret, img = cap.read()
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    faces = face_cascade.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)
        roi_gray = gray[y:y+h, x:x+w]
        roi_color = img[y:y+h, x:x+w]

        eyes = eye_cascade.detectMultiScale(roi_gray)
        for (ex,ey,ew,eh) in eyes:
            cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)

    cv2.imshow('img',img)
    k = cv2.waitKey(30) & 0xff
    if k == 27:
        break

cap.release()
cv2.destroyAllWindows()

解决方案 21:

我遇到了同样的问题opencv-python,并且使用了虚拟环境。如果你遇到这种情况,你应该xml在以下位置找到文件:

/home/username/virtual_environment/lib/python3.5/site-packages/cv2/data/haarcascade_frontalface_default.xml

/home/username/virtual_environment/lib/python3.5/site-packages/cv2/data/haarcascade_eye.xml

请确保您使用的是绝对路径。否则,它将不起作用。

解决方案 22:

解决方案的主要思想如上所述:找到.xml文件的正确路径并使用它来正确访问文件。

在我的例子中,我在 anoconda 环境中安装了 opencv,首先直接进入 Anoconda 的路径,然后

  • 使用以下方法查找文件路径.xml

$ find . -name 'haarcascade_eye.xml' (例如haarcascade_eye.xml在当前目录中搜索文件(.))

  • 然后使用返回path

eye_cascade = cv2.CascadeClassifier(path + 'haarcascade_eye.xml')

解决方案 23:

我遇到了类似的问题。看来纠正 XML 路径可以消除此错误。

解决方案 24:

这似乎是文件路径问题。我像这样更改了代码,它就起作用了。

haar_face_filename = "D:SandboxGithubFaceshaar_face.xml"
haar_cascade = cv.CascadeClassifier(haar_face_filename)

解决方案 25:

我遇到了同样的问题,并尝试在 springboot 应用程序中使用 open cv,其中我的 xml 文件和图像位于资源文件夹中。尝试提供从 开始的路径src或绝对路径,但C:a.xml没有成功。

使用项目根路径动态创建文件路径。

String classifierPath = System.getProperty("user.dir") + "/src/main/resources/haarcascades/haarcascade_frontalface.xml";

// similarly for image paths

解决方案 26:

路径需要以 开头/,例如/file.xml

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1565  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1354  
  信创国产芯片作为信息技术创新的核心领域,对于推动国家自主可控生态建设具有至关重要的意义。在全球科技竞争日益激烈的背景下,实现信息技术的自主可控,摆脱对国外技术的依赖,已成为保障国家信息安全和产业可持续发展的关键。国产芯片作为信创产业的基石,其发展水平直接影响着整个信创生态的构建与完善。通过不断提升国产芯片的技术实力、产...
国产信创系统   21  
  信创生态建设旨在实现信息技术领域的自主创新和安全可控,涵盖了从硬件到软件的全产业链。随着数字化转型的加速,信创生态建设的重要性日益凸显,它不仅关乎国家的信息安全,更是推动产业升级和经济高质量发展的关键力量。然而,在推进信创生态建设的过程中,面临着诸多复杂且严峻的挑战,需要深入剖析并寻找切实可行的解决方案。技术创新难题技...
信创操作系统   27  
  信创产业作为国家信息技术创新发展的重要领域,对于保障国家信息安全、推动产业升级具有关键意义。而国产芯片作为信创产业的核心基石,其研发进展备受关注。在信创国产芯片的研发征程中,面临着诸多复杂且艰巨的难点,这些难点犹如一道道关卡,阻碍着国产芯片的快速发展。然而,科研人员和相关企业并未退缩,积极探索并提出了一系列切实可行的解...
国产化替代产品目录   28  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用