1
votes

"! empty () dans la fonction 'cv :: CascadeClassifier :: detectMultiScale'"

J'essaie de travailler sur un système de reconnaissance de visage en Python OpenCV mais j'obtiens toujours l'erreur suivante

"! empty () dans la fonction 'cv :: CascadeClassifier :: detectMultiScale'"

Voici le code que j'utilise:

import cv2
import os
import numpy as np
from PIL import Image
import pickle

BASE_DIR = os.path.dirname(os.path.abspath(__file__))
image_dir = os.path.join(BASE_DIR, "foto")

face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_alt2.xml')
recognizer = cv2.face.LBPHFaceRecognizer_create()

current_id = 0
label_ids = {}
y_labels = []
x_train = []

for root, dirs, files in os.walk(image_dir):
    for file in files:
        if file.endswith("png") or file.endswith("jpg"):
            path = os.path.join(root, file)
            label = os.path.basename(root).replace(" ", "-").lower()
            #print(label, path)
            if not label in label_ids:
                label_ids[label] = current_id
                current_id += 1
            id_ = label_ids[label]
            #print(label_ids)
            #y_labels.append(label) # some number
            #x_train.append(path) # verify this image, turn into a NUMPY 
 arrray, GRAY
            pil_image = Image.open(path).convert("L") # grayscale
            size = (550, 550)
            final_image = pil_image.resize(size, Image.ANTIALIAS)
            image_array = np.array(final_image, "uint8")
            #print(image_array)
            faces = face_cascade.detectMultiScale(image_array, scaleFactor=1.5, minNeighbors=5)

            for (x,y,w,h) in faces:
                roi = image_array[y:y+h, x:x+w]
                x_train.append(roi)
                y_labels.append(id_)


#print(y_labels)
#print(x_train)

with open("pickles/face-labels.pickle", 'wb') as f:
    pickle.dump(label_ids, f)

recognizer.train(x_train, np.array(y_labels))
recognizer.save("recognizers/face-trainner.yml")

Qu'est-ce que je fais de mal?


2 commentaires

Veuillez inclure la pile d'erreur complète.


Fichier "bllablla.py", ligne 36, dans faces = face_cascade.detectMultiScale (image_array, scaleFactor = 1.5, minNeighbors = 5) cv2.error: OpenCV (3.4.5) C: \ projects \ opencv-python \ opencv \ modules \ objdetect \ src \ casca‌ dedetect.cpp: 1698: erreur: (-215: échec de l'assertion)! vide () dans la fonction 'cv :: CascadeClassifier :: detectMultiScale'


4 Réponses :


0
votes

Le fichier XML est manquant.

Essayez de donner directement le chemin complet comme ceci.

face_cascade = cv2.CascadeClassifier('C:\opencv\sources\data\haarcascades\haarcascade_frontalface_default.xml')

plus important encore, le fichier doit être dans le répertoire C strong >


0 commentaires

1
votes

Vous devez mettre le chemin complet du fichier. Exemple:

face_cascade = cv2.CascadeClassifier('C:\\working_Dir\\data\\codes\\OpenCV\\classifiers\\haarcascade_frontalface_alt2.xml')

Vous pouvez télécharger ces codes depuis le dépôt github ici: Détection de visage avec Python à l'aide d'OpenCV


0 commentaires

0
votes

J'ai eu le même problème, vous devez ajouter des doubles barres obliques au lieu de simples.


0 commentaires

0
votes

git clone https://github.com/opencv/opencv.git

faceCascade = cv2.CascadeClassifier ('opencv / data / haarcascades / haarcascade_frontalface_default.xml')


1 commentaires

Veuillez expliquer les différences subtiles avec les autres réponses, comment elles fonctionnent et pourquoi elles résolvent le problème. Essayez de faire ressortir les avantages de votre solution par rapport aux autres.