簡體   English   中英

錯誤:(-215) !empty() 在 function detectMultiScale

[英]error: (-215) !empty() in function detectMultiScale

我正在嘗試在 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 ......有什么幫助嗎?

我遇到過同樣的問題。

我不需要下載其他任何東西來解決這個問題。 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')

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')

我運行了相同的代碼。 這里有兩點需要注意。 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()

我的輸出如下所示:

輸出

XML 文件丟失,您可以從 GitHub 存儲庫中獲取該文件並將其放在與您的項目相同的目錄中。 GitHub 上文件夾的鏈接在 這里 只需下載名為haarcascade_frontalface_default.xml的文件。 實際上,該文件存在於您的系統上。 只需轉到 python 安裝文件夾的site-packages文件夾並檢查 cv2/data 文件夾中的文件

您只需要添加cv2.data.haarcascades文件的正確路徑,您只需添加前綴( haarcascade_frontalface_default.xml

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

使用整個文件路徑,並在 xml 文件路徑中使用“\\”而不是“\”。

文件路徑應如下所示:

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

代替:

cascade_fn = args.get('--cascade', "..\..\data\haarcascades\haarcascade_frontalface_alt.xml")

無需更改代碼

下載那個.xml文件,然后把那個文件的路徑

它將解決錯誤(100%)

如果您使用的是 Anaconda,則應添加 Anaconda 路徑。

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

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

此錯誤表示找不到 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)

成功!

在帶有自制軟件的 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')

注意路徑中的版本號。

可能face_cascade是空的。 您可以通過鍵入以下命令檢查變量是否為空:

face_cascade.empty()

如果它為空,您將得到True ,這意味着您的文件在您提到的路徑中不可用。 嘗試添加xml文件的完整路徑如下:

r'D:\folder Name\haarcascade_frontalface_default.xml'

"\Anaconda3\Lib\site-packages\cv2\data\" 我在這個路徑中找到了 Anaconda 的 xml 文件

您可以通過將 XML 放置在您的主要 python 文件(您試圖包含此文件的位置)所在的同一目錄中來解決此問題。 現在下一步是使用完整路徑。 例如

這行不通

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

使用完整路徑,現在可以正常工作了

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

當您沒有定義 XML 文件的完整路徑時,您可能會發現此類錯誤。 如果您在 raspberrypi 3 中使用 opencv3.1.0,請嘗試這個:

faceCascade = cv2.CascadeClassifier('/home/pi/opencv-3.1.0/data/haarcascades/haarcascade_frontalface_default.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)

未找到您的 XML 文件。 嘗試使用絕對路徑,例如:

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

該錯誤可能是由於未正確加載所需的 xml 文件。 使用您操作系統的搜索引擎搜索文件haarcascade_frontalface_default.xml獲取完整路徑並將其作為參數作為字符串輸入cv2.CascadeClassifier

請不要復制粘貼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 文件或 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()

我對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

請確保您使用的是絕對路徑。 否則,它將無法正常工作。

上面提到的解決方案的主要思想:找到.xml文件的正確路徑並使用它來正確訪問文件。

就我而言,我在 anconda env 中安裝了 opencv,首先直接指向 Anconda 的路徑,然后

  • 使用以下命令查找.xml文件的路徑:

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

  • 然后使用返回path

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

我遇到了類似的問題。 似乎更正 XML 的路徑會使這個錯誤消失。

好像是文件路徑問題。 我改變了這樣的代碼並且它起作用了。

haar_face_filename = "D:\Sandbox\Github\Faces\haar_face.xml"
haar_cascade = cv.CascadeClassifier(haar_face_filename)

我遇到了同樣的問題,並試圖在我的 xml 文件和圖像位於資源文件夾中的 springboot 應用程序中使用 open cv。 嘗試給出從src開始的路徑或像C:\a\b.xml這樣的絕對路徑不起作用。

使用項目根路徑動態創建文件路徑有效。

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

// similarly for image paths

路徑需要以/開頭,例如。 /file.xml

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM