Python 错误:(-215)!函数detectMultiScale中的空()
我试图在python 2.7中学习cv2,但当我运行代码时,在它的特定部分:Python 错误:(-215)!函数detectMultiScale中的空(),python,python-2.7,opencv,image-recognition,Python,Python 2.7,Opencv,Image Recognition,我试图在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.CO
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_detection.py”,第11行,在
面=面\级联。检测多尺度(灰色,1.3,5)
cv2.error:/home/arthurckl/Desktop/opencv-3.0.0-rc1/modules/objdetect/src/cascadetext.cpp:1595:error:(-215)!函数detectMultiScale中的空()
我试图在这里搜索答案,但我能找到的最好的答案是,我一定是以错误的方式加载了face_cascade。。。有什么帮助吗?XML或文件丢失,或者指向它的路径不正确,或者创建捕获路径不正确 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')
我运行了相同的代码。这里有两件事需要注意。 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()
我的输出如下所示:
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')
使用整个文件路径,并在xml文件路径中使用“\\”而不是“\” 文件路径应如下所示:
face_cascade = cv2.CascadeClassifier('C:\\opencv\\build\\etc\\haarcascades\\haarcascade_frontalface_default.xml')
r'D:\folder Name\haarcascade_frontalface_default.xml'
而不是:
cascade_fn = args.get('--cascade', "..\..\data\haarcascades\haarcascade_frontalface_alt.xml")
如果您使用的是蟒蛇,则应添加蟒蛇路径
new_path = 'C:/Users/.../Anaconda/Library/etc/haarcascades/'
face_cascade = cv2.CascadeClassifier(new_path + 'haarcascade_frontalface_default.xml')
找不到您的XML文件。尝试使用绝对路径,如:
/path/to/my/file (Mac, Linux)
C:\\path\\to\\my\\file (Windows)
当您没有定义XML文件的完整路径时,您可能会发现此类错误。 如果您在raspberrypi 3中使用opencv3.1.0,请尝试此选项:
faceCascade=cv2.CascadeClassifier('/home/pi/opencv-3.1.0/data/haarcascades/haarcascade\u frontalface\u default.xml')
可能faceCascade
是空的。通过键入以下命令,可以检查变量是否为空:
face_cascade.empty()
如果为空,您将获得True
,这意味着您的文件在您提到的路径中不可用。
尝试按如下方式添加xml文件的完整路径:
face_cascade = cv2.CascadeClassifier('C:\\opencv\\build\\etc\\haarcascades\\haarcascade_frontalface_default.xml')
r'D:\folder Name\haarcascade_frontalface_default.xml'
在使用自制软件安装的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')
注意路径中的版本号。错误可能是由于未正确加载所需的xml文件。使用ur OS的搜索引擎搜索文件
haarcascade_frontalface_default.xml
,获取完整路径并将其作为cv2.CascadeClassifier
的参数作为字符串如果xml文件丢失,您可以从GitHub存储库获取该文件并将其放置在与项目相同的目录中。GitHub上文件夹的链接为。只需下载名为haarcascade_frontalface_default.xml的文件。
实际上,该文件存在于您的系统中。只需转到python安装文件夹的site packages文件夹,并检查cv2/data文件夹中的文件由于缺少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()
请不要复制粘贴xml文件的内容,因为一旦粘贴到记事本,它将保存为s文本文件。因此,请直接从给定的源下载该文件。“\Anaconda3\Lib\site packages\cv2\data\”我在Anaconda的路径中找到了xml文件我对opencv python有同样的问题,并且我使用了虚拟环境。 如果是您的情况,您应该在以下位置找到
xml
文件:
/home/username/virtual_environment/lib/python3.5/site packages/cv2/data/haarcascade_frontaface_default.xml
/home/username/virtual_environment/lib/python3.5/site packages/cv2/data/haarcascade_eye.xml
请确保您使用的是绝对路径。否则,它将无法工作。无需更改代码 下载该.xml文件,然后放置该文件的路径
它将解决错误(100%)此错误意味着找不到XML文件。库需要您传递完整路径,即使您可能只是使用OpenCV库附带的文件 您可以使用内置的为您自动确定这一点。以下代码查找
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_参考资料
library来解决这个问题
classifier = cv2.CascadeClassifier(haar_xml)
faces = classifier.detectMultiScale(frame)
成功 我也有同样的问题
我不需要下载任何其他东西来解决这个问题。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')
我遇到了同样的问题。但是写了正确的位置
face_cascade = cv2.CascadeClassifier('./model/haarcascade_frontalface_default.xml')
我发现我需要声明完整路径来删除错误
face_cascade = cv2.CascadeClassifier('C:/pythonScript/Facial-Emotion-Detection/model/haarcascade_frontalface_default.xml')
您可以通过将XML放在主python文件所在的目录中来解决这个问题。现在,下一步是使用完整路径。比如说 这行不通
front_cascade = cv2.CascadeClassifier('./haarcascade_eye.xml')
使用完整路径,现在可以正常工作
front_cascade = cv2.CascadeClassifier('/Users/xyz/Documents/project/haarcascade_eye.xml')
上述解决方案的主要思想是:找到
.xml
文件的正确路径,并使用它正确访问该文件
在我的例子中,我在anoconda env中安装了opencv,首先直接指向anoconda的路径,然后
- 使用以下命令查找
文件的路径:.xml
(例如,在当前目录(.)中搜索$find-名称“haarcascade_eye.xml”
文件)haarcascade_eye.xml
- 然后使用返回路径:
eye\u cascade=cv2.CascadeClassifier(path+'haarcascade\u eye.xml')
我在其他答案中找到了这一点,但当我添加这两个答案时,这一点最终对我有效
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)
您只需添加
haarcascade\u frontalface\u default.xml的正确路径
文件,即您只需