2015-05-28 42 views
21

Tôi đang cố gắng tìm hiểu CV2 trong python 2.7, nhưng khi tôi chạy mã của tôi, trong phần cụ thể của nó:lỗi: (-215) trống() trong chức năng detectMultiScale

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) 

nó trả về này:

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 

Tôi đã cố gắng tìm kiếm câu trả lời ở đây nhưng tốt nhất tôi có thể tìm thấy là tôi phải tải face_cascade theo cách sai ... Bất kỳ trợ giúp nào?

+4

không tìm thấy tệp xml của bạn. hãy thử một đường dẫn tuyệt đối như "/my/files/bla/cacade.xml" – berak

+0

@berak Tôi đã thay thế đường dẫn ban đầu cho đường dẫn bạn đã đề xuất nhưng mã trả lại cùng lỗi – arthurckl

+0

bạn có thể xác minh rằng hình ảnh của bạn không trống (ví dụ: nếu không tải chính xác) bằng cách thêm một thử nghiệm hoặc hình ảnh hiển thị? – Micka

Trả lời

21

XML hoặc tệp bị thiếu hoặc đường dẫn đến không chính xác hoặc đường dẫn create_capture không chính xác.

Các đường dẫn trong giao diện mẫu opencv như thế này:

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

Tôi chạy cùng mã. Có hai điều cần lưu ý ở đây. 1. Cung cấp toàn bộ đường dẫn của tệp .xml. 2. Đưa ra hướng dẫn sự kiện báo chí chính ở cuối.

Thêm khối mã này ở cuối và chạy tập tin của bạn, làm việc cho tôi:

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

Ví dụ, mã của tôi trông giống như

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

đầu ra của tôi trông giống như enter image description here

5

Sử dụng toàn bộ đường dẫn tệp và sử dụng "\\" thay vì "\" trong đường dẫn tệp xml.

đường Các tập tin cần thực hiện như sau:

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

thay vì:

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

cảm ơn, nó phù hợp với tôi – Statham

5

Nếu bạn đang sử dụng Anaconda bạn nên thêm đường Anaconda.

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

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

Không tìm thấy tệp XML của bạn. Hãy thử sử dụng các đường dẫn tuyệt đối như:

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

Bạn có thể tìm thấy loại lỗi như vậy khi bạn không xác định đường dẫn đầy đủ của tệp XML. Hãy thử này nếu bạn đang sử dụng opencv3.1.0 trong Raspberry Pi 3: "faceCascade = cv2.CascadeClassifier ('/ home/pi/opencv3.1.0/data/haarcascades/haarcascade_frontalface_default.xml')"

1

Có lẽ là face_cascade trống. Bạn có thể kiểm tra xem biến là trống hay không bằng cách gõ lệnh sau:

face_cascade.empty() 

Nếu nó là trống rỗng, bạn sẽ nhận True và điều này có nghĩa là tập tin của bạn không có sẵn trong đường dẫn mà bạn đề cập. Cố gắng thêm đường dẫn đầy đủ của tập tin xml như sau:

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

Ngày OSX với một homebrew cài đặt đường dẫn đầy đủ đến thư mục opencv nên làm việc:

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

Chăm sóc các số phiên bản trong con đường.

Các vấn đề liên quan