ข้อผิดพลาด:! empty () ในฟังก์ชัน 'detectMultiScale'
ฉันมีรหัสเล็ก ๆ ต่อไปนี้:
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)
เมื่อฉันเรียกใช้เซลล์สุดท้าย (ด้วยfaces
) มันจะเพิ่ม:
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'
จนกว่าเซลล์นี้ทุกอย่างจะทำงานได้ดี ตามคำตอบ StackOverflow ฉันได้เพิ่มcv.data.haarcascades +
ในวงเล็บของcv.CascadeClassifier
. แม้ว่าผู้คนจะบอกว่าสิ่งนี้ได้ผลสำหรับพวกเขา แต่ก็ไม่เหมาะสำหรับฉัน ...
ขอความช่วยเหลือใด ๆ
คำตอบ
imho "รหัสเล็ก ๆ น้อย ๆ " ของคุณมีเสียงรบกวนมากเกินไป (บรรทัดรหัสที่ไม่จำเป็น) อยู่แล้ว ฉันคิดว่ามันทำให้คุณเข้าใจยากขึ้นไปอีกว่าเกิดอะไรขึ้น
แสดงความคิดเห็น / ลบทุกบรรทัดยกเว้นสิ่งเหล่านี้:
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)
หากรูปภาพของคุณมี "dropfire" อยู่ในเส้นทางนั้นจริงๆสิ่งนี้จะใช้งานได้โดยไม่มีข้อผิดพลาด แต่จะไม่แสดงผลลัพธ์ของการตรวจจับใบหน้า คุณสามารถเพิ่มบรรทัดเหล่านี้ในตอนท้ายเพื่อดูผลลัพธ์:
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 มีพา ธ ไปยังไฟล์ cv2 xml ทั้งหมดอยู่แล้วดังนั้นคุณต้องใช้ชื่อไฟล์เท่านั้น
ปัญหาคือการตรวจสอบว่ามีการโหลด XML หรือไม่ใช้eye_cascade.empty()
เพื่อตรวจสอบว่าโหลดหรือไม่