EROR:! Empty () dalam fungsi 'detectMultiScale'
Saya memiliki kode kecil berikut:
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)
Ketika saya menjalankan sel terakhir (dengan faces
), itu memunculkan:
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'
Sampai sel ini semuanya bekerja dengan baik. Menurut jawaban StackOverflow , saya menambahkan cv.data.haarcascades +
tanda kurung cv.CascadeClassifier
. Meskipun orang mengatakan ini berhasil untuk mereka, itu tidak untuk saya entah bagaimana ...
Setiap bantuan dihargai.
Jawaban
imho, "kode kecil" milik Anda itu sudah terlalu berisik (baris kode yang tidak perlu). Saya pikir itu membuat Anda lebih sulit untuk memahami apa yang sedang terjadi.
Beri komentar / hapus semua baris kecuali ini:
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)
Jika gambar Anda "dropfire" benar-benar ada di jalur itu, ini akan bekerja tanpa kesalahan, tetapi tidak akan menampilkan hasil deteksi wajah apa pun. Anda dapat menambahkan garis-garis ini di akhir untuk melihat hasilnya:
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 sudah memiliki jalur ke semua file xml cv2 tersebut, jadi Anda hanya perlu menggunakan nama file.
Masalahnya adalah untuk memeriksa apakah XML dimuat atau tidak, gunakan eye_cascade.empty()
untuk memeriksa apakah itu dimuat atau tidak.