programing

오류: 함수 detect MultiScale의 (-215) !empty()

abcjava 2023. 7. 20. 21:40
반응형

오류: 함수 detect MultiScale의 (-215) !empty()

저는 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()

제 출력은 다음과 같습니다.

ouput

적한경추로하됩니다면만의 적절한 .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')

XML 파일이 없습니다. GitHub 저장소에서 파일을 가져와 프로젝트와 동일한 디렉터리에 배치할 수 있습니다.GitHub의 폴더 링크는 여기에 있습니다.harcascade_frontface_default.xml 파일을 다운로드하기만 하면 됩니다.실제로 파일이 시스템에 있습니다.python 설치 폴더의 site-packages 폴더로 이동하여 파일의 cv2/data 폴더를 확인하기만 하면 됩니다.

전체 파일 경로를 사용하고 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%).

이 오류는 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_resources도서관에서 알아냅니다.

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

성공!

아나콘다를 사용하는 경우 아나콘다 경로를 추가해야 합니다.

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

face_cascade = cv2.CascadeClassifier(new_path + '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')

경로에서 버전 번호를 처리합니다.

아마도face_cascade비어 있습니다.다음 명령을 입력하여 변수가 비어 있는지 확인할 수 있습니다.

face_cascade.empty()

비어 있으면 얻을 수 있습니다.True말씀하신 경로에서 파일을 사용할 수 없음을 의미합니다.다음과 같이 xml 파일의 전체 경로를 추가합니다.

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

"아나콘다3"Lib\site-packages\cv2\data\" 이 경로에서 아나콘다에 대한 xml 파일을 찾았습니다.

문제를 해결하려면 XML을 기본 python 파일(이 파일을 포함하려는 위치)이 배치된 디렉터리에 배치해야 합니다.다음 단계는 전체 경로를 사용하는 것입니다.예를들면

이것은 작동하지 않습니다.

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

전체 경로를 사용합니다. 이제 정상적으로 작동합니다.

front_cascade = cv2.CascadeClassifier('/Users/xyz/Documents/project/haarcascade_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)

XML 파일의 전체 경로를 정의하지 않은 경우 이러한 오류가 발생할 수 있습니다.라즈베리 파이 3에서 opencv3.1.0을 사용하는 경우 다음을 시도해 보십시오.

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

XML 파일을 찾을 수 없습니다.다음과 같은 절대 경로를 사용해 보십시오.

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

이 오류는 필요한 xml 파일이 제대로 로드되지 않았기 때문일 수 있습니다. 합니다.haarcascade_frontalface_default.xml의 OS 검엔사로써전경으에 대한 합니다.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가상 환경을 사용했습니다.라면, 은 경면의우그찾, 합은을아니다야것라당신당신▁the를 찾아야 합니다.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파일을 저장하고 파일에 올바르게 액세스하는 데 사용합니다.

나의 경우, 나는 opencv를 anoconda env에 설치했다, 먼저 anoconda의 경로로 직접, 그 다음.

  • 의 길을 찾다.xml다음을 사용하여 파일:

    $ find . -name 'haarcascade_eye.xml'(예를 들어 검색)haarcascade_eye.xmlcurrent dir(.)의 파일

  • 그런 다음 반품을 사용합니다.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 파일과 이미지가 resources 폴더에 있는 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.

언급URL : https://stackoverflow.com/questions/30508922/error-215-empty-in-function-detectmultiscale

반응형