[python] 오류 : detectMultiScale 함수의 (-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를 잘못된 방식으로로드해야한다는 것입니다. 도움이 필요하십니까?



답변

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


답변

나는 같은 문제가 있었다.

이 문제를 해결하기 위해 다른 것을 다운로드 할 필요가 없었습니다. 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')


답변

같은 코드를 실행했습니다. 여기서 주목해야 할 두 가지가 있습니다. 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 파일 경로에서 “\”대신 “\\”를 사용하십시오.

파일 경로는 다음과 같아야합니다.

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 파일이 누락되었습니다. GitHub 저장소에서 파일을 가져 와서 프로젝트와 동일한 디렉토리에 배치 할 수 있습니다. GitHub의 폴더 링크는 여기 입니다. haarcascade_frontalface_default.xml 이라는 파일을 다운로드하면됩니다 . 실제로 파일은 시스템에 있습니다. Python 설치 폴더 의 site-packages 폴더 로 이동 하여 cv2 / data 폴더에서 파일을 확인하십시오.


답변

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

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

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


답변

코드를 변경할 필요가 없습니다

해당 .xml 파일을 다운로드 한 다음 해당 파일의 경로를 입력하십시오.

오류를 해결합니다 (100 %).