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?
4 Réponses :
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 >
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
J'ai eu le même problème, vous devez ajouter des doubles barres obliques au lieu de simples.
git clone https://github.com/opencv/opencv.git p>
faceCascade = cv2.CascadeClassifier ('opencv / data / haarcascades / haarcascade_frontalface_default.xml')
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.
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'