LỖI:! Blank () trong hàm 'detectorMultiScale'
Tôi có đoạn mã nhỏ sau:
from google.colab import drive
from IPython.display import display
import PIL
from PIL import Image, ImageDraw
import kraken
from kraken import pageseg
import cv2 as cv
img = Image.open("/content/drive/My Drive/images/dropfire.jpg")
face_cascade = cv.CascadeClassifier(cv.data.haarcascades + "/content/drive/My Drive/datas/haarcascade_frontalface_default.xml")
eye_cascade = cv.CascadeClassifier(cv.data.haarcascades + "/content/drive/My Drive/datas/haarcascade_eye.xml")
file_name = "/content/drive/My Drive/images/dropfire.jpg"
img = cv.imread(file_name)
pil_img = Image.open(file_name)
cv_img = pil_img.convert('L')
cv_img = cv.imread(file_name)
faces = face_cascade.detectMultiScale(cv_img)
Khi tôi chạy ô cuối cùng (với faces
), nó tăng:
error Traceback (most recent call last)
<ipython-input-23-2bd7582f8a20> in <module>()
----> 1 faces = face_cascade.detectMultiScale(cv_img)
error: OpenCV(4.1.2) /io/opencv/modules/objdetect/src/cascadedetect.cpp:1689: error: (-215:Assertion failed) !empty() in function 'detectMultiScale'
Cho đến khi ô này hoạt động tốt. Theo câu trả lời của StackOverflow , tôi đã thêm vào cv.data.haarcascades +
trong ngoặc đơn của cv.CascadeClassifier
. Mặc dù mọi người nói rằng điều này có hiệu quả với họ, nhưng nó không có lợi cho tôi ...
Bất kỳ trợ giúp được đánh giá cao.
Trả lời
imho, "đoạn mã nhỏ" của bạn có quá nhiều nhiễu (những dòng mã không cần thiết) rồi. Tôi nghĩ nó khiến bạn càng khó hiểu chuyện gì đang xảy ra.
Nhận xét / xóa tất cả các dòng ngoại trừ những dòng này:
import cv2 as cv
face_cascade = cv.CascadeClassifier(cv.data.haarcascades + "haarcascade_frontalface_default.xml")
eye_cascade = cv.CascadeClassifier(cv.data.haarcascades + "haarcascade_eye.xml")
file_name = "/content/drive/My Drive/images/dropfire.jpg"
img = cv.imread(file_name) # this reads the image already
cv_img = cv.imread(file_name) # this reads same image once more, not sure if intended
faces = face_cascade.detectMultiScale(cv_img)
Nếu "dropfire" hình ảnh của bạn thực sự tồn tại ở đường dẫn đó, điều này sẽ hoạt động mà không có lỗi, nhưng nó sẽ không hiển thị bất kỳ kết quả phát hiện khuôn mặt nào. Bạn có thể thêm những dòng này vào cuối để xem kết quả:
for (x, y, w, h) in faces:
cv.rectangle(cv_img, (x, y), (x+w, y+h), (0, 0, 255), 3)
cv.imshow("Nice face", cv_img)
cv.waitKey(0)
cv.data.haarcascades đã có đường dẫn đến tất cả các tệp cv2 xml đó, vì vậy bạn chỉ cần sử dụng tên tệp.
Vấn đề là kiểm tra xem XML có được tải hay không, sử dụng eye_cascade.empty()
để kiểm tra xem nó đã được tải hay chưa.