FEHLER :! Leer () in der Funktion 'detectMultiScale'
Ich habe den folgenden kleinen Code:
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)
Wenn ich die letzte Zelle (mit faces
) starte, wird Folgendes ausgelöst:
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'
Bis zu dieser Zelle funktioniert alles gut. Laut einer StackOverflow- Antwort habe ich cv.data.haarcascades +
in den Klammern von hinzugefügt cv.CascadeClassifier
. Obwohl die Leute sagten, dass dies für sie funktioniert hat, funktioniert es für mich irgendwie nicht ...
Jede Hilfe wird geschätzt.
Antworten
imho, dieser "kleine Code" von dir hat bereits zu viel Rauschen (unnötige Codezeilen). Ich denke, es macht es für Sie noch schwieriger zu verstehen, was los ist.
Alle Zeilen außer diesen auskommentieren / löschen:
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)
Wenn Ihr Bild "dropfire" tatsächlich auf diesem Pfad vorhanden ist, sollte dies fehlerfrei funktionieren, es werden jedoch keine Ergebnisse der Gesichtserkennung angezeigt. Sie können diese Zeilen am Ende hinzufügen, um das Ergebnis anzuzeigen:
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 hat bereits einen Pfad zu all diesen cv2-XML-Dateien, sodass Sie nur Dateinamen verwenden müssen.
Das Problem besteht darin, zu überprüfen, ob XML geladen ist oder nicht, und eye_cascade.empty()
zu überprüfen, ob es geladen ist oder nicht.